/* * This file is a part of Winix * and is not publicly distributed * * Copyright (c) 2008-2014, Tomasz Sowa * All rights reserved. * */ #ifndef headerfile_winix_core_loadavg #define headerfile_winix_core_loadavg #include namespace Winix { // 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; }; } // namespace Winix #endif