Source code for netbird.resources.events
"""
Events resource handler for NetBird API.
"""
from typing import Any, Dict, List, Optional
from .base import BaseResource
[docs]
class EventsResource(BaseResource):
"""Handler for NetBird events API endpoints.
Provides methods to retrieve audit events and network traffic events.
"""
[docs]
def get_audit_events(self) -> List[Dict[str, Any]]:
"""Retrieve all audit events.
Returns:
List of audit event dictionaries
Example:
>>> events = client.events.get_audit_events()
>>> for event in events:
... print(f"{event['timestamp']}: {event['activity']}")
"""
data = self.client.get("events/audit")
return self._parse_list_response(data)
[docs]
def get_network_traffic_events(
self,
page: Optional[int] = None,
page_size: Optional[int] = None,
user_id: Optional[str] = None,
reporter_id: Optional[str] = None,
protocol: Optional[str] = None,
event_type: Optional[str] = None,
connection_type: Optional[str] = None,
direction: Optional[str] = None,
search: Optional[str] = None,
start_date: Optional[str] = None,
end_date: Optional[str] = None,
) -> List[Dict[str, Any]]:
"""Retrieve network traffic events with optional filtering.
This endpoint is marked as "cloud-only experimental" in the API.
Args:
page: Page number for pagination
page_size: Number of events per page
user_id: Filter by user ID
reporter_id: Filter by reporter peer ID
protocol: Filter by protocol (tcp, udp, icmp)
event_type: Filter by event type
connection_type: Filter by connection type (relay, p2p)
direction: Filter by traffic direction (sent, received)
search: Search term
start_date: Start date filter
end_date: End date filter
Returns:
List of network traffic event dictionaries
Example:
>>> # Get all traffic events
>>> events = client.events.get_network_traffic_events()
>>>
>>> # Filter by protocol and user
>>> events = client.events.get_network_traffic_events(
... protocol="tcp",
... user_id="user-123",
... page_size=50
... )
"""
params: Dict[str, Any] = {}
if page is not None:
params["page"] = page
if page_size is not None:
params["page_size"] = page_size
if user_id:
params["user_id"] = user_id
if reporter_id:
params["reporter_id"] = reporter_id
if protocol:
params["protocol"] = protocol
if event_type:
params["type"] = event_type
if connection_type:
params["connection_type"] = connection_type
if direction:
params["direction"] = direction
if search:
params["search"] = search
if start_date:
params["start_date"] = start_date
if end_date:
params["end_date"] = end_date
data = self.client.get("events/network-traffic", params=params or None)
return self._parse_list_response(data)
[docs]
def get_proxy_events(
self,
page: Optional[int] = None,
page_size: Optional[int] = None,
sort_by: Optional[str] = None,
sort_order: Optional[str] = None,
search: Optional[str] = None,
source_ip: Optional[str] = None,
host: Optional[str] = None,
path: Optional[str] = None,
user_id: Optional[str] = None,
user_email: Optional[str] = None,
user_name: Optional[str] = None,
method: Optional[str] = None,
status: Optional[str] = None,
status_code: Optional[int] = None,
start_date: Optional[str] = None,
end_date: Optional[str] = None,
) -> List[Dict[str, Any]]:
"""Retrieve reverse proxy access log events.
Args:
page: Page number for pagination
page_size: Number of events per page
sort_by: Sort field
sort_order: Sort direction
search: Search term
source_ip: Filter by source IP
host: Filter by host
path: Filter by path
user_id: Filter by user ID
user_email: Filter by user email
user_name: Filter by user name
method: Filter by HTTP method
status: Filter by status
status_code: Filter by status code
start_date: Start date filter (RFC3339)
end_date: End date filter (RFC3339)
Returns:
List of proxy event dictionaries
"""
params: Dict[str, Any] = {}
if page is not None:
params["page"] = page
if page_size is not None:
params["page_size"] = page_size
if sort_by:
params["sort_by"] = sort_by
if sort_order:
params["sort_order"] = sort_order
if search:
params["search"] = search
if source_ip:
params["source_ip"] = source_ip
if host:
params["host"] = host
if path:
params["path"] = path
if user_id:
params["user_id"] = user_id
if user_email:
params["user_email"] = user_email
if user_name:
params["user_name"] = user_name
if method:
params["method"] = method
if status:
params["status"] = status
if status_code is not None:
params["status_code"] = status_code
if start_date:
params["start_date"] = start_date
if end_date:
params["end_date"] = end_date
data = self.client.get("events/proxy", params=params or None)
return self._parse_list_response(data)