Commit d8e6fff7 authored by George Papathanail's avatar George Papathanail
Browse files

feat(traffic): add SRM network-capability command shapes , new domain/traffic_influence.py

parent f838f578
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -7,6 +7,8 @@ class OperationType(StrEnum):
    TERMINATE = "terminate"
    NETWORK_CAPABILITY = "network_capability"
    NETWORK_CAPABILITY_DEACTIVATE = "network_capability_deactivate"
    TRAFFIC_INFLUENCE = "traffic_influence"
    TRAFFIC_INFLUENCE_DEACTIVATE = "traffic_influence_deactivate"


class OperationStatus(StrEnum):
+71 −0
Original line number Diff line number Diff line
from __future__ import annotations

from enum import StrEnum

from pydantic import BaseModel


class Subject(StrEnum):
    # Same bus subjects QoD uses (srm/interface-contract.md B.5: "generic for
    # async lifecycle/session capabilities") — a separate enum per domain, not
    # a shared one, matches how domain/quality_on_demand.py is structured.
    TASK_ACTIVATE = "command.srm.network.capability.activate"
    TASK_DEACTIVATE = "command.srm.network.capability.deactivate"
    OPERATION_COMPLETED = "event.srm.operation.completed"


class NetworkCapabilityTargetApplicationReference(BaseModel):
    external_app_id: str


class NetworkCapabilityTarget(BaseModel):
    application_reference: NetworkCapabilityTargetApplicationReference


class TrafficFilter(BaseModel):
    port: int | None = None
    protocol: str | None = None


class TrafficFilters(BaseModel):
    source: TrafficFilter | None = None
    destination: TrafficFilter | None = None


class NetworkCapabilityParameters(BaseModel):
    traffic_filters: TrafficFilters


class NetworkCapabilityPayload(BaseModel):
    capability_type: str = "traffic_influence"
    target: NetworkCapabilityTarget
    parameters: NetworkCapabilityParameters


class SRMNetworkCapabilityActivateCommand(BaseModel):
    schema_version: str = "1.0"
    operation_id: str
    correlation_id: str
    requested_at: str
    app_provider_id: str
    source: str = "nbi_camara"
    service_specification_id: str
    resource_zone_id: str | None = None
    network_domain_id: str | None = None
    network_capability: NetworkCapabilityPayload


class NetworkCapabilityDeactivateTarget(BaseModel):
    capability_type: str = "traffic_influence"
    external_ref: str
    grace_period_seconds: int = 0


class SRMNetworkCapabilityDeactivateCommand(BaseModel):
    schema_version: str = "1.0"
    operation_id: str
    correlation_id: str
    requested_at: str
    app_provider_id: str
    source: str = "nbi_camara"
    network_capability: NetworkCapabilityDeactivateTarget