Add to_directory method to relevant object classes
[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 
9   Performance Measurement Data flows 
10   stream based and 3GPP xml file based
11 end title
12
13 ' format
14 autonumber 1 1 "<b>[00]"
15 hide unlinked
16 hide stereotype
17 skinparam backgroundColor #fefefe
18 skinparam roundcorner 15
19
20 skinparam participant {
21     BackgroundColor<< NONRTRIC >> green
22     FontColor<< NONRTRIC >> #eeeeee
23 }
24
25 skinparam database {
26     BackgroundColor<< NONRTRIC >> green
27     FontColor<< NONRTRIC >> green
28 }
29 ' end format
30
31 ' the sequence diagram
32 box "User Space" #LightBlue
33   actor "User" as user
34 end box
35
36 box "App layer" #LightBlue
37     participant "rApp" as rApp
38 end box
39
40 box "NONRTRIC" #GoldenRod
41   participant "Information Coordinator Service (DME)" as dmeICS << NONRTRIC >>
42 end box
43
44 box "NONRTRIC RAN PM" #gold
45   participant "PM (File) Collector" as pmDFC << NONRTRIC >>
46   participant "PM Data Converter" as pmConvert << NONRTRIC >>
47   participant "PM Data Producer (Streamed)" as pmProducer << NONRTRIC >>
48   participant "PM Data Influx Producer/Consumer" as pmInflux << NONRTRIC >>
49 end box
50
51 box "SMO Common" #gold
52   participant "Topology Service" as topo
53   participant "Message Router / Kafka" as mr
54   database "PM Datastore (S3)" as pmDb << NONRTRIC >>
55   database "PM Datastore (InfluxDB)" as pmDbInflux << NONRTRIC >>
56 end box
57
58 box "SMO OAM" #gold
59   participant "PM Coordination" as pmCoord
60   participant "PM Collector" as pmCollectStream
61   participant "VES Collector" as ves
62   participant "OAM Controller" as sdnr
63 end box
64
65 box "SMO O-Cloud" #gold
66   participant "Deployment Management Service" as dms
67 end box
68
69 box "Network" #LightPink
70   participant "NetworkFunction\nNTSims" as nf
71   participant "PM File\nCreator Sim" as pmFileCreator << NONRTRIC >>  
72 end box
73
74 box "Simulation" #LightPink
75   database "Network PM" as netPm
76   participant "Data Generation" as simData
77   participant "UE Location Generation" as trigger
78 end box
79
80 == init ==
81
82 user -> topo : provide (RAN) topology
83 dms -> topo : RESTCONF GET ietf-network-topology
84 dms <- topo : ietf-network-topology
85 loop for all nodes in the topology
86   dms -> nf : Create simulated network function <O2>
87 end loop
88 simData -> topo : RESTCONF GET ietf-network-topology
89 simData <- topo : ietf-network-topology
90
91 == onboarding ==
92
93 nf -> ves : <<HTTP/TLS>> VES pnfRegistration <O1>
94 ves -> mr : forward VES pnfRegistration
95 mr -> sdnr : grep VES pnfRegistration
96 sdnr -> sdnr : create Mount Point
97 sdnr -> nf : <<NETCONF/TLS>> establish connection <O1-CM>
98 sdnr -> mr : Connected!
99 mr -> pmCoord : Connection to NF established
100
101 == PM Data Generation ==
102
103 loop at least every second
104   trigger -> simData : send geo location for each UE
105   simData -> simData : UE perform cell selection
106   simData -> simData : Generator throughput data \nand RSRQ (PM values)
107   simData -> netPm : Store PM values per UE \nand timestamp
108   simData -> simData : aggregate data per nrDuCell
109   simData -> netPm : Store PM values per nrDuCell \nand timestamp
110   simData -> simData : aggregate data per O-RAN RU
111   simData -> netPm : Store PM values per O-RAN RU \nand timestamp
112   simData -> simData : aggregate data per O-RAN DU
113   simData -> netPm : Store PM values per O-RAN DU \nand timestamp
114 end loop
115
116 == Stream-based PM JOB Configuration ==
117 alt Unmanaged PM jobs on NFs
118   rApp -> sdnr : configure PM data streaming subscription <R1-OAM(tbc)>
119   sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM>
120 else  Managed PM jobs on NFs
121   rApp -> pmCoord : configure PM data streaming subscription <R1-OAM(tbc)>
122   pmCoord -> pmCoord : analyze subscription
123   pmCoord -> sdnr : PM Job Creation
124   sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM>
125 end
126 nf -> sdnr : PM Job Created\nincludes http target for stream establishment <O1-CM>
127 sdnr -> pmCoord : PM Job Created
128
129 == PM Data Streaming ==
130
131 nf -> pmCollectStream : <<HTTP/TLS>> establish Streaming Connection \nincludes mapping from streamId to jobId <O1-PM>
132 pmCollectStream -> nf : <<HTTP/TLS>> Connection Established returns ConnectionId (wss:url) <O1-PM>
133
134 loop while performance job is active
135   nf -> netPm : request data based on PM-Job
136   netPm -> nf : send data
137   nf -> nf : convert simulated PM Data into GPB
138   nf -> pmCollectStream : <<WebSocket>> report PM data via stream unit (wss:url) <O1-PM>
139   pmCollectStream -> pmCollectStream : convert GPB into 3GPP-xml format
140   pmCollectStream -> pmDb : store PM Data (3GPP-XMLformat)
141   pmCollectStream -> mr : PM Data (raw) available\n{jobId,sender,pm-database-query-command}
142 end
143
144 == File-based PM Job Configuration ==
145
146 alt Unmanaged PM jobs on NFs
147   rApp -> sdnr : configure file-based PM data subscription <R1-OAM(tbc)>
148   sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM>
149 else Managed PM jobs on NFs
150   rApp -> pmCoord : configure file-based PM data subscription <R1-OAM(tbc)>
151   pmCoord -> pmCoord : analyze subscription
152   pmCoord -> sdnr : PM Job Creation
153   sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM>
154   nf -> sdnr : PM Job Created <O1-CM>
155   sdnr -> pmCoord : PM Job Created
156 end
157
158 == PM Data File Collection ==
159
160 loop while PM job is active in NF
161   nf -> netPm : request data based on PM-Job
162   netPm -> nf : send data
163   nf -> nf : store simulated PM Data as 3GPP-XML file
164   nf -> ves : File-Ready <O1-PM>
165   ves -> mr : File-Ready
166   mr -> pmDFC : File-Ready
167   pmDFC -> nf : <<(S)FTP/FTPS/SCP/TLS>> Collect/Transfer File <O1-PM>
168   pmDFC -> pmDb : store PM Data (3GPP-XML format)
169   pmDFC -> mr : PM Data (raw) available
170 end
171
172 == PM Data Conversion (Common) ==
173
174 loop while PM Job is active in NF
175   mr -> pmConvert : PM Data (raw) available
176   pmConvert -> pmDb : Collect raw (3GPP-XML format) PM Data
177   pmConvert -> pmConvert : Covert PM data to JSON
178   pmConvert -> pmDb : Store PM Data (json)
179   pmConvert -> mr : PM Data (json) available
180 end
181
182 ' == DME Data Producers & Consumers (Common) ==
183
184 ' loop while PM Job is active in NF
185 '   mr -> pmConvert : PM Data (raw) available
186 '  pmConvert -> pmDb : Collect raw (3GPP-XML format) PM Data
187 '  pmConvert -> pmConvert : Covert PM data to JSON
188 '  pmConvert -> pmDb : Store PM Data (json)
189 '  pmConvert -> mr : PM Data (json) available
190 'end
191
192
193 == DME Data Producers & Consumers <<R1 DME>>==
194 loop while PM Job is active in NF
195
196   opt RAN PM Data (R1-PM 'streamed ranpm' datatype) is streamed to rApp
197     note over pmProducer, dmeICS : Init RAN PM Data Producer registration with DME (DME Producer)
198     pmProducer -> dmeICS : Register data 'streamed ranpm' type (if not already registered)
199     pmProducer -> dmeICS : Register as 'streamed ranpm' producer
200     note over rApp, dmeICS : rApp creates 'streamed ranpm' subscription (DME Consumer)
201     rApp -> dmeICS : Register data 'streamed ranpm' type (if not already registered)
202     rApp -> dmeICS : Create subscription/job for 'streamed ranpm' data 
203     activate rApp
204     note over rApp, pmProducer : DME  coordinates between DME Producer/Consumer
205     dmeICS -> pmProducer : Job/subscription created - includes job parameters
206     loop while data available / continuous
207       pmProducer -> pmDb : retrieve appropriate PM Data (json)
208       pmProducer -[#Blue]> mr : data: (type : 'streamed ranpm')
209       mr -[#Blue]> rApp: data : (type : 'streamed ranpm')
210       opt wait for new data
211           mr -> pmProducer : PM Data (json) available
212       end
213     end loop 
214     deactivate rApp
215   end opt
216
217   opt RAN PM Data (R1-PM 'stored ranpm' datatype) is produced by influxDB producer
218     note over pmInflux, dmeICS : Init RAN PM Data Producer registration with DME (DME Producer)
219     pmInflux -> dmeICS : Register data 'stored ranpm' type (if not already registered)
220     group #a0a0a090 <color #red>TBC</color>
221       pmInflux -> dmeICS : Register as 'stored ranpm' producer
222       note over rApp, dmeICS : rApp creates 'stored ranpm' subscription (DME Consumer)
223       rApp -> dmeICS : Register data 'stored ranpm' type (if not already registered)
224       rApp -> dmeICS : Create subscription/job for 'streamed ranpm' data 
225       activate rApp
226     end group
227     note over rApp, pmProducer : DME  coordinates between DME Producer/Consumer
228     dmeICS -> pmProducer : Job/subscription created - includes job parameters
229     activate pmProducer
230     loop while data available / continuous
231       pmInflux -> pmDb : retrieve appropriate PM Data (json)
232       pmInflux -> pmDbInflux : store appropriate PM Data (json)
233       pmInflux -> mr : data available: (type : 'stored ranpm')
234       opt wait for new data
235           mr -> pmProducer : PM Data (json) available
236       end
237     end loop 
238     deactivate pmProducer
239     deactivate rApp
240   end opt
241
242   group #a0a0a090 <color #red>TBC</color>
243     ' Currently AIMLFW does not act as a DME consumer to read the InfluxDB. It reads it direct 
244     ' According to the 'current' specs that is fine - AIMLFW is not an 'rApp' 
245     ' However, as the Disaggregated SMo work progressed it will need to use DME. 
246     opt RAN PM Data (R1-PM 'stored ranpm' datatype) is consumed by rApp from influxDB producer
247       group #a0a0a090 <color #red>TBC</color>
248         note over rApp, dmeICS : rApp creates 'stored ranpm' subscription (DME Consumer)
249         rApp -> dmeICS : Register data 'stored ranpm' type (if not already registered)
250         rApp -> dmeICS : Create subscription/job for 'streamed ranpm' data 
251         activate rApp
252       end group
253       loop while data available / continuous
254         rApp -> pmDbInflux : retrieve appropriate PM Data (json)
255         opt wait for new data
256             mr -> rApp : data available: (type : 'stored ranpm')
257         end
258       end loop 
259       deactivate rApp
260     end opt
261   end group
262
263 end loop 
264
265 ' What happens when PM job on NF is removed? (And How?)
266 ' draft: The SMO wont be informed about new measurements – no ves file ready or no pm-stream based on the PM job.
267 ' The PM Job can be deactivated (admin-state to locked) or removed via NETCONF operation defined in 3GPP yang modules -> O1.
268
269 ' Should DME job be automatically removed?
270 ' draft: Here we should start developing an answer 😊
271 ' The DME job – does it depend on the PM job or does it control the PM job?
272  
273
274 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!
275
276 @enduml