X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=spec%2Fpm-streaming%2Fo-ran-sc-i-pm-streaming-sequence.puml;h=02ace397f8321a2f9ad374b6ab0cdcdb08056e6d;hb=8797bdff881533dcb104523873aa78aff043e59b;hp=b8222df9a3570478853535f45a2670f7fd58e261;hpb=57fee7a5fef27cdfd591a189192e170a80d3b61f;p=oam.git diff --git a/spec/pm-streaming/o-ran-sc-i-pm-streaming-sequence.puml b/spec/pm-streaming/o-ran-sc-i-pm-streaming-sequence.puml index b8222df..02ace39 100644 --- a/spec/pm-streaming/o-ran-sc-i-pm-streaming-sequence.puml +++ b/spec/pm-streaming/o-ran-sc-i-pm-streaming-sequence.puml @@ -1,29 +1,62 @@ ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -' Copyright 2021 highstreet technologies GmbH +' Copyright 2023 O-RAN-SC Projects NONRTRIC, SIM, OAM ' This work is licensed under a Creative Commons Attribution 4.0 International License. ' SPDX-License-Identifier: CC-BY-4.0 ' https://creativecommons.org/licenses/by/4.0/deed.en @startuml o-ran-sc-i-pm-streaming-sequence -title Performance Data Streaming +title + Performance Measurement Data flows + stream based and 3GPP xml file based +end title + +' format autonumber 1 1 "[00]" +hide unlinked +hide stereotype +skinparam backgroundColor #fefefe +skinparam roundcorner 15 + +skinparam participant { + BackgroundColor<< NONRTRIC >> green + FontColor<< NONRTRIC >> #eeeeee +} +skinparam database { + BackgroundColor<< NONRTRIC >> green + FontColor<< NONRTRIC >> green +} +' end format + +' the sequence diagram box "App layer" #LightBlue participant "rApp" as rApp end box +box "NONRTRIC" #GoldenRod + participant "Information Coordinator Service (DME)" as dmeICS << NONRTRIC >> +end box + +box "NONRTRIC RAN PM" #gold + participant "PM (File) Collector" as pmDFC << NONRTRIC >> + participant "PM Data Converter" as pmConvert << NONRTRIC >> + participant "PM Data Producer (Streamed)" as pmProducer << NONRTRIC >> + participant "PM Data Influx Producer/Consumer" as pmInflux << NONRTRIC >> + database "PM Datastore (S3)" as pmDb << NONRTRIC >> + database "PM Datastore (InfluxDB)" as pmDbInflux << NONRTRIC >> +end box + box "SMO OAM" #gold - participant "Message Router" as mr - database "PM Database" as pmDb + participant "Message Router / Kafka" as mr participant "PM Coordination" as pmCoord - participant "PM Collector" as pmCollect + participant "PM (Stream) Collector" as pmCollectStream #LightGreen participant "VES Collector" as ves - participant "OAM Controller" as sdnr end box -box "Network" #LightPink - participant "NetworkFunction\n2401 NTSims" as nf +box "Network Topology Simulation" #LightPink + participant "NetworkFunction\nNTSims" as nf + participant "PM File\nCreator Sim" as pmFileCreator << NONRTRIC >> end box box "Simulation" #LightBlue @@ -31,47 +64,162 @@ box "Simulation" #LightBlue end box == init == -rApp -> mr: pm data streaming subscription -mr -> pmCoord: pm data streaming subscription -pmCoord -> pmCoord: analyze subscription -nf -> ves: <> VES pnfRegistration -ves -> mr: forward VES pnfRegistration -mr -> sdnr: grep VES pnfRegistration -sdnr -> sdnr: create Mount Point -sdnr -> nf: <> establish connection -sdnr-> mr: Connected! - -== PM JOB Configuration == -mr -> pmCoord: Connection to NF established -pmCoord -> sdnr: PM Job Creation -sdnr -> nf: <> PM Job Creation -nf -> sdnr: PM Job Created\nincludes http target for stream establishment -sdnr -> pmCoord: PM Job Created +nf -> ves : <> VES pnfRegistration +ves -> mr : forward VES pnfRegistration +mr -> sdnr : grep VES pnfRegistration +sdnr -> sdnr : create Mount Point +sdnr -> nf : <> establish connection +sdnr -> mr : Connected! +mr -> pmCoord : Connection to NF established + +== Stream-based PM JOB Configuration == +alt Unmanaged PM jobs on NFs + rApp -> sdnr : configure PM data streaming subscription + sdnr -> nf : <> PM Job Creation +else Managed PM jobs on NFs + rApp -> pmCoord : configure PM data streaming subscription + pmCoord -> pmCoord : analyze subscription + pmCoord -> sdnr : PM Job Creation + sdnr -> nf : <> PM Job Creation +end +nf -> sdnr : PM Job Created\nincludes http target for stream establishment +sdnr -> pmCoord : PM Job Created == PM Data Streaming == -nf -> pmCollect : <> establish Streaming Connection \nincludes mapping from streamId to jobId -pmCollect -> nf : <> Connection Established returns ConnectionId (wss:url) +nf -> pmCollectStream : <> establish Streaming Connection \nincludes mapping from streamId to jobId +pmCollectStream -> nf : <> Connection Established returns ConnectionId (wss:url) +trigger -> sdnr : <> Trigger PM stream (Periodic?),\nwhen UEs are entering, leaving the cell +note left of nf : PM reporting happens continuously/periodically, not triggered by specific events ? +loop while PM job is active in NF + sdnr -> nf : <> trigger + note left of nf : PM reporting happens continuously/periodically. Not sure what is this trigger ? + nf -> pmCollectStream : <> report PM data via stream unit (wss:url) + pmCollectStream -> pmDb : store pm data (3GPP-XMLformat) + pmCollectStream -> mr : PM Data (raw) available +end -loop while performance job is active - trigger -> sdnr: <> Trigger PM stream,\nwhen UEs are entering, leaving the cell - sdnr -> nf: <> trigger - nf -> pmCollect : <> report PM data via stream unit (wss:url) - pmCollect -> pmCollect: convert GPB into json (or SQL) - pmCollect -> pmDb: store pm data - pmCollect -> mr: inform about new pm data (don't send data - to be discussed)\n{jobId,sender,pm-database-query-command} - mr -> rApp: new PM data available! - rApp -> pmDb: GET new (filtered) PM data - rApp <- pmDb: send new (filtered) PM data +== File-based PM Job Configuration == +alt Unmanaged PM jobs on NFs + rApp -> sdnr : configure file-based PM data subscription + sdnr -> nf : <> PM Job Creation +else Managed PM jobs on NFs + rApp -> pmCoord : configure file-based PM data subscription + pmCoord -> pmCoord : analyze subscription + pmCoord -> sdnr : PM Job Creation + sdnr -> nf : <> PM Job Creation + nf -> sdnr : PM Job Created + sdnr -> pmCoord : PM Job Created end -' End Diagram -' Format -right footer \lCopyright 2023 highstreet technologies USA Corp.\lThis work is licensed under a Creative Commons Attribution 4.0\l International License.\lSPDX-License-Identifier: CC-BY-4.0\n2023-08-13 | o-ran-sc.org oam project | Thanks to PlantUML! +== PM Data File Collection == -skinparam backgroundColor #fefefe -'skinparam handwritten true -skinparam roundcorner 15 +loop while PM job is active in NF + nf -> ves : File-Ready + ves -> mr : File-Ready + mr -> pmDFC : File-Ready + pmDFC -> nf : <<(S)FTP/FTPS/SCP/TLS>> Collect/Transfer File + pmDFC -> pmDb : store pm data (XML) + pmDFC -> mr : PM Data (raw) available +end + +== PM Data Convertion (Common) == + +loop while PM Job is active in NF + mr -> pmConvert : PM Data (raw) available + pmConvert -> pmDb : Collect raw (3GPP-XMLformat) PM Data + pmConvert -> pmConvert : Covert PM data to JSON + pmConvert -> pmDb : Store pm data (json) + pmConvert -> mr : PM Data (json) available +end + +== DME Data Producers & Consumers (Common) == + +loop while PM Job is active in NF + mr -> pmConvert : PM Data (raw) available + pmConvert -> pmDb : Collect raw (3GPP-XML format) PM Data + pmConvert -> pmConvert : Covert PM data to JSON + pmConvert -> pmDb : Store pm data (json) + pmConvert -> mr : PM Data (json) available +end + +== DME Data Producers & Consumers <>== +loop while PM Job is active in NF + + opt RAN PM Data (R1-PM 'streamed ranpm' datatype) is streamed to rApp + note over pmProducer, dmeICS : Init RAN PM Data Producer registration with DME (DME Producer) + pmProducer -> dmeICS : Register data 'streamed ranpm' type (if not already registered) + pmProducer -> dmeICS : Register as 'streamed ranpm' producder + note over rApp, dmeICS : rApp creates 'streamed ranpm' subscription (DME Consumer) + rApp -> dmeICS : Register data 'streamed ranpm' type (if not already registered) + rApp -> dmeICS : Create subscription/job for 'streamed ranpm' data + activate rApp + note over rApp, pmProducer : DME coordinates between DME Producer/Consumer + dmeICS -> pmProducer : Job/subscription created - includes job parameters + loop while data available / continuous + pmProducer -> pmDb : retrieve appropriate pm data (json) + pmProducer -[#Blue]> mr : data: (type : 'streamed ranpm') + mr -[#Blue]> rApp: data : (type : 'streamed ranpm') + opt wait for new data + mr -> pmProducer : PM Data (json) available + end + end loop + deactivate rApp + end opt + + + opt RAN PM Data (R1-PM 'stored ranpm' datatype) is produced by influxDB producer + note over pmInflux, dmeICS : Init RAN PM Data Producer registration with DME (DME Producer) + pmInflux -> dmeICS : Register data 'stored ranpm' type (if not already registered) + group #a0a0a090 TBC + pmInflux -> dmeICS : Register as 'stored ranpm' producder + note over rApp, dmeICS : rApp creates 'stored ranpm' subscription (DME Consumer) + rApp -> dmeICS : Register data 'stored ranpm' type (if not already registered) + rApp -> dmeICS : Create subscription/job for 'streamed ranpm' data + activate rApp + end group + note over rApp, pmProducer : DME coordinates between DME Producer/Consumer + dmeICS -> pmProducer : Job/subscription created - includes job parameters + activate pmProducer + loop while data available / continuous + pmInflux -> pmDb : retrieve appropriate pm data (json) + pmInflux -> pmDbInflux : store appropriate pm data (json) + pmInflux -> mr : data available: (type : 'stored ranpm') + opt wait for new data + mr -> pmProducer : PM Data (json) available + end + end loop + deactivate pmProducer + deactivate rApp + end opt + + group #a0a0a090 TBC + ' Currently AIMLFMW does not act as a DME consumer to read the InfluxDB. It reads it direct + ' According to the 'current' specs that is fine - AIMLFW is not an 'rApp' + ' However, as the Disaggregated SMo work progressed it will need to use DME. + opt RAN PM Data (R1-PM 'stored ranpm' datatype) is consumed by rApp from influxDB producer + group #a0a0a090 TBC + note over rApp, dmeICS : rApp creates 'stored ranpm' subscription (DME Consumer) + rApp -> dmeICS : Register data 'stored ranpm' type (if not already registered) + rApp -> dmeICS : Create subscription/job for 'streamed ranpm' data + activate rApp + end group + loop while data available / continuous + rApp -> pmDbInflux : retrieve appropriate pm data (json) + opt wait for new data + mr -> rApp : data available: (type : 'stored ranpm') + end + end loop + deactivate rApp + end opt + end group + +end loop + +' What happens when PM job on NF is removed? (And How?) +' Should DME job be automatically removed? + +right footer Copyright 2023 O-RAN-SC Projects NONRTRIC, SIM, OAM\lThis work is licensed under a Creative Commons Attribution 4.0\l International License.\lSPDX-License-Identifier: CC-BY-4.0\n2023-09-21 | o-ran-sc.org oam project | Thanks to PlantUML! @enduml