main
py 76 lines 2.12 KB
Raw
1 from typing import Any
2 from typing import Dict
3 from typing import List
4 from typing import Optional
5
6 from pydantic import BaseModel
7 from pydantic import ConfigDict
8 from pydantic import Field
9
10
11 class PackageItem(BaseModel):
12 """A single package returned by the Wazuh syscollector packages endpoint."""
13
14 architecture: Optional[str] = None
15 description: Optional[str] = None
16 format: Optional[str] = None
17 name: Optional[str] = None
18 priority: Optional[str] = None
19 scan: Optional[Dict[str, Any]] = None
20 section: Optional[str] = None
21 size: Optional[int] = None
22 vendor: Optional[str] = None
23 version: Optional[str] = None
24 agent_id: Optional[str] = None
25 model_config = ConfigDict(extra="allow")
26
27
28 class AgentPackagesResponse(BaseModel):
29 """Response wrapper for an agent's syscollector packages."""
30
31 packages: List[PackageItem] = []
32 total_affected_items: int = 0
33 success: bool
34 message: str
35
36
37 # ── Wazuh Indexer (OpenSearch) package inventory models ──
38
39
40 class IndexerPackageAgent(BaseModel):
41 """Agent info nested inside a Wazuh indexer package document."""
42
43 id: Optional[str] = None
44 name: Optional[str] = None
45 version: Optional[str] = None
46
47
48 class IndexerPackageDetail(BaseModel):
49 """Package info nested inside a Wazuh indexer package document."""
50
51 architecture: Optional[str] = None
52 description: Optional[str] = None
53 name: Optional[str] = None
54 size: Optional[int] = None
55 type: Optional[str] = None
56 vendor: Optional[str] = None
57 version: Optional[str] = None
58
59
60 class IndexerPackageItem(BaseModel):
61 """A single document from ``wazuh-states-inventory-packages-*``."""
62
63 index: Optional[str] = Field(None, alias="_index")
64 id: Optional[str] = Field(None, alias="_id")
65 agent: Optional[IndexerPackageAgent] = None
66 package: Optional[IndexerPackageDetail] = None
67 model_config = ConfigDict(populate_by_name=True, extra="allow")
68
69
70 class IndexerPackagesResponse(BaseModel):
71 """Response wrapper for packages fetched from the Wazuh Indexer."""
72
73 packages: List[IndexerPackageItem] = []
74 total: int = 0
75 success: bool
76 message: str