Created
March 28, 2023 19:48
-
-
Save phuntik/3de40444a2db08e9e5b276605ac386d5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import requests | |
import json | |
import datetime | |
from clickhouse_http_client import ClickHouse | |
# define variables | |
ch = ClickHouse(user="moira",password="moira",database="moira") | |
moira_url="http://localhost:3002" | |
# get active alarms list | |
ch_active = json.loads( | |
json.dumps( | |
ch.json(""" | |
SELECT triggerID,metric,dateTime,state | |
FROM ( | |
SELECT triggerID,metric,dateTime,state, | |
(any(dateTime) OVER(PARTITION BY tuple(triggerID,metric) ORDER BY dateTime asc ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)) AS OldStateTime, | |
(any(dateTime) OVER(PARTITION BY tuple(triggerID,metric) ORDER BY dateTime desc ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)) as NextStateTime | |
FROM alerts | |
ORDER BY dateTime desc | |
settings allow_experimental_window_functions = 1 | |
) | |
where NextStateTime = 0 | |
and state <> 'OK' | |
""")[1] | |
) | |
)['data'] | |
# print(ch_active) | |
# function comparing states of ch and moira | |
def compare(ch_alarm,moira_trigger_response): | |
# print(ch_alarm) | |
for moira_metric in moira_trigger_response['metrics']: | |
if moira_metric==ch_alarm['metric']: | |
if moira_trigger_response['metrics'][moira_metric]['state']==ch_alarm['state']: | |
# print(ch_alarm['triggerID'],ch_alarm['metric'],ch_alarm['state'],ch_alarm['dateTime'],'synced') | |
return 1 | |
else: | |
print( | |
ch_alarm['triggerID'],ch_alarm['metric'],ch_alarm['state'],ch_alarm['dateTime'], | |
'->', | |
moira_trigger_response['metrics'][moira_metric]['state'], | |
datetime.fromtimestamp(moira_trigger_response['metrics'][moira_metric]['event_timestamp']) | |
) | |
return 1 | |
# operate for each active alarm | |
for ch_alarm in ch_active: | |
url=moira_url+"/api/trigger/"+ch_alarm['triggerID']+"/state" | |
moira_trigger_response = json.loads( | |
json.dumps( | |
requests.get(url).json() | |
) | |
) | |
# print(moira_trigger_response) | |
if compare(ch_alarm,moira_trigger_response): | |
# print('check succeed') | |
continue | |
else: | |
print(ch_alarm['triggerID'],ch_alarm['metric'],ch_alarm['state'],ch_alarm['dateTime'],'not found') | |
# break |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment