Skip to content

Commit a9f0c95

Browse files
feat: api calls interval customisation (#65)
#56 Signed-off-by: Ricky Moorhouse <[email protected]>
1 parent 8c192d9 commit a9f0c95

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed

analytics_net.py

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import urllib3
55
import base64
66
import requests
7+
import datetime
78

89
urllib3.disable_warnings()
910
logger = alog.use_channel("analytics")
@@ -16,11 +17,13 @@ class AnalyticsNet(object):
1617
token_expires = 0
1718
max_frequency = 600
1819
data = {}
20+
last_run = False
1921
data_time = 0
2022
use_kubeconfig = False
2123
hostname = None
2224
trawler = None
2325
version = "10.0"
26+
time_interval = 3600
2427
certificates = None
2528
status_map = {"green": 2, "yellow": 1, "red": 0}
2629

@@ -32,6 +35,7 @@ def __init__(self, config, trawler):
3235
self.namespace = config.get('namespace', 'default')
3336
# Maximum frequency to pull data from APIC
3437
self.max_frequency = int(config.get('frequency', 600))
38+
self.time_interval = int(config.get('time_interval', 3600))
3539
self.trawler = trawler
3640
if self.use_kubeconfig:
3741
logger.error("Analytics metrics currently only available in cluster setting localhost:9200 for testing")
@@ -209,9 +213,28 @@ def fish_analytics_v2(self):
209213
self.trawler.set_gauge('analytics', 'unassigned_shards_total', health_obj['unassigned_shards'])
210214
self.trawler.set_gauge('analytics', 'initializing_shards_total', health_obj['initializing_shards'])
211215
self.trawler.set_gauge('analytics', 'pending_tasks_total', health_obj['number_of_pending_tasks'])
212-
calls_req = requests.get('https://{}/cloud/dashboards/status?timeframe=last1hour'.format(self.hostname), verify=False,
213-
cert=self.certificates.name)
216+
if self.time_interval == 3600:
217+
timeframe = 'timeframe=last1hour'
218+
metric_name = 'lasthour'
219+
elif self.time_interval == 0:
220+
# Auto interval
221+
if self.last_run:
222+
start_time = self.last_run
223+
else:
224+
start_time = datetime.datetime.now()
225+
metric_name = 'thisloop'.format(self.time_interval)
226+
timeframe = 'start={}'.format(start_time.isoformat('T'))
227+
self.last_run = datetime.datetime.now()
214228

229+
else:
230+
now_time = datetime.datetime.now()
231+
start_time = now_time - datetime.timedelta(seconds=30)
232+
metric_name = 'last{}s'.format(self.time_interval)
233+
timeframe = 'start={}'.format(start_time.isoformat('T'))
234+
logger.info('https://{}/cloud/dashboards/status?{}'.format(self.hostname, timeframe))
235+
calls_req = requests.get('https://{}/cloud/dashboards/status?{}'.format(self.hostname, timeframe), verify=False,
236+
cert=self.certificates.name)
237+
print(calls_req.text)
215238
summary = calls_req.json()
216239
summary_output = {'1':0,'2':0,'3':0,'4':0,'5':0}
217240
total = 0
@@ -220,9 +243,9 @@ def fish_analytics_v2(self):
220243
summary_output[status['group'][0]] += status['value']
221244
total += status['value']
222245

223-
self.trawler.set_gauge('analytics', 'apicalls_lasthour.total', total)
246+
self.trawler.set_gauge('analytics', 'apicalls_{}.total'.format(metric_name), total)
224247
for status in summary_output:
225-
self.trawler.set_gauge('analytics', 'apicalls_lasthour.{}xx'.format(status), summary_output[status])
248+
self.trawler.set_gauge('analytics', 'apicalls_{}.{}xx'.format(metric_name, status), summary_output[status])
226249

227250

228251
@alog.timed_function(logger.trace)

0 commit comments

Comments
 (0)