-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathRC_Statistics.cs
154 lines (120 loc) · 3.97 KB
/
RC_Statistics.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace uWAVE_Host
{
public class StatValue
{
#region Properties
public int TotalSamples { get; private set; }
public double LastValue { get; private set; }
public double MinValue { get; private set; }
public double MaxValue { get; private set; }
public string FmtString { get; private set; }
#endregion
#region Constructor
public StatValue(string fmtString)
{
FmtString = fmtString;
Clear();
}
#endregion
#region Methods
public void Clear()
{
TotalSamples = 0;
LastValue = double.NaN;
MinValue = double.MaxValue;
MaxValue = double.MinValue;
}
public void Add(double nextValue)
{
LastValue = nextValue;
if (nextValue > MaxValue)
MaxValue = nextValue;
if (nextValue < MinValue)
MinValue = nextValue;
TotalSamples++;
}
public override string ToString()
{
if (TotalSamples > 0)
{
return string.Format("{0} .. {1}, {2} ({3} smps)",
MinValue.ToString(FmtString, CultureInfo.InvariantCulture),
MaxValue.ToString(FmtString, CultureInfo.InvariantCulture),
LastValue.ToString(FmtString, CultureInfo.InvariantCulture),
TotalSamples);
}
else
return "- - -";
}
#endregion
}
public class RC_Statistics
{
#region Properties
public int RequestsSucceeded { get; private set; }
public int RequestsFailed { get; private set; }
Dictionary<string, StatValue> statValues;
#endregion
#region Constructor
public RC_Statistics()
{
statValues = new Dictionary<string, StatValue>();
}
#endregion
#region Methods
public void InitStatValue(string key, string fmtString)
{
statValues.Add(key, new StatValue(fmtString));
}
public void Clear()
{
RequestsSucceeded = 0;
RequestsFailed = 0;
foreach (var item in statValues)
item.Value.Clear();
}
public void AddMeasurement(string key, double value)
{
if (statValues.ContainsKey(key))
{
statValues[key].Add(value);
}
else
throw new KeyNotFoundException();
}
public void AddSuccess()
{
RequestsSucceeded++;
}
public void AddFail()
{
RequestsFailed++;
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
int total = RequestsSucceeded + RequestsFailed;
sb.AppendFormat("Total requests performed: {0}\r\n", total);
if (total > 0)
{
double succeededPercent = 100.0 * RequestsSucceeded / (double)total;
double failedPercent = 100.0 * RequestsFailed / (double)total;
sb.AppendFormat("Request succeeded: {0} ({1:F01}%)\r\n", RequestsSucceeded, succeededPercent);
sb.AppendFormat("Request failed: {0} ({1:F01}%)\r\n", RequestsFailed, failedPercent);
sb.AppendLine();
}
foreach (var item in statValues)
{
sb.AppendFormat("{0}: {1}\r\n", item.Key, item.Value.ToString());
}
return sb.ToString();
}
#endregion
}
}