56220f9c95504a5958c03c73c4966fe5111dde78
[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 "App layer" #LightBlue
33   participant "rApp" as rApp
34 end box
35
36 box "NONRTRIC" #GoldenRod
37   participant "Information Coordinator Service (DME)" as dmeICS << NONRTRIC >>
38 end box
39
40 box "NONRTRIC RAN PM" #gold
41   participant "PM (File) Collector" as pmDFC << NONRTRIC >>
42   participant "PM Data Converter" as pmConvert << NONRTRIC >>
43   participant "PM Data Producer (Streamed)" as pmProducer << NONRTRIC >>
44   participant "PM Data Influx Producer/Consumer" as pmInflux << NONRTRIC >>
45   database "PM Datastore (S3)" as pmDb << NONRTRIC >>
46   database "PM Datastore (InfluxDB)" as pmDbInflux << NONRTRIC >>
47 end box
48
49 box "SMO OAM" #gold
50   participant "Message Router / Kafka" as mr
51   participant "PM Coordination" as pmCoord
52   participant "PM (Stream) Collector" as pmCollectStream #LightGreen
53   participant "VES Collector" as ves
54   participant "OAM Controller" as sdnr
55 end box
56
57 box "Network Topology Simulation" #LightPink
58   participant "NetworkFunction\nNTSims" as nf
59   participant "PM File\nCreator Sim" as pmFileCreator << NONRTRIC >>  
60 end box
61
62 box "Simulation" #LightBlue
63   participant "PM Trigger App" as trigger
64 end box
65
66 == init ==
67 nf -> ves : <<HTTP/TLS>> VES pnfRegistration <O1>
68 ves -> mr : forward VES pnfRegistration
69 mr -> sdnr : grep VES pnfRegistration
70 sdnr -> sdnr : create Mount Point
71 sdnr -> nf : <<NETCONF/TLS>> establish connection <O1-CM>
72 sdnr -> mr : Connected!
73 mr -> pmCoord : Connection to NF established
74
75 == Stream-based PM JOB Configuration ==
76 alt Unmanaged PM jobs on NFs
77   rApp -> sdnr : configure PM data streaming subscription <R1-OAM(tbc)>
78   sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM>
79 else  Managed PM jobs on NFs
80   rApp -> pmCoord : configure PM data streaming subscription <R1-OAM(tbc)>
81   pmCoord -> pmCoord : analyze subscription
82   pmCoord -> sdnr : PM Job Creation
83   sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM>
84 end
85 nf -> sdnr : PM Job Created\nincludes http target for stream establishment <O1-CM>
86 sdnr -> pmCoord : PM Job Created
87
88 == PM Data Streaming ==
89
90 nf -> pmCollectStream : <<HTTP/TLS>> establish Streaming Connection \nincludes mapping from streamId to jobId <O1-PM>
91 pmCollectStream -> nf : <<HTTP/TLS>> Connection Established returns ConnectionId (wss:url) <O1-PM>
92 trigger -> sdnr : <<RESTCONF/TLS>> Trigger PM stream (Periodic?),\nwhen UEs are entering, leaving the cell <SIM>
93 note left of nf : PM reporting happens continuously/periodically, not triggered by specific events ? 
94 loop while PM job is active in NF
95   sdnr -> nf : <<NETCONF/TLS>> trigger <SIM>
96   note left of nf : PM reporting happens continuously/periodically. Not sure what is this trigger ? 
97   nf -> pmCollectStream : <<WebSocket>> report PM data via stream unit (wss:url) <O1-PM>
98   pmCollectStream -> pmDb : store pm data (3GPP-XMLformat)
99   pmCollectStream -> mr : PM Data (raw) available
100 end
101
102 == File-based PM Job Configuration ==
103
104 alt Unmanaged PM jobs on NFs
105   rApp -> sdnr : configure file-based PM data subscription <R1-OAM(tbc)>
106   sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM>
107 else Managed PM jobs on NFs
108   rApp -> pmCoord : configure file-based PM data subscription <R1-OAM(tbc)>
109   pmCoord -> pmCoord : analyze subscription
110   pmCoord -> sdnr : PM Job Creation
111   sdnr -> nf : <<NETCONF/TLS>> PM Job Creation <O1-CM>
112   nf -> sdnr : PM Job Created <O1-CM>
113   sdnr -> pmCoord : PM Job Created
114 end
115
116 == PM Data File Collection ==
117
118 loop while PM job is active in NF
119   nf -> ves : File-Ready <O1-PM>
120   ves -> mr :  File-Ready
121   mr -> pmDFC :  File-Ready
122   pmDFC -> nf : <<(S)FTP/FTPS/SCP/TLS>> Collect/Transfer File <O1-PM>
123   pmDFC -> pmDb : store pm data (XML)
124   pmDFC -> mr : PM Data (raw) available
125 end
126
127 == PM Data Conversion (Common) ==
128
129 loop while PM Job is active in NF
130   mr -> pmConvert : PM Data (raw) available
131   pmConvert -> pmDb : Collect raw (3GPP-XMLformat) PM Data
132   pmConvert -> pmConvert : Covert PM data to JSON
133   pmConvert -> pmDb : Store pm data (json)
134   pmConvert -> mr : PM Data (json) available
135 end
136
137 == DME Data Producers & Consumers (Common) ==
138
139 loop while PM Job is active in NF
140   mr -> pmConvert : PM Data (raw) available
141   pmConvert -> pmDb : Collect raw (3GPP-XML format) PM Data
142   pmConvert -> pmConvert : Covert PM data to JSON
143   pmConvert -> pmDb : Store pm data (json)
144   pmConvert -> mr : PM Data (json) available
145 end
146
147 == DME Data Producers & Consumers <<R1 DME>>==
148 loop while PM Job is active in NF
149
150   opt RAN PM Data (R1-PM 'streamed ranpm' datatype) is streamed to rApp
151     note over pmProducer, dmeICS :  Init RAN PM Data Producer registration with DME (DME Producer)
152     pmProducer -> dmeICS : Register data 'streamed ranpm' type (if not already registered)
153     pmProducer -> dmeICS : Register as 'streamed ranpm' producer
154     note over rApp, dmeICS : rApp creates 'streamed ranpm' subscription (DME Consumer)
155     rApp -> dmeICS : Register data 'streamed ranpm' type (if not already registered)
156     rApp -> dmeICS :  Create subscription/job for 'streamed ranpm' data 
157     activate rApp
158     note over rApp, pmProducer : DME  coordinates between DME Producer/Consumer
159     dmeICS -> pmProducer : Job/subscription created - includes job parameters
160     loop while data available / continuous
161       pmProducer -> pmDb :  retrieve appropriate pm data (json)
162       pmProducer -[#Blue]> mr : data: (type : 'streamed ranpm')
163       mr -[#Blue]> rApp: data : (type : 'streamed ranpm')
164       opt wait for new data
165           mr -> pmProducer : PM Data (json) available
166       end
167     end loop 
168     deactivate rApp
169   end opt
170
171
172   opt RAN PM Data (R1-PM 'stored ranpm' datatype) is produced by influxDB producer
173     note over pmInflux, dmeICS :  Init RAN PM Data Producer registration with DME (DME Producer)
174     pmInflux -> dmeICS : Register data 'stored ranpm' type (if not already registered)
175     group #a0a0a090 <color #red>TBC</color>
176       pmInflux -> dmeICS : Register as 'stored ranpm' producer
177       note over rApp, dmeICS : rApp creates 'stored ranpm' subscription (DME Consumer)
178       rApp -> dmeICS : Register data 'stored ranpm' type (if not already registered)
179       rApp -> dmeICS :  Create subscription/job for 'streamed ranpm' data 
180       activate rApp
181     end group
182     note over rApp, pmProducer : DME  coordinates between DME Producer/Consumer
183     dmeICS -> pmProducer : Job/subscription created - includes job parameters
184     activate pmProducer
185     loop while data available / continuous
186       pmInflux -> pmDb :  retrieve appropriate pm data (json)
187       pmInflux -> pmDbInflux :  store appropriate pm data (json)
188       pmInflux -> mr : data available: (type : 'stored ranpm')
189       opt wait for new data
190           mr -> pmProducer : PM Data (json) available
191       end
192     end loop 
193     deactivate pmProducer
194     deactivate rApp
195   end opt
196
197   group #a0a0a090 <color #red>TBC</color>
198     ' Currently AIMLFW does not act as a DME consumer to read the InfluxDB. It reads it direct 
199     ' According to the 'current' specs that is fine - AIMLFW is not an 'rApp' 
200     ' However, as the Disaggregated SMo work progressed it will need to use DME. 
201     opt RAN PM Data (R1-PM 'stored ranpm' datatype) is consumed by rApp from influxDB producer
202       group #a0a0a090 <color #red>TBC</color>
203         note over rApp, dmeICS : rApp creates 'stored ranpm' subscription (DME Consumer)
204         rApp -> dmeICS : Register data 'stored ranpm' type (if not already registered)
205         rApp -> dmeICS :  Create subscription/job for 'streamed ranpm' data 
206         activate rApp
207       end group
208       loop while data available / continuous
209         rApp -> pmDbInflux :  retrieve appropriate pm data (json)
210         opt wait for new data
211             mr -> rApp : data available: (type : 'stored ranpm')
212         end
213       end loop 
214       deactivate rApp
215     end opt
216   end group
217
218 end loop 
219
220 ' What happens when PM job on NF is removed? (And How?)
221 ' Should DME job be automatically removed?   
222
223 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!
224
225 @enduml