Commit 86306f5f authored by Dimitrios Gogos's avatar Dimitrios Gogos
Browse files

fix: streamline logging and enhance NetworkCapability handling in QoD service

parent cd6927e6
Loading
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -308,9 +308,7 @@ class QualityOnDemandService:

        qod_session = await self._qod_session_repo.get_by_id(UUID(session_id_raw))
        if qod_session is None:
            logger.warning(
                "deactivate_completed_for_unknown_session", session_id=session_id_raw
            )
            logger.warning("deactivate_completed_for_unknown_session", session_id=session_id_raw)
            return

        terminal_state = (
@@ -382,7 +380,7 @@ class QualityOnDemandService:
            raise RuntimeError("Operation/QodSession repositories are not available")

        qod_session = await self._qod_session_repo.get_by_id(UUID(session_id))
        if qod_session is None:
        if qod_session is None or qod_session.state in _TERMINAL_STATES:
            raise NotFoundException(message=f"Session {session_id} not found")

        operation_id, correlation_id, requested_at = self._new_operation_metadata(x_correlator)
+7 −1
Original line number Diff line number Diff line
@@ -75,6 +75,12 @@ class SRMNetworkCapabilityDeactivateCommand(BaseModel):
    network_capability: NetworkCapabilityDeactivateTarget


class NetworkCapabilityParametersSnapshot(BaseModel):
    schema_version: str | None = None
    target: NetworkCapabilityTarget
    parameters: dict[str, Any] = Field(default_factory=dict)


class SRMNetworkCapability(BaseModel):
    service_instance_id: str
    capability_type: str
@@ -82,7 +88,7 @@ class SRMNetworkCapability(BaseModel):
    zone_id: str | None = None
    app_provider_id: str
    external_ref: str | None = None
    parameters_snapshot: NetworkCapabilityPayload
    parameters_snapshot: NetworkCapabilityParametersSnapshot
    result_summary: dict[str, Any] | None = None
    created_at: str | None = None
    updated_at: str | None = None
+1 −3
Original line number Diff line number Diff line
@@ -175,9 +175,7 @@ async def default_lifespan(app: FastAPI) -> AsyncGenerator[None, None]:
        logger.warning(
            "qod_service_specification_id_defaulted",
            service_specification_id=str(settings.qod_settings.service_specification_id),
            detail=(
                "QOD_SETTINGS__SERVICE_SPECIFICATION_ID is unset; using a hardcoded id."
            ),
            detail=("QOD_SETTINGS__SERVICE_SPECIFICATION_ID is unset; using a hardcoded id."),
        )
    else:
        logger.info(
+10 −8
Original line number Diff line number Diff line
@@ -56,7 +56,8 @@ from open_exposure_gateway.domain.models import (
    QodSession,
)
from open_exposure_gateway.domain.quality_on_demand import (
    NetworkCapabilityPayload,
    NetworkCapabilityParametersSnapshot,
    NetworkCapabilityTarget,
    QosStatusChangedCloudEvent,
    SRMNetworkCapability,
)
@@ -247,22 +248,23 @@ def wire_srm_worker(bus: FakeDataBus, srm: FakeSRMClient) -> None:

    async def on_qod_activate(command: dict[str, Any]) -> None:
        service_instance_id = command["service_instance_id"]
        payload = command["network_capability"]
        srm.network_capabilities[service_instance_id] = SRMNetworkCapability(
            service_instance_id=service_instance_id,
            capability_type=command["network_capability"]["capability_type"],
            capability_type=payload["capability_type"],
            state="active",
            zone_id=command.get("zone_id"),
            app_provider_id=command["app_provider_id"],
            parameters_snapshot=NetworkCapabilityPayload.model_validate(
                command["network_capability"]
            parameters_snapshot=NetworkCapabilityParametersSnapshot(
                schema_version="srm.params/v1",
                target=NetworkCapabilityTarget.model_validate(payload["target"]),
                parameters={**payload["parameters"], "profile_ref": payload["profile_ref"]},
            ),
        )

    async def on_qod_deactivate(command: dict[str, Any]) -> None:
        external_ref = command["network_capability"]["external_ref"]
        for key, capability in list(srm.network_capabilities.items()):
            if capability.external_ref == external_ref:
                del srm.network_capabilities[key]
        service_instance_id = command["network_capability"]["service_instance_id"]
        srm.network_capabilities.pop(service_instance_id, None)

    bus.subscribe(Subject.TASK_DEPLOY, on_deploy)
    bus.subscribe(Subject.TASK_TERMINATE, on_terminate)
+1 −3
Original line number Diff line number Diff line
@@ -195,9 +195,7 @@ class TestQodSessionFlow:
        command = SRMNetworkCapabilityDeactivateCommand.model_validate(deactivates[0])
        assert command.network_capability.service_instance_id == session_id

    def test_get_session_returns_404_after_delete_requested(
        self, api_client: TestClient
    ) -> None:
    def test_get_session_returns_404_after_delete_requested(self, api_client: TestClient) -> None:
        session_id = api_client.post(f"{QOD_BASE}/sessions", json=SESSION_BODY).json()["sessionId"]
        api_client.delete(f"{QOD_BASE}/sessions/{session_id}")

Loading