Create PM Data Sequence diagram
[oam.git] / spec / pm-streaming / o-ran-sc-i-pm-streaming-sequence.puml
1 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
2 ' Copyright 2023 O-RAN-SC Projects NONRTRIC, SIM, OAM
3 ' This work is licensed under a Creative Commons Attribution 4.0 International License.
4 ' SPDX-License-Identifier: CC-BY-4.0
5 ' https://creativecommons.org/licenses/by/4.0/deed.en
6
7 @startuml o-ran-sc-i-pm-streaming-sequence
8 title Performance Data Streaming
9 autonumber 1 1 "<b>[00]"
10 hide unlinked
11
12 box "App layer" #LightBlue
13   participant "rApp" as rApp
14 end box
15
16 box "NONRTRIC" #GoldenRod
17   participant "Information Coordinator Service (DME)" as dmeICS #Green
18 end box
19 box "NONRTRIC RAN PM" #gold
20   participant "PM (File) Collector" as pmDFC #Green
21   participant "PM Data Converter" as pmConvert #Green
22   participant "PM Data Producer (Streamed)" as pmProducer #Green
23   participant "PM Data Influx Producer/Consumer" as pmInflux #Green
24   database "PM Datastore (S3)" as pmDb #Green
25   database "PM Datastore (InfluxDB)" as pmDbInflux #Green
26 end box
27
28 box "SMO OAM" #gold
29   participant "Message Router / Kafka" as mr
30   participant "OAM PM Coordination" as pmCoord
31   participant "PM (Stream) Collector" as pmCollectStream #LightGreen
32   participant "VES Collector" as ves
33   participant "OAM Controller" as sdnr
34 end box
35
36 box "Network Topology Simulation" #LightPink
37   participant "NetworkFunction\n2401 NTSims" as nf
38   participant "PM File\nCreator Sim" as pmFileCreator #Green
39 end box
40
41 box "Simulation" #LightBlue
42   participant "PM Trigger App" as trigger
43 end box
44
45 == init ==
46 nf -> ves : <<HTTP/TLS>> VES pnfRegistration <O1>
47 ves -> mr : forward VES pnfRegistration
48 mr -> sdnr : grep VES pnfRegistration
49 sdnr -> sdnr : create Mount Point
50 sdnr -> nf : <<NETCONF/TLS>> establish connection <O1-CM>
51 sdnr -> mr : Connected!
52 mr -> pmCoord : Connection to NF established
53
54 == Stream-based PM JOB Configuration ==
55 alt Unmanaged PM jobs on NFs
56   rApp -> sdnr : configure PM data streaming subscription <R1-OAM(tbc)>
57   sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM>
58 else  Managed PM jobs on NFs
59   rApp -> pmCoord : configure PM data streaming subscription <R1-OAM(tbc)>
60   pmCoord -> pmCoord : analyze subscription
61   pmCoord -> sdnr : PM Job Creation
62   sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM>
63 end
64 nf -> sdnr : PM Job Created\nincludes http target for stream establishment <O1-CM  (O1-PM?)>
65 sdnr -> pmCoord : PM Job Created
66
67 == PM Data Streaming ==
68
69 nf -> pmCollectStream : <<HTTP/TLS>> establish Streaming Connection \nincludes mapping from streamId to jobId <O1-PM>
70 pmCollectStream -> nf : <<HTTP/TLS>> Connection Established returns ConnectionId (wss:url) <O1-PM>
71 trigger -> sdnr : <<RESTCONF/TLS>> Trigger PM stream (Periodic?),\nwhen UEs are entering, leaving the cell <SIM>
72 note left of nf : PM reporting happens continuously/periodicly, not triggered by specific events ? 
73 loop while PM job is active in NF
74   sdnr -> nf : <<NETCONF/TLS>> trigger <SIM>
75   note left of nf : PM reporting happens continuously/periodicly. Not sure what is this trigger ? 
76   nf -> pmCollectStream : <<WebSocket>> report PM data via stream unit (wss:url) <O1-PM?>
77   pmCollectStream -> pmDb : store pm data (XML or GPB)
78   pmCollectStream -> mr : PM Data (raw) available
79 end
80
81 == File-based PM Job Configuration ==
82
83 alt Unmanaged PM jobs on NFs
84   rApp -> sdnr : configure file-based PM data subscription <R1-OAM(tbc)>
85   sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM>
86 else Managed PM jobs on NFs
87   rApp -> pmCoord : configure file-based PM data subscription <R1-OAM(tbc)>
88   pmCoord -> pmCoord : analyze subscription
89   pmCoord -> sdnr : PM Job Creation
90   sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM>
91   nf -> sdnr : PM Job Created <O1-CM  (O1-PM?)>
92   sdnr -> pmCoord : PM Job Created
93 end
94
95 == PM Data File Collection ==
96
97 loop while PM job is active in NF
98   nf -> ves : File-Ready <O1-PM>
99   ves -> mr :  File-Ready
100   mr -> pmDFC :  File-Ready
101   pmDFC -> nf : <<(S)FTP/FTPS/SCP/TLS>> Collect/Transfer File <O1-PM>
102   pmDFC -> pmDb : store pm data (XML)
103   pmDFC -> mr : PM Data (raw) available
104 end
105
106 == PM Data Convertion (Common) ==
107
108 loop while PM Job is active in NF
109   mr -> pmConvert : PM Data (raw) available
110   pmConvert -> pmDb : Collect raw (XML? GPB?) PM Data
111   pmConvert -> pmConvert : Covert PM data to JSON
112   pmConvert -> pmDb : Store pm data (json)
113   pmConvert -> mr : PM Data (json) available
114 end
115
116 == DME Data Producers & Consumers (Common) ==
117
118 loop while PM Job is active in NF
119   mr -> pmConvert : PM Data (raw) available
120   pmConvert -> pmDb : Collect raw (XML? GPB?) PM Data
121   pmConvert -> pmConvert : Covert PM data to JSON
122   pmConvert -> pmDb : Store pm data (json)
123   pmConvert -> mr : PM Data (json) available
124 end
125
126 == DME Data Producers & Consumers <<R1 DME>>==
127 loop while PM Job is active in NF
128
129   opt RAN PM Data (R1-PM 'streamed ranpm' datatype) is streamed to rApp
130     note over pmProducer, dmeICS :  Init RAN PM Data Producer registration with DME (DME Producer)
131     pmProducer -> dmeICS : Register data 'streamed ranpm' type (if not already registered)
132     pmProducer -> dmeICS : Register as 'streamed ranpm' producder
133     note over rApp, dmeICS : rApp creates 'streamed ranpm' subscription (DME Consumer)
134     rApp -> dmeICS : Register data 'streamed ranpm' type (if not already registered)
135     rApp -> dmeICS :  Create subscription/job for 'streamed ranpm' data 
136     activate rApp
137     note over rApp, pmProducer : DME  coordinates between DME Producer/Consumer
138     dmeICS -> pmProducer : Job/subscription created - includes job parameters
139     loop while data available / continuous
140       pmProducer -> pmDb :  retrieve appropriate pm data (json)
141       pmProducer -[#Blue]> mr : data: (type : 'streamed ranpm')
142       mr -[#Blue]> rApp: data : (type : 'streamed ranpm')
143       opt wait for new data
144           mr -> pmProducer : PM Data (json) available
145       end
146     end loop 
147     deactivate rApp
148   end opt
149
150
151   opt RAN PM Data (R1-PM 'stored ranpm' datatype) is produced by influxDB producer
152     note over pmInflux, dmeICS :  Init RAN PM Data Producer registration with DME (DME Producer)
153     pmInflux -> dmeICS : Register data 'stored ranpm' type (if not already registered)
154     group #a0a0a090 <color #red>TBC</color>
155       pmInflux -> dmeICS : Register as 'stored ranpm' producder
156       note over rApp, dmeICS : rApp creates 'stored ranpm' subscription (DME Consumer)
157       rApp -> dmeICS : Register data 'stored ranpm' type (if not already registered)
158       rApp -> dmeICS :  Create subscription/job for 'streamed ranpm' data 
159       activate rApp
160     end group
161     note over rApp, pmProducer : DME  coordinates between DME Producer/Consumer
162     dmeICS -> pmProducer : Job/subscription created - includes job parameters
163     activate pmproducer
164     loop while data available / continuous
165       pmInflux -> pmDb :  retrieve appropriate pm data (json)
166       pmInflux -> pmDbInflux :  store appropriate pm data (json)
167       pmInflux -> mr : data available: (type : 'stored ranpm')
168       opt wait for new data
169           mr -> pmProducer : PM Data (json) available
170       end
171     end loop 
172     deactivate pmproducer
173     deactivate rApp
174   end opt
175
176   group #a0a0a090 <color #red>TBC</color>
177     ' Currently AIMLFMW does not act as a DME consumer to read the InfluxDB. It reads it direct 
178     ' According to the 'current' specs that is fine - AIMLFW is not an 'rApp' 
179     ' Howeever, as the Disaggregated SMo work prgressed it will need to use DME. 
180     opt RAN PM Data (R1-PM 'stored ranpm' datatype) is consumed by rApp from influxDB producer
181       group #a0a0a090 <color #red>TBC</color>
182         note over rApp, dmeICS : rApp creates 'stored ranpm' subscription (DME Consumer)
183         rApp -> dmeICS : Register data 'stored ranpm' type (if not already registered)
184         rApp -> dmeICS :  Create subscription/job for 'streamed ranpm' data 
185         activate rApp
186       end group
187       loop while data available / continuous
188         rApp -> pmDbInflux :  retrieve appropriate pm data (json)
189         opt wait for new data
190             mr -> rApp : data available: (type : 'stored ranpm')
191         end
192       end loop 
193       deactivate rApp
194     end opt
195   end group
196
197 end loop 
198
199 ' What happens when PM job on NF is removed? (And How?)
200 ' Should DME job be automatically removed?   
201
202 ' End Diagram
203 ' Format
204 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!
205
206 skinparam backgroundColor #fefefe
207 'skinparam handwritten true
208 skinparam roundcorner 15
209
210 @enduml