Skip to content

Commit 61584e3

Browse files
committed
add events function
return the latest 3000 events
1 parent b1e6453 commit 61584e3

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

ubiquiti/unifi.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,49 @@ def info(self) -> dict:
154154
data = r.json()['data']
155155

156156
return data[0]
157+
158+
def events(self, filters: Dict[str, Union[str, Pattern]]=None, order_by: str=None) -> list:
159+
"""
160+
List site events.
161+
162+
:param filters: dict of k/v pairs; string is compiled to regex
163+
:param order_by: order by a key; defaults to '_id'
164+
:return: A list of events as dicts (see below for sample keys)
165+
app_proto
166+
datetime
167+
dest_ip
168+
dest_port
169+
event_type
170+
host
171+
key
172+
msg
173+
proto
174+
site_id
175+
src_ip
176+
src_mac
177+
src_port
178+
srcipCountry
179+
subsystem
180+
time
181+
"""
182+
r = self._session.get("{}/api/s/{}/stat/event".format(self._baseurl, self._site, verify=self._verify_ssl), data="json={}")
183+
self._current_status_code = r.status_code
184+
185+
if self._current_status_code == 401:
186+
raise LoggedInException("Invalid login, or login has expired")
187+
188+
data = r.json()['data']
189+
190+
if filters:
191+
for term, value in filters.items():
192+
value_re = value if isinstance(value, Pattern) else re.compile(value)
193+
194+
data = [x for x in data if term in x.keys() and re.fullmatch(value_re, x[term])]
195+
196+
if order_by:
197+
data = sorted(data, key=lambda x: x[order_by] if order_by in x.keys() else x['_id'])
198+
199+
return data
157200
if self._current_status_code == 401:
158201
raise LoggedInException("Invalid login, or login has expired")
159202

0 commit comments

Comments
 (0)