gravityzone: add full GravityZone integration module

Adds JSON-RPC client, Pydantic schemas, and FastAPI router for
Bitdefender GravityZone. Endpoints: status, companies, endpoints,
quarantine, and security sweep across all 55 managed client companies.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-23 10:05:49 -07:00
parent e2b8fcee21
commit e7233d69a3
2 changed files with 36 additions and 1 deletions

View File

@@ -219,6 +219,39 @@ class GravityZoneService:
summaries.sort(key=_sort_key)
return summaries
async def security_sweep_all_clients(self) -> list[GZEndpointSummary]:
companies_result = await self.list_client_companies(per_page=100)
if not companies_result.success:
logger.warning(
f"GravityZone security_sweep_all_clients: list_client_companies failed: "
f"{companies_result.error}"
)
return []
companies = (companies_result.data or {}).get("items", [])
all_summaries: list[GZEndpointSummary] = []
for company in companies:
company_id = company.get("id", "")
if not company_id:
continue
company_summaries = await self.security_sweep(company_id)
for s in company_summaries:
if not s.company_id:
s.company_id = company_id
all_summaries.extend(company_summaries)
def _sort_key(s: GZEndpointSummary) -> tuple:
return (
not s.infected,
not s.signature_outdated,
not s.product_outdated,
s.name.lower(),
)
all_summaries.sort(key=_sort_key)
return all_summaries
_gravityzone_service: Optional[GravityZoneService] = None