+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!