History

GSF.TimeSeries: Updated gateway style statistics to fall-back on reflection in source object in case properties are available.

J. Ritchie Carroll committed 7 years ago

Commit 3c697ec1 parent b40eabf1 file · +53 −213Browse files

Unified · Split

Source/Libraries/GSF.TimeSeries/Statistics/GatewayStatistics.cs+53−213
@@ -23,183 +23,108 @@ · 22 unmodified lines
2323 //
2424 //******************************************************************************************************
2525
26+using System;
27+using System.Reflection;
2628 using GSF.TimeSeries.Transport;
29+using GSF.Units;
2730
2831 // ReSharper disable UnusedParameter.Local
2932 namespace GSF.TimeSeries.Statistics
3033 {
3134 internal static class GatewayStatistics
3235 {
33− #region [ Subscriber Statistics ]
36+ private static T GetPropertyValue<T>(object source, string name)
37+ {
38+ PropertyInfo property = source.GetType().GetProperty(name);
39+ return property != null ? (T)property.GetValue(source) : default(T);
40+ }
3441
35− private static double GetSubscriberStatistic_Connected(object source, string arguments)
42+ private static T GetFunctionValue<T>(object source, string name, params object[] parameters)
3643 {
37− double statistic = 0.0D;
38− DataSubscriber subscriber = source as DataSubscriber;
44+ MethodInfo method = source.GetType().GetMethod(name);
45+ return method != null ? (T)method.Invoke(source, parameters) : default(T);
46+ }
3947
40− if ((object)subscriber != null)
41− statistic = subscriber.IsConnected ? 1.0D : 0.0D;
48+ #region [ Subscriber Statistics ]
4249
43− return statistic;
50+ private static double GetSubscriberStatistic_Connected(object source, string arguments)
51+ {
52+ return (source is DataSubscriber subscriber ? subscriber.IsConnected : GetPropertyValue<bool>(source, "IsConnected")) ? 1.0D : 0.0D;
4453 }
4554
4655 private static double GetSubscriberStatistic_Authenticated(object source, string arguments)
4756 {
48− double statistic = 0.0D;
49− DataSubscriber subscriber = source as DataSubscriber;
50−
51− if ((object)subscriber != null)
52− statistic = subscriber.Authenticated ? 1.0D : 0.0D;
53−
54− return statistic;
57+ return (source is DataSubscriber subscriber ? subscriber.Authenticated : GetPropertyValue<bool>(source, "Authenticated")) ? 1.0D : 0.0D;
5558 }
5659
5760 private static double GetSubscriberStatistic_ProcessedMeasurements(object source, string arguments)
5861 {
59− double statistic = 0.0D;
60− DataSubscriber subscriber = source as DataSubscriber;
61−
62− if ((object)subscriber != null)
63− statistic = s_statisticValueCache.GetDifference(subscriber, subscriber.ProcessedMeasurements, "ProcessedMeasurements");
64−
65− return statistic;
62+ double statistic = source is DataSubscriber subscriber ? subscriber.ProcessedMeasurements : GetPropertyValue<long>(source, "ProcessedMeasurements");
63+ return s_statisticValueCache.GetDifference(source, statistic, "ProcessedMeasurements");
6664 }
6765
6866 private static double GetSubscriberStatistic_TotalBytesReceived(object source, string arguments)
6967 {
70− double statistic = 0.0D;
71− DataSubscriber subscriber = source as DataSubscriber;
72−
73− if ((object)subscriber != null)
74− {
75− statistic = s_statisticValueCache.GetDifference(subscriber, subscriber.TotalBytesReceived, "TotalBytesReceived");
76−
77− if (statistic < 0.0D)
78− statistic = subscriber.TotalBytesReceived;
79− }
80−
81− return statistic;
68+ double statistic = source is DataSubscriber subscriber ? subscriber.TotalBytesReceived : GetPropertyValue<long>(source, "TotalBytesReceived");
69+ double difference = s_statisticValueCache.GetDifference(source, statistic, "TotalBytesReceived");
70+ return difference < 0.0D ? statistic : difference;
8271 }
8372
8473 private static double GetSubscriberStatistic_AuthorizedCount(object source, string arguments)
8574 {
86− double statistic = 0.0D;
87− DataSubscriber subscriber = source as DataSubscriber;
88−
89− if ((object)subscriber != null)
90− statistic = subscriber.GetAuthorizedSignalIDs().Length;
91−
92− return statistic;
75+ Guid[] authorizedSignalIDs = source is DataSubscriber subscriber ? subscriber.GetAuthorizedSignalIDs() : GetFunctionValue<Guid[]>(source, "GetAuthorizedSignalIDs");
76+ return authorizedSignalIDs?.Length ?? 0;
9377 }
9478
9579 private static double GetSubscriberStatistic_UnauthorizedCount(object source, string arguments)
9680 {
97− double statistic = 0.0D;
98− DataSubscriber subscriber = source as DataSubscriber;
99−
100− if ((object)subscriber != null)
101− statistic = subscriber.GetUnauthorizedSignalIDs().Length;
102−
103− return statistic;
81+ Guid[] unauthorizedSignalIDs = source is DataSubscriber subscriber ? subscriber.GetUnauthorizedSignalIDs() : GetFunctionValue<Guid[]>(source, "GetUnauthorizedSignalIDs");
82+ return unauthorizedSignalIDs?.Length ?? 0;
10483 }
10584
10685 private static double GetSubscriberStatistic_LifetimeMeasurements(object source, string arguments)
10786 {
108− double statistic = 0.0D;
109− DataSubscriber subscriber = source as DataSubscriber;
110−
111− if ((object)subscriber != null)
112− statistic = subscriber.LifetimeMeasurements;
113−
114− return statistic;
87+ return source is DataSubscriber subscriber ? subscriber.LifetimeMeasurements : GetPropertyValue<long>(source, "LifetimeMeasurements");
11588 }
11689
11790 private static double GetSubscriberStatistic_MinimumMeasurementsPerSecond(object source, string arguments)
11891 {
119− double statistic = 0.0D;
120− DataSubscriber subscriber = source as DataSubscriber;
121−
122− if ((object)subscriber != null)
123− statistic = subscriber.MinimumMeasurementsPerSecond;
124−
125− return statistic;
92+ return source is DataSubscriber subscriber ? subscriber.MinimumMeasurementsPerSecond : GetPropertyValue<long>(source, "MinimumMeasurementsPerSecond");
12693 }
12794
12895 private static double GetSubscriberStatistic_MaximumMeasurementsPerSecond(object source, string arguments)
12996 {
130− double statistic = 0.0D;
131− DataSubscriber subscriber = source as DataSubscriber;
132−
133− if ((object)subscriber != null)
134− statistic = subscriber.MaximumMeasurementsPerSecond;
135−
136− return statistic;
97+ return source is DataSubscriber subscriber ? subscriber.MaximumMeasurementsPerSecond : GetPropertyValue<long>(source, "MaximumMeasurementsPerSecond");
13798 }
13899
139100 private static double GetSubscriberStatistic_AverageMeasurementsPerSecond(object source, string arguments)
140101 {
141− double statistic = 0.0D;
142− DataSubscriber subscriber = source as DataSubscriber;
143−
144− if ((object)subscriber != null)
145− statistic = subscriber.AverageMeasurementsPerSecond;
146−
147− return statistic;
102+ return source is DataSubscriber subscriber ? subscriber.AverageMeasurementsPerSecond : GetPropertyValue<long>(source, "AverageMeasurementsPerSecond");
148103 }
149104
150105 private static double GetSubscriberStatistic_LifetimeBytesReceived(object source, string arguments)
151106 {
152− double statistic = 0.0D;
153− DataSubscriber subscriber = source as DataSubscriber;
154−
155− if ((object)subscriber != null)
156− statistic = subscriber.TotalBytesReceived;
157−
158− return statistic;
107+ return source is DataSubscriber subscriber ? subscriber.TotalBytesReceived : GetPropertyValue<long>(source, "TotalBytesReceived");
159108 }
160109
161110 private static double GetSubscriberStatistic_LifetimeMinimumLatency(object source, string arguments)
162111 {
163− double statistic = 0.0D;
164− DataSubscriber subscriber = source as DataSubscriber;
165−
166− if ((object)subscriber != null)
167− statistic = subscriber.LifetimeMinimumLatency;
168−
169− return statistic;
112+ return source is DataSubscriber subscriber ? subscriber.LifetimeMinimumLatency : GetPropertyValue<int>(source, "LifetimeMinimumLatency");
170113 }
171114
172115 private static double GetSubscriberStatistic_LifetimeMaximumLatency(object source, string arguments)
173116 {
174− double statistic = 0.0D;
175− DataSubscriber subscriber = source as DataSubscriber;
176−
177− if ((object)subscriber != null)
178− statistic = subscriber.LifetimeMaximumLatency;
179−
180− return statistic;
117+ return source is DataSubscriber subscriber ? subscriber.LifetimeMaximumLatency : GetPropertyValue<int>(source, "LifetimeMaximumLatency");
181118 }
182119
183120 private static double GetSubscriberStatistic_LifetimeAverageLatency(object source, string arguments)
184121 {
185− double statistic = 0.0D;
186− DataSubscriber subscriber = source as DataSubscriber;
187−
188− if ((object)subscriber != null)
189− statistic = subscriber.LifetimeAverageLatency;
190−
191− return statistic;
122+ return source is DataSubscriber subscriber ? subscriber.LifetimeAverageLatency : GetPropertyValue<int>(source, "LifetimeAverageLatency");
192123 }
193124
194125 private static double GetSubscriberStatistic_UpTime(object source, string arguments)
195126 {
196− double statistic = 0.0D;
197− DataSubscriber subscriber = source as DataSubscriber;
198−
199− if ((object)subscriber != null)
200− statistic = subscriber.RunTime;
201−
202− return statistic;
127+ return source is DataSubscriber subscriber ? subscriber.RunTime : GetPropertyValue<Time>(source, "RunTime");
203128 }
204129
205130 #endregion
@@ -208,161 +133,76 @@ namespace GSF.TimeSeries.Statistics · 2 unmodified lines
208133
209134 private static double GetPublisherStatistic_Connected(object source, string arguments)
210135 {
211− double statistic = 0.0D;
212− DataPublisher publisher = source as DataPublisher;
213−
214− if ((object)publisher != null)
215− statistic = publisher.IsConnected ? 1.0D : 0.0D;
216−
217− return statistic;
136+ return (source is DataPublisher publisher ? publisher.IsConnected : GetPropertyValue<bool>(source, "IsConnected")) ? 1.0D : 0.0D;
218137 }
219138
220139 private static double GetPublisherStatistic_ConnectedClientCount(object source, string arguments)
221140 {
222− double statistic = 0.0D;
223− DataPublisher publisher = source as DataPublisher;
224−
225− if ((object)publisher != null)
226− statistic = publisher.Count;
227−
228− return statistic;
141+ return source is DataPublisher publisher ? publisher.Count : GetPropertyValue<int>(source, "Count");
229142 }
230143
231144 private static double GetPublisherStatistic_ProcessedMeasurements(object source, string arguments)
232145 {
233− double statistic = 0.0D;
234− DataPublisher publisher = source as DataPublisher;
235−
236− if ((object)publisher != null)
237− statistic = s_statisticValueCache.GetDifference(publisher, publisher.ProcessedMeasurements, "ProcessedMeasurements");
238−
239− return statistic;
146+ double statistic = source is DataPublisher publisher ? publisher.ProcessedMeasurements : GetPropertyValue<long>(source, "ProcessedMeasurements");
147+ return s_statisticValueCache.GetDifference(source, statistic, "ProcessedMeasurements");
240148 }
241149
242150 private static double GetPublisherStatistic_TotalBytesSent(object source, string arguments)
243151 {
244− double statistic = 0.0D;
245− DataPublisher publisher = source as DataPublisher;
246−
247− if ((object)publisher != null)
248− {
249− statistic = s_statisticValueCache.GetDifference(publisher, publisher.TotalBytesSent, "TotalBytesSent");
250−
251− if (statistic < 0.0D)
252− statistic = publisher.TotalBytesSent;
253− }
254−
255− return statistic;
152+ double statistic = source is DataPublisher publisher ? publisher.TotalBytesSent : GetPropertyValue<long>(source, "TotalBytesSent");
153+ double difference = s_statisticValueCache.GetDifference(source, statistic, "TotalBytesSent");
154+ return difference < 0.0D ? statistic : difference;
256155 }
257156
258157 private static double GetPublisherStatistic_LifetimeMeasurements(object source, string arguments)
259158 {
260− double statistic = 0.0D;
261− DataPublisher publisher = source as DataPublisher;
262−
263− if ((object)publisher != null)
264− statistic = publisher.LifetimeMeasurements;
265−
266− return statistic;
159+ return source is DataPublisher publisher ? publisher.LifetimeMeasurements : GetPropertyValue<long>(source, "LifetimeMeasurements");
267160 }
268161
269162 private static double GetPublisherStatistic_MinimumMeasurementsPerSecond(object source, string arguments)
270163 {
271− double statistic = 0.0D;
272− DataPublisher publisher = source as DataPublisher;
273−
274− if ((object)publisher != null)
275− statistic = publisher.MinimumMeasurementsPerSecond;
276−
277− return statistic;
164+ return source is DataPublisher publisher ? publisher.MinimumMeasurementsPerSecond : GetPropertyValue<long>(source, "MinimumMeasurementsPerSecond");
278165 }
279166
280167 private static double GetPublisherStatistic_MaximumMeasurementsPerSecond(object source, string arguments)
281168 {
282− double statistic = 0.0D;
283− DataPublisher publisher = source as DataPublisher;
284−
285− if ((object)publisher != null)
286− statistic = publisher.MaximumMeasurementsPerSecond;
287−
288− return statistic;
169+ return source is DataPublisher publisher ? publisher.MaximumMeasurementsPerSecond : GetPropertyValue<long>(source, "MaximumMeasurementsPerSecond");
289170 }
290171
291172 private static double GetPublisherStatistic_AverageMeasurementsPerSecond(object source, string arguments)
292173 {
293− double statistic = 0.0D;
294− DataPublisher publisher = source as DataPublisher;
295−
296− if ((object)publisher != null)
297− statistic = publisher.AverageMeasurementsPerSecond;
298−
299− return statistic;
174+ return source is DataPublisher publisher ? publisher.AverageMeasurementsPerSecond : GetPropertyValue<long>(source, "AverageMeasurementsPerSecond");
300175 }
301176
302177 private static double GetPublisherStatistic_LifetimeBytesSent(object source, string arguments)
303178 {
304− double statistic = 0.0D;
305− DataPublisher publisher = source as DataPublisher;
306−
307− if ((object)publisher != null)
308− statistic = publisher.TotalBytesSent;
309−
310− return statistic;
179+ return source is DataPublisher publisher ? publisher.TotalBytesSent : GetPropertyValue<long>(source, "TotalBytesSent");
311180 }
312181
313182 private static double GetPublisherStatistic_LifetimeMinimumLatency(object source, string arguments)
314183 {
315− double statistic = 0.0D;
316− DataPublisher publisher = source as DataPublisher;
317−
318− if ((object)publisher != null)
319− statistic = publisher.LifetimeMinimumLatency;
320−
321− return statistic;
184+ return source is DataPublisher publisher ? publisher.LifetimeMinimumLatency : GetPropertyValue<int>(source, "LifetimeMinimumLatency");
322185 }
323186
324187 private static double GetPublisherStatistic_LifetimeMaximumLatency(object source, string arguments)
325188 {
326− double statistic = 0.0D;
327− DataPublisher publisher = source as DataPublisher;
328−
329− if ((object)publisher != null)
330− statistic = publisher.LifetimeMaximumLatency;
331−
332− return statistic;
189+ return source is DataPublisher publisher ? publisher.LifetimeMaximumLatency : GetPropertyValue<int>(source, "LifetimeMaximumLatency");
333190 }
334191
335192 private static double GetPublisherStatistic_LifetimeAverageLatency(object source, string arguments)
336193 {
337− double statistic = 0.0D;
338− DataPublisher publisher = source as DataPublisher;
339−
340− if ((object)publisher != null)
341− statistic = publisher.LifetimeAverageLatency;
342−
343− return statistic;
194+ return source is DataPublisher publisher ? publisher.LifetimeAverageLatency : GetPropertyValue<int>(source, "LifetimeAverageLatency");
344195 }
345196
346197 private static double GetPublisherStatistic_BufferBlockRetransmissions(object source, string arguments)
347198 {
348− double statistic = 0.0D;
349− DataPublisher publisher = source as DataPublisher;
350−
351− if ((object)publisher != null)
352− statistic = s_statisticValueCache.GetDifference(publisher, publisher.BufferBlockRetransmissions, "BufferBlockRetransmissions");
353−
354− return statistic;
199+ double statistic = source is DataPublisher publisher ? publisher.BufferBlockRetransmissions : GetPropertyValue<long>(source, "BufferBlockRetransmissions");
200+ return s_statisticValueCache.GetDifference(source, statistic, "BufferBlockRetransmissions");
355201 }
356202
357203 private static double GetPublisherStatistic_UpTime(object source, string arguments)
358204 {
359− double statistic = 0.0D;
360− DataPublisher publisher = source as DataPublisher;
361−
362− if ((object)publisher != null)
363− statistic = publisher.RunTime;
364−
365− return statistic;
205+ return source is DataPublisher publisher ? publisher.RunTime : GetPropertyValue<Time>(source, "RunTime");
366206 }
367207
368208 #endregion

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t