| ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' |
| ' 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 Measurement Data flows |
| stream based and 3GPP xml file based |
| end title |
| |
| ' format |
| autonumber 1 1 "<b>[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 / Kafka" as mr |
| participant "PM Coordination" as pmCoord |
| participant "PM (Stream) Collector" as pmCollectStream #LightGreen |
| participant "VES Collector" as ves |
| participant "OAM Controller" as sdnr |
| end box |
| |
| box "Network Topology Simulation" #LightPink |
| participant "NetworkFunction\nNTSims" as nf |
| participant "PM File\nCreator Sim" as pmFileCreator << NONRTRIC >> |
| end box |
| |
| box "Simulation" #LightBlue |
| participant "PM Trigger App" as trigger |
| end box |
| |
| == init == |
| nf -> ves : <<HTTP/TLS>> VES pnfRegistration <O1> |
| ves -> mr : forward VES pnfRegistration |
| mr -> sdnr : grep VES pnfRegistration |
| sdnr -> sdnr : create Mount Point |
| sdnr -> nf : <<NETCONF/TLS>> establish connection <O1-CM> |
| 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 <R1-OAM(tbc)> |
| sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM> |
| else Managed PM jobs on NFs |
| rApp -> pmCoord : configure PM data streaming subscription <R1-OAM(tbc)> |
| pmCoord -> pmCoord : analyze subscription |
| pmCoord -> sdnr : PM Job Creation |
| sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM> |
| end |
| nf -> sdnr : PM Job Created\nincludes http target for stream establishment <O1-CM> |
| sdnr -> pmCoord : PM Job Created |
| |
| == PM Data Streaming == |
| |
| nf -> pmCollectStream : <<HTTP/TLS>> establish Streaming Connection \nincludes mapping from streamId to jobId <O1-PM> |
| pmCollectStream -> nf : <<HTTP/TLS>> Connection Established returns ConnectionId (wss:url) <O1-PM> |
| trigger -> sdnr : <<RESTCONF/TLS>> Trigger PM stream (Periodic?),\nwhen UEs are entering, leaving the cell <SIM> |
| note left of nf : PM reporting happens continuously/periodically, not triggered by specific events ? |
| loop while PM job is active in NF |
| sdnr -> nf : <<NETCONF/TLS>> trigger <SIM> |
| note left of nf : PM reporting happens continuously/periodically. Not sure what is this trigger ? |
| nf -> pmCollectStream : <<WebSocket>> report PM data via stream unit (wss:url) <O1-PM> |
| pmCollectStream -> pmDb : store pm data (3GPP-XMLformat) |
| pmCollectStream -> mr : PM Data (raw) available |
| end |
| |
| == File-based PM Job Configuration == |
| |
| alt Unmanaged PM jobs on NFs |
| rApp -> sdnr : configure file-based PM data subscription <R1-OAM(tbc)> |
| sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM> |
| else Managed PM jobs on NFs |
| rApp -> pmCoord : configure file-based PM data subscription <R1-OAM(tbc)> |
| pmCoord -> pmCoord : analyze subscription |
| pmCoord -> sdnr : PM Job Creation |
| sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM> |
| nf -> sdnr : PM Job Created <O1-CM> |
| sdnr -> pmCoord : PM Job Created |
| end |
| |
| == PM Data File Collection == |
| |
| loop while PM job is active in NF |
| nf -> ves : File-Ready <O1-PM> |
| ves -> mr : File-Ready |
| mr -> pmDFC : File-Ready |
| pmDFC -> nf : <<(S)FTP/FTPS/SCP/TLS>> Collect/Transfer File <O1-PM> |
| 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 <<R1 DME>>== |
| 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 <color #red>TBC</color> |
| 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 <color #red>TBC</color> |
| ' 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 <color #red>TBC</color> |
| 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 |