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

feat(traffic-influence): add CAMARA -> SRM activate/deactivate mapper

build_activate_command() maps appId -> target.application_reference,
source/destination traffic filters -> parameters.traffic_filters, per
srm/canonical-parameters-schema.md. resource_zone_id is a plain
pre-resolved parameter here (not looked up by the mapper itself) -- the
service resolves edgeCloudZoneId/edgeCloudRegion to a zone before
calling this, keeping the mapper a pure function like
quality_on_demand_mapper.py's build_activate_command.

build_deactivate_command() mirrors QoD's shape exactly, keyed on the
stored external_ref.
parent 94438c55
Loading
Loading
Loading
Loading
+76 −0
Original line number Diff line number Diff line
from uuid import UUID

from open_exposure_gateway.api.camara.traffic_influence.vwip.schemas import PostTrafficInfluence
from open_exposure_gateway.domain.traffic_influence import (
    NetworkCapabilityDeactivateTarget,
    NetworkCapabilityParameters,
    NetworkCapabilityPayload,
    NetworkCapabilityTarget,
    NetworkCapabilityTargetApplicationReference,
    SRMNetworkCapabilityActivateCommand,
    SRMNetworkCapabilityDeactivateCommand,
    TrafficFilter,
    TrafficFilters,
)


def build_activate_command(
    request: PostTrafficInfluence,
    operation_id: UUID,
    correlation_id: str,
    requested_at: str,
    service_specification_id: UUID,
    app_provider_id: str,
    resource_zone_id: str | None,
) -> SRMNetworkCapabilityActivateCommand:
    source_filter = request.sourceTrafficFilters
    destination_filter = request.destinationTrafficFilters

    target = NetworkCapabilityTarget(
        application_reference=NetworkCapabilityTargetApplicationReference(
            external_app_id=str(request.appId),
        ),
    )

    return SRMNetworkCapabilityActivateCommand(
        operation_id=str(operation_id),
        correlation_id=correlation_id,
        requested_at=requested_at,
        app_provider_id=app_provider_id,
        service_specification_id=str(service_specification_id),
        resource_zone_id=resource_zone_id,
        network_capability=NetworkCapabilityPayload(
            target=target,
            parameters=NetworkCapabilityParameters(
                traffic_filters=TrafficFilters(
                    source=TrafficFilter(port=source_filter.sourcePort) if source_filter else None,
                    destination=TrafficFilter(
                        port=destination_filter.destinationPort,
                        protocol=destination_filter.destinationProtocol,
                    )
                    if destination_filter
                    else None,
                ),
            ),
        ),
    )


def build_deactivate_command(
    external_ref: str,
    operation_id: UUID,
    correlation_id: str,
    requested_at: str,
    app_provider_id: str,
    grace_period_seconds: int = 0,
) -> SRMNetworkCapabilityDeactivateCommand:
    return SRMNetworkCapabilityDeactivateCommand(
        operation_id=str(operation_id),
        correlation_id=correlation_id,
        requested_at=requested_at,
        app_provider_id=app_provider_id,
        network_capability=NetworkCapabilityDeactivateTarget(
            external_ref=external_ref,
            grace_period_seconds=grace_period_seconds,
        ),
    )