Stroika Library 3.0d18
 
Loading...
Searching...
No Matches
OperationalStatistics.h
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2021. All rights reserved
3 */
4#ifndef _StroikaSample_OperationalStatistics_h_
5#define _StroikaSample_OperationalStatistics_h_ 1
6
7#include "Stroika/Frameworks/StroikaPreComp.h"
8
11
12/**
13 *
14 */
15
16namespace Stroika::Samples::HTMLUI {
17
18 using namespace Stroika;
19 using namespace Stroika::Foundation;
20
21 using Time::Duration;
22
23 /**
24 * Fully internally synchronized.
25 *
26 * Simple API to track recent application statistics.
27 */
29 public:
30 static OperationalStatisticsMgr sThe;
31
32 public:
33 static inline const Time::Duration kLookbackInterval{5min};
34
35 public:
36 /**
37 */
38 class ProcessAPICmd;
39
40 public:
41 nonvirtual void RecordActiveRunningTasksCount (size_t length);
42
43 public:
44 nonvirtual void RecordOpenConnectionCount (size_t length);
45
46 public:
47 nonvirtual void RecordProcessingConnectionCount (size_t length);
48
49 public:
50 struct Statistics;
51
52 public:
53 /**
54 */
55 nonvirtual Statistics GetStatistics () const;
56
57 private:
58 mutable mutex fMutex_; // protect all data with single quick access mutex
59 struct Rec_ {
60 enum class Kind {
61 eNull,
62 eAPI,
63 eAPIError,
64 eAPIActiveRunningTasks,
65 eAPIOpenConnectionCount,
66 eAPIProcessingConnectionCount,
67 };
68 Kind fKind;
70 Time::DurationSeconds fDuration;
71 size_t fLength;
72 };
73 Rec_ fRollingHistory_[1024]; // @todo see https://stroika.atlassian.net/browse/STK-174 - redo as circular q when available
74 size_t fNextHistory_{0}; // circular - can be < first. - first==last implies zero length q
75
76 void Add_ (const Rec_& r);
77 };
78 inline OperationalStatisticsMgr OperationalStatisticsMgr::sThe;
79
80 /**
81 */
82 class OperationalStatisticsMgr::ProcessAPICmd {
83 public:
84 ProcessAPICmd ();
85 ~ProcessAPICmd ();
86
87 public:
88 static void NoteError ();
89
90 private:
92 };
93
94 /**
95 */
96 struct OperationalStatisticsMgr::Statistics {
97 struct WSAPI {
98 unsigned int fCallsCompleted{};
99 optional<Duration> fMeanDuration;
100 optional<Duration> fMedianDuration;
101 optional<Duration> fMaxDuration;
102 optional<float> fMedianRunningAPITasks;
103 unsigned int fErrors{};
104 };
105
106 WSAPI fRecentAPI;
107 };
108
109}
110
111/*
112 ********************************************************************************
113 ***************************** Implementation Details ***************************
114 ********************************************************************************
115 */
116#include "OperationalStatistics.inl"
117
118#endif /*_StroikaSample_OperationalStatistics_h_*/
time_point< RealtimeClock, DurationSeconds > TimePointSeconds
TimePointSeconds is a simpler approach to chrono::time_point, which doesn't require using templates e...
Definition Realtime.h:82
chrono::duration< double > DurationSeconds
chrono::duration<double> - a time span (length of time) measured in seconds, but high precision.
Definition Realtime.h:57
Duration is a chrono::duration<double> (=.
Definition Duration.h:96