11import json
2+ from datetime import datetime
23
34from sdcclient ._common import _SdcCommon
45
@@ -8,7 +9,8 @@ def __init__(self, token="", sdc_url='https://app.sysdigcloud.com', ssl_verify=T
89 super ().__init__ (token , sdc_url , ssl_verify , custom_headers )
910 self .product = "SDC"
1011
11- def get_events (self , name = None , category = None , direction = 'before' , status = None , limit = 100 , pivot = None ):
12+ def get_events (self , name = None , category = None , direction = 'before' , status = None , limit = 100 , pivot = None , from_s = None ,
13+ to_s = None ):
1214 '''**Description**
1315 Returns the list of Sysdig Monitor events.
1416
@@ -19,6 +21,8 @@ def get_events(self, name=None, category=None, direction='before', status=None,
1921 - **status**: status of the event as list. Default: ['triggered', 'resolved', 'acknowledged', 'unacknowledged']
2022 - **limit**: max number of events to retrieve. Default: 100.
2123 - **pivot**: event id to use as pivot. Default: None.
24+ - **from_s**: the unix timestamp in milliseconds or datetime object for the beginning of the events. Default: None.
25+ - **to_s**: the unix timestamp in milliseconds or datetime object for the end of the events. Default: None.
2226
2327 **Success Return Value**
2428 A dictionary containing the list of events.
@@ -46,6 +50,18 @@ def get_events(self, name=None, category=None, direction='before', status=None,
4650 if direction not in ["before" , "after" ]:
4751 return False , "Invalid direction '{}', must be either 'before' or 'after'" .format (direction )
4852
53+ if from_s is not None and isinstance (from_s , datetime ):
54+ from_s = int (from_s .timestamp () * 1000 )
55+ if to_s is not None and isinstance (to_s , datetime ):
56+ to_s = int (to_s .timestamp () * 1000 )
57+
58+ if to_s is None and from_s is not None or from_s is None and to_s is not None :
59+ return False , "only one of 'from_s' or 'to_s' has been specified, both are required when filtering by time"
60+
61+ if to_s is not None and from_s is not None :
62+ if int (to_s ) < int (from_s ):
63+ return False , "'from_s' must be lower than 'to_s'"
64+
4965 options = {
5066 'alertStatus' : status ,
5167 'category' : ',' .join (category ),
@@ -56,6 +72,8 @@ def get_events(self, name=None, category=None, direction='before', status=None,
5672 'limit' : str (limit ),
5773 'pivot' : pivot ,
5874 'filter' : name ,
75+ 'from' : from_s ,
76+ 'to' : to_s ,
5977 }
6078 params = {k : v for k , v in options .items () if v is not None }
6179 res = self .http .get (self .url + '/api/v2/events/' , headers = self .hdrs , params = params , verify = self .ssl_verify )
@@ -78,7 +96,7 @@ def delete_event(self, event):
7896 return [False , "Invalid event format" ]
7997
8098 res = self .http .delete (self .url + '/api/v2/events/' + str (event ['id' ]), headers = self .hdrs ,
81- verify = self .ssl_verify )
99+ verify = self .ssl_verify )
82100 if not self ._checkResponse (res ):
83101 return [False , self .lasterr ]
84102 return [True , None ]
@@ -112,5 +130,5 @@ def post_event(self, name, description=None, severity=None, event_filter=None, t
112130 'event' : {k : v for k , v in options .items () if v is not None }
113131 }
114132 res = self .http .post (self .url + '/api/v2/events/' , headers = self .hdrs , data = json .dumps (edata ),
115- verify = self .ssl_verify )
133+ verify = self .ssl_verify )
116134 return self ._request_result (res )
0 commit comments