115 lines
1.8 KiB
C++
Executable File
115 lines
1.8 KiB
C++
Executable File
/*
|
|
* This file is a part of Winix
|
|
* and is not publicly distributed
|
|
*
|
|
* Copyright (c) 2008-2010, Tomasz Sowa
|
|
* All rights reserved.
|
|
*
|
|
*/
|
|
|
|
#ifndef headerfile_winix_core_loadavg
|
|
#define headerfile_winix_core_loadavg
|
|
|
|
#include <ctime>
|
|
|
|
|
|
|
|
|
|
// in seconds
|
|
#define WINIX_LOADAVG_GRANULARITY1 2
|
|
#define WINIX_LOADAVG_GRANULARITY5 15
|
|
#define WINIX_LOADAVG_GRANULARITY15 45
|
|
|
|
|
|
|
|
class LoadAvg
|
|
{
|
|
public:
|
|
LoadAvg();
|
|
~LoadAvg();
|
|
LoadAvg & operator=(const LoadAvg & l);
|
|
LoadAvg(const LoadAvg & l);
|
|
|
|
void StartRequest();
|
|
void StopRequest();
|
|
|
|
double LoadAvgNow(); // load average withing last WINIX_LOADAVG_GRANULARITY1 seconds
|
|
double LoadAvg1();
|
|
double LoadAvg5();
|
|
double LoadAvg15();
|
|
|
|
double ReqPerSecNow();
|
|
double ReqPerSec1();
|
|
double ReqPerSec5();
|
|
double ReqPerSec15();
|
|
|
|
private:
|
|
|
|
struct Times
|
|
{
|
|
double dr; // time for the request (in seconds)
|
|
double dp; // time for the pause between requestes (in seconds)
|
|
long req; // how many requests
|
|
|
|
void Clear()
|
|
{
|
|
dr = 0.0;
|
|
dp = 0.0;
|
|
req = 0;
|
|
}
|
|
|
|
Times & operator=(const Times & t)
|
|
{
|
|
dr = t.dr;
|
|
dp = t.dp;
|
|
req = t.req;
|
|
|
|
return *this;
|
|
}
|
|
};
|
|
|
|
void CheckTimers();
|
|
void UpdateTimer1();
|
|
void UpdateTimer5();
|
|
void UpdateTimer15();
|
|
|
|
Times current1;
|
|
Times current5;
|
|
Times current15;
|
|
|
|
void CreateTable(size_t seconds, size_t granulatiry, Times* & tab, size_t & len);
|
|
void CreateTable();
|
|
|
|
void MoveTab(Times * tab, size_t len);
|
|
void SumTab(Times * tab, size_t len, double expected, Times & t);
|
|
|
|
void Calculate1();
|
|
void Calculate5();
|
|
void Calculate15();
|
|
|
|
bool was_stop_request;
|
|
timespec start_req, stop_req;
|
|
|
|
Times * tab1;
|
|
size_t len1;
|
|
|
|
Times * tab5;
|
|
size_t len5;
|
|
|
|
Times * tab15;
|
|
size_t len15;
|
|
|
|
double cache_load1;
|
|
double cache_load5;
|
|
double cache_load15;
|
|
|
|
double cache_req_per_sec1;
|
|
double cache_req_per_sec5;
|
|
double cache_req_per_sec15;
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif
|