@startuml actor "USER" as actor participant "OSOM" as osom participant "TMF API" as tmf_api queue "Message Bus" as amq participant "METRICO" as metrico participant Prometheus as prom actor -> tmf_api: Create Service Order Monitoring aaS osom -> osom: Process order osom -> tmf_api: Create Service instance of monitoring aaS (CFS) (Initial Status: Reserved) osom -> tmf_api: Create Service instance of monitoring aaS (RFS) (Initial Status: Reserved) osom -> amq: Create Resource Message \njms:queue:CATALOG.ADD.RESOURCE \npayload: Status = "Reserved" & Characteristic _MT_MCJ_REF = "PENDING" amq -> tmf_api: LISTENS FOR: Create Resource Message \njms:queue:CATALOG.ADD.RESOURCE tmf_api -> tmf_api: Create Resource tmf_api --> amq: RESPONSE: Resource amq --> osom: RESPONSE: Resource osom -> amq: Create TMF628 Measurement Collection Job Message \njms:queue:PM.MEASUREMENTCOLLECTIONJOB.ADD \npayload: MeasurementCollectionJobFVO amq -> tmf_api: LISTENS FOR: Create TMF628 Measurement Collection Job Message \njms:queue:PM.MEASUREMENTCOLLECTIONJOB.ADD tmf_api -> tmf_api: Create Measurement Collection Job (MCJ) tmf_api -> amq: Publish Measurement Collection Job Creation Event\njms:topic:EVENT.MEASUREMENTCOLLECTIONJOB.CREATE\npayload: Measurement Collection Job Ref tmf_api --> amq: RESPONSE: Create TMF628 Measurement Collection Job Message \njms:queue:PM.MEASUREMENTCOLLECTIONJOB.ADD \npayload: MeasurementCollectionJob (Includes MCJ ID) amq --> osom: RESPONSE: MeasurementCollectionJob osom -> tmf_api: Update RFS \n(Characteristic _MT_MCJ_REFID = MCJ ID) \n(associate with RFS) amq -> metrico: LISTENS FOR: Measurement Collection Job Creation Event\njms:topic:EVENT.MEASUREMENTCOLLECTIONJOB.CREATE\npayload: Measurement Collection Job Ref metrico -> amq: Retrieve Measurement Collection Job by ID\njms:queue:PM.MEASUREMENTCOLLECTIONJOB.GET_BY_ID\npayload: Measurement Collection Job ID amq -> tmf_api: LISTENS FOR: Retrieve Measurement Collection Job by ID\njms:queue:PM.MEASUREMENTCOLLECTIONJOB.GET_BY_ID tmf_api --> amq: RESPONSE: Measurement Collection Job amq --> metrico: RESPONSE: Measurement Collection Job metrico -> metrico: create METRICO job from Measurement\nCollection Job and get its state metrico -> amq: Update Measurement Collection Job Message \njms:queue:PM.MEASUREMENTCOLLECTIONJOB.UPDATE\npayload: Measure Collection Job (update execution state) amq -> tmf_api: LISTENS FOR: Update Measurement Collection Job Message \njms:queue:PM.MEASUREMENTCOLLECTIONJOB.UPDATE metrico -> amq: Retrieve Service by ID Message\njms:queue:CATALOG.GET.SERVICE\npayload: MCJ Producing Application ID (RFS ID) amq -> tmf_api: LISTENS FOR: Retrieve Service by ID Message\njms:queue:CATALOG.GET.SERVICE tmf_api --> amq: RESPONSE: Service (RFS with related Resource) amq --> metrico: RESPONSE: Service (RFS with related Resource) metrico -> amq: Update Resource Message\njms:queue:CATALOG.UPD.RESOURCE\npayload: Characteristic _MT_MCJ_REF = MCJ ID \n& Status = "AVAILABLE" amq -> tmf_api: LISTENS FOR: Update Resource Message\njms:queue:CATALOG.UPD.RESOURCE tmf_api --> amq: RESPONSE: Updated Resource amq --> metrico: RESPONSE: Updated Resource group "METRICO job" metrico -> metrico : Set job schedule and interval metrico -> prom : Send Prometheus query prom --> metrico : Prometheus response metrico -> amq : Update Service Message\njms:queue:CATALOG.UPD.SERVICE \npayload: Characteristic named MCJ.outputFormat \nis updated with Prometheus response amq -> tmf_api: LISTENS FOR: Update Service Message\njms:queue:CATALOG.UPD.SERVICE end tmf_api -> actor: Retrieve Monitoring data from the updated Service @enduml