Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,8 @@
**.vcxproj
**.vcxproj.filters
**.vcxproj.user
**.csproj
**.csproj

# Generated build files
Makefile
**.make
79 changes: 79 additions & 0 deletions NetworkLibrary/src/metrics/bandwidth_metric.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
#include "bandwidth_metric.h"

#include "logger.h"

namespace NetLib
{
namespace Metrics
{
BandwidthMetric::BandwidthMetric()
: _updateRate( 1.0f )
, _timeUntilNextUpdate( 1.0f )
, _inProgressValue( 0 )
, _currentValue( 0 )
, _maxValue( 0 )
{
}

uint32 BandwidthMetric::GetValue( const std::string& value_type ) const
{
uint32 result = 0;

if ( value_type == "MAX" )
{
result = _maxValue;
}
else if ( value_type == "CURRENT" )
{
result = _currentValue;
}
else
{
LOG_WARNING( "Unknown value type '%s' for BandwidthMetric", value_type.c_str() );
}

return result;
}

void BandwidthMetric::SetUpdateRate( float32 update_rate )
{
_updateRate = update_rate;
_timeUntilNextUpdate = _updateRate;
}

void BandwidthMetric::Update( float32 elapsed_time )
{
if ( _timeUntilNextUpdate <= elapsed_time )
{
// Update current
_currentValue = _inProgressValue;
_inProgressValue = 0;

// Update max
if ( _currentValue > _maxValue )
{
_maxValue = _currentValue;
}

_timeUntilNextUpdate = _updateRate;
}
else
{
_timeUntilNextUpdate -= elapsed_time;
}
}

void BandwidthMetric::AddValueSample( uint32 value, const std::string& sample_type )
{
_inProgressValue += value;
}

void BandwidthMetric::Reset()
{
_inProgressValue = 0;
_currentValue = 0;
_maxValue = 0;
_timeUntilNextUpdate = _updateRate;
}
} // namespace Metrics
} // namespace NetLib
32 changes: 32 additions & 0 deletions NetworkLibrary/src/metrics/bandwidth_metric.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#pragma once
#include "metrics/i_metric.h"

namespace NetLib
{
namespace Metrics
{
/// <summary>
/// Base class for bandwidth metrics (upload and download).
/// Tracks current bandwidth usage and maximum bandwidth over time.
/// </summary>
class BandwidthMetric : public IMetric
{
public:
BandwidthMetric();

uint32 GetValue( const std::string& value_type ) const override;
void SetUpdateRate( float32 update_rate ) override;
void Update( float32 elapsed_time ) override;
void AddValueSample( uint32 value, const std::string& sample_type = "NONE" ) override;
void Reset() override;

protected:
float32 _timeUntilNextUpdate;
float32 _updateRate;

uint32 _inProgressValue;
uint32 _currentValue;
uint32 _maxValue;
};
}
}
72 changes: 0 additions & 72 deletions NetworkLibrary/src/metrics/download_bandwidth_metric.cpp
Original file line number Diff line number Diff line change
@@ -1,86 +1,14 @@
#include "download_bandwidth_metric.h"

#include "logger.h"

#include "metrics/metric_names.h"

namespace NetLib
{
namespace Metrics
{
DownloadBandwidthMetric::DownloadBandwidthMetric()
: _updateRate( 1.0f )
, _timeUntilNextUpdate( 1.0f )
, _inProgressValue( 0 )
, _currentValue( 0 )
, _maxValue( 0 )
{
}

void DownloadBandwidthMetric::GetName( std::string& out_name_buffer ) const
{
out_name_buffer.assign( DOWNLOAD_BANDWIDTH_METRIC );
}

uint32 DownloadBandwidthMetric::GetValue( const std::string& value_type ) const
{
uint32 result = 0;

if ( value_type == "MAX" )
{
result = _maxValue;
}
else if ( value_type == "CURRENT" )
{
result = _currentValue;
}
else
{
LOG_WARNING( "Unknown value type '%s' for UploadBandwidthMetric", value_type.c_str() );
}

return result;
}

void DownloadBandwidthMetric::SetUpdateRate( float32 update_rate )
{
_updateRate = update_rate;
_timeUntilNextUpdate = _updateRate;
}

void DownloadBandwidthMetric::Update( float32 elapsed_time )
{
if ( _timeUntilNextUpdate <= elapsed_time )
{
// Update current
_currentValue = _inProgressValue;
_inProgressValue = 0;

// Update max
if ( _currentValue > _maxValue )
{
_maxValue = _currentValue;
}

_timeUntilNextUpdate = _updateRate;
}
else
{
_timeUntilNextUpdate -= elapsed_time;
}
}

void DownloadBandwidthMetric::AddValueSample( uint32 value, const std::string& sample_type )
{
_inProgressValue += value;
}

void DownloadBandwidthMetric::Reset()
{
_inProgressValue = 0;
_currentValue = 0;
_maxValue = 0;
_timeUntilNextUpdate = _updateRate;
}
} // namespace Metrics
} // namespace NetLib
19 changes: 2 additions & 17 deletions NetworkLibrary/src/metrics/download_bandwidth_metric.h
Original file line number Diff line number Diff line change
@@ -1,29 +1,14 @@
#pragma once
#include "metrics/i_metric.h"
#include "metrics/bandwidth_metric.h"

namespace NetLib
{
namespace Metrics
{
class DownloadBandwidthMetric : public IMetric
class DownloadBandwidthMetric : public BandwidthMetric
{
public:
DownloadBandwidthMetric();

void GetName( std::string& out_name_buffer ) const override;
uint32 GetValue( const std::string& value_type ) const override;
void SetUpdateRate( float32 update_rate ) override;
void Update( float32 elapsed_time ) override;
void AddValueSample( uint32 value, const std::string& sample_type = "NONE" ) override;
void Reset() override;

private:
float32 _timeUntilNextUpdate;
float32 _updateRate;

uint32 _inProgressValue;
uint32 _currentValue;
uint32 _maxValue;
};
}
}
72 changes: 0 additions & 72 deletions NetworkLibrary/src/metrics/upload_bandwidth_metric.cpp
Original file line number Diff line number Diff line change
@@ -1,86 +1,14 @@
#include "upload_bandwidth_metric.h"

#include "logger.h"

#include "metrics/metric_names.h"

namespace NetLib
{
namespace Metrics
{
UploadBandwidthMetric::UploadBandwidthMetric()
: _updateRate( 1.0f )
, _timeUntilNextUpdate( 1.0f )
, _inProgressValue( 0 )
, _currentValue( 0 )
, _maxValue( 0 )
{
}

void UploadBandwidthMetric::GetName( std::string& out_name_buffer ) const
{
out_name_buffer.assign( UPLOAD_BANDWIDTH_METRIC );
}

uint32 UploadBandwidthMetric::GetValue( const std::string& value_type ) const
{
uint32 result = 0;

if ( value_type == "MAX" )
{
result = _maxValue;
}
else if ( value_type == "CURRENT" )
{
result = _currentValue;
}
else
{
LOG_WARNING( "Unknown value type '%s' for UploadBandwidthMetric", value_type.c_str() );
}

return result;
}

void UploadBandwidthMetric::SetUpdateRate( float32 update_rate )
{
_updateRate = update_rate;
_timeUntilNextUpdate = _updateRate;
}

void UploadBandwidthMetric::Update( float32 elapsed_time )
{
if ( _timeUntilNextUpdate <= elapsed_time )
{
// Update current
_currentValue = _inProgressValue;
_inProgressValue = 0;

// Update max
if ( _currentValue > _maxValue )
{
_maxValue = _currentValue;
}

_timeUntilNextUpdate = _updateRate;
}
else
{
_timeUntilNextUpdate -= elapsed_time;
}
}

void UploadBandwidthMetric::AddValueSample( uint32 value, const std::string& sample_type )
{
_inProgressValue += value;
}

void UploadBandwidthMetric::Reset()
{
_inProgressValue = 0;
_currentValue = 0;
_maxValue = 0;
_timeUntilNextUpdate = _updateRate;
}
} // namespace Metrics
} // namespace NetLib
19 changes: 2 additions & 17 deletions NetworkLibrary/src/metrics/upload_bandwidth_metric.h
Original file line number Diff line number Diff line change
@@ -1,29 +1,14 @@
#pragma once
#include "metrics/i_metric.h"
#include "metrics/bandwidth_metric.h"

namespace NetLib
{
namespace Metrics
{
class UploadBandwidthMetric : public IMetric
class UploadBandwidthMetric : public BandwidthMetric
{
public:
UploadBandwidthMetric();

void GetName( std::string& out_name_buffer ) const override;
uint32 GetValue( const std::string& value_type ) const override;
void SetUpdateRate( float32 update_rate ) override;
void Update( float32 elapsed_time ) override;
void AddValueSample( uint32 value, const std::string& sample_type = "NONE" ) override;
void Reset() override;

private:
float32 _timeUntilNextUpdate;
float32 _updateRate;

uint32 _inProgressValue;
uint32 _currentValue;
uint32 _maxValue;
};
}
}
Loading