sync: auto-sync from HOWARD-HOME at 2026-06-21 10:42:33
Author: Howard Enos Machine: HOWARD-HOME Timestamp: 2026-06-21 10:42:33
This commit is contained in:
@@ -900,6 +900,127 @@ class GravityZoneClient:
|
||||
params["subscribeToEventTypes"] = subscribe_event_types
|
||||
return self._jsonrpc_request("push", "setPushEventSettings", params)
|
||||
|
||||
def send_test_push_event(self, event_type: str, extra: Optional[dict] = None) -> Any:
|
||||
"""Send a test push event (push.sendTestPushEvent). Requires `eventType`
|
||||
(verified). Fires against the configured receiver — STATE-ADJACENT, gate
|
||||
at the call site behind --confirm."""
|
||||
params: dict = {"eventType": event_type}
|
||||
if extra:
|
||||
params.update(extra)
|
||||
return self._jsonrpc_request("push", "sendTestPushEvent", params)
|
||||
|
||||
# ======================================================================
|
||||
# PACKAGES (detail) — read
|
||||
# ======================================================================
|
||||
def get_package_details(self, package_id: str) -> dict:
|
||||
"""Installation package detail (packages.getPackageDetails). `packageId`
|
||||
required (verified)."""
|
||||
return self._jsonrpc_request(
|
||||
"packages", "getPackageDetails", {"packageId": package_id}
|
||||
) or {}
|
||||
|
||||
# ======================================================================
|
||||
# REPORTS (create / delete) — getReportsList + get_report_links above
|
||||
# ======================================================================
|
||||
def create_report(self, name: str, extra: Optional[dict] = None) -> Any:
|
||||
"""Create a report (reports.createReport). `name` required (verified);
|
||||
`type`, `targetIds`, recurrence/format etc. passed via `extra`.
|
||||
STATE-CHANGING — gate at the call site behind --confirm."""
|
||||
params: dict = {"name": name}
|
||||
if extra:
|
||||
params.update(extra)
|
||||
return self._jsonrpc_request("reports", "createReport", params)
|
||||
|
||||
def delete_report(self, report_id: str) -> Any:
|
||||
"""Delete a report (reports.deleteReport). `reportId` required (verified).
|
||||
STATE-CHANGING — gate at the call site behind --confirm."""
|
||||
return self._jsonrpc_request(
|
||||
"reports", "deleteReport", {"reportId": report_id}
|
||||
)
|
||||
|
||||
# ======================================================================
|
||||
# QUARANTINE (remove / restore) — getQuarantineItemsList above
|
||||
# ======================================================================
|
||||
def remove_quarantine_items(
|
||||
self, quarantine_item_ids: list[str], extra: Optional[dict] = None
|
||||
) -> Any:
|
||||
"""Delete quarantined items (quarantine/computers.createRemoveQuarantineItemTask).
|
||||
`quarantineItemsIds` required (verified). STATE-CHANGING — gate behind --confirm."""
|
||||
params: dict = {"quarantineItemsIds": quarantine_item_ids}
|
||||
if extra:
|
||||
params.update(extra)
|
||||
return self._jsonrpc_request(
|
||||
"quarantine/computers", "createRemoveQuarantineItemTask", params
|
||||
)
|
||||
|
||||
def restore_quarantine_items(
|
||||
self, quarantine_item_ids: list[str], extra: Optional[dict] = None
|
||||
) -> Any:
|
||||
"""Restore quarantined items (quarantine/computers.createRestoreQuarantineItemTask).
|
||||
`quarantineItemsIds` required (verified). `addExclusionInPolicy` etc. via
|
||||
`extra`. STATE-CHANGING — gate behind --confirm."""
|
||||
params: dict = {"quarantineItemsIds": quarantine_item_ids}
|
||||
if extra:
|
||||
params.update(extra)
|
||||
return self._jsonrpc_request(
|
||||
"quarantine/computers", "createRestoreQuarantineItemTask", params
|
||||
)
|
||||
|
||||
# ======================================================================
|
||||
# INCIDENTS — custom rules + incident status/note (read + state-changing)
|
||||
# ======================================================================
|
||||
def list_custom_rules(self, page: int = 1, per_page: int = 100) -> dict:
|
||||
"""List EDR custom rules (incidents.getCustomRulesList). VERIFIED LIVE."""
|
||||
return self._jsonrpc_request(
|
||||
"incidents", "getCustomRulesList", {"page": page, "perPage": per_page}
|
||||
) or {}
|
||||
|
||||
def create_custom_rule(self, name: str, extra: Optional[dict] = None) -> Any:
|
||||
"""Create an EDR custom rule (incidents.createCustomRule). `name` required
|
||||
(verified); rule body (settings/companyId/tags) via `extra`.
|
||||
STATE-CHANGING — gate behind --confirm."""
|
||||
params: dict = {"name": name}
|
||||
if extra:
|
||||
params.update(extra)
|
||||
return self._jsonrpc_request("incidents", "createCustomRule", params)
|
||||
|
||||
def delete_custom_rule(self, rule_id: str) -> Any:
|
||||
"""Delete an EDR custom rule (incidents.deleteCustomRule). `ruleId` required
|
||||
(verified). STATE-CHANGING — gate behind --confirm."""
|
||||
return self._jsonrpc_request(
|
||||
"incidents", "deleteCustomRule", {"ruleId": rule_id}
|
||||
)
|
||||
|
||||
def change_incident_status(self, incident_type: str, fields: dict) -> Any:
|
||||
"""Change an incident's status (incidents.changeIncidentStatus). `type`
|
||||
required (verified) — the incident type/category — plus the incident id +
|
||||
target status in `fields`. STATE-CHANGING — gate behind --confirm."""
|
||||
params: dict = {"type": incident_type}
|
||||
params.update(fields or {})
|
||||
return self._jsonrpc_request("incidents", "changeIncidentStatus", params)
|
||||
|
||||
def update_incident_note(self, incident_type: str, fields: dict) -> Any:
|
||||
"""Update an incident note (incidents.updateIncidentNote). `type` required
|
||||
(verified) plus incident id + note text in `fields`. STATE-CHANGING."""
|
||||
params: dict = {"type": incident_type}
|
||||
params.update(fields or {})
|
||||
return self._jsonrpc_request("incidents", "updateIncidentNote", params)
|
||||
|
||||
# ======================================================================
|
||||
# LICENSING (usage) + INTEGRATIONS — read
|
||||
# ======================================================================
|
||||
def get_monthly_usage(self) -> dict:
|
||||
"""Monthly license usage (licensing.getMonthlyUsage). VERIFIED LIVE."""
|
||||
return self._jsonrpc_request("licensing", "getMonthlyUsage", {}) or {}
|
||||
|
||||
def get_configured_integrations(self, page: int = 1, per_page: int = 100) -> dict:
|
||||
"""Configured third-party integrations (integrations.getConfiguredIntegrations).
|
||||
VERIFIED LIVE."""
|
||||
return self._jsonrpc_request(
|
||||
"integrations", "getConfiguredIntegrations",
|
||||
{"page": page, "perPage": per_page},
|
||||
) or {}
|
||||
|
||||
# ======================================================================
|
||||
# CACHE LAYER (identity / structure only — never volatile status)
|
||||
# ======================================================================
|
||||
|
||||
Reference in New Issue
Block a user