4
4
import urllib3
5
5
import base64
6
6
import requests
7
+ import datetime
7
8
8
9
urllib3 .disable_warnings ()
9
10
logger = alog .use_channel ("analytics" )
@@ -16,11 +17,13 @@ class AnalyticsNet(object):
16
17
token_expires = 0
17
18
max_frequency = 600
18
19
data = {}
20
+ last_run = False
19
21
data_time = 0
20
22
use_kubeconfig = False
21
23
hostname = None
22
24
trawler = None
23
25
version = "10.0"
26
+ time_interval = 3600
24
27
certificates = None
25
28
status_map = {"green" : 2 , "yellow" : 1 , "red" : 0 }
26
29
@@ -32,6 +35,7 @@ def __init__(self, config, trawler):
32
35
self .namespace = config .get ('namespace' , 'default' )
33
36
# Maximum frequency to pull data from APIC
34
37
self .max_frequency = int (config .get ('frequency' , 600 ))
38
+ self .time_interval = int (config .get ('time_interval' , 3600 ))
35
39
self .trawler = trawler
36
40
if self .use_kubeconfig :
37
41
logger .error ("Analytics metrics currently only available in cluster setting localhost:9200 for testing" )
@@ -209,9 +213,28 @@ def fish_analytics_v2(self):
209
213
self .trawler .set_gauge ('analytics' , 'unassigned_shards_total' , health_obj ['unassigned_shards' ])
210
214
self .trawler .set_gauge ('analytics' , 'initializing_shards_total' , health_obj ['initializing_shards' ])
211
215
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 ()
214
228
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 )
215
238
summary = calls_req .json ()
216
239
summary_output = {'1' :0 ,'2' :0 ,'3' :0 ,'4' :0 ,'5' :0 }
217
240
total = 0
@@ -220,9 +243,9 @@ def fish_analytics_v2(self):
220
243
summary_output [status ['group' ][0 ]] += status ['value' ]
221
244
total += status ['value' ]
222
245
223
- self .trawler .set_gauge ('analytics' , 'apicalls_lasthour .total' , total )
246
+ self .trawler .set_gauge ('analytics' , 'apicalls_{} .total' . format ( metric_name ) , total )
224
247
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 ])
226
249
227
250
228
251
@alog .timed_function (logger .trace )
0 commit comments