Extract agent protocol models
This commit is contained in:
@@ -0,0 +1,144 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
|
from api_server.import_source_models import ImportMode, ImportSourceKind
|
||||||
|
|
||||||
|
|
||||||
|
class AgentImportJobStatus(str, Enum):
|
||||||
|
QUEUED = "QUEUED"
|
||||||
|
RUNNING = "RUNNING"
|
||||||
|
SUCCEEDED = "SUCCEEDED"
|
||||||
|
FAILED = "FAILED"
|
||||||
|
CANCELLED = "CANCELLED"
|
||||||
|
|
||||||
|
|
||||||
|
class AgentImportJobRequest(BaseModel):
|
||||||
|
agent_id: str
|
||||||
|
source: ImportSourceKind
|
||||||
|
local_path: str | None = None
|
||||||
|
bin_path: str | None = None
|
||||||
|
infobase: str | None = None
|
||||||
|
credentials_ref: str | None = None
|
||||||
|
mode: ImportMode = ImportMode.FULL_REPLACE
|
||||||
|
metadata: dict = Field(default_factory=dict)
|
||||||
|
|
||||||
|
|
||||||
|
class AgentImportJob(BaseModel):
|
||||||
|
job_id: str
|
||||||
|
project_id: str
|
||||||
|
agent_id: str
|
||||||
|
source: ImportSourceKind
|
||||||
|
mode: ImportMode = ImportMode.FULL_REPLACE
|
||||||
|
status: AgentImportJobStatus = AgentImportJobStatus.QUEUED
|
||||||
|
local_path: str | None = None
|
||||||
|
bin_path: str | None = None
|
||||||
|
infobase: str | None = None
|
||||||
|
credentials_ref: str | None = None
|
||||||
|
metadata: dict = Field(default_factory=dict)
|
||||||
|
created_at: str
|
||||||
|
updated_at: str
|
||||||
|
claimed_at: str | None = None
|
||||||
|
completed_at: str | None = None
|
||||||
|
server_path: str | None = None
|
||||||
|
logs: list[str] = Field(default_factory=list)
|
||||||
|
error: str | None = None
|
||||||
|
import_summary: dict | None = None
|
||||||
|
|
||||||
|
|
||||||
|
class AgentImportJobResult(BaseModel):
|
||||||
|
status: AgentImportJobStatus = AgentImportJobStatus.SUCCEEDED
|
||||||
|
server_path: str | None = None
|
||||||
|
logs: list[str] = Field(default_factory=list)
|
||||||
|
error: str | None = None
|
||||||
|
metadata: dict = Field(default_factory=dict)
|
||||||
|
|
||||||
|
|
||||||
|
class AgentImportJobLogRequest(BaseModel):
|
||||||
|
logs: list[str] = Field(default_factory=list)
|
||||||
|
status: AgentImportJobStatus | None = None
|
||||||
|
|
||||||
|
|
||||||
|
class AgentBrowseRequestStatus(str, Enum):
|
||||||
|
QUEUED = "QUEUED"
|
||||||
|
RUNNING = "RUNNING"
|
||||||
|
SUCCEEDED = "SUCCEEDED"
|
||||||
|
FAILED = "FAILED"
|
||||||
|
|
||||||
|
|
||||||
|
class AgentBrowseRequestCreate(BaseModel):
|
||||||
|
agent_id: str
|
||||||
|
path: str | None = None
|
||||||
|
|
||||||
|
|
||||||
|
class AgentFolderEntry(BaseModel):
|
||||||
|
name: str
|
||||||
|
path: str
|
||||||
|
is_directory: bool = True
|
||||||
|
|
||||||
|
|
||||||
|
class AgentBrowseRequest(BaseModel):
|
||||||
|
request_id: str
|
||||||
|
agent_id: str
|
||||||
|
path: str | None = None
|
||||||
|
status: AgentBrowseRequestStatus = AgentBrowseRequestStatus.QUEUED
|
||||||
|
created_at: str
|
||||||
|
updated_at: str
|
||||||
|
claimed_at: str | None = None
|
||||||
|
completed_at: str | None = None
|
||||||
|
entries: list[AgentFolderEntry] = Field(default_factory=list)
|
||||||
|
parent_path: str | None = None
|
||||||
|
error: str | None = None
|
||||||
|
|
||||||
|
|
||||||
|
class AgentBrowseResult(BaseModel):
|
||||||
|
status: AgentBrowseRequestStatus = AgentBrowseRequestStatus.SUCCEEDED
|
||||||
|
entries: list[AgentFolderEntry] = Field(default_factory=list)
|
||||||
|
parent_path: str | None = None
|
||||||
|
error: str | None = None
|
||||||
|
|
||||||
|
|
||||||
|
class AgentHeartbeatRequest(BaseModel):
|
||||||
|
agent_id: str
|
||||||
|
host: str | None = None
|
||||||
|
user: str | None = None
|
||||||
|
version: str | None = None
|
||||||
|
started_at: str | None = None
|
||||||
|
network_roots: list[str] = Field(default_factory=list)
|
||||||
|
platform_bins: list[str] = Field(default_factory=list)
|
||||||
|
|
||||||
|
|
||||||
|
class AgentStatus(BaseModel):
|
||||||
|
agent_id: str
|
||||||
|
status: str = "offline"
|
||||||
|
last_seen_at: str | None = None
|
||||||
|
host: str | None = None
|
||||||
|
user: str | None = None
|
||||||
|
version: str | None = None
|
||||||
|
started_at: str | None = None
|
||||||
|
network_roots: list[str] = Field(default_factory=list)
|
||||||
|
platform_bins: list[str] = Field(default_factory=list)
|
||||||
|
|
||||||
|
|
||||||
|
class AgentProjectConfig(BaseModel):
|
||||||
|
project_id: str
|
||||||
|
project_name: str
|
||||||
|
one_c_bin: str | None = None
|
||||||
|
edt_path: str | None = None
|
||||||
|
default_local_path: str | None = None
|
||||||
|
network_roots: list[str] = Field(default_factory=list)
|
||||||
|
|
||||||
|
|
||||||
|
class AgentConfigResponse(BaseModel):
|
||||||
|
agent_id: str
|
||||||
|
poll_seconds: int = 5
|
||||||
|
projects: list[AgentProjectConfig] = Field(default_factory=list)
|
||||||
|
|
||||||
|
|
||||||
|
class ServerBrowseResponse(BaseModel):
|
||||||
|
path: str
|
||||||
|
parent_path: str | None = None
|
||||||
|
entries: list[AgentFolderEntry] = Field(default_factory=list)
|
||||||
|
error: str | None = None
|
||||||
@@ -15,7 +15,6 @@ import zipfile
|
|||||||
import xml.etree.ElementTree as ET
|
import xml.etree.ElementTree as ET
|
||||||
from collections import Counter
|
from collections import Counter
|
||||||
from difflib import SequenceMatcher
|
from difflib import SequenceMatcher
|
||||||
from enum import Enum
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Callable
|
from typing import Any, Callable
|
||||||
from urllib.parse import quote, urljoin, urlsplit, urlunsplit
|
from urllib.parse import quote, urljoin, urlsplit, urlunsplit
|
||||||
@@ -36,6 +35,23 @@ from fastapi.responses import PlainTextResponse, Response, StreamingResponse
|
|||||||
from neo4j import AsyncGraphDatabase
|
from neo4j import AsyncGraphDatabase
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
|
|
||||||
|
from api_server.agent_models import (
|
||||||
|
AgentBrowseRequest,
|
||||||
|
AgentBrowseRequestCreate,
|
||||||
|
AgentBrowseRequestStatus,
|
||||||
|
AgentBrowseResult,
|
||||||
|
AgentConfigResponse,
|
||||||
|
AgentFolderEntry,
|
||||||
|
AgentHeartbeatRequest,
|
||||||
|
AgentImportJob,
|
||||||
|
AgentImportJobLogRequest,
|
||||||
|
AgentImportJobRequest,
|
||||||
|
AgentImportJobResult,
|
||||||
|
AgentImportJobStatus,
|
||||||
|
AgentProjectConfig,
|
||||||
|
AgentStatus,
|
||||||
|
ServerBrowseResponse,
|
||||||
|
)
|
||||||
from api_server.html5_forms import (
|
from api_server.html5_forms import (
|
||||||
html5_form_data as _html5_form_data,
|
html5_form_data as _html5_form_data,
|
||||||
)
|
)
|
||||||
@@ -324,143 +340,6 @@ _MODULE_OWNER_NODE_KINDS = {
|
|||||||
if _EVENT_SUBSCRIPTION_KIND is not None:
|
if _EVENT_SUBSCRIPTION_KIND is not None:
|
||||||
_MODULE_OWNER_NODE_KINDS.add(_EVENT_SUBSCRIPTION_KIND)
|
_MODULE_OWNER_NODE_KINDS.add(_EVENT_SUBSCRIPTION_KIND)
|
||||||
|
|
||||||
class AgentImportJobStatus(str, Enum):
|
|
||||||
QUEUED = "QUEUED"
|
|
||||||
RUNNING = "RUNNING"
|
|
||||||
SUCCEEDED = "SUCCEEDED"
|
|
||||||
FAILED = "FAILED"
|
|
||||||
CANCELLED = "CANCELLED"
|
|
||||||
|
|
||||||
|
|
||||||
class AgentImportJobRequest(BaseModel):
|
|
||||||
agent_id: str
|
|
||||||
source: ImportSourceKind
|
|
||||||
local_path: str | None = None
|
|
||||||
bin_path: str | None = None
|
|
||||||
infobase: str | None = None
|
|
||||||
credentials_ref: str | None = None
|
|
||||||
mode: ImportMode = ImportMode.FULL_REPLACE
|
|
||||||
metadata: dict = Field(default_factory=dict)
|
|
||||||
|
|
||||||
|
|
||||||
class AgentImportJob(BaseModel):
|
|
||||||
job_id: str
|
|
||||||
project_id: str
|
|
||||||
agent_id: str
|
|
||||||
source: ImportSourceKind
|
|
||||||
mode: ImportMode = ImportMode.FULL_REPLACE
|
|
||||||
status: AgentImportJobStatus = AgentImportJobStatus.QUEUED
|
|
||||||
local_path: str | None = None
|
|
||||||
bin_path: str | None = None
|
|
||||||
infobase: str | None = None
|
|
||||||
credentials_ref: str | None = None
|
|
||||||
metadata: dict = Field(default_factory=dict)
|
|
||||||
created_at: str
|
|
||||||
updated_at: str
|
|
||||||
claimed_at: str | None = None
|
|
||||||
completed_at: str | None = None
|
|
||||||
server_path: str | None = None
|
|
||||||
logs: list[str] = Field(default_factory=list)
|
|
||||||
error: str | None = None
|
|
||||||
import_summary: dict | None = None
|
|
||||||
|
|
||||||
|
|
||||||
class AgentImportJobResult(BaseModel):
|
|
||||||
status: AgentImportJobStatus = AgentImportJobStatus.SUCCEEDED
|
|
||||||
server_path: str | None = None
|
|
||||||
logs: list[str] = Field(default_factory=list)
|
|
||||||
error: str | None = None
|
|
||||||
metadata: dict = Field(default_factory=dict)
|
|
||||||
|
|
||||||
|
|
||||||
class AgentImportJobLogRequest(BaseModel):
|
|
||||||
logs: list[str] = Field(default_factory=list)
|
|
||||||
status: AgentImportJobStatus | None = None
|
|
||||||
|
|
||||||
|
|
||||||
class AgentBrowseRequestStatus(str, Enum):
|
|
||||||
QUEUED = "QUEUED"
|
|
||||||
RUNNING = "RUNNING"
|
|
||||||
SUCCEEDED = "SUCCEEDED"
|
|
||||||
FAILED = "FAILED"
|
|
||||||
|
|
||||||
|
|
||||||
class AgentBrowseRequestCreate(BaseModel):
|
|
||||||
agent_id: str
|
|
||||||
path: str | None = None
|
|
||||||
|
|
||||||
|
|
||||||
class AgentFolderEntry(BaseModel):
|
|
||||||
name: str
|
|
||||||
path: str
|
|
||||||
is_directory: bool = True
|
|
||||||
|
|
||||||
|
|
||||||
class AgentBrowseRequest(BaseModel):
|
|
||||||
request_id: str
|
|
||||||
agent_id: str
|
|
||||||
path: str | None = None
|
|
||||||
status: AgentBrowseRequestStatus = AgentBrowseRequestStatus.QUEUED
|
|
||||||
created_at: str
|
|
||||||
updated_at: str
|
|
||||||
claimed_at: str | None = None
|
|
||||||
completed_at: str | None = None
|
|
||||||
entries: list[AgentFolderEntry] = Field(default_factory=list)
|
|
||||||
parent_path: str | None = None
|
|
||||||
error: str | None = None
|
|
||||||
|
|
||||||
|
|
||||||
class AgentBrowseResult(BaseModel):
|
|
||||||
status: AgentBrowseRequestStatus = AgentBrowseRequestStatus.SUCCEEDED
|
|
||||||
entries: list[AgentFolderEntry] = Field(default_factory=list)
|
|
||||||
parent_path: str | None = None
|
|
||||||
error: str | None = None
|
|
||||||
|
|
||||||
|
|
||||||
class AgentHeartbeatRequest(BaseModel):
|
|
||||||
agent_id: str
|
|
||||||
host: str | None = None
|
|
||||||
user: str | None = None
|
|
||||||
version: str | None = None
|
|
||||||
started_at: str | None = None
|
|
||||||
network_roots: list[str] = Field(default_factory=list)
|
|
||||||
platform_bins: list[str] = Field(default_factory=list)
|
|
||||||
|
|
||||||
|
|
||||||
class AgentStatus(BaseModel):
|
|
||||||
agent_id: str
|
|
||||||
status: str = "offline"
|
|
||||||
last_seen_at: str | None = None
|
|
||||||
host: str | None = None
|
|
||||||
user: str | None = None
|
|
||||||
version: str | None = None
|
|
||||||
started_at: str | None = None
|
|
||||||
network_roots: list[str] = Field(default_factory=list)
|
|
||||||
platform_bins: list[str] = Field(default_factory=list)
|
|
||||||
|
|
||||||
|
|
||||||
class AgentProjectConfig(BaseModel):
|
|
||||||
project_id: str
|
|
||||||
project_name: str
|
|
||||||
one_c_bin: str | None = None
|
|
||||||
edt_path: str | None = None
|
|
||||||
default_local_path: str | None = None
|
|
||||||
network_roots: list[str] = Field(default_factory=list)
|
|
||||||
|
|
||||||
|
|
||||||
class AgentConfigResponse(BaseModel):
|
|
||||||
agent_id: str
|
|
||||||
poll_seconds: int = 5
|
|
||||||
projects: list[AgentProjectConfig] = Field(default_factory=list)
|
|
||||||
|
|
||||||
|
|
||||||
class ServerBrowseResponse(BaseModel):
|
|
||||||
path: str
|
|
||||||
parent_path: str | None = None
|
|
||||||
entries: list[AgentFolderEntry] = Field(default_factory=list)
|
|
||||||
error: str | None = None
|
|
||||||
|
|
||||||
|
|
||||||
class ServerSmbBrowseRequest(BaseModel):
|
class ServerSmbBrowseRequest(BaseModel):
|
||||||
path: str
|
path: str
|
||||||
username: str | None = None
|
username: str | None = None
|
||||||
|
|||||||
Reference in New Issue
Block a user