Skip to content

Commit 99fa508

Browse files
Resolve notifications API
1 parent f2b178a commit 99fa508

File tree

6 files changed

+82
-11
lines changed

6 files changed

+82
-11
lines changed

.travis.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ script:
1515
- examples/get_data_simple.py XXX
1616
- examples/list_alerts.py XXX
1717
- examples/list_alert_notifications.py XXX
18+
- examples/resolve_alert_notifications.py XXX
1819
- examples/list_dashboards.py XXX
1920
- examples/list_hosts.py XXX
2021
- examples/list_metrics.py XXX
@@ -36,6 +37,7 @@ script:
3637
- examples/get_data_simple.py XXX
3738
- examples/list_alerts.py XXX
3839
- examples/list_alert_notifications.py XXX
40+
- examples/resolve_alert_notifications.py XXX
3941
- examples/list_dashboards.py XXX
4042
- examples/list_hosts.py XXX
4143
- examples/list_metrics.py XXX

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ Deletes an alert.
104104
- **alert**: the alert object as returned by `get_alerts()`.
105105

106106
**Success Return Value**
107-
A string with the number of alerts deleted.
107+
`None`.
108108
**Example**
109109
[examples/delete_alert.py](examples/delete_alert.py).
110110

@@ -119,11 +119,11 @@ Deletes a dashboard.
119119
**Example**
120120
[examples/delete_dashboard.py](examples/delete_dashboard.py).
121121

122-
#### `delete_event(self, event_id)`
122+
#### `delete_event(self, event)`
123123
**Description**
124-
Deletes an event given its id.
124+
Deletes an event.
125125
**Arguments**
126-
- **event_id**: id of the event to be deleted.
126+
- **event**: the event object as returned by `get_events()`.
127127

128128
**Success Return Value**
129129
`None`.

examples/delete_event.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@
3737
# Delete the first event among the returned ones
3838
#
3939
for event in res[1]['events']:
40-
print "Deleting event " + json.dumps(event)
40+
print "Deleting event " + event['name']
4141

42-
res = sdclient.delete_event(event['id'])
42+
res = sdclient.delete_event(event)
4343

4444
if not res[0]:
4545
print res[1]

examples/list_metrics.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,5 @@
3737
print res[1]
3838
sys.exit(1)
3939

40-
print data
40+
for metric_id, metric in data.iteritems():
41+
print "Metric name: " + metric_id + ", type: " + metric['type']
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#!/usr/bin/env python
2+
#
3+
# Resolve alert notifications from Sysdig Cloud
4+
#
5+
6+
import os
7+
import sys
8+
import time
9+
sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(sys.argv[0])), '..'))
10+
from sdcclient import SdcClient
11+
12+
#
13+
# Parse arguments
14+
#
15+
if len(sys.argv) != 2:
16+
print 'usage: %s <sysdig-token>' % sys.argv[0]
17+
print 'You can find your token at https://app.sysdigcloud.com/#/settings/user'
18+
sys.exit(1)
19+
20+
sdc_token = sys.argv[1]
21+
22+
#
23+
# Instantiate the SDC client
24+
#
25+
sdclient = SdcClient(sdc_token)
26+
27+
#
28+
# Get the unresolved notifications in the last day
29+
#
30+
res = sdclient.get_notifications(from_ts=int(time.time()-86400), to_ts=int(time.time()), resolved=False)
31+
32+
if not res[0]:
33+
print res[1]
34+
sys.exit(1)
35+
36+
#
37+
# Resolve them
38+
#
39+
notifications = res[1]['notifications']
40+
41+
print "Resolving " + str(len(notifications)) + " notifications"
42+
for notification in notifications:
43+
res = sdclient.update_notification_resolution(notification, True)
44+
if not res[0]:
45+
print res[1]
46+
sys.exit(1)

sdcclient/_client.py

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ def __init__(self, token="", sdc_url='https://app.sysdigcloud.com'):
1515
def __checkResponse(self, r):
1616
if r.status_code >= 300:
1717
errorcode = r.status_code
18+
self.lasterr = None
1819

1920
try:
2021
j = r.json()
@@ -25,8 +26,14 @@ def __checkResponse(self, r):
2526
if 'errors' in j:
2627
if 'message' in j['errors'][0]:
2728
self.lasterr = j['errors'][0]['message']
28-
else:
29-
self.lasterr = j['errors'][0]['reason']
29+
30+
if 'reason' in j['errors'][0]:
31+
if self.lasterr is not None:
32+
self.lasterr += ' '
33+
else:
34+
self.lasrerr = ''
35+
36+
self.lasterr += j['errors'][0]['reason']
3037
elif 'message' in j:
3138
self.lasterr = j['message']
3239
else:
@@ -75,6 +82,18 @@ def get_notifications(self, from_ts, to_ts, state=None, resolved=None):
7582
return [False, self.lasterr]
7683
return [True, r.json()]
7784

85+
def update_notification_resolution(self, notification, resolved):
86+
if 'id' not in notification:
87+
return [False, "Invalid notification format"]
88+
89+
notification['resolved'] = resolved
90+
data = {'notification': notification}
91+
92+
r = requests.put(self.url + '/api/notifications/' + str(notification['id']), headers=self.hdrs, data=json.dumps(data))
93+
if not self.__checkResponse(r):
94+
return [False, self.lasterr]
95+
return [True, r.json()]
96+
7897
def create_alert(self, name, description, severity, for_atleast_s, condition, segmentby=[],
7998
segment_condition='ANY', filter='', notify='', enabled=True, annotations={}):
8099
#
@@ -530,8 +549,11 @@ def get_events(self, name=None, from_ts=None, to_ts=None, tags=None):
530549
return [False, self.lasterr]
531550
return [True, r.json()]
532551

533-
def delete_event(self, event_id):
534-
r = requests.delete(self.url + '/api/events/' + str(event_id), headers=self.hdrs)
552+
def delete_event(self, event):
553+
if 'id' not in event:
554+
return [False, "Invalid event format"]
555+
556+
r = requests.delete(self.url + '/api/events/' + str(event['id']), headers=self.hdrs)
535557
if not self.__checkResponse(r):
536558
return [False, self.lasterr]
537559
return [True, None]

0 commit comments

Comments
 (0)