From 425e605f68fd412661f71cebbec31d09175554dc Mon Sep 17 00:00:00 2001
From: Thomas Juerges <203795-tjuerges@users.noreply.gitlab.com>
Date: Wed, 21 Jul 2021 15:01:32 +0200
Subject: [PATCH] L2SS-245: add convenience script to compute polling stats

---
 devices/toolkit/attribute_polling_stats.py | 39 ++++++++++++++++++++++
 1 file changed, 39 insertions(+)
 create mode 100644 devices/toolkit/attribute_polling_stats.py

diff --git a/devices/toolkit/attribute_polling_stats.py b/devices/toolkit/attribute_polling_stats.py
new file mode 100644
index 000000000..fcfb50232
--- /dev/null
+++ b/devices/toolkit/attribute_polling_stats.py
@@ -0,0 +1,39 @@
+import numpy
+import tango
+
+def attribute_polling_stats(dp: tango._tango.DeviceProxy = None, iterations: int = 10, polling_time: float = 1.0, quiet = False):
+    if dp is not None:
+        print('Will sample the device server\'s polling time {} times with a pause of {}s between each sampling.'.format(iterations, polling_time))
+    else:
+        print('A DeviceProxy object is needed!')
+        return
+    import numpy
+    from time import sleep
+    polling_durations = []
+    polling_delays = []
+    value = numpy.double(0)
+    iterations_left = iterations
+    while iterations_left > 0:
+        iterations_left -= 1
+        string = dp.polling_status()[0].split('\n')
+        polling_duration = numpy.double(string[3].split('=')[-1].strip()) / 1e3
+        polling_delay = numpy.double(string[5].split('=')[-1].split(',')[0].strip()) / 1e3
+        polling_durations.append(polling_duration)
+        polling_delays.append(polling_delay)
+        if not quiet:
+            print('Iteration #{}, {} iterations left, polling duration = {}s, polling delay = {}s.'.format(iterations - iterations_left, iterations_left, polling_duration, polling_delay))
+        sleep(polling_time)
+    durations = numpy.array(polling_durations)
+    delays = numpy.array(polling_delays)
+    def compute_and_print(result):
+        min = numpy.min(result)
+        max = numpy.max(result)
+        median = numpy.median(result)
+        mean = numpy.mean(result)
+        std = numpy.std(result)
+        print("\tmin = {}[s]\n\tmax = {}[s]\n\tmedian = {}[s]\n\tmean = {}[s]\n\tstddev = {}[s]".format(min, max, median, mean, std))
+    print("\n\titerations = {}\n\n\tPolling duration".format(iterations))
+    compute_and_print(durations)
+    print("\n\tPolling delay")
+    compute_and_print(delays)
+    return (durations, delays)
-- 
GitLab