Skip to content

Commit f2b178a

Browse files
More work and refactor
1 parent 20590e2 commit f2b178a

File tree

7 files changed

+135
-55
lines changed

7 files changed

+135
-55
lines changed

.travis.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@ script:
1414
- examples/get_data_datasource.py XXX
1515
- examples/get_data_simple.py XXX
1616
- examples/list_alerts.py XXX
17+
- examples/list_alert_notifications.py XXX
1718
- examples/list_dashboards.py XXX
1819
- examples/list_hosts.py XXX
1920
- examples/list_metrics.py XXX
2021
- examples/post_event.py XXX "test event name" "test event description"
2122
- examples/list_events.py XXX
23+
- examples/delete_event.py XXX
2224
- examples/print_data_retention_info.py XXX
2325
- examples/print_explore_grouping.py XXX
2426
- examples/print_user_info.py XXX
@@ -33,11 +35,13 @@ script:
3335
- examples/get_data_datasource.py XXX
3436
- examples/get_data_simple.py XXX
3537
- examples/list_alerts.py XXX
38+
- examples/list_alert_notifications.py XXX
3639
- examples/list_dashboards.py XXX
3740
- examples/list_hosts.py XXX
3841
- examples/list_metrics.py XXX
3942
- examples/post_event.py XXX "test event name" "test event description"
4043
- examples/list_events.py XXX
44+
- examples/delete_event.py XXX
4145
- examples/print_data_retention_info.py XXX
4246
- examples/print_explore_grouping.py XXX
4347
- examples/print_user_info.py XXX

README.md

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,19 +97,25 @@ A dictionary showing the details of the new dashboard.
9797
**Example**
9898
[examples/create_dashboard.py](examples/create_dashboard.py).
9999

100-
#### `delete_alert(self, name)`
100+
#### `delete_alert(self, alert)`
101101
**Description**
102-
Deletes an alert given its name.
102+
Deletes an alert.
103+
**Arguments**
104+
- **alert**: the alert object as returned by `get_alerts()`.
105+
103106
**Success Return Value**
104107
A string with the number of alerts deleted.
105108
**Example**
106109
[examples/delete_alert.py](examples/delete_alert.py).
107110

108-
#### `delete_dashboard(self, dashname)`
111+
#### `delete_dashboard(self, dashboard)`
109112
**Description**
110-
Deletes a dashboard given its name.
113+
Deletes a dashboard.
114+
**Arguments**
115+
- **dashboard**: the dashboard object as returned by `get_dashboards()`.
116+
111117
**Success Return Value**
112-
A string with the number of dashboards deleted.
118+
`None`.
113119
**Example**
114120
[examples/delete_dashboard.py](examples/delete_dashboard.py).
115121

@@ -216,7 +222,7 @@ You can use this method you use to send an event to Sysdig Cloud. The events you
216222
**Arguments**
217223
- **name**: the name of the new event.
218224
- **description**: a longer description offering detailed information about the event.
219-
- **severity**: the UTC time (in seconds) of the end of the data window, or 0 to indicate "now". A negative value can also be optionally used to indicate a relative time in the past from now. For example, -3600 means "one hour ago".
225+
- **severity**: severity, syslog style (from 0 to 7).
220226
- **host**: the host generating the event. Can be used for filtering/segmenting purposes in Sysdig Cloud.
221227
- **tags**: a list of key-value dictionaries that can be used to tag the event. Can be used for filtering/segmenting purposes in Sysdig Cloud.
222228

examples/delete_alert.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,15 @@
2323
#
2424
sdclient = SdcClient(sdc_token)
2525

26-
res = sdclient.delete_alert("tomcat cpu > 80% on any host")
27-
print res[1]
26+
res = sdclient.get_alerts()
2827
if not res[0]:
28+
print res[1]
2929
sys.exit(1)
30+
31+
for alert in res[1]['alerts']:
32+
if alert['name'] == "tomcat cpu > 80% on any host":
33+
print "Deleting alert"
34+
res = sdclient.delete_alert(alert)
35+
if not res[0]:
36+
print res[1]
37+
sys.exit(1)

examples/delete_dashboard.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,21 @@
2323
#
2424
sdclient = SdcClient(sdc_token)
2525

26-
res = sdclient.delete_dashboard("API test - cassandra in prod")
27-
print res[1]
26+
#
27+
# List the dashboards
28+
#
29+
res = sdclient.get_dashboards()
2830
if not res[0]:
31+
print res[1]
2932
sys.exit(1)
3033

31-
res = sdclient.delete_dashboard("API test - cassandra in dev")
32-
print res[1]
33-
if not res[0]:
34-
sys.exit(1)
34+
#
35+
# Delete all the dashboards containing "API test"
36+
#
37+
for dashboard in res[1]['dashboards']:
38+
if 'API test' in dashboard['name']:
39+
print "Deleting " + dashboard['name']
40+
res = sdclient.delete_dashboard(dashboard)
41+
if not res[0]:
42+
print res[1]
43+
sys.exit(1)
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#!/usr/bin/env python
2+
#
3+
# Get 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 notifications in the last day
29+
#
30+
res = sdclient.get_notifications(from_ts=int(time.time()-86400), to_ts=int(time.time()))
31+
32+
print res[1]
33+
if not res[0]:
34+
sys.exit(1)
35+
36+
#
37+
# Get the notifications in the active state
38+
#
39+
res = sdclient.get_notifications(from_ts=int(time.time()-86400), to_ts=int(time.time()), state='ACTIVE')
40+
41+
print res[1]
42+
if not res[0]:
43+
sys.exit(1)
44+
45+
#
46+
# Get the notifications in the active state
47+
#
48+
res = sdclient.get_notifications(from_ts=int(time.time()-86400), to_ts=int(time.time()), state='OK')
49+
50+
print res[1]
51+
if not res[0]:
52+
sys.exit(1)
53+
54+
#
55+
# Get the resolved notifications
56+
#
57+
res = sdclient.get_notifications(from_ts=int(time.time()-86400), to_ts=int(time.time()), resolved=True)
58+
59+
print res[1]
60+
if not res[0]:
61+
sys.exit(1)

examples/list_dashboards.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
res = sdclient.get_dashboards()
3030

3131
#
32-
# Show the list of alerts
32+
# Show the list of dashboards
3333
#
3434
if res[0]:
3535
data = res[1]

sdcclient/_client.py

Lines changed: 32 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,26 @@ def get_alerts(self):
5555
return [False, self.lasterr]
5656
return [True, r.json()]
5757

58+
def get_notifications(self, from_ts, to_ts, state=None, resolved=None):
59+
params = {}
60+
61+
if from_ts is not None:
62+
params['from'] = from_ts * 1000000
63+
64+
if to_ts is not None:
65+
params['to'] = to_ts * 1000000
66+
67+
if state is not None:
68+
params['state'] = state
69+
70+
if resolved is not None:
71+
params['resolved'] = resolved
72+
73+
r = requests.get(self.url + '/api/notifications', headers=self.hdrs, params=params)
74+
if not self.__checkResponse(r):
75+
return [False, self.lasterr]
76+
return [True, r.json()]
77+
5878
def create_alert(self, name, description, severity, for_atleast_s, condition, segmentby=[],
5979
segment_condition='ANY', filter='', notify='', enabled=True, annotations={}):
6080
#
@@ -107,25 +127,15 @@ def create_alert(self, name, description, severity, for_atleast_s, condition, se
107127
return [False, self.lasterr]
108128
return [True, r.json()]
109129

110-
def delete_alert(self, name):
111-
r = requests.get(self.url + '/api/alerts', headers=self.hdrs)
130+
def delete_alert(self, alert):
131+
if 'id' not in alert:
132+
return [False, "Invalid alert format"]
133+
134+
r = requests.delete(self.url + '/api/alerts/' + str(alert['id']), headers=self.hdrs)
112135
if not self.__checkResponse(r):
113136
return [False, self.lasterr]
114-
j = r.json()
115-
116-
deleted = 0
117137

118-
for db in j['alerts']:
119-
if 'name' in db:
120-
if db['name'] == name:
121-
r = requests.delete(self.url + '/api/alerts/' + str(db['id']), headers=self.hdrs)
122-
if not self.__checkResponse(r):
123-
return [False, self.lasterr]
124-
deleted += 1
125-
126-
if deleted == 0:
127-
return [False, "alert not found"]
128-
return [True, "alerts deleted: " + str(deleted)]
138+
return [True, None]
129139

130140
def get_notification_settings(self):
131141
r = requests.get(self.url + '/api/settings/notifications', headers=self.hdrs)
@@ -468,34 +478,16 @@ def create_dashboard_from_file(self, newdashname, filename, scope):
468478
#
469479
self.create_dashboard_from_template(newdashname, dboard, scope)
470480

471-
def delete_dashboard(self, dashname):
472-
r = requests.get(self.url + '/ui/dashboards', headers=self.hdrs)
481+
def delete_dashboard(self, dashboard):
482+
if 'id' not in dashboard:
483+
return [False, "Invalid dashboard format"]
484+
485+
r = requests.delete(self.url + '/ui/dashboards/' + str(dashboard['id']), headers=self.hdrs)
473486
if not self.__checkResponse(r):
474487
return [False, self.lasterr]
475488

476-
j = r.json()
477-
478-
deleted = 0
489+
return [True, None]
479490

480-
for db in j['dashboards']:
481-
if db['name'] == dashname:
482-
r = requests.delete(self.url + '/ui/dashboards/' + str(db['id']), headers=self.hdrs)
483-
if not self.__checkResponse(r):
484-
return [False, self.lasterr]
485-
deleted += 1
486-
487-
if deleted == 0:
488-
return [False, "dashboard not found"]
489-
return [True, "dashboards deleted: " + str(deleted)]
490-
491-
'''
492-
Annotations format:
493-
494-
"annotations": {
495-
"key1": "value1",
496-
"key2": "value2",
497-
"key3": "value3"}
498-
'''
499491
def post_event(self, name, description=None, severity=6, host=None, tags=None):
500492
edata = {
501493
'event': {

0 commit comments

Comments
 (0)