Skip to content

Instantly share code, notes, and snippets.

@phuntik
Created March 28, 2023 19:48
Show Gist options
  • Save phuntik/3de40444a2db08e9e5b276605ac386d5 to your computer and use it in GitHub Desktop.
Save phuntik/3de40444a2db08e9e5b276605ac386d5 to your computer and use it in GitHub Desktop.
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