PM flow demo - docker/kube
Change-Id: I9114f1c21fe12e931a14f995a49195aafda6baea
diff --git a/pm-data-event-demo/group6/rapp/ws.py b/pm-data-event-demo/group6/rapp/ws.py
index 55f98a4..4866513 100644
--- a/pm-data-event-demo/group6/rapp/ws.py
+++ b/pm-data-event-demo/group6/rapp/ws.py
@@ -51,6 +51,7 @@
f.write(json.dumps(msg))
f.close()
elif (MIME_TEXT in request.content_type):
+ print("Payload(json): "+str(msg))
f = open("/rapp/dump/"+id+".json", "w")
f.write(request.data.decode('UTF-8'))
f.close()
diff --git a/pm-file-flow-demo/README.md b/pm-file-flow-demo/README.md
new file mode 100644
index 0000000..c7bc23c
--- /dev/null
+++ b/pm-file-flow-demo/README.md
@@ -0,0 +1,16 @@
+
+## Demo PM file flow using producers/consumers
+
+This demo is adapted to run both in docker and kuberneters (local or remote).
+
+See README.md in docker-proj for docker version\
+
+See README.md in kube-proj for kubernetes version (local and remote variant)
+
+Three components need to be built to run the demo. Build instruction is inlcuded in each of the above README.
+
+Components:
+- https-server Simulate a NE with https file download
+- kafka-pm-producer A producer of pm json (from pm xml) and for filtering of json
+- rapp Simulates an rapp, start and unique job to request filtered json
+
diff --git a/pm-file-flow-demo/docker-proj/README.md b/pm-file-flow-demo/docker-proj/README.md
new file mode 100644
index 0000000..253a524
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/README.md
@@ -0,0 +1,203 @@
+
+## Demo project in docker
+
+A demo showing pm file flow from simlulates network elements to filtered pm data for rAPPs.
+
+## Run in docker-desktop - docker only
+
+### Clone the protoyping repo:
+
+`git clone https://gerrit.nordix.org/local/oransc/nonrtric-prototyping`
+
+### Build Datafile component
+
+`cd datafile`
+
+`mvn install docker:build -Dmaven.test.skip=true`
+
+### Build Kafka pm producer
+
+`cd pm-file-flow-demo/kafka-pm-producer`
+
+`./build.sh no-push`
+
+### Build Https server
+
+`cd pm-file-flow-demo/https-server`
+
+`./build.sh no-push`
+
+### Build rapp
+
+`cd pm-file-flow-demo/rapp`
+
+`./build.sh no-push`
+
+### Start demo
+
+WARNING: The setup scripts below will prune all unused docker volumes!
+
+INFO: Temporary files for some containers will be stored in subdirs under `/tmp`
+
+`cd pm-file-flow-demo/docker-proj`
+
+There are several ways to start and run the demo, with file or minio file storage, single or multi instances of data-file collector and kafka as well as a choice of sftp, ftpes or https.
+Additional configuration can be made in the setup script.
+
+It could be a good idea to clean any other running containers in docker to avoid port and container name clashes.
+
+Command usage: `docker-setup.sh k1|k3 dfc1|dfc2 file|minio no-ftp|ftp data-mount|no-data-mount`
+
+Paratameters: \
+k1 - Single kafka broker \
+k3 - Three kafka brokers \
+dfc1 - Single dfc \
+dfc2 - Two dfc \
+file - raw file storage \
+minio - file storage in minio \
+ftp - use ftp servers to simulate NEs \
+no-ftp - use https servers to simulate NEs \
+data-mount - mount data volumes to localhost\
+no-data-mount - do not mount data volumes to localhost - however container shared dirs are still mounted\
+
+Example cmd: \
+`./docker-setup.sh k1 dfc1 minio no-ftp`
+
+Let the script finish.
+
+If the script fails, make sure to clean the setup before attempting a new setup.
+
+`./docker-tear-down.sh`
+
+In addition, a `docker system prune` might be needed now and then.
+
+### Tools for monitoring
+
+Open browser to kowl (kafka gui) - watch topics, messages etc\
+browser: `localhost:8780`
+
+Open brower to minio - available only if minio is given on the cmd line when starting the demo\
+user: admin pwd: adminadmin\
+browser: `localhost:9001`
+
+Open browser or run curl - dfc statictics\
+browser or curl: `https://localhost:8433/status`\
+browser or curl: `https://localhost:8533/status` (second dfc - only when running with 2 dfc instances)
+
+Open browser or run curl - kafka-producer (xml->json) statictics (2 instances) \
+curl: `localhost:9880/status | jq` \
+browser: `localhost:9880/status`
+
+curl: `localhost:9881/status | jq` \
+browser: `localhost:9881/status`
+
+Open browser or run curl - kafka-producer (json->kafka) statictics \
+curl: `localhost:9980/status | jq` \
+browser: `localhost:9980/status`
+
+Open browser or run curl - dmaap-adapter (json->kafka) statictics\
+curl: `localhost:8084/statistics | jq` \
+browser: `localhost:8084/statistics`
+
+### Push data - basic
+
+The basic setup creates:
+- one job in a golang-kafka-producers (kpm100 and kpm101) for xml to json conversion
+- one job in a golang-kafka-producer (kp1) json filtering
+- one job in a dmaap-adapter for json filtering
+
+For additional producer setup, see "Push data - extended below"
+
+If the demo has been started with the flag "ftp" then files need to be prepared for the http server.
+
+`cd pm-file-flow-demo/scripts`
+
+Use the following script to create ftp files (not needed with running https servers)
+
+Usage: `populate-ne-files.sh <node-count> <file-count> <node-name-base> <file-extension>`
+
+Parameters/
+node-count - number of unique NEs\
+file-count - number of files per NE\
+node-name-base - NE name prefix\
+file-extension - xml or xml.gz
+
+File ready events can be pushed to the ves collector or pushed directly to the topic for file ready events (bypassing the ves collector).
+
+Push to ves collector:
+
+Usage: `push-to-ves-collector.sh <node-count> <num-of-events> <node-name-base> <file-extension> sftp|ftpes|https <num-servers> [hist]`
+
+Parameters/
+node-count* - number of unique NEs\
+num-of-events* - number of events per NE\
+node-name-base* - NE name prefix\
+file-extension* - xml or xml.gz
+sftp** - use sftp for file download
+ftpes** - use ftpes for file download
+https** - use https for file download
+num-servers - number of sftp/ftpes/https servers to simulate NEs (10 is default)
+hist - include 24h of historical ropfiles (96 files) in each event
+
+Parameter with * must match the parameters in the setup script populate-ne-files.sh - if running sftp/ftpes
+Parameter with ** must match the parameter no-ftp/ftp in the script docker-setup.sh - https can be used for no-ftp and sftp/ftpes can be used for ftp.
+
+
+Usage: ` push-to-file-ready-topic.sh <node-count> <num-of-events> <node-name-base> <file-extension> sftp|ftpes|https <num-servers> [hist]`
+
+Parameter: \
+Same as `push-to-ves-collector.sh`
+
+Once the events has been pushed the progress can be viewed in the monitoring tools described above.
+
+If several sets of data shall be pushed, just change the parameter `<node-name-base>` to make the new files unique.
+
+### Push data - extended
+
+#### Set of jobs/rapps
+
+To simulate a larger amount of jobs, a number of jobs can be set up to send filtered json to individual topics.
+
+`cd pm-file-flow-demo/docker-proj`
+
+Usage: `x-jobs.sh file|minio topics|no-topics jobs|rapps|none [<num-jobs>]`
+
+Parameter with * must match the parameters in the setup script
+
+Parameters/
+file* - raw file storage \
+minio* - file storage in minio \
+topics - create unique topics\
+no-topics - do not create unique topics. Topics will be autocreated by the jobs/rapps\
+jobs - create jobs\
+rapps - create rapps\
+none - do not create jobs or rapps
+num-job - number of jobs in each producer (there are two producer applicable)
+
+Warning: The rapp parameter will create twp docker container for each job - bigger number may exhaust the docker resources on your machine
+
+#### Historical pm data
+
+A job can be setup to seach and filter historical pm files (previously downloaded)
+
+`cd pm-file-flow-demo/docker-proj`
+
+Usage: `./hist-job.sh`
+
+No parameters needed
+
+
+### Clean up
+
+`cd pm-file-flow-demo/scripts`
+
+Run the script to remove all docker containers.
+
+`./docker-tear-down.sh`
+
+To also cleanup files.
+
+`./clean-shared-volume.sh`
+
+`./clean-ne-files.sh`
+
diff --git a/pm-file-flow-demo/docker-proj/config/dfc-common/template-truststore.jks b/pm-file-flow-demo/docker-proj/config/dfc-common/template-truststore.jks
new file mode 100644
index 0000000..50a0f9e
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/dfc-common/template-truststore.jks
Binary files differ
diff --git a/pm-file-flow-demo/docker-proj/config/dfc-common/truststore.pass b/pm-file-flow-demo/docker-proj/config/dfc-common/truststore.pass
new file mode 100755
index 0000000..b915b0f
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/dfc-common/truststore.pass
@@ -0,0 +1 @@
+policy_agent
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/dfc1/application-template.yaml b/pm-file-flow-demo/docker-proj/config/dfc1/application-template.yaml
new file mode 100644
index 0000000..476e113
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/dfc1/application-template.yaml
@@ -0,0 +1,80 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+spring:
+ profiles:
+ active: prod
+management:
+ endpoints:
+ web:
+ exposure:
+ include: "loggers,logfile,health,info,metrics"
+server:
+ port: 8433
+ ssl:
+ key-store-type: JKS
+ key-store-password: policy_agent
+ key-store: config/keystore.jks
+ key-password: policy_agent
+ key-alias: policy_agent
+logging:
+ level:
+ ROOT: WARN
+ org.onap: WARN
+ org.springframework: WARN
+ #TRACE
+ org.springframework.data: WARN
+ org.springframework.web.reactive.function.client.ExchangeFunctions: WARN
+ org.onap.dcaegen2.collectors.datafile: WARN
+ #org.onap.dcaegen2.collectors.datafile: TRACE
+
+ file:
+ name: /var/log/ONAP/application.log
+app:
+ filepath: config/datafile_endpoints_test.json
+ collected-files-path: "/tmp/onap_datafile/"
+ # KAFKA boostrap servers. This is only needed if there are Information Types that uses a kafkaInputTopic
+ # several redundant boostrap servers can be specified, separated by a comma ','.
+ kafka:
+ bootstrap-servers: kafka-1:29092
+ # output topic
+ collected-file-topic: collected-file
+ client-id: datafile-1
+ # input topic
+ file-ready-event-topic: file-ready
+ sftp:
+ known-hosts-file-path:
+ strict-host-key-checking: false
+ ssl:
+ key-store-password-file: /opt/app/datafile/config/ftps_keystore.pass
+ key-store: /opt/app/datafile/config/ftps_keystore.p12
+ trust-store-password-file: /opt/app/datafile/config/truststore.pass
+ trust-store: /opt/app/datafile/config/truststore.jks
+ s3:
+ endpointOverride: $DFC_MINIO
+ accessKeyId: admin
+ secretAccessKey: adminadmin
+ bucket: ropfiles
+
+springdoc:
+ show-actuator: true
+ swagger-ui.disable-swagger-default-url: true
+################
+
+
+
+
diff --git a/pm-file-flow-demo/docker-proj/config/dfc1/application.yaml b/pm-file-flow-demo/docker-proj/config/dfc1/application.yaml
new file mode 100644
index 0000000..1f7f056
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/dfc1/application.yaml
@@ -0,0 +1,80 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+spring:
+ profiles:
+ active: prod
+management:
+ endpoints:
+ web:
+ exposure:
+ include: "loggers,logfile,health,info,metrics"
+server:
+ port: 8433
+ ssl:
+ key-store-type: JKS
+ key-store-password: policy_agent
+ key-store: config/keystore.jks
+ key-password: policy_agent
+ key-alias: policy_agent
+logging:
+ level:
+ ROOT: WARN
+ org.onap: WARN
+ org.springframework: WARN
+ #TRACE
+ org.springframework.data: WARN
+ org.springframework.web.reactive.function.client.ExchangeFunctions: WARN
+ org.onap.dcaegen2.collectors.datafile: WARN
+ #org.onap.dcaegen2.collectors.datafile: TRACE
+
+ file:
+ name: /var/log/ONAP/application.log
+app:
+ filepath: config/datafile_endpoints_test.json
+ collected-files-path: "/tmp/onap_datafile/"
+ # KAFKA boostrap servers. This is only needed if there are Information Types that uses a kafkaInputTopic
+ # several redundant boostrap servers can be specified, separated by a comma ','.
+ kafka:
+ bootstrap-servers: kafka-1:29092
+ # output topic
+ collected-file-topic: collected-file
+ client-id: datafile-1
+ # input topic
+ file-ready-event-topic: file-ready
+ sftp:
+ known-hosts-file-path:
+ strict-host-key-checking: false
+ ssl:
+ key-store-password-file: /opt/app/datafile/config/ftps_keystore.pass
+ key-store: /opt/app/datafile/config/ftps_keystore.p12
+ trust-store-password-file: /opt/app/datafile/config/truststore.pass
+ trust-store: /opt/app/datafile/config/truststore.jks
+ s3:
+ endpointOverride: http://minio-server:9000
+ accessKeyId: admin
+ secretAccessKey: adminadmin
+ bucket: ropfiles
+
+springdoc:
+ show-actuator: true
+ swagger-ui.disable-swagger-default-url: true
+################
+
+
+
+
diff --git a/pm-file-flow-demo/docker-proj/config/dfc1/truststore.jks b/pm-file-flow-demo/docker-proj/config/dfc1/truststore.jks
new file mode 100644
index 0000000..920df31
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/dfc1/truststore.jks
Binary files differ
diff --git a/pm-file-flow-demo/docker-proj/config/dfc2/application-template.yaml b/pm-file-flow-demo/docker-proj/config/dfc2/application-template.yaml
new file mode 100644
index 0000000..b90d6ce
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/dfc2/application-template.yaml
@@ -0,0 +1,79 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+spring:
+ profiles:
+ active: prod
+management:
+ endpoints:
+ web:
+ exposure:
+ include: "loggers,logfile,health,info,metrics"
+server:
+ port: 8433
+ ssl:
+ key-store-type: JKS
+ key-store-password: policy_agent
+ key-store: config/keystore.jks
+ key-password: policy_agent
+ key-alias: policy_agent
+logging:
+ level:
+ ROOT: WARN
+ org.onap: WARN
+ org.springframework: WARN
+ #TRACE
+ org.springframework.data: WARN
+ org.springframework.web.reactive.function.client.ExchangeFunctions: WARN
+ org.onap.dcaegen2.collectors.datafile: WARN
+ #org.onap.dcaegen2.collectors.datafile: TRACE
+
+ file:
+ name: /var/log/ONAP/application.log
+app:
+ filepath: config/datafile_endpoints_test.json
+ collected-files-path: "/tmp/onap_datafile/"
+ # KAFKA boostrap servers. This is only needed if there are Information Types that uses a kafkaInputTopic
+ # several redundant boostrap servers can be specified, separated by a comma ','.
+ kafka:
+ bootstrap-servers: kafka-1:29092
+ # output topic
+ collected-file-topic: collected-file
+ client-id: datafile-2
+ # input topic
+ file-ready-event-topic: file-ready
+ sftp:
+ known-hosts-file-path:
+ strict-host-key-checking: false
+ ssl:
+ key-store-password-file: /opt/app/datafile/config/ftps_keystore.pass
+ key-store: /opt/app/datafile/config/ftps_keystore.p12
+ trust-store-password-file: /opt/app/datafile/config/truststore.pass
+ trust-store: /opt/app/datafile/config/truststore.jks
+ s3:
+ endpointOverride: $DFC_MINIO
+ accessKeyId: admin
+ secretAccessKey: adminadmin
+ bucket: ropfiles
+springdoc:
+ show-actuator: true
+ swagger-ui.disable-swagger-default-url: true
+################
+
+
+
+
diff --git a/pm-file-flow-demo/docker-proj/config/dfc2/application.yaml b/pm-file-flow-demo/docker-proj/config/dfc2/application.yaml
new file mode 100644
index 0000000..adef711
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/dfc2/application.yaml
@@ -0,0 +1,79 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+spring:
+ profiles:
+ active: prod
+management:
+ endpoints:
+ web:
+ exposure:
+ include: "loggers,logfile,health,info,metrics"
+server:
+ port: 8433
+ ssl:
+ key-store-type: JKS
+ key-store-password: policy_agent
+ key-store: config/keystore.jks
+ key-password: policy_agent
+ key-alias: policy_agent
+logging:
+ level:
+ ROOT: WARN
+ org.onap: WARN
+ org.springframework: WARN
+ #TRACE
+ org.springframework.data: WARN
+ org.springframework.web.reactive.function.client.ExchangeFunctions: WARN
+ org.onap.dcaegen2.collectors.datafile: WARN
+ #org.onap.dcaegen2.collectors.datafile: TRACE
+
+ file:
+ name: /var/log/ONAP/application.log
+app:
+ filepath: config/datafile_endpoints_test.json
+ collected-files-path: "/tmp/onap_datafile/"
+ # KAFKA boostrap servers. This is only needed if there are Information Types that uses a kafkaInputTopic
+ # several redundant boostrap servers can be specified, separated by a comma ','.
+ kafka:
+ bootstrap-servers: kafka-1:29092
+ # output topic
+ collected-file-topic: collected-file
+ client-id: datafile-2
+ # input topic
+ file-ready-event-topic: file-ready
+ sftp:
+ known-hosts-file-path:
+ strict-host-key-checking: false
+ ssl:
+ key-store-password-file: /opt/app/datafile/config/ftps_keystore.pass
+ key-store: /opt/app/datafile/config/ftps_keystore.p12
+ trust-store-password-file: /opt/app/datafile/config/truststore.pass
+ trust-store: /opt/app/datafile/config/truststore.jks
+ s3:
+ endpointOverride:
+ accessKeyId: admin
+ secretAccessKey: adminadmin
+ bucket: ropfiles
+springdoc:
+ show-actuator: true
+ swagger-ui.disable-swagger-default-url: true
+################
+
+
+
+
diff --git a/pm-file-flow-demo/docker-proj/config/dfc2/truststore.jks b/pm-file-flow-demo/docker-proj/config/dfc2/truststore.jks
new file mode 100644
index 0000000..2191066
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/dfc2/truststore.jks
Binary files differ
diff --git a/pm-file-flow-demo/docker-proj/config/dmaap/MsgRtrApi.properties b/pm-file-flow-demo/docker-proj/config/dmaap/MsgRtrApi.properties
new file mode 100644
index 0000000..344b4d0
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/dmaap/MsgRtrApi.properties
@@ -0,0 +1,169 @@
+###############################################################################
+# ============LICENSE_START=======================================================
+# org.onap.dmaap
+# ================================================================================
+# Copyright � 2017 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=========================================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+###############################################################################
+###############################################################################
+##
+## Cambria API Server config
+##
+## - Default values are shown as commented settings.
+##
+
+###############################################################################
+##
+## HTTP service
+##
+## - 3904 is standard as of 7/29/14.
+#
+## Zookeeper Connection
+##
+## Both Cambria and Kafka make use of Zookeeper.
+##
+#config.zk.servers=172.18.1.1
+config.zk.servers=zookeeper-1:32181
+#config.zk.root=/fe3c/cambria/config
+
+
+###############################################################################
+##
+## Kafka Connection
+##
+## Items below are passed through to Kafka's producer and consumer
+## configurations (after removing "kafka.")
+## if you want to change request.required.acks it can take this one value
+#kafka.metadata.broker.list=localhost:9092,localhost:9093
+kafka.metadata.broker.list=kafka-1:29092
+##kafka.request.required.acks=-1
+#kafka.client.zookeeper=${config.zk.servers}
+consumer.timeout.ms=100
+zookeeper.connection.timeout.ms=6000
+zookeeper.session.timeout.ms=20000
+zookeeper.sync.time.ms=2000
+auto.commit.interval.ms=1000
+fetch.message.max.bytes =1000000
+auto.commit.enable=false
+
+#(backoff*retries > zksessiontimeout)
+kafka.rebalance.backoff.ms=10000
+kafka.rebalance.max.retries=6
+
+
+###############################################################################
+##
+## Secured Config
+##
+## Some data stored in the config system is sensitive -- API keys and secrets,
+## for example. to protect it, we use an encryption layer for this section
+## of the config.
+##
+## The key is a base64 encode AES key. This must be created/configured for
+## each installation.
+#cambria.secureConfig.key=
+##
+## The initialization vector is a 16 byte value specific to the secured store.
+## This must be created/configured for each installation.
+#cambria.secureConfig.iv=
+
+## Southfield Sandbox
+cambria.secureConfig.key=b/7ouTn9FfEw2PQwL0ov/Q==
+cambria.secureConfig.iv=wR9xP5k5vbz/xD0LmtqQLw==
+authentication.adminSecret=fe3cCompound
+#cambria.secureConfig.key[pc569h]=YT3XPyxEmKCTLI2NK+Sjbw==
+#cambria.secureConfig.iv[pc569h]=rMm2jhR3yVnU+u2V9Ugu3Q==
+
+
+###############################################################################
+##
+## Consumer Caching
+##
+## Kafka expects live connections from the consumer to the broker, which
+## obviously doesn't work over connectionless HTTP requests. The Cambria
+## server proxies HTTP requests into Kafka consumer sessions that are kept
+## around for later re-use. Not doing so is costly for setup per request,
+## which would substantially impact a high volume consumer's performance.
+##
+## This complicates Cambria server failover, because we often need server
+## A to close its connection before server B brings up the replacement.
+##
+
+## The consumer cache is normally enabled.
+#cambria.consumer.cache.enabled=true
+
+## Cached consumers are cleaned up after a period of disuse. The server inspects
+## consumers every sweepFreqSeconds and will clean up any connections that are
+## dormant for touchFreqMs.
+#cambria.consumer.cache.sweepFreqSeconds=15
+cambria.consumer.cache.touchFreqMs=120000
+##stickforallconsumerrequests=false
+## The cache is managed through ZK. The default value for the ZK connection
+## string is the same as config.zk.servers.
+#cambria.consumer.cache.zkConnect=${config.zk.servers}
+
+##
+## Shared cache information is associated with this node's name. The default
+## name is the hostname plus the HTTP service port this host runs on. (The
+## hostname is determined via InetAddress.getLocalHost ().getCanonicalHostName(),
+## which is not always adequate.) You can set this value explicitly here.
+##
+#cambria.api.node.identifier=<use-something-unique-to-this-instance>
+
+#cambria.rateLimit.maxEmptyPollsPerMinute=30
+#cambria.rateLimitActual.delay.ms=10
+
+###############################################################################
+##
+## Metrics Reporting
+##
+## This server can report its metrics periodically on a topic.
+##
+#metrics.send.cambria.enabled=true
+#metrics.send.cambria.topic=cambria.apinode.metrics #msgrtr.apinode.metrics.dmaap
+#metrics.send.cambria.sendEverySeconds=60
+
+cambria.consumer.cache.zkBasePath=/fe3c/cambria/consumerCache
+consumer.timeout=17
+
+##############################################################################
+#100mb
+maxcontentlength=10000
+
+
+##############################################################################
+#AAF Properties
+msgRtr.namespace.aaf=org.onap.dmaap.mr.topic
+msgRtr.topicfactory.aaf=org.onap.dmaap.mr.topicFactory|:org.onap.dmaap.mr.topic:
+enforced.topic.name.AAF=org.onap.dmaap.mr
+forceAAF=false
+transidUEBtopicreqd=false
+defaultNSforUEB=org.onap.dmaap.mr
+##############################################################################
+#Mirror Maker Agent
+msgRtr.mirrormakeradmin.aaf=org.onap.dmaap.mr.mirrormaker|*|admin
+msgRtr.mirrormakeruser.aaf=org.onap.dmaap.mr.mirrormaker|*|user
+msgRtr.mirrormakeruser.aaf.create=org.onap.dmaap.mr.topicFactory|:org.onap.dmaap.mr.topic:
+msgRtr.mirrormaker.timeout=15000
+msgRtr.mirrormaker.topic=org.onap.dmaap.mr.mmagent
+msgRtr.mirrormaker.consumergroup=mmagentserver
+msgRtr.mirrormaker.consumerid=1
+
+kafka.max.poll.interval.ms=300000
+kafka.heartbeat.interval.ms=60000
+kafka.session.timeout.ms=240000
+kafka.max.poll.records=1000
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/dmaap/cadi.properties b/pm-file-flow-demo/docker-proj/config/dmaap/cadi.properties
new file mode 100644
index 0000000..e5b544c
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/dmaap/cadi.properties
@@ -0,0 +1,36 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+#aaf_locate_url=https://aaf-locate.{{ include "common.namespace" . }}:8095
+aaf_url=https://AAF_LOCATE_URL/onap.org.osaaf.aaf.service:2.1
+aaf_env=DEV
+aaf_lur=org.onap.aaf.cadi.aaf.v2_0.AAFLurPerm
+
+#cadi_truststore=/appl/dmaapMR1/etc/org.onap.dmaap.mr.trust.jks
+#cadi_truststore_password=enc:mN6GiIzFQxKGDzAXDOs7b4j8DdIX02QrZ9QOWNRpxV3rD6whPCfizSMZkJwxi_FJ
+
+cadi_keyfile=/appl/dmaapMR1/etc/org.onap.dmaap.mr.keyfile
+
+cadi_alias=dmaapmr@mr.dmaap.onap.org
+cadi_keystore=/appl/dmaapMR1/etc/org.onap.dmaap.mr.p12
+cadi_keystore_password=enc:_JJT2gAEkRzXla5xfDIHal8pIoIB5iIos3USvZQT6sL-l14LpI5fRFR_QIGUCh5W
+cadi_x509_issuers=CN=intermediateCA_1, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_7, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_9, OU=OSAAF, O=ONAP, C=US
+
+cadi_loglevel=INFO
+cadi_protocols=TLSv1.1,TLSv1.2
+cadi_latitude=37.78187
+cadi_longitude=-122.26147
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/ftpes/certs/gen-certs.sh b/pm-file-flow-demo/docker-proj/config/ftpes/certs/gen-certs.sh
new file mode 100755
index 0000000..84091d1
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/ftpes/certs/gen-certs.sh
@@ -0,0 +1,90 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+echo "Generating ftpes certs"
+SD=$(dirname -- "$0")
+echo "script-home: "$SD
+
+cd $SD
+
+print_usage() {
+ echo "Usage: gen-certs.sh <num-certs>"
+ exit 1
+}
+
+check_error() {
+ if [ $1 -ne 0 ]; then
+ echo "Failed $2"
+ echo "Exiting..."
+ exit 1
+ fi
+}
+
+if [ $# -ne 1 ]; then
+ print_usage
+fi
+
+rm *.crt
+rm *.key
+
+echo "Generating ca cert and key"
+echo " Generating ca key"
+openssl genrsa 2048 > ca.key
+check_error $?
+
+echo " Generating ca cert"
+cat <<__EOF__ | openssl req -new -x509 -nodes -days 365000 -key ca.key -out ftpesca.crt
+SE
+.
+.
+EST
+EST
+$SRV
+.
+__EOF__
+check_error $?
+
+
+for (( i=1; i<=${1}; i++ )); do
+ SRV="ftp-ftpes-$i"
+
+ echo " Generating cert and key for server $SRV"
+cat <<__EOF__ | openssl req -newkey rsa:2048 -nodes -days 365000 -keyout ftpes-$i.key -out ftpes-req$i.crt
+SE
+.
+.
+ERIC
+ERIC
+$SRV
+.
+
+__EOF__
+ check_error $?
+
+ openssl x509 -req -days 365000 -set_serial 01 -in ftpes-req$i.crt -out ftpes-$i.crt -CA ftpesca.crt -CAkey ca.key
+ check_error $?
+
+ echo " Verifying cert towards ca cert"
+ openssl verify -CAfile ftpesca.crt ftpesca.crt ftpes-$i.crt
+ check_error $?
+
+done
+
+echo "DONE"
+exit 0
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/ftpes/sftpgo.json b/pm-file-flow-demo/docker-proj/config/ftpes/sftpgo.json
new file mode 100644
index 0000000..f48fa12
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/ftpes/sftpgo.json
@@ -0,0 +1,400 @@
+{
+ "common": {
+ "idle_timeout": 15,
+ "upload_mode": 0,
+ "actions": {
+ "execute_on": [],
+ "execute_sync": [],
+ "hook": ""
+ },
+ "setstat_mode": 0,
+ "temp_path": "",
+ "proxy_protocol": 0,
+ "proxy_allowed": [],
+ "startup_hook": "",
+ "post_connect_hook": "",
+ "post_disconnect_hook": "",
+ "data_retention_hook": "",
+ "max_total_connections": 0,
+ "max_per_host_connections": 100,
+ "whitelist_file": "",
+ "defender": {
+ "enabled": false,
+ "driver": "memory",
+ "ban_time": 30,
+ "ban_time_increment": 50,
+ "threshold": 15,
+ "score_invalid": 2,
+ "score_valid": 1,
+ "score_limit_exceeded": 3,
+ "observation_time": 30,
+ "entries_soft_limit": 100,
+ "entries_hard_limit": 150,
+ "safelist_file": "",
+ "blocklist_file": "",
+ "safelist": [],
+ "blocklist": []
+ },
+ "rate_limiters": [
+ {
+ "average": 0,
+ "period": 1000,
+ "burst": 1,
+ "type": 2,
+ "protocols": [
+ "SSH",
+ "FTP",
+ "DAV",
+ "HTTP"
+ ],
+ "allow_list": [],
+ "generate_defender_events": false,
+ "entries_soft_limit": 100,
+ "entries_hard_limit": 150
+ }
+ ]
+ },
+ "acme": {
+ "domains": [],
+ "email": "",
+ "key_type": "4096",
+ "certs_path": "certs",
+ "ca_endpoint": "https://acme-v02.api.letsencrypt.org/directory",
+ "renew_days": 30,
+ "http01_challenge": {
+ "port": 80,
+ "proxy_header": "",
+ "webroot": ""
+ },
+ "tls_alpn01_challenge": {
+ "port": 0
+ }
+ },
+ "sftpd": {
+ "bindings": [
+ {
+ "port": 2022,
+ "address": "",
+ "apply_proxy_config": true
+ }
+ ],
+ "max_auth_tries": 0,
+ "banner": "",
+ "host_keys": [],
+ "host_certificates": [],
+ "host_key_algorithms": [],
+ "kex_algorithms": [],
+ "ciphers": [],
+ "macs": [],
+ "trusted_user_ca_keys": [],
+ "revoked_user_certs_file": "",
+ "login_banner_file": "",
+ "enabled_ssh_commands": [
+ "md5sum",
+ "sha1sum",
+ "sha256sum",
+ "cd",
+ "pwd",
+ "scp"
+ ],
+ "keyboard_interactive_authentication": false,
+ "keyboard_interactive_auth_hook": "",
+ "password_authentication": true,
+ "folder_prefix": ""
+ },
+ "ftpd": {
+ "bindings": [
+ {
+ "port": 2021,
+ "address": "",
+ "apply_proxy_config": true,
+ "tls_mode": 0,
+ "certificate_file": "",
+ "certificate_key_file": "",
+ "min_tls_version": 12,
+ "force_passive_ip": "",
+ "passive_ip_overrides": [],
+ "client_auth_type": 0,
+ "tls_cipher_suites": [],
+ "passive_connections_security": 0,
+ "active_connections_security": 0,
+ "debug": false
+ }
+ ],
+ "banner": "",
+ "banner_file": "",
+ "active_transfers_port_non_20": true,
+ "passive_port_range": {
+ "start": 50000,
+ "end": 50100
+ },
+ "disable_active_mode": true,
+ "enable_site": false,
+ "hash_support": 0,
+ "combine_support": 0,
+ "certificate_file": "/etc/ssl/private/ftp.crt",
+ "certificate_key_file": "/etc/ssl/private/ftp.key",
+ "ca_certificates": ["/etc/ssl/private/ftpesca.crt"],
+ "ca_revocation_lists": []
+ },
+ "webdavd": {
+ "bindings": [
+ {
+ "port": 0,
+ "address": "",
+ "enable_https": false,
+ "certificate_file": "",
+ "certificate_key_file": "",
+ "min_tls_version": 12,
+ "client_auth_type": 0,
+ "tls_cipher_suites": [],
+ "prefix": "",
+ "proxy_allowed": [],
+ "client_ip_proxy_header": "",
+ "client_ip_header_depth": 0
+ }
+ ],
+ "certificate_file": "",
+ "certificate_key_file": "",
+ "ca_certificates": [],
+ "ca_revocation_lists": [],
+ "cors": {
+ "enabled": false,
+ "allowed_origins": [],
+ "allowed_methods": [],
+ "allowed_headers": [],
+ "exposed_headers": [],
+ "allow_credentials": false,
+ "max_age": 0
+ },
+ "cache": {
+ "users": {
+ "expiration_time": 0,
+ "max_size": 50
+ },
+ "mime_types": {
+ "enabled": true,
+ "max_size": 1000
+ }
+ }
+ },
+ "data_provider": {
+ "driver": "sqlite",
+ "name": "sftpgo.db",
+ "host": "",
+ "port": 0,
+ "username": "",
+ "password": "",
+ "sslmode": 0,
+ "root_cert": "",
+ "client_cert": "",
+ "client_key": "",
+ "connection_string": "",
+ "sql_tables_prefix": "",
+ "track_quota": 2,
+ "delayed_quota_update": 0,
+ "pool_size": 0,
+ "users_base_dir": "/srv/sftpgo/data",
+ "actions": {
+ "execute_on": [],
+ "execute_for": [],
+ "hook": ""
+ },
+ "external_auth_hook": "",
+ "external_auth_scope": 0,
+ "credentials_path": "credentials",
+ "pre_login_hook": "",
+ "post_login_hook": "",
+ "post_login_scope": 0,
+ "check_password_hook": "",
+ "check_password_scope": 0,
+ "password_hashing": {
+ "bcrypt_options": {
+ "cost": 10
+ },
+ "argon2_options": {
+ "memory": 65536,
+ "iterations": 1,
+ "parallelism": 2
+ },
+ "algo": "bcrypt"
+ },
+ "password_validation": {
+ "admins": {
+ "min_entropy": 0
+ },
+ "users": {
+ "min_entropy": 0
+ }
+ },
+ "password_caching": true,
+ "update_mode": 0,
+ "create_default_admin": false,
+ "naming_rules": 1,
+ "is_shared": 0,
+ "backups_path": "/srv/sftpgo/backups",
+ "auto_backup": {
+ "enabled": true,
+ "hour": "0",
+ "day_of_week": "*"
+ }
+ },
+ "httpd": {
+ "bindings": [
+ {
+ "port": 8080,
+ "address": "",
+ "enable_web_admin": true,
+ "enable_web_client": true,
+ "enabled_login_methods": 0,
+ "enable_https": false,
+ "certificate_file": "",
+ "certificate_key_file": "",
+ "min_tls_version": 12,
+ "client_auth_type": 0,
+ "tls_cipher_suites": [],
+ "proxy_allowed": [],
+ "client_ip_proxy_header": "",
+ "client_ip_header_depth": 0,
+ "hide_login_url": 0,
+ "render_openapi": true,
+ "web_client_integrations": [],
+ "oidc": {
+ "client_id": "",
+ "client_secret": "",
+ "config_url": "",
+ "redirect_base_url": "",
+ "scopes": [
+ "openid",
+ "profile",
+ "email"
+ ],
+ "username_field": "",
+ "role_field": "",
+ "implicit_roles": false,
+ "custom_fields": [],
+ "debug": false
+ },
+ "security": {
+ "enabled": false,
+ "allowed_hosts": [],
+ "allowed_hosts_are_regex": false,
+ "hosts_proxy_headers": [],
+ "https_redirect": false,
+ "https_host": "",
+ "https_proxy_headers": [],
+ "sts_seconds": 0,
+ "sts_include_subdomains": false,
+ "sts_preload": false,
+ "content_type_nosniff": false,
+ "content_security_policy": "",
+ "permissions_policy": "",
+ "cross_origin_opener_policy": "",
+ "expect_ct_header": ""
+ },
+ "branding": {
+ "web_admin": {
+ "name": "",
+ "short_name": "",
+ "favicon_path": "",
+ "logo_path": "",
+ "login_image_path": "",
+ "disclaimer_name": "",
+ "disclaimer_path": "",
+ "default_css": "",
+ "extra_css": []
+ },
+ "web_client": {
+ "name": "",
+ "short_name": "",
+ "favicon_path": "",
+ "logo_path": "",
+ "login_image_path": "",
+ "disclaimer_name": "",
+ "disclaimer_path": "",
+ "default_css": "",
+ "extra_css": []
+ }
+ }
+ }
+ ],
+ "templates_path": "templates",
+ "static_files_path": "static",
+ "openapi_path": "openapi",
+ "web_root": "",
+ "certificate_file": "",
+ "certificate_key_file": "",
+ "ca_certificates": [],
+ "ca_revocation_lists": [],
+ "signing_passphrase": "",
+ "token_validation": 0,
+ "max_upload_file_size": 1048576000,
+ "cors": {
+ "enabled": false,
+ "allowed_origins": [],
+ "allowed_methods": [],
+ "allowed_headers": [],
+ "exposed_headers": [],
+ "allow_credentials": false,
+ "max_age": 0
+ },
+ "setup": {
+ "installation_code": "",
+ "installation_code_hint": "Installation code"
+ },
+ "hide_support_link": false
+ },
+ "telemetry": {
+ "bind_port": 0,
+ "bind_address": "127.0.0.1",
+ "enable_profiler": false,
+ "auth_user_file": "",
+ "certificate_file": "",
+ "certificate_key_file": "",
+ "min_tls_version": 12,
+ "tls_cipher_suites": []
+ },
+ "http": {
+ "timeout": 20,
+ "retry_wait_min": 2,
+ "retry_wait_max": 30,
+ "retry_max": 3,
+ "ca_certificates": [],
+ "certificates": [],
+ "skip_tls_verify": false,
+ "headers": []
+ },
+ "command": {
+ "timeout": 30,
+ "env": [],
+ "commands": []
+ },
+ "kms": {
+ "secrets": {
+ "url": "",
+ "master_key": "",
+ "master_key_path": ""
+ }
+ },
+ "mfa": {
+ "totp": [
+ {
+ "name": "Default",
+ "issuer": "SFTPGo",
+ "algo": "sha1"
+ }
+ ]
+ },
+ "smtp": {
+ "host": "",
+ "port": 25,
+ "from": "",
+ "user": "",
+ "password": "",
+ "auth_type": 0,
+ "encryption": 0,
+ "domain": "",
+ "templates_path": "templates"
+ },
+ "plugins": []
+ }
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/https/certs/gen-certs.sh b/pm-file-flow-demo/docker-proj/config/https/certs/gen-certs.sh
new file mode 100755
index 0000000..934907b
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/https/certs/gen-certs.sh
@@ -0,0 +1,89 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+echo "Generating https certs"
+SD=$(dirname -- "$0")
+echo "script-home: "$SD
+
+cd $SD
+
+print_usage() {
+ echo "Usage: gen-certs.sh <num-certs>"
+ exit 1
+}
+
+check_error() {
+ if [ $1 -ne 0 ]; then
+ echo "Failed $2"
+ echo "Exiting..."
+ exit 1
+ fi
+}
+
+if [ $# -ne 1 ]; then
+ print_usage
+fi
+
+rm *.crt
+rm *.key
+
+echo "Generating ca cert and key"
+echo " Generating ca key"
+openssl genrsa 2048 > ca.key
+check_error $?
+
+echo " Generating ca cert"
+cat <<__EOF__ | openssl req -new -x509 -nodes -days 365000 -key ca.key -out httpsca.crt
+SE
+.
+.
+EST
+EST
+$SRV
+.
+__EOF__
+check_error $?
+
+
+for (( i=1; i<=${1}; i++ )); do
+ SRV="pm-https-server-$i"
+
+ echo " Generating cert and key for server $SRV"
+cat <<__EOF__ | openssl req -newkey rsa:2048 -nodes -days 365000 -keyout https-$i.key -out https-req$i.crt
+SE
+.
+.
+ERIC
+ERIC
+$SRV
+.
+
+__EOF__
+ check_error $?
+
+ openssl x509 -req -days 365000 -set_serial 01 -in https-req$i.crt -out https-$i.crt -CA httpsca.crt -CAkey ca.key
+ check_error $?
+ echo " Verifying cert towards ca cert"
+ openssl verify -CAfile httpsca.crt httpsca.crt https-$i.crt
+ check_error $?
+
+done
+
+echo "DONE"
+exit 0
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/ics/application.yaml b/pm-file-flow-demo/docker-proj/config/ics/application.yaml
new file mode 100644
index 0000000..2434fa3
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/ics/application.yaml
@@ -0,0 +1,69 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+spring:
+ profiles:
+ active: prod
+ main:
+ allow-bean-definition-overriding: true
+ aop:
+ auto: false
+springdoc:
+ show-actuator: true
+management:
+ endpoints:
+ web:
+ exposure:
+ # Enabling of springboot actuator features. See springboot documentation.
+ include: "loggers,logfile,health,info,metrics,threaddump,heapdump"
+
+logging:
+ # Configuration of logging
+ level:
+ ROOT: ERROR
+ org.springframework: ERROR
+ org.springframework.data: ERROR
+ org.springframework.web.reactive.function.client.ExchangeFunctions: ERROR
+ org.oransc.ics: DEBUG
+ file:
+ name: /var/log/information-coordinator-service/application.log
+server:
+ # Configuration of the HTTP/REST server. The parameters are defined and handeled by the springboot framework.
+ # See springboot documentation.
+ port : 8434
+ http-port: 8083
+ ssl:
+ key-store-type: JKS
+ key-store-password: policy_agent
+ key-store: /opt/app/information-coordinator-service/etc/cert/keystore.jks
+ key-password: policy_agent
+ key-alias: policy_agent
+app:
+ webclient:
+ # Configuration of the trust store used for the HTTP client (outgoing requests)
+ # The file location and the password for the truststore is only relevant if trust-store-used == true
+ # Note that the same keystore as for the server is used.
+ trust-store-used: false
+ trust-store-password: policy_agent
+ trust-store: /opt/app/information-coordinator-service/etc/cert/truststore.jks
+ # Configuration of usage of HTTP Proxy for the southbound accesses.
+ # The HTTP proxy (if configured) will only be used for accessing NearRT RIC:s
+ http.proxy-host:
+ http.proxy-port: 0
+ vardata-directory: /var/information-coordinator-service
+ # If the file name is empty, no authorzation token is sent
+ auth-token-file:
diff --git a/pm-file-flow-demo/docker-proj/config/kowl/config.yaml b/pm-file-flow-demo/docker-proj/config/kowl/config.yaml
new file mode 100644
index 0000000..9471031
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/kowl/config.yaml
@@ -0,0 +1,20 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+kafka:
+ brokers:
+ - kafka-1:29092
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/kp1/application_configuration-file.json b/pm-file-flow-demo/docker-proj/config/kp1/application_configuration-file.json
new file mode 100644
index 0000000..e549eca
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/kp1/application_configuration-file.json
@@ -0,0 +1,12 @@
+{
+ "types": [
+ {
+ "id": "json-file-data",
+ "kafkaInputTopic": "json-file-ready-kp",
+ "inputJobType": "xml-file-data",
+ "inputJobDefinition": {
+ "kafkaOutputTopic": "json-file-ready-kp"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/kp1/application_configuration-minio.json b/pm-file-flow-demo/docker-proj/config/kp1/application_configuration-minio.json
new file mode 100644
index 0000000..a4648c1
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/kp1/application_configuration-minio.json
@@ -0,0 +1,12 @@
+{
+ "types": [
+ {
+ "id": "json-file-data-from-filestore",
+ "kafkaInputTopic": "json-file-ready-kp",
+ "inputJobType": "xml-file-data-to-filestore",
+ "inputJobDefinition": {
+ "kafkaOutputTopic": "json-file-ready-kp"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/kp1/application_configuration.json b/pm-file-flow-demo/docker-proj/config/kp1/application_configuration.json
new file mode 100644
index 0000000..a4648c1
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/kp1/application_configuration.json
@@ -0,0 +1,12 @@
+{
+ "types": [
+ {
+ "id": "json-file-data-from-filestore",
+ "kafkaInputTopic": "json-file-ready-kp",
+ "inputJobType": "xml-file-data-to-filestore",
+ "inputJobDefinition": {
+ "kafkaOutputTopic": "json-file-ready-kp"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/kpadp200/application-file-template.yaml b/pm-file-flow-demo/docker-proj/config/kpadp200/application-file-template.yaml
new file mode 100644
index 0000000..e39289f
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/kpadp200/application-file-template.yaml
@@ -0,0 +1,84 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+spring:
+ profiles:
+ active: prod
+ main:
+ allow-bean-definition-overriding: true
+ aop:
+ auto: false
+management:
+ endpoints:
+ web:
+ exposure:
+ # Enabling of springboot actuator features. See springboot documentation.
+ include: "loggers,logfile,health,info,metrics,threaddump,heapdump"
+springdoc:
+ show-actuator: true
+logging:
+ # Configuration of logging
+ level:
+ ROOT: WARN
+ org.apache.kafka: WARN
+ org.springframework: ERROR
+ org.springframework.data: ERROR
+ org.springframework.web.reactive.function.client.ExchangeFunctions: ERROR
+ org.oran.dmaapadapter: INFO
+ #org.oran.dmaapadapter: TRACE
+
+ file:
+ name: /var/log/dmaap-adapter-service/application.log
+server:
+ # Configuration of the HTTP/REST server. The parameters are defined and handeled by the springboot framework.
+ # See springboot documentation.
+ port : 8435
+ http-port: 8084
+ ssl:
+ key-store-type: JKS
+ key-store-password: policy_agent
+ key-store: /opt/app/dmaap-adapter-service/etc/cert/keystore.jks
+ key-password: policy_agent
+ key-alias: policy_agent
+app:
+ webclient:
+ # Configuration of the trust store used for the HTTP client (outgoing requests)
+ # The file location and the password for the truststore is only relevant if trust-store-used == true
+ # Note that the same keystore as for the server is used.
+ trust-store-used: false
+ trust-store-password: policy_agent
+ trust-store: /opt/app/dmaap-adapter-service/etc/cert/truststore.jks
+ # Configuration of usage of HTTP Proxy for the southbound accesses.
+ # The HTTP proxy (if configured) will only be used for accessing NearRT RIC:s
+ http.proxy-host:
+ http.proxy-port: 0
+ ics-base-url: https://ics:8434
+ # Location of the component configuration file. The file will only be used if the Consul database is not used;
+ # configuration from the Consul will override the file.
+ configuration-filepath: /opt/app/dmaap-adapter-service/data/application_configuration.json
+ dmaap-base-url: http://dradmin:dradmin@localhost:2222
+ # The url used to adress this component. This is used as a callback url sent to other components.
+ dmaap-adapter-base-url: https://kpadp200:8435
+ # KAFKA boostrap servers. This is only needed if there are Information Types that uses a kafkaInputTopic
+ # several redundant boostrap servers can be specified, separated by a comma ','.
+ kafka:
+ bootstrap-servers: kafka-1:29092
+ # The maximum number of records returned in a single call to poll() (default 100)
+ max-poll-records: 500
+ # If the file name is empty, no authorization token is used
+ auth-token-file:
+ pm-files-path: /pm-files
diff --git a/pm-file-flow-demo/docker-proj/config/kpadp200/application-minio-template.yaml b/pm-file-flow-demo/docker-proj/config/kpadp200/application-minio-template.yaml
new file mode 100644
index 0000000..98f9e33
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/kpadp200/application-minio-template.yaml
@@ -0,0 +1,89 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+spring:
+ profiles:
+ active: prod
+ main:
+ allow-bean-definition-overriding: true
+ aop:
+ auto: false
+management:
+ endpoints:
+ web:
+ exposure:
+ # Enabling of springboot actuator features. See springboot documentation.
+ include: "loggers,logfile,health,info,metrics,threaddump,heapdump"
+springdoc:
+ show-actuator: true
+logging:
+ # Configuration of logging
+ level:
+ ROOT: WARN
+ org.apache.kafka: WARN
+ org.springframework: ERROR
+ org.springframework.data: ERROR
+ org.springframework.web.reactive.function.client.ExchangeFunctions: ERROR
+ org.oran.dmaapadapter: INFO
+
+ file:
+ name: /var/log/dmaap-adapter-service/application.log
+server:
+ # Configuration of the HTTP/REST server. The parameters are defined and handeled by the springboot framework.
+ # See springboot documentation.
+ port : 8435
+ http-port: 8084
+ ssl:
+ key-store-type: JKS
+ key-store-password: policy_agent
+ key-store: /opt/app/dmaap-adapter-service/etc/cert/keystore.jks
+ key-password: policy_agent
+ key-alias: policy_agent
+app:
+ webclient:
+ # Configuration of the trust store used for the HTTP client (outgoing requests)
+ # The file location and the password for the truststore is only relevant if trust-store-used == true
+ # Note that the same keystore as for the server is used.
+ trust-store-used: false
+ trust-store-password: policy_agent
+ trust-store: /opt/app/dmaap-adapter-service/etc/cert/truststore.jks
+ # Configuration of usage of HTTP Proxy for the southbound accesses.
+ # The HTTP proxy (if configured) will only be used for accessing NearRT RIC:s
+ http.proxy-host:
+ http.proxy-port: 0
+ ics-base-url: https://ics:8434
+ # Location of the component configuration file. The file will only be used if the Consul database is not used;
+ # configuration from the Consul will override the file.
+ configuration-filepath: /opt/app/dmaap-adapter-service/data/application_configuration.json
+ dmaap-base-url: http://dradmin:dradmin@localhost:2222
+ # The url used to adress this component. This is used as a callback url sent to other components.
+ dmaap-adapter-base-url: https://kpadp200:8435
+ # KAFKA boostrap servers. This is only needed if there are Information Types that uses a kafkaInputTopic
+ # several redundant boostrap servers can be specified, separated by a comma ','.
+ kafka:
+ bootstrap-servers: kafka-1:29092
+ # The maximum number of records returned in a single call to poll() (default 100)
+ max-poll-records: 500
+ # If the file name is empty, no authorization token is used
+ auth-token-file:
+ pm-files-path: /pm-files
+ s3:
+ endpointOverride: $KPADP_MINIO
+ accessKeyId: admin
+ secretAccessKey: adminadmin
+ locksBucket: pm-files-json-locks
+ bucket: pm-files-json
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/kpadp200/application.yaml b/pm-file-flow-demo/docker-proj/config/kpadp200/application.yaml
new file mode 100644
index 0000000..f20745e
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/kpadp200/application.yaml
@@ -0,0 +1,89 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+spring:
+ profiles:
+ active: prod
+ main:
+ allow-bean-definition-overriding: true
+ aop:
+ auto: false
+management:
+ endpoints:
+ web:
+ exposure:
+ # Enabling of springboot actuator features. See springboot documentation.
+ include: "loggers,logfile,health,info,metrics,threaddump,heapdump"
+springdoc:
+ show-actuator: true
+logging:
+ # Configuration of logging
+ level:
+ ROOT: WARN
+ org.apache.kafka: WARN
+ org.springframework: ERROR
+ org.springframework.data: ERROR
+ org.springframework.web.reactive.function.client.ExchangeFunctions: ERROR
+ org.oran.dmaapadapter: INFO
+
+ file:
+ name: /var/log/dmaap-adapter-service/application.log
+server:
+ # Configuration of the HTTP/REST server. The parameters are defined and handeled by the springboot framework.
+ # See springboot documentation.
+ port : 8435
+ http-port: 8084
+ ssl:
+ key-store-type: JKS
+ key-store-password: policy_agent
+ key-store: /opt/app/dmaap-adapter-service/etc/cert/keystore.jks
+ key-password: policy_agent
+ key-alias: policy_agent
+app:
+ webclient:
+ # Configuration of the trust store used for the HTTP client (outgoing requests)
+ # The file location and the password for the truststore is only relevant if trust-store-used == true
+ # Note that the same keystore as for the server is used.
+ trust-store-used: false
+ trust-store-password: policy_agent
+ trust-store: /opt/app/dmaap-adapter-service/etc/cert/truststore.jks
+ # Configuration of usage of HTTP Proxy for the southbound accesses.
+ # The HTTP proxy (if configured) will only be used for accessing NearRT RIC:s
+ http.proxy-host:
+ http.proxy-port: 0
+ ics-base-url: https://ics:8434
+ # Location of the component configuration file. The file will only be used if the Consul database is not used;
+ # configuration from the Consul will override the file.
+ configuration-filepath: /opt/app/dmaap-adapter-service/data/application_configuration.json
+ dmaap-base-url: http://dradmin:dradmin@localhost:2222
+ # The url used to adress this component. This is used as a callback url sent to other components.
+ dmaap-adapter-base-url: https://kpadp200:8435
+ # KAFKA boostrap servers. This is only needed if there are Information Types that uses a kafkaInputTopic
+ # several redundant boostrap servers can be specified, separated by a comma ','.
+ kafka:
+ bootstrap-servers: kafka-1:29092
+ # The maximum number of records returned in a single call to poll() (default 100)
+ max-poll-records: 500
+ # If the file name is empty, no authorization token is used
+ auth-token-file:
+ pm-files-path: /pm-files
+ s3:
+ endpointOverride: http://minio-server:9000
+ accessKeyId: admin
+ secretAccessKey: adminadmin
+ locksBucket: pm-files-json-locks
+ bucket: pm-files-json
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/kpadp200/application_configuration-file-template.json b/pm-file-flow-demo/docker-proj/config/kpadp200/application_configuration-file-template.json
new file mode 100644
index 0000000..88b5ae2
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/kpadp200/application_configuration-file-template.json
@@ -0,0 +1,14 @@
+{
+ "types": [
+ {
+ "id": "PmData",
+ "kafkaInputTopic": "json-file-ready-kpadp",
+ "useHttpProxy": false,
+ "dataType": "pmData",
+ "inputJobType": "xml-file-data",
+ "inputJobDefinition": {
+ "kafkaOutputTopic": "json-file-ready-kpadp"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/kpadp200/application_configuration-minio-template.json b/pm-file-flow-demo/docker-proj/config/kpadp200/application_configuration-minio-template.json
new file mode 100644
index 0000000..7c8a550
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/kpadp200/application_configuration-minio-template.json
@@ -0,0 +1,14 @@
+{
+ "types": [
+ {
+ "id": "PmData",
+ "kafkaInputTopic": "json-file-ready-kpadp",
+ "useHttpProxy": false,
+ "dataType": "pmData",
+ "inputJobType": "xml-file-data-to-filestore",
+ "inputJobDefinition": {
+ "kafkaOutputTopic": "json-file-ready-kpadp"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/kpadp200/application_configuration.json b/pm-file-flow-demo/docker-proj/config/kpadp200/application_configuration.json
new file mode 100644
index 0000000..7c8a550
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/kpadp200/application_configuration.json
@@ -0,0 +1,14 @@
+{
+ "types": [
+ {
+ "id": "PmData",
+ "kafkaInputTopic": "json-file-ready-kpadp",
+ "useHttpProxy": false,
+ "dataType": "pmData",
+ "inputJobType": "xml-file-data-to-filestore",
+ "inputJobDefinition": {
+ "kafkaOutputTopic": "json-file-ready-kpadp"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/kpm100/application_configuration-file.json b/pm-file-flow-demo/docker-proj/config/kpm100/application_configuration-file.json
new file mode 100644
index 0000000..4c4fb5c
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/kpm100/application_configuration-file.json
@@ -0,0 +1,8 @@
+{
+ "types": [
+ {
+ "id": "xml-file-data",
+ "kafkaInputTopic": "collected-file"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/kpm100/application_configuration-minio.json b/pm-file-flow-demo/docker-proj/config/kpm100/application_configuration-minio.json
new file mode 100644
index 0000000..4c1bbdd
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/kpm100/application_configuration-minio.json
@@ -0,0 +1,8 @@
+{
+ "types": [
+ {
+ "id": "xml-file-data-to-filestore",
+ "kafkaInputTopic": "collected-file"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/kpm100/application_configuration.json b/pm-file-flow-demo/docker-proj/config/kpm100/application_configuration.json
new file mode 100644
index 0000000..4c1bbdd
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/kpm100/application_configuration.json
@@ -0,0 +1,8 @@
+{
+ "types": [
+ {
+ "id": "xml-file-data-to-filestore",
+ "kafkaInputTopic": "collected-file"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/kpm101/application_configuration-file.json b/pm-file-flow-demo/docker-proj/config/kpm101/application_configuration-file.json
new file mode 100644
index 0000000..4c4fb5c
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/kpm101/application_configuration-file.json
@@ -0,0 +1,8 @@
+{
+ "types": [
+ {
+ "id": "xml-file-data",
+ "kafkaInputTopic": "collected-file"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/kpm101/application_configuration-minio.json b/pm-file-flow-demo/docker-proj/config/kpm101/application_configuration-minio.json
new file mode 100644
index 0000000..4c1bbdd
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/kpm101/application_configuration-minio.json
@@ -0,0 +1,8 @@
+{
+ "types": [
+ {
+ "id": "xml-file-data-to-filestore",
+ "kafkaInputTopic": "collected-file"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/kpm101/application_configuration.json b/pm-file-flow-demo/docker-proj/config/kpm101/application_configuration.json
new file mode 100644
index 0000000..4c1bbdd
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/kpm101/application_configuration.json
@@ -0,0 +1,8 @@
+{
+ "types": [
+ {
+ "id": "xml-file-data-to-filestore",
+ "kafkaInputTopic": "collected-file"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/sftp/sftpgo.json b/pm-file-flow-demo/docker-proj/config/sftp/sftpgo.json
new file mode 100644
index 0000000..2b8b7b9
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/sftp/sftpgo.json
@@ -0,0 +1,400 @@
+{
+ "common": {
+ "idle_timeout": 15,
+ "upload_mode": 0,
+ "actions": {
+ "execute_on": [],
+ "execute_sync": [],
+ "hook": ""
+ },
+ "setstat_mode": 0,
+ "temp_path": "",
+ "proxy_protocol": 0,
+ "proxy_allowed": [],
+ "startup_hook": "",
+ "post_connect_hook": "",
+ "post_disconnect_hook": "",
+ "data_retention_hook": "",
+ "max_total_connections": 0,
+ "max_per_host_connections": 100,
+ "whitelist_file": "",
+ "defender": {
+ "enabled": false,
+ "driver": "memory",
+ "ban_time": 30,
+ "ban_time_increment": 50,
+ "threshold": 15,
+ "score_invalid": 2,
+ "score_valid": 1,
+ "score_limit_exceeded": 3,
+ "observation_time": 30,
+ "entries_soft_limit": 100,
+ "entries_hard_limit": 150,
+ "safelist_file": "",
+ "blocklist_file": "",
+ "safelist": [],
+ "blocklist": []
+ },
+ "rate_limiters": [
+ {
+ "average": 0,
+ "period": 1000,
+ "burst": 1,
+ "type": 2,
+ "protocols": [
+ "SSH",
+ "FTP",
+ "DAV",
+ "HTTP"
+ ],
+ "allow_list": [],
+ "generate_defender_events": false,
+ "entries_soft_limit": 100,
+ "entries_hard_limit": 150
+ }
+ ]
+ },
+ "acme": {
+ "domains": [],
+ "email": "",
+ "key_type": "4096",
+ "certs_path": "certs",
+ "ca_endpoint": "https://acme-v02.api.letsencrypt.org/directory",
+ "renew_days": 30,
+ "http01_challenge": {
+ "port": 80,
+ "proxy_header": "",
+ "webroot": ""
+ },
+ "tls_alpn01_challenge": {
+ "port": 0
+ }
+ },
+ "sftpd": {
+ "bindings": [
+ {
+ "port": 2022,
+ "address": "",
+ "apply_proxy_config": true
+ }
+ ],
+ "max_auth_tries": 0,
+ "banner": "",
+ "host_keys": [],
+ "host_certificates": [],
+ "host_key_algorithms": [],
+ "kex_algorithms": [],
+ "ciphers": [],
+ "macs": [],
+ "trusted_user_ca_keys": [],
+ "revoked_user_certs_file": "",
+ "login_banner_file": "",
+ "enabled_ssh_commands": [
+ "md5sum",
+ "sha1sum",
+ "sha256sum",
+ "cd",
+ "pwd",
+ "scp"
+ ],
+ "keyboard_interactive_authentication": false,
+ "keyboard_interactive_auth_hook": "",
+ "password_authentication": true,
+ "folder_prefix": ""
+ },
+ "ftpd": {
+ "bindings": [
+ {
+ "port": 0,
+ "address": "",
+ "apply_proxy_config": true,
+ "tls_mode": 0,
+ "certificate_file": "",
+ "certificate_key_file": "",
+ "min_tls_version": 12,
+ "force_passive_ip": "",
+ "passive_ip_overrides": [],
+ "client_auth_type": 0,
+ "tls_cipher_suites": [],
+ "passive_connections_security": 0,
+ "active_connections_security": 0,
+ "debug": false
+ }
+ ],
+ "banner": "",
+ "banner_file": "",
+ "active_transfers_port_non_20": true,
+ "passive_port_range": {
+ "start": 50000,
+ "end": 50100
+ },
+ "disable_active_mode": false,
+ "enable_site": false,
+ "hash_support": 0,
+ "combine_support": 0,
+ "certificate_file": "",
+ "certificate_key_file": "",
+ "ca_certificates": [],
+ "ca_revocation_lists": []
+ },
+ "webdavd": {
+ "bindings": [
+ {
+ "port": 0,
+ "address": "",
+ "enable_https": false,
+ "certificate_file": "",
+ "certificate_key_file": "",
+ "min_tls_version": 12,
+ "client_auth_type": 0,
+ "tls_cipher_suites": [],
+ "prefix": "",
+ "proxy_allowed": [],
+ "client_ip_proxy_header": "",
+ "client_ip_header_depth": 0
+ }
+ ],
+ "certificate_file": "",
+ "certificate_key_file": "",
+ "ca_certificates": [],
+ "ca_revocation_lists": [],
+ "cors": {
+ "enabled": false,
+ "allowed_origins": [],
+ "allowed_methods": [],
+ "allowed_headers": [],
+ "exposed_headers": [],
+ "allow_credentials": false,
+ "max_age": 0
+ },
+ "cache": {
+ "users": {
+ "expiration_time": 0,
+ "max_size": 50
+ },
+ "mime_types": {
+ "enabled": true,
+ "max_size": 1000
+ }
+ }
+ },
+ "data_provider": {
+ "driver": "sqlite",
+ "name": "sftpgo.db",
+ "host": "",
+ "port": 0,
+ "username": "",
+ "password": "",
+ "sslmode": 0,
+ "root_cert": "",
+ "client_cert": "",
+ "client_key": "",
+ "connection_string": "",
+ "sql_tables_prefix": "",
+ "track_quota": 2,
+ "delayed_quota_update": 0,
+ "pool_size": 0,
+ "users_base_dir": "/srv/sftpgo/data",
+ "actions": {
+ "execute_on": [],
+ "execute_for": [],
+ "hook": ""
+ },
+ "external_auth_hook": "",
+ "external_auth_scope": 0,
+ "credentials_path": "credentials",
+ "pre_login_hook": "",
+ "post_login_hook": "",
+ "post_login_scope": 0,
+ "check_password_hook": "",
+ "check_password_scope": 0,
+ "password_hashing": {
+ "bcrypt_options": {
+ "cost": 10
+ },
+ "argon2_options": {
+ "memory": 65536,
+ "iterations": 1,
+ "parallelism": 2
+ },
+ "algo": "bcrypt"
+ },
+ "password_validation": {
+ "admins": {
+ "min_entropy": 0
+ },
+ "users": {
+ "min_entropy": 0
+ }
+ },
+ "password_caching": true,
+ "update_mode": 0,
+ "create_default_admin": false,
+ "naming_rules": 1,
+ "is_shared": 0,
+ "backups_path": "/srv/sftpgo/backups",
+ "auto_backup": {
+ "enabled": true,
+ "hour": "0",
+ "day_of_week": "*"
+ }
+ },
+ "httpd": {
+ "bindings": [
+ {
+ "port": 8080,
+ "address": "",
+ "enable_web_admin": true,
+ "enable_web_client": true,
+ "enabled_login_methods": 0,
+ "enable_https": false,
+ "certificate_file": "",
+ "certificate_key_file": "",
+ "min_tls_version": 12,
+ "client_auth_type": 0,
+ "tls_cipher_suites": [],
+ "proxy_allowed": [],
+ "client_ip_proxy_header": "",
+ "client_ip_header_depth": 0,
+ "hide_login_url": 0,
+ "render_openapi": true,
+ "web_client_integrations": [],
+ "oidc": {
+ "client_id": "",
+ "client_secret": "",
+ "config_url": "",
+ "redirect_base_url": "",
+ "scopes": [
+ "openid",
+ "profile",
+ "email"
+ ],
+ "username_field": "",
+ "role_field": "",
+ "implicit_roles": false,
+ "custom_fields": [],
+ "debug": false
+ },
+ "security": {
+ "enabled": false,
+ "allowed_hosts": [],
+ "allowed_hosts_are_regex": false,
+ "hosts_proxy_headers": [],
+ "https_redirect": false,
+ "https_host": "",
+ "https_proxy_headers": [],
+ "sts_seconds": 0,
+ "sts_include_subdomains": false,
+ "sts_preload": false,
+ "content_type_nosniff": false,
+ "content_security_policy": "",
+ "permissions_policy": "",
+ "cross_origin_opener_policy": "",
+ "expect_ct_header": ""
+ },
+ "branding": {
+ "web_admin": {
+ "name": "",
+ "short_name": "",
+ "favicon_path": "",
+ "logo_path": "",
+ "login_image_path": "",
+ "disclaimer_name": "",
+ "disclaimer_path": "",
+ "default_css": "",
+ "extra_css": []
+ },
+ "web_client": {
+ "name": "",
+ "short_name": "",
+ "favicon_path": "",
+ "logo_path": "",
+ "login_image_path": "",
+ "disclaimer_name": "",
+ "disclaimer_path": "",
+ "default_css": "",
+ "extra_css": []
+ }
+ }
+ }
+ ],
+ "templates_path": "templates",
+ "static_files_path": "static",
+ "openapi_path": "openapi",
+ "web_root": "",
+ "certificate_file": "",
+ "certificate_key_file": "",
+ "ca_certificates": [],
+ "ca_revocation_lists": [],
+ "signing_passphrase": "",
+ "token_validation": 0,
+ "max_upload_file_size": 1048576000,
+ "cors": {
+ "enabled": false,
+ "allowed_origins": [],
+ "allowed_methods": [],
+ "allowed_headers": [],
+ "exposed_headers": [],
+ "allow_credentials": false,
+ "max_age": 0
+ },
+ "setup": {
+ "installation_code": "",
+ "installation_code_hint": "Installation code"
+ },
+ "hide_support_link": false
+ },
+ "telemetry": {
+ "bind_port": 0,
+ "bind_address": "127.0.0.1",
+ "enable_profiler": false,
+ "auth_user_file": "",
+ "certificate_file": "",
+ "certificate_key_file": "",
+ "min_tls_version": 12,
+ "tls_cipher_suites": []
+ },
+ "http": {
+ "timeout": 20,
+ "retry_wait_min": 2,
+ "retry_wait_max": 30,
+ "retry_max": 3,
+ "ca_certificates": [],
+ "certificates": [],
+ "skip_tls_verify": false,
+ "headers": []
+ },
+ "command": {
+ "timeout": 30,
+ "env": [],
+ "commands": []
+ },
+ "kms": {
+ "secrets": {
+ "url": "",
+ "master_key": "",
+ "master_key_path": ""
+ }
+ },
+ "mfa": {
+ "totp": [
+ {
+ "name": "Default",
+ "issuer": "SFTPGo",
+ "algo": "sha1"
+ }
+ ]
+ },
+ "smtp": {
+ "host": "",
+ "port": 25,
+ "from": "",
+ "user": "",
+ "password": "",
+ "auth_type": 0,
+ "encryption": 0,
+ "domain": "",
+ "templates_path": "templates"
+ },
+ "plugins": []
+ }
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/config/ves-collector/collector.properties b/pm-file-flow-demo/docker-proj/config/ves-collector/collector.properties
new file mode 100644
index 0000000..34e454d
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/ves-collector/collector.properties
@@ -0,0 +1,77 @@
+###############################################################################
+##
+## Collector Server config
+##
+## - Default values are shown as commented settings.
+##
+###############################################################################
+##
+## HTTP(S) service
+##
+## Normally:
+##
+## - 8080 is http service
+## - https is disabled by default
+##
+## - At this time, the server always binds to 0.0.0.0
+##
+##
+#collector.service.port=8080
+
+## Authentication is only supported via secure port
+## When enabled - require valid keystore defined
+collector.service.secure.port=8443
+
+# auth.method flags:
+#
+# noAuth - default option - no security (http)
+# certBasicAuth - auth by certificate and basic auth username / password (https)
+#auth.method=certBasicAuth
+auth.method=noAuth
+
+## Combination of userid,hashPassword encoded pwd list to be supported
+## userid and pwd comma separated; pipe delimitation between each pair
+## Password is generated by crypt-password library using BCrypt algorithm stored in dcaegen2/sdk package
+## or https://nexus.onap.org/#nexus-search;quick~crypt-password
+header.authlist=sample1,$2a$10$0buh.2WeYwN868YMwnNNEuNEAMNYVU9.FSMJGyIKV3dGET/7oGOi6
+
+## The keystore must be setup per installation when secure port is configured
+collector.keystore.file.location=etc/keystore
+collector.keystore.passwordfile=etc/passwordfile
+
+collector.cert.subject.matcher=etc/certSubjectMatcher.properties
+
+## The truststore must be setup per installation when mutual tls support is configured
+collector.truststore.file.location=etc/truststore
+collector.truststore.passwordfile=etc/trustpasswordfile
+
+## Schema Validation checkflag
+## default no validation checkflag (-1)
+## If enabled (1) - schemafile location must be specified
+collector.schema.checkflag=1
+collector.schema.file={\"v1\":\"./etc/CommonEventFormat_27.2.json\",\"v2\":\"./etc/CommonEventFormat_27.2.json\",\"v3\":\"./etc/CommonEventFormat_27.2.json\",\"v4\":\"./etc/CommonEventFormat_27.2.json\",\"v5\":\"./etc/CommonEventFormat_28.4.1.json\",\"v7\":\"./etc/CommonEventFormat_30.2.1_ONAP.json\"}
+
+## Schema StndDefinedFields Validation checkflag
+## default no validation checkflag (-1)
+## If enabled (1) - schema files locations must be specified, mapping file path must be specified, schema reference path
+## in event json must be specified, path to stndDefined data field in event json must be specified
+collector.externalSchema.checkflag=1
+collector.externalSchema.schemasLocation=./etc/externalRepo/
+collector.externalSchema.mappingFileLocation=./etc/externalRepo/schema-map.json
+event.externalSchema.schemaRefPath=$.event.stndDefinedFields.schemaReference
+event.externalSchema.stndDefinedDataPath=$.event.stndDefinedFields.data
+
+## List all streamid per domain to be supported. The streamid should match to channel name on dmaapfile
+collector.dmaap.streamid=fault=ves-fault|syslog=ves-syslog|heartbeat=ves-heartbeat|measurementsForVfScaling=ves-measurement|mobileFlow=ves-mobileflow|other=ves-other|stateChange=ves-statechange|thresholdCrossingAlert=ves-thresholdCrossingAlert|voiceQuality=ves-voicequality|sipSignaling=ves-sipsignaling|notification=ves-measurement|pnfRegistration=ves-pnfRegistration|3GPP-FaultSupervision=ves-3gpp-fault-supervision|3GPP-Heartbeat=ves-3gpp-heartbeat|3GPP-Provisioning=ves-3gpp-provisioning|3GPP-PerformanceAssurance=ves-3gpp-performance-assurance|o-ran-sc-du-hello-world-pm-streaming-oas3=ves-o-ran-sc-du-hello-world-pm-streaming-oas3
+collector.dmaapfile=etc/ves-dmaap-config.json
+
+## Path to the file containing description of api versions
+collector.description.api.version.location=etc/api_version_description.json
+
+## Event transformation Flag - when set expects configurable transformation
+## defined under ./etc/eventTransform.json
+## Enabled by default; to disable set to 0
+event.transform.flag=1
+
+# Describes at what frequency (measured in minutes) should application try to fetch config from CBS
+collector.dynamic.config.update.frequency=5
diff --git a/pm-file-flow-demo/docker-proj/config/ves-collector/ves-dmaap-config.json b/pm-file-flow-demo/docker-proj/config/ves-collector/ves-dmaap-config.json
new file mode 100644
index 0000000..633d9c0
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/config/ves-collector/ves-dmaap-config.json
@@ -0,0 +1,10 @@
+{
+ "ves-measurement": {
+ "type": "message_router",
+ "dmaap_info": {
+ "location": "mtl5",
+ "topic_url": "http://onap-dmaap:3904/events/file-ready/",
+ "ORIGINAL-topic_url": "http://onap-dmaap:3904/events/unauthenticated.VES_MEASUREMENT_OUTPUT/"
+ }
+ }
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/docker-compose-dfc1.yaml b/pm-file-flow-demo/docker-proj/docker-compose-dfc1.yaml
new file mode 100644
index 0000000..0e6dbf6
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/docker-compose-dfc1.yaml
@@ -0,0 +1,37 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+version: '3.0'
+networks:
+ default:
+ external: true
+ name: nonrtric-docker-net
+
+services:
+
+ dfc1:
+ container_name: dfc1
+ user: root
+ image: $DFC_IMAGE
+ ports:
+ - 8433:8433
+ volumes:
+ - ./config/dfc1/application.yaml:/opt/app/datafile/config/application.yaml
+ - ./shared-volume:/tmp/onap_datafile/
+ # truststore is updated in runtime
+ labels:
+ - "dmaap_test=yes"
diff --git a/pm-file-flow-demo/docker-proj/docker-compose-dfc2.yaml b/pm-file-flow-demo/docker-proj/docker-compose-dfc2.yaml
new file mode 100644
index 0000000..3e04019
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/docker-compose-dfc2.yaml
@@ -0,0 +1,50 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+version: '3.0'
+networks:
+ default:
+ external: true
+ name: nonrtric-docker-net
+
+services:
+
+ dfc1:
+ container_name: dfc1
+ user: root
+ image: $DFC_IMAGE
+ ports:
+ - 8433:8433
+ volumes:
+ - ./config/dfc1/application.yaml:/opt/app/datafile/config/application.yaml
+ - ./shared-volume:/tmp/onap_datafile/
+ # truststore is updated in runtime
+ labels:
+ - "dmaap_test=yes"
+
+ dfc2:
+ container_name: dfc2
+ user: root
+ image: $DFC_IMAGE
+ ports:
+ - 8533:8433
+ volumes:
+ - ./config/dfc2/application.yaml:/opt/app/datafile/config/application.yaml
+ - ./shared-volume:/tmp/onap_datafile/
+ # truststore is updated in runtime
+ labels:
+ - "dmaap_test=yes"
diff --git a/pm-file-flow-demo/docker-proj/docker-compose-dfc_gen.yaml b/pm-file-flow-demo/docker-proj/docker-compose-dfc_gen.yaml
new file mode 100644
index 0000000..9512e03
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/docker-compose-dfc_gen.yaml
@@ -0,0 +1,37 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+version: '3.0'
+networks:
+ default:
+ external: true
+ name: nonrtric-docker-net
+
+services:
+
+ dfc1:
+ container_name: dfc1
+ user: root
+ image: onap/org.onap.dcaegen2.collectors.datafile.datafile-app-server:2.5.14
+ ports:
+ - 8433:8433
+ volumes:
+ - ./config/dfc1/application.yaml:/opt/app/datafile/config/application.yaml
+ - ./shared-volume:/tmp/onap_datafile/
+ # truststore is updated in runtime
+ labels:
+ - "dmaap_test=yes"
diff --git a/pm-file-flow-demo/docker-proj/docker-compose-ftp.yaml b/pm-file-flow-demo/docker-proj/docker-compose-ftp.yaml
new file mode 100644
index 0000000..fea8009
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/docker-compose-ftp.yaml
@@ -0,0 +1,65 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+version: '3.0'
+networks:
+ default:
+ external: true
+ name: nonrtric-docker-net
+
+services:
+
+############## SFTP ################
+## SFTP PORT: 2022
+ sftp:
+ deploy:
+ mode: replicated
+ replicas: $NUM_SFTP
+ image: $SFTPGO_IMAGE
+ ports:
+ - 8080
+ volumes:
+ - ./ne-files:/srv/onap:rw
+ - ./config/sftp/sftpgo.json:/etc/sftpgo/sftpgo.json:ro
+ environment:
+ SFTPGO_DATA_PROVIDER__CREATE_DEFAULT_ADMIN: 1
+ SFTPGO_DEFAULT_ADMIN_USERNAME: admin
+ SFTPGO_DEFAULT_ADMIN_PASSWORD: admin
+ labels:
+ - "dmaap_test=yes"
+
+
+############### FTPES ################
+## FTPES PORT: 2021
+ ftpes:
+ deploy:
+ mode: replicated
+ replicas: $NUM_FTPES
+ image: $SFTPGO_IMAGE
+ ports:
+ - 8080
+ volumes:
+ - ./ne-files:/srv/onap:rw
+ - ./config/ftpes/sftpgo.json:/etc/sftpgo/sftpgo.json:ro
+ # cert is copied into the container(s) at runtime
+ environment:
+ SFTPGO_DATA_PROVIDER__CREATE_DEFAULT_ADMIN: 1
+ SFTPGO_DEFAULT_ADMIN_USERNAME: admin
+ SFTPGO_DEFAULT_ADMIN_PASSWORD: admin
+ labels:
+ - "dmaap_test=yes"
+
diff --git a/pm-file-flow-demo/docker-proj/docker-compose-ftp_gen.yaml b/pm-file-flow-demo/docker-proj/docker-compose-ftp_gen.yaml
new file mode 100644
index 0000000..ab937a7
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/docker-compose-ftp_gen.yaml
@@ -0,0 +1,65 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+version: '3.0'
+networks:
+ default:
+ external: true
+ name: nonrtric-docker-net
+
+services:
+
+############## SFTP ################
+## SFTP PORT: 2022
+ sftp:
+ deploy:
+ mode: replicated
+ replicas: 10
+ image: drakkan/sftpgo:2.3.x-alpine-slim
+ ports:
+ - 8080
+ volumes:
+ - ./ne-files:/srv/onap:rw
+ - ./config/sftp/sftpgo.json:/etc/sftpgo/sftpgo.json:ro
+ environment:
+ SFTPGO_DATA_PROVIDER__CREATE_DEFAULT_ADMIN: 1
+ SFTPGO_DEFAULT_ADMIN_USERNAME: admin
+ SFTPGO_DEFAULT_ADMIN_PASSWORD: admin
+ labels:
+ - "dmaap_test=yes"
+
+
+############### FTPES ################
+## FTPES PORT: 2021
+ ftpes:
+ deploy:
+ mode: replicated
+ replicas: 10
+ image: drakkan/sftpgo:2.3.x-alpine-slim
+ ports:
+ - 8080
+ volumes:
+ - ./ne-files:/srv/onap:rw
+ - ./config/ftpes/sftpgo.json:/etc/sftpgo/sftpgo.json:ro
+ # cert is copied into the container(s) at runtime
+ environment:
+ SFTPGO_DATA_PROVIDER__CREATE_DEFAULT_ADMIN: 1
+ SFTPGO_DEFAULT_ADMIN_USERNAME: admin
+ SFTPGO_DEFAULT_ADMIN_PASSWORD: admin
+ labels:
+ - "dmaap_test=yes"
+
diff --git a/pm-file-flow-demo/docker-proj/docker-compose-k1.yaml b/pm-file-flow-demo/docker-proj/docker-compose-k1.yaml
new file mode 100644
index 0000000..e7149c1
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/docker-compose-k1.yaml
@@ -0,0 +1,152 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+version: '3.0'
+networks:
+ default:
+ external: true
+ name: nonrtric-docker-net
+
+services:
+
+ zookeeper-1:
+ image: confluentinc/cp-zookeeper:6.2.1
+ ports:
+ - '32181:32181'
+ environment:
+ ZOOKEEPER_CLIENT_PORT: 32181
+ ZOOKEEPER_TICK_TIME: 2000
+ labels:
+ - "dmaap_test=yes"
+#NO_DATA_VOLUME_MAP_LOCALHOST_START
+ volumes:
+ - /tmp/kafka-test/z1-data:/var/lib/zookeeper/data
+ - /tmp/kafka-test/z1-log:/var/lib/zookeeper/log
+#NO_DATA_VOLUME_MAP_LOCALHOST_STOP
+
+ kafka-1:
+ image: confluentinc/cp-kafka:6.2.1
+ ports:
+ - '9092:9092'
+ depends_on:
+ - zookeeper-1
+ environment:
+ KAFKA_BROKER_ID: 1
+ KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:32181
+ KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
+ KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
+ KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-1:29092,EXTERNAL://localhost:9092
+
+ #KAFKA_DEFAULT_REPLICATION_FACTOR: 1
+ KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
+ KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
+ KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
+
+
+ KAFKA_NUM_PARTITIONS: ${KAFKA_NUM_PARTITIONS}
+ labels:
+ - "dmaap_test=yes"
+#NO_DATA_VOLUME_MAP_LOCALHOST_START
+ volumes:
+ - /tmp/kafka-test/k1-data:/var/lib/kafka/data
+#NO_DATA_VOLUME_MAP_LOCALHOST_STOP
+
+ kowl:
+ container_name: kowl
+ image: quay.io/cloudhut/kowl
+ restart: on-failure
+ hostname: kowl
+ volumes:
+ - ./config/kowl/config.yaml:/etc/kowl/config.yaml
+ ports:
+ - "8780:8080"
+ entrypoint: ./kowl --config.filepath=/etc/kowl/config.yaml
+ depends_on:
+ - kafka-1
+ labels:
+ - "dmaap_test=yes"
+
+ dmaap:
+ container_name: onap-dmaap
+ image: ${DMAAP_IMAGE}
+ ports:
+ - 3904:3904
+ - 3905:3905
+ environment:
+ enableCadi: 'false'
+ volumes:
+ - ./config/dmaap/MsgRtrApi.properties:/appl/dmaapMR1/bundleconfig/etc/appprops/MsgRtrApi.properties
+ - ./config/dmaap/cadi.properties:/appl/dmaapMR1/etc/cadi.properties
+ depends_on:
+ - zookeeper-1
+ - kafka-1
+ labels:
+ - "dmaap_test=yes"
+
+ ves-collector:
+ image: ${VES_COLLECTOR_IMAGE}
+ container_name: ves-collector
+ environment:
+ DMAAPHOST: onap-dmaap
+ ports:
+ - 8080:8080
+ - 8443:8443
+ volumes:
+ - ./config/ves-collector/collector.properties:/opt/app/VESCollector/etc/collector.properties
+ - ./config/ves-collector/ves-dmaap-config.json:/opt/app/VESCollector/etc/ves-dmaap-config.json
+ labels:
+ - "dmaap_test=yes"
+
+ kcat:
+ image: edenhill/kcat:1.7.1
+ container_name: kcat
+ depends_on:
+ - kafka-1
+ entrypoint:
+ - /bin/sh
+ - -c
+ - |
+ apk add jq;
+ while [ 1 -eq 1 ];do sleep 60;done
+ labels:
+ - "dmaap_test=yes"
+
+ ics:
+ image: ${ICS_IMAGE}
+ container_name: ics
+ volumes:
+ - ./config/ics/application.yaml:/opt/app/information-coordinator-service/config/application.yaml
+ ports:
+ - 8083:8083
+ - 8434:8434
+ labels:
+ - "dmaap_test=yes"
+
+ callback:
+ image: kennethreitz/httpbin
+ container_name: callback
+ labels:
+ - "dmaap_test=yes"
+
+
+ client:
+ container_name: client
+ image: confluentinc/cp-kafka:6.2.1
+ command: ['sh', '-c', 'sleep 100000']
+ labels:
+ - "dmaap_test=yes"
+
diff --git a/pm-file-flow-demo/docker-proj/docker-compose-k3.yaml b/pm-file-flow-demo/docker-proj/docker-compose-k3.yaml
new file mode 100644
index 0000000..c08dda9
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/docker-compose-k3.yaml
@@ -0,0 +1,189 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+version: '3.0'
+networks:
+ default:
+ external: true
+ name: nonrtric-docker-net
+
+services:
+ callback:
+ image: kennethreitz/httpbin
+ container_name: callback
+ labels:
+ - "dmaap_test=yes"
+
+
+ client:
+ container_name: client
+ image: confluentinc/cp-kafka:6.2.1
+ command: ['sh', '-c', 'sleep 100000']
+ labels:
+ - "dmaap_test=yes"
+
+ zookeeper-1:
+ image: confluentinc/cp-zookeeper:6.2.1
+ ports:
+ - '32181:32181'
+ environment:
+ ZOOKEEPER_CLIENT_PORT: 32181
+ ZOOKEEPER_TICK_TIME: 2000
+ labels:
+ - "dmaap_test=yes"
+#NO_DATA_VOLUME_MAP_LOCALHOST_START
+ volumes:
+ - /tmp/kafka-test/z1-data:/var/lib/zookeeper/data
+ - /tmp/kafka-test/z1-log:/var/lib/zookeeper/log
+#NO_DATA_VOLUME_MAP_LOCALHOST_STOP
+
+ kafka-1:
+ image: confluentinc/cp-kafka:6.2.1
+ ports:
+ - '9092:9092'
+ depends_on:
+ - zookeeper-1
+ environment:
+ KAFKA_BROKER_ID: 1
+ KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:32181
+ KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
+ KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
+ KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-1:29092,EXTERNAL://localhost:9092
+ KAFKA_DEFAULT_REPLICATION_FACTOR: ${KAFKA_DEFAULT_REPLICATION_FACTOR}
+ KAFKA_NUM_PARTITIONS: ${KAFKA_NUM_PARTITIONS}
+ labels:
+ - "dmaap_test=yes"
+#NO_DATA_VOLUME_MAP_LOCALHOST_START
+ volumes:
+ - /tmp/kafka-test/k1-data/var/lib/kafka/data
+#NO_DATA_VOLUME_MAP_LOCALHOST_STOP
+
+ kafka-2:
+ image: confluentinc/cp-kafka:6.2.1
+ ports:
+ - '9093:9093'
+ depends_on:
+ - zookeeper-1
+ environment:
+ KAFKA_BROKER_ID: 2
+ KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:32181
+ KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
+ KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
+ KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-2:29093,EXTERNAL://localhost:9093
+ KAFKA_DEFAULT_REPLICATION_FACTOR: ${KAFKA_DEFAULT_REPLICATION_FACTOR}
+ KAFKA_NUM_PARTITIONS: ${KAFKA_NUM_PARTITIONS}
+ labels:
+ - "dmaap_test=yes"
+#NO_DATA_VOLUME_MAP_LOCALHOST_START
+ volumes:
+ - /tmp/kafka-test/k2-data:/var/lib/kafka/data
+#NO_DATA_VOLUME_MAP_LOCALHOST_STOP
+
+ kafka-3:
+ image: confluentinc/cp-kafka:6.2.1
+ ports:
+ - '9094:9094'
+ depends_on:
+ - zookeeper-1
+ environment:
+ KAFKA_BROKER_ID: 3
+ KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:32181
+ KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
+ KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
+ KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-3:29094,EXTERNAL://localhost:9094
+ KAFKA_DEFAULT_REPLICATION_FACTOR: ${KAFKA_DEFAULT_REPLICATION_FACTOR}
+ KAFKA_NUM_PARTITIONS: ${KAFKA_NUM_PARTITIONS}
+ labels:
+ - "dmaap_test=yes"
+#NO_DATA_VOLUME_MAP_LOCALHOST_START
+ volumes:
+ - /tmp/kafka-test/k3-data:/var/lib/kafka/data
+#NO_DATA_VOLUME_MAP_LOCALHOST_STOP
+
+ kowl:
+ container_name: kowl
+ image: quay.io/cloudhut/kowl
+ restart: on-failure
+ hostname: kowl
+ volumes:
+ - ./config/kowl/config.yaml:/etc/kowl/config.yaml
+ ports:
+ - "8780:8080"
+ entrypoint: ./kowl --config.filepath=/etc/kowl/config.yaml
+ depends_on:
+ - kafka-1
+ - kafka-2
+ - kafka-3
+
+ dmaap:
+ container_name: onap-dmaap
+ image: ${DMAAP_IMAGE}
+ ports:
+ - 3904:3904
+ - 3905:3905
+ environment:
+ enableCadi: 'false'
+ volumes:
+ - ./config/dmaap/MsgRtrApi.properties:/appl/dmaapMR1/bundleconfig/etc/appprops/MsgRtrApi.properties
+ - ./config/dmaap/cadi.properties:/appl/dmaapMR1/etc/cadi.properties
+ depends_on:
+ - zookeeper-1
+ - kafka-1
+ labels:
+ - "dmaap_test=yes"
+
+
+ ves-collector:
+ image: ${VES_COLLECTOR_IMAGE}
+ container_name: ves-collector
+ environment:
+ DMAAPHOST: onap-dmaap
+ ports:
+ - 8080:8080
+ - 8443:8443
+ volumes:
+ - ./config/ves-collector/collector.properties:/opt/app/VESCollector/etc/collector.properties
+ - ./config/ves-collector/ves-dmaap-config.json:/opt/app/VESCollector/etc/ves-dmaap-config.json
+ labels:
+ - "dmaap_test=yes"
+
+ kcat:
+ image: edenhill/kcat:1.7.1
+ container_name: kcat
+ depends_on:
+ - kafka-1
+ - kafka-2
+ - kafka-3
+ entrypoint:
+ - /bin/sh
+ - -c
+ - |
+ apk add jq;
+ while [ 1 -eq 1 ];do sleep 60;done
+ labels:
+ - "dmaap_test=yes"
+
+ ics:
+ image: ${ICS_IMAGE}
+ container_name: ics
+ volumes:
+ - ./config/ics/application.yaml:/opt/app/information-coordinator-service/config/application.yaml
+ ports:
+ - 8083:8083
+ - 8434:8434
+ labels:
+ - "dmaap_test=yes"
diff --git a/pm-file-flow-demo/docker-proj/docker-compose-minio.yaml b/pm-file-flow-demo/docker-proj/docker-compose-minio.yaml
new file mode 100644
index 0000000..2e46420
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/docker-compose-minio.yaml
@@ -0,0 +1,41 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+version: '3.0'
+networks:
+ default:
+ external: true
+ name: nonrtric-docker-net
+
+services:
+
+ minio:
+ image: minio/minio
+ container_name: minio-server
+ command: server /data --console-address ":9001"
+ environment:
+ MINIO_ROOT_USER: admin
+ MINIO_ROOT_PASSWORD: adminadmin
+ ports:
+ - 9000:9000
+ - 9001:9001
+ labels:
+ - "dmaap_test=yes"
+#NO_DATA_VOLUME_MAP_LOCALHOST_START
+ volumes:
+ - /tmp/minio-test/0:/data
+#NO_DATA_VOLUME_MAP_LOCALHOST_STOP
diff --git a/pm-file-flow-demo/docker-proj/docker-compose-minio_gen.yaml b/pm-file-flow-demo/docker-proj/docker-compose-minio_gen.yaml
new file mode 100644
index 0000000..422ad02
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/docker-compose-minio_gen.yaml
@@ -0,0 +1,37 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+version: '3.0'
+networks:
+ default:
+ external: true
+ name: nonrtric-docker-net
+
+services:
+
+ minio:
+ image: minio/minio
+ container_name: minio-server
+ command: server /data --console-address ":9001"
+ environment:
+ MINIO_ROOT_USER: admin
+ MINIO_ROOT_PASSWORD: adminadmin
+ ports:
+ - 9000:9000
+ - 9001:9001
+ labels:
+ - "dmaap_test=yes"
diff --git a/pm-file-flow-demo/docker-proj/docker-compose-pm-https.yaml b/pm-file-flow-demo/docker-proj/docker-compose-pm-https.yaml
new file mode 100644
index 0000000..b1a1b88
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/docker-compose-pm-https.yaml
@@ -0,0 +1,38 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+version: '3.0'
+networks:
+ default:
+ external: true
+ name: nonrtric-docker-net
+
+services:
+
+ server:
+ # cert is copied into the container(s) at runtime
+ deploy:
+ mode: replicated
+ replicas: $NUM_HTTP
+ image: $PM_HTTPSSERVER_IMAGE
+ environment:
+ ALWAYS_RETURN: /files/pm.xml.gz
+ volumes:
+ - ./ne-files:/files:rw
+ labels:
+ - "dmaap_test=yes"
+
diff --git a/pm-file-flow-demo/docker-proj/docker-compose-pm-https_gen.yaml b/pm-file-flow-demo/docker-proj/docker-compose-pm-https_gen.yaml
new file mode 100644
index 0000000..5e55fab
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/docker-compose-pm-https_gen.yaml
@@ -0,0 +1,38 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+version: '3.0'
+networks:
+ default:
+ external: true
+ name: nonrtric-docker-net
+
+services:
+
+ server:
+ # cert is copied into the container(s) at runtime
+ deploy:
+ mode: replicated
+ replicas: 10
+ image: pm-https-server:latest
+ environment:
+ ALWAYS_RETURN: /files/pm.xml.gz
+ volumes:
+ - ./ne-files:/files:rw
+ labels:
+ - "dmaap_test=yes"
+
diff --git a/pm-file-flow-demo/docker-proj/docker-compose-producers.yaml b/pm-file-flow-demo/docker-proj/docker-compose-producers.yaml
new file mode 100644
index 0000000..59d8708
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/docker-compose-producers.yaml
@@ -0,0 +1,113 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+version: '3.0'
+networks:
+ default:
+ external: true
+ name: nonrtric-docker-net
+
+services:
+
+ kafka-producer1:
+ image: $KPX_IMAGE
+ container_name: kp1
+ volumes:
+ - ./config/kp1/application_configuration.json:/application_configuration.json
+ - ./shared-volume:$FILES_VOLUME
+ ports:
+ - 9980:80
+ labels:
+ - "dmaap_test=yes"
+ environment:
+ KP: 1
+ FILES_VOLUME: $FILES_VOLUME
+ KAFKA_SERVER: kafka-1:29092
+ ICS: ics:8083
+ SELF: kp1:80
+ FILESTORE_USER: admin
+ FILESTORE_PWD: adminadmin
+ FILESTORE_SERVER: minio-server:9000
+ deploy:
+ resources:
+ limits:
+ memory: 500M
+
+
+ kafka-producer100:
+ image: $KPX_IMAGE
+ container_name: kpm100
+ volumes:
+ - ./config/kpm100/application_configuration.json:/application_configuration.json
+ - ./shared-volume:$FILES_VOLUME
+ ports:
+ - 9880:80
+ labels:
+ - "dmaap_test=yes"
+ environment:
+ KP: 100
+ FILES_VOLUME: $FILES_VOLUME
+ KAFKA_SERVER: kafka-1:29092
+ ICS: ics:8083
+ SELF: kpm100:80
+ FILESTORE_USER: admin
+ FILESTORE_PWD: adminadmin
+ FILESTORE_SERVER: minio-server:9000
+ deploy:
+ resources:
+ limits:
+ memory: 200M
+
+ kafka-producer101:
+ image: $KPX_IMAGE
+ container_name: kpm101
+ volumes:
+ - ./config/kpm101/application_configuration.json:/application_configuration.json
+ - ./shared-volume:$FILES_VOLUME
+ ports:
+ - 9881:80
+ labels:
+ - "dmaap_test=yes"
+ environment:
+ KP: 101
+ FILES_VOLUME: $FILES_VOLUME
+ KAFKA_SERVER: kafka-1:29092
+ ICS: ics:8083
+ SELF: kpm101:80
+ FILESTORE_USER: admin
+ FILESTORE_PWD: adminadmin
+ FILESTORE_SERVER: minio-server:9000
+ deploy:
+ resources:
+ limits:
+ memory: 200M
+
+ kafka-producer200:
+ image: $DMAAPADP_IMAGE
+ container_name: kpadp200
+ volumes:
+ - ./config/kpadp200/application_configuration.json:/opt/app/dmaap-adapter-service/data/application_configuration.json
+ - ./config/kpadp200/application.yaml:/opt/app/dmaap-adapter-service/config/application.yaml
+ - ./shared-volume:$FILES_VOLUME
+ ports:
+ - 8084:8084
+ labels:
+ - "dmaap_test=yes"
+ deploy:
+ resources:
+ limits:
+ memory: 600M
diff --git a/pm-file-flow-demo/docker-proj/docker-compose-producers_gen.yaml b/pm-file-flow-demo/docker-proj/docker-compose-producers_gen.yaml
new file mode 100644
index 0000000..d1d00fc
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/docker-compose-producers_gen.yaml
@@ -0,0 +1,113 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+version: '3.0'
+networks:
+ default:
+ external: true
+ name: nonrtric-docker-net
+
+services:
+
+ kafka-producer1:
+ image: kafka-pm-producer:latest
+ container_name: kp1
+ volumes:
+ - ./config/kp1/application_configuration.json:/application_configuration.json
+ - ./shared-volume:/pm-files
+ ports:
+ - 9980:80
+ labels:
+ - "dmaap_test=yes"
+ environment:
+ KP: 1
+ FILES_VOLUME: /pm-files
+ KAFKA_SERVER: kafka-1:29092
+ ICS: ics:8083
+ SELF: kp1:80
+ FILESTORE_USER: admin
+ FILESTORE_PWD: adminadmin
+ FILESTORE_SERVER: minio-server:9000
+ deploy:
+ resources:
+ limits:
+ memory: 500M
+
+
+ kafka-producer100:
+ image: kafka-pm-producer:latest
+ container_name: kpm100
+ volumes:
+ - ./config/kpm100/application_configuration.json:/application_configuration.json
+ - ./shared-volume:/pm-files
+ ports:
+ - 9880:80
+ labels:
+ - "dmaap_test=yes"
+ environment:
+ KP: 100
+ FILES_VOLUME: /pm-files
+ KAFKA_SERVER: kafka-1:29092
+ ICS: ics:8083
+ SELF: kpm100:80
+ FILESTORE_USER: admin
+ FILESTORE_PWD: adminadmin
+ FILESTORE_SERVER: minio-server:9000
+ deploy:
+ resources:
+ limits:
+ memory: 200M
+
+ kafka-producer101:
+ image: kafka-pm-producer:latest
+ container_name: kpm101
+ volumes:
+ - ./config/kpm101/application_configuration.json:/application_configuration.json
+ - ./shared-volume:/pm-files
+ ports:
+ - 9881:80
+ labels:
+ - "dmaap_test=yes"
+ environment:
+ KP: 101
+ FILES_VOLUME: /pm-files
+ KAFKA_SERVER: kafka-1:29092
+ ICS: ics:8083
+ SELF: kpm101:80
+ FILESTORE_USER: admin
+ FILESTORE_PWD: adminadmin
+ FILESTORE_SERVER: minio-server:9000
+ deploy:
+ resources:
+ limits:
+ memory: 200M
+
+ kafka-producer200:
+ image: o-ran-sc/nonrtric-plt-dmaapadapter:1.2.0-SNAPSHOT
+ container_name: kpadp200
+ volumes:
+ - ./config/kpadp200/application_configuration.json:/opt/app/dmaap-adapter-service/data/application_configuration.json
+ - ./config/kpadp200/application.yaml:/opt/app/dmaap-adapter-service/config/application.yaml
+ - ./shared-volume:/pm-files
+ ports:
+ - 8084:8084
+ labels:
+ - "dmaap_test=yes"
+ deploy:
+ resources:
+ limits:
+ memory: 600M
diff --git a/pm-file-flow-demo/docker-proj/docker-compose_gen.yaml b/pm-file-flow-demo/docker-proj/docker-compose_gen.yaml
new file mode 100644
index 0000000..4280317
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/docker-compose_gen.yaml
@@ -0,0 +1,142 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+version: '3.0'
+networks:
+ default:
+ external: true
+ name: nonrtric-docker-net
+
+services:
+ callback:
+ image: kennethreitz/httpbin
+ container_name: callback
+ labels:
+ - "dmaap_test=yes"
+
+
+ client:
+ container_name: client
+ image: confluentinc/cp-kafka:6.2.1
+ command: ['sh', '-c', 'sleep 100000']
+ labels:
+ - "dmaap_test=yes"
+
+ zookeeper-1:
+ image: confluentinc/cp-zookeeper:6.2.1
+ ports:
+ - '32181:32181'
+ environment:
+ ZOOKEEPER_CLIENT_PORT: 32181
+ ZOOKEEPER_TICK_TIME: 2000
+ labels:
+ - "dmaap_test=yes"
+
+ kafka-1:
+ image: confluentinc/cp-kafka:6.2.1
+ ports:
+ - '9092:9092'
+ depends_on:
+ - zookeeper-1
+ environment:
+ KAFKA_BROKER_ID: 1
+ KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:32181
+ KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
+ KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
+ KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-1:29092,EXTERNAL://localhost:9092
+
+ #KAFKA_DEFAULT_REPLICATION_FACTOR: 1
+ KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
+ KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
+ KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
+
+
+ KAFKA_NUM_PARTITIONS: 10
+ labels:
+ - "dmaap_test=yes"
+
+ kowl:
+ container_name: kowl
+ image: quay.io/cloudhut/kowl
+ restart: on-failure
+ hostname: kowl
+ volumes:
+ - ./config/kowl/config.yaml:/etc/kowl/config.yaml
+ ports:
+ - "8780:8080"
+ entrypoint: ./kowl --config.filepath=/etc/kowl/config.yaml
+ depends_on:
+ - kafka-1
+ labels:
+ - "dmaap_test=yes"
+
+ dmaap:
+ container_name: onap-dmaap
+ image: nexus3.onap.org:10001/onap/dmaap/dmaap-mr:1.1.18
+ ports:
+ - 3904:3904
+ - 3905:3905
+ environment:
+ enableCadi: 'false'
+ volumes:
+ - ./config/dmaap/MsgRtrApi.properties:/appl/dmaapMR1/bundleconfig/etc/appprops/MsgRtrApi.properties
+ - ./config/dmaap/cadi.properties:/appl/dmaapMR1/etc/cadi.properties
+ depends_on:
+ - zookeeper-1
+ - kafka-1
+ labels:
+ - "dmaap_test=yes"
+
+ ves-collector:
+ image: nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:1.11.0
+ container_name: ves-collector
+ environment:
+ DMAAPHOST: onap-dmaap
+ ports:
+ - 8080:8080
+ - 8443:8443
+ volumes:
+ - ./config/ves-collector/collector.properties:/opt/app/VESCollector/etc/collector.properties
+ - ./config/ves-collector/ves-dmaap-config.json:/opt/app/VESCollector/etc/ves-dmaap-config.json
+ labels:
+ - "dmaap_test=yes"
+
+ kcat:
+ image: edenhill/kcat:1.7.1
+ container_name: kcat
+ depends_on:
+ - kafka-1
+ entrypoint:
+ - /bin/sh
+ - -c
+ - |
+ apk add jq;
+ while [ 1 -eq 1 ];do sleep 60;done
+ labels:
+ - "dmaap_test=yes"
+
+ ics:
+ image: nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-plt-informationcoordinatorservice:1.4.0
+ container_name: ics
+ volumes:
+ - ./config/ics/application.yaml:/opt/app/information-coordinator-service/config/application.yaml
+ ports:
+ - 8083:8083
+ - 8434:8434
+ labels:
+ - "dmaap_test=yes"
+
diff --git a/pm-file-flow-demo/docker-proj/docker-setup.sh b/pm-file-flow-demo/docker-proj/docker-setup.sh
new file mode 100755
index 0000000..629f36e
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/docker-setup.sh
@@ -0,0 +1,287 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+echo $SP
+print_usage() {
+ echo "Usage: docker-setup.sh k1|k3 dfc1|dfc2 file|minio no-ftp|ftp data-mount|no-data-mount"
+ exit 1
+}
+
+check_error() {
+ if [ $1 -ne 0 ]; then
+ echo "Failed $2"
+ echo "Exiting..."
+ exit 1
+ fi
+}
+
+ARG=$1
+if [ $# -ne 5 ]; then
+ print_usage
+fi
+
+if [ $1 == "k1" ]; then
+ :
+elif [ $1 == "k3" ]; then
+ :
+else
+ print_usage
+fi
+
+if [ $2 == "dfc1" ]; then
+ :
+elif [ $2 == "dfc2" ]; then
+ :
+else
+ print_usage
+fi
+
+if [ $3 == "file" ]; then
+ export NRT_STORAGE=$3
+elif [ $3 == "minio" ]; then
+ export NRT_STORAGE=$3
+else
+ print_usage
+fi
+
+if [ $4 == "no-ftp" ]; then
+ FTP_FLAG=$4
+elif [ $4 == "ftp" ]; then
+ FTP_FLAG=$4
+else
+ print_usage
+fi
+
+if [ $5 == "no-data-mount" ]; then
+ :
+elif [ $5 == "data-mount" ]; then
+ :
+else
+ print_usage
+fi
+
+callback_get_num_jobs_kp() {
+ echo 1
+}
+
+callback_get_num_jobs_kpm() {
+ echo 0
+}
+
+callback_get_num_jobs_kpadp() {
+ echo 1
+}
+
+callback_get_job_sufffix_kp() {
+ echo "kp"
+}
+
+callback_get_job_sufffix_kpm() {
+ echo "kpm"
+}
+
+callback_get_job_sufffix_kpadp() {
+ echo "kpadp"
+}
+
+#Arg: <job-id> <storage-type>
+callback_create_job_kp() {
+
+ if [ $2 == "file" ]; then
+ # Store in file system
+ JOB='{"info_type_id": "json-file-data", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {
+ "kafkaOutputTopic":"rapp-topic-'$1'","filterType":"pmdata","filter":{"measTypes":["pmCounterNumber101"]}
+ }}'
+ echo $JOB > .job.json
+ fi
+
+ if [ $2 == "minio" ]; then
+ #Store in filestore
+ JOB='{"info_type_id": "json-file-data-from-filestore", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {
+ "kafkaOutputTopic":"rapp-topic-'$1'","filterType":"pmdata","filter":{"measTypes":["pmCounterNumber101"]}
+ }}'
+ echo $JOB > .job.json
+ fi
+
+}
+
+#Arg: <job-id> <storage-type>
+callback_create_job_kpm() {
+
+ let ID=3
+ JOB='{"info_type_id": "PmData", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {
+ "kafkaOutputTopic":"rapp-topic-'$ID'","filterType":"pmdata","filter":{"measTypes":["pmCounterNumber101"],"pmRopStartTime": "1999-12-27T10:50:44.000-08:00"}
+ }}'
+ echo $JOB > .job.json
+}
+#Arg: <job-id> <storage-type>
+callback_create_job_kpadp() {
+ let ID=$1+1
+
+ JOB='{"info_type_id": "PmData", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {
+ "kafkaOutputTopic":"rapp-topic-'$ID'","filterType":"pmdata","filter":{"measTypes":["pmCounterNumber101"]}
+ }}'
+ echo $JOB > .job.json
+}
+
+. ./setup-phase1.sh
+
+export DMAAP_IMAGE=nexus3.onap.org:10001/onap/dmaap/dmaap-mr:1.1.18
+export VES_COLLECTOR_IMAGE=nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:1.11.0
+
+export ICS_IMAGE="nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-plt-informationcoordinatorservice:1.4.0"
+echo "Pulling ICS image... "$ICS_IMAGE
+docker pull $ICS_IMAGE
+
+export DMAAPADP_IMAGE="nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-plt-dmaapadapter:1.2.0"
+echo "Pulling DMAAPADP image... "$DMAAPADP_IMAGE
+docker pull $DMAAPADP_IMAGE
+
+echo "LOCAL IMAGE FOR DMAAP ADP"
+export DMAAPADP_IMAGE="o-ran-sc/nonrtric-plt-dmaapadapter:1.2.0-SNAPSHOT"
+
+if [ $NRT_STORAGE == "file" ]; then
+ # Run without mino
+ export KPADP_MINIO=
+else
+ # Run with minio
+ export KPADP_MINIO=http://minio-server:9000
+fi
+
+export KAFKA_NUM_PARTITIONS=10
+export TOPICS="file-ready collected-file json-file-ready json-file-ready-kp json-file-ready-kpadp"
+
+if [ $1 == "k1" ]; then
+ . ./setup-phase2.sh 1 $NRT_STORAGE $5
+else
+ export KAFKA_DEFAULT_REPLICATION_FACTOR=3
+ . ./setup-phase2.sh 3 $NRT_STORAGE $5
+fi
+
+export NUM_DFC=1
+if [ $2 != "dfc1" ]; then
+ export NUM_DFC=2
+fi
+echo "Starting $NUM_DFC dfc"
+
+if [ $NRT_STORAGE == "file" ]; then
+ # Run without mino
+ export DFC_MINIO=
+else
+ # Run with minio
+ export DFC_MINIO=http://minio-server:9000
+fi
+
+
+export FILES_VOLUME="/pm-files"
+
+#This is a locally built image
+export DFC_IMAGE="onap/org.onap.dcaegen2.collectors.datafile.datafile-app-server:2.5.14"
+
+if [ $2 != "dfc1" ]; then
+ envsubst < docker-compose-dfc2.yaml > docker-compose-dfc_gen.yaml
+ envsubst < config/dfc2/application-template.yaml > config/dfc2/application.yaml
+else
+ envsubst < docker-compose-dfc1.yaml > docker-compose-dfc_gen.yaml
+ envsubst < config/dfc1/application-template.yaml > config/dfc1/application.yaml
+fi
+docker-compose -p dfc -f docker-compose-dfc_gen.yaml up -d
+if [ $? -ne 0 ]; then
+ echo "docker-compose failed"
+ echo "exiting..."
+ exit 1
+fi
+
+echo "Starting producers"
+
+if [ $NRT_STORAGE == "file" ]; then
+ cp config/kpadp200/application_configuration-file-template.json config/kpadp200/application_configuration.json
+else
+ cp config/kpadp200/application_configuration-minio-template.json config/kpadp200/application_configuration.json
+fi
+
+if [ $NRT_STORAGE == "file" ]; then
+ envsubst < config/kpadp200/application-file-template.yaml > config/kpadp200/application.yaml
+else
+ envsubst < config/kpadp200/application-minio-template.yaml > config/kpadp200/application.yaml
+fi
+
+if [ $NRT_STORAGE == "file" ]; then
+ cp config/kpm100/application_configuration-file.json config/kpm100/application_configuration.json
+ cp config/kpm101/application_configuration-file.json config/kpm101/application_configuration.json
+else
+ cp config/kpm100/application_configuration-minio.json config/kpm100/application_configuration.json
+ cp config/kpm101/application_configuration-minio.json config/kpm101/application_configuration.json
+fi
+
+if [ $NRT_STORAGE == "file" ]; then
+ cp config/kp1/application_configuration-file.json config/kp1/application_configuration.json
+else
+ cp config/kp1/application_configuration-minio.json config/kp1/application_configuration.json
+fi
+
+export KPX_IMAGE="kafka-pm-producer:latest"
+
+envsubst < docker-compose-producers.yaml > docker-compose-producers_gen.yaml
+docker-compose -p prod -f docker-compose-producers_gen.yaml up -d
+if [ $? -ne 0 ]; then
+ echo "docker-compose failed"
+ echo "exiting..."
+ exit 1
+fi
+
+cp pm-files/pm* ne-files
+
+if [ $FTP_FLAG == "ftp" ]; then
+ echo "Starting ftp servers"
+
+ export SFTPGO_IMAGE="drakkan/sftpgo:2.3.x-alpine-slim"
+ export NUM_SFTP=10
+ export NUM_FTPES=10
+
+ envsubst < docker-compose-ftp.yaml > docker-compose-ftp_gen.yaml
+ docker-compose -p ftp -f docker-compose-ftp_gen.yaml up -d
+ if [ $? -ne 0 ]; then
+ echo "docker-compose failed"
+ echo "exiting..."
+ exit 1
+ fi
+fi
+
+echo "Starting http servers"
+
+export PM_HTTPSSERVER_IMAGE="pm-https-server:latest"
+export NUM_HTTP=10
+
+envsubst < docker-compose-pm-https.yaml > docker-compose-pm-https_gen.yaml
+docker-compose -p pm-https -f docker-compose-pm-https_gen.yaml up -d
+if [ $? -ne 0 ]; then
+ echo "docker-compose failed"
+ echo "exiting..."
+ exit 1
+fi
+
+. ./setup-phase3.sh $NRT_STORAGE $FTP_FLAG
+check_error $? "Setup phase 3 failed"
+
+scripts/clean-shared-volume.sh
+
+# curl localhost:9880/logging/debug -X PUT
+# curl localhost:9881/logging/debug -X PUT
+# curl localhost:9980/logging/debug -X PUT
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/docker-tear-down.sh b/pm-file-flow-demo/docker-proj/docker-tear-down.sh
new file mode 100755
index 0000000..8bd454f
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/docker-tear-down.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+echo "Stop and remove all containers in the project"
+
+docker stop $(docker ps -qa --filter "label=dmaap_test") 2> /dev/null
+docker stop $(docker ps -qa --filter "label=dmaap_test") 2> /dev/null
+docker rm -f $(docker ps -qa --filter "label=dmaap_test") 2> /dev/null
+
+docker-compose -f docker-compose-dfc_gen.yaml -p dfc down
+docker-compose -f docker-compose-minio_gen.yaml -p minio down
+docker-compose -f docker-compose-producers_gen.yaml -p prod down
+docker-compose -f docker-compose-ftp_gen.yaml -p ftp down
+docker-compose -f docker-compose-pm-https_gen.yaml -p pm-https down
+docker-compose -f docker-compose_gen.yaml -p common down
+
diff --git a/pm-file-flow-demo/docker-proj/hist-job.sh b/pm-file-flow-demo/docker-proj/hist-job.sh
new file mode 100755
index 0000000..a716abf
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/hist-job.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+echo "Creating a job to filter historical pm files (json)"
+
+JOB='{"info_type_id": "PmData", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {"kafkaOutputTopic":"a-hist","filterType":"pmdata","filter":{"pmRopStartTime": "1999-12-27T10:50:44.000-08:00","sourceNames":["HTTPS-0"],"measTypes":["pmCounterNumber101"]}}}'
+RESP=$(curl -s -w '%{http_code}' localhost:8083/data-consumer/v1/info-jobs/xa-hist -X PUT -H 'Content-Type: application/json' --data-binary "$JOB")
+status=${RESP:${#RESP}-3}
+if [ "$status" == "200" ]; then
+ echo " Job created ok"
+elif [ "$status" == "201" ]; then
+ echo " Job created ok"
+else
+ echo $RESP
+ echo "FAILED"
+ exit 1
+fi
+
+echo "DONE"
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/ne-files/dummy.txt b/pm-file-flow-demo/docker-proj/ne-files/dummy.txt
new file mode 100644
index 0000000..013ed0d
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/ne-files/dummy.txt
@@ -0,0 +1 @@
+Empty file
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/ne-files/pm.xml b/pm-file-flow-demo/docker-proj/ne-files/pm.xml
new file mode 100644
index 0000000..529f69f
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/ne-files/pm.xml
@@ -0,0 +1,4023 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="MeasDataCollection.xsl"?>
+<measCollecFile xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec">
+ <fileHeader fileFormatVersion="32.435 V10.0"
+ vendorName="Ericsson AB"
+ dnPrefix="SubNetwork=G3">
+ <fileSender localDn="nodedntest"
+ elementType="RadioNode"/>
+ <measCollec beginTime="2022-04-18T19:00:00+00:00"/>
+ </fileHeader>
+ <measData>
+ <managedElement localDn="nodedntest"
+ swVersion="CXP2010174_1 R44B17"/>
+ <measInfo measInfoId="PM=1,PmGroup=NRCellCU_GNBCUCP">
+ <job jobId="nr_all"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber0</measType>
+ <measType p="2">pmCounterNumber1</measType>
+ <measType p="3">pmCounterNumber2</measType>
+ <measType p="4">pmCounterNumber3</measType>
+ <measType p="5">pmCounterNumber4</measType>
+ <measType p="6">pmCounterNumber5</measType>
+ <measType p="7">pmCounterNumber6</measType>
+ <measType p="8">pmCounterNumber7</measType>
+ <measType p="9">pmCounterNumber8</measType>
+ <measType p="10">pmCounterNumber9</measType>
+ <measType p="11">pmCounterNumber10</measType>
+ <measType p="12">pmCounterNumber11</measType>
+ <measType p="13">pmCounterNumber12</measType>
+ <measType p="14">pmCounterNumber13</measType>
+ <measType p="15">pmCounterNumber14</measType>
+ <measType p="16">pmCounterNumber15</measType>
+ <measType p="17">pmCounterNumber16</measType>
+ <measType p="18">pmCounterNumber17</measType>
+ <measType p="19">pmCounterNumber18</measType>
+ <measType p="20">pmCounterNumber19</measType>
+ <measType p="21">pmCounterNumber20</measType>
+ <measType p="22">pmCounterNumber21</measType>
+ <measType p="23">pmCounterNumber22</measType>
+ <measType p="24">pmCounterNumber23</measType>
+ <measType p="25">pmCounterNumber24</measType>
+ <measType p="26">pmCounterNumber25</measType>
+ <measType p="27">pmCounterNumber26</measType>
+ <measType p="28">pmCounterNumber27</measType>
+ <measType p="29">pmCounterNumber28</measType>
+ <measType p="30">pmCounterNumber29</measType>
+ <measType p="31">pmCounterNumber30</measType>
+ <measType p="32">pmCounterNumber31</measType>
+ <measType p="33">pmCounterNumber32</measType>
+ <measType p="34">pmCounterNumber33</measType>
+ <measType p="35">pmCounterNumber34</measType>
+ <measType p="36">pmCounterNumber35</measType>
+ <measType p="37">pmCounterNumber36</measType>
+ <measType p="38">pmCounterNumber37</measType>
+ <measType p="39">pmCounterNumber38</measType>
+ <measType p="40">pmCounterNumber39</measType>
+ <measType p="41">pmCounterNumber40</measType>
+ <measType p="42">pmCounterNumber41</measType>
+ <measType p="43">pmCounterNumber42</measType>
+ <measType p="44">pmCounterNumber43</measType>
+ <measType p="45">pmCounterNumber44</measType>
+ <measType p="46">pmCounterNumber45</measType>
+ <measType p="47">pmCounterNumber46</measType>
+ <measType p="48">pmCounterNumber47</measType>
+ <measType p="49">pmCounterNumber48</measType>
+ <measType p="50">pmCounterNumber49</measType>
+ <measType p="51">pmCounterNumber50</measType>
+ <measType p="52">pmCounterNumber51</measType>
+ <measType p="53">pmCounterNumber51Act</measType>
+ <measType p="54">pmCounterNumber53</measType>
+ <measType p="55">pmCounterNumber53Act</measType>
+ <measType p="56">pmCounterNumber55</measType>
+ <measType p="57">pmCounterNumber56</measType>
+ <measType p="58">pmCounterNumber57</measType>
+ <measType p="59">pmCounterNumber58</measType>
+ <measType p="60">pmCounterNumber59</measType>
+ <measType p="61">pmCounterNumber60</measType>
+ <measType p="62">pmCounterNumber60IntgProt64kbps</measType>
+ <measType p="63">pmCounterNumber62</measType>
+ <measType p="64">pmCounterNumber63</measType>
+ <measType p="65">pmCounterNumber64</measType>
+ <measType p="66">pmCounterNumber65</measType>
+ <measType p="67">pmCounterNumber66</measType>
+ <measType p="68">pmCounterNumber67</measType>
+ <measType p="69">pmCounterNumber68</measType>
+ <measType p="70">pmCounterNumber69</measType>
+ <measType p="71">pmCounterNumber70</measType>
+ <measType p="72">pmCounterNumber71</measType>
+ <measType p="73">pmCounterNumber72</measType>
+ <measType p="74">pmCounterNumber73</measType>
+ <measType p="75">pmCounterNumber74</measType>
+ <measType p="76">pmCounterNumber75</measType>
+ <measType p="77">pmCounterNumber76</measType>
+ <measType p="78">pmCounterNumber77</measType>
+ <measType p="79">pmCounterNumber78</measType>
+ <measType p="80">pmCounterNumber79</measType>
+ <measType p="81">pmCounterNumber80</measType>
+ <measType p="82">pmCounterNumber81</measType>
+ <measType p="83">pmCounterNumber82</measType>
+ <measType p="84">pmCounterNumber83</measType>
+ <measType p="85">pmCounterNumber84</measType>
+ <measType p="86">pmCounterNumber84Em</measType>
+ <measType p="87">pmCounterNumber84EmFbInd</measType>
+ <measType p="88">pmCounterNumber87</measType>
+ <measType p="89">pmCounterNumber88</measType>
+ <measType p="90">pmCounterNumber89</measType>
+ <measType p="91">pmCounterNumber90</measType>
+ <measType p="92">pmCounterNumber91</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=32">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">180</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0</r>
+ <r p="81">0</r>
+ <r p="82">0</r>
+ <r p="83">0</r>
+ <r p="84">0</r>
+ <r p="85">0</r>
+ <r p="86">0</r>
+ <r p="87">0</r>
+ <r p="88">0</r>
+ <r p="89">0</r>
+ <r p="90">0</r>
+ <r p="91">0</r>
+ <r p="92">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=31">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">180</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0</r>
+ <r p="81">0</r>
+ <r p="82">0</r>
+ <r p="83">0</r>
+ <r p="84">0</r>
+ <r p="85">0</r>
+ <r p="86">0</r>
+ <r p="87">0</r>
+ <r p="88">0</r>
+ <r p="89">0</r>
+ <r p="90">0</r>
+ <r p="91">0</r>
+ <r p="92">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">180</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0</r>
+ <r p="81">0</r>
+ <r p="82">0</r>
+ <r p="83">0</r>
+ <r p="84">0</r>
+ <r p="85">0</r>
+ <r p="86">0</r>
+ <r p="87">0</r>
+ <r p="88">0</r>
+ <r p="89">0</r>
+ <r p="90">0</r>
+ <r p="91">0</r>
+ <r p="92">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">180</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0</r>
+ <r p="81">0</r>
+ <r p="82">0</r>
+ <r p="83">0</r>
+ <r p="84">0</r>
+ <r p="85">0</r>
+ <r p="86">0</r>
+ <r p="87">0</r>
+ <r p="88">0</r>
+ <r p="89">0</r>
+ <r p="90">0</r>
+ <r p="91">0</r>
+ <r p="92">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=NRCellDU_GNBDU">
+ <job jobId="nr_all"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber92</measType>
+ <measType p="2">pmCounterNumber93</measType>
+ <measType p="3">pmCounterNumber94</measType>
+ <measType p="4">pmCounterNumber95</measType>
+ <measType p="5">pmCounterNumber96</measType>
+ <measType p="6">pmCounterNumber97</measType>
+ <measType p="7">pmCounterNumber98</measType>
+ <measType p="8">pmCounterNumber99</measType>
+ <measType p="9">pmCounterNumber100</measType>
+ <measType p="10">pmCounterNumber101</measType>
+ <measType p="11">pmCounterNumber102</measType>
+ <measType p="12">pmCounterNumber103</measType>
+ <measType p="13">pmCounterNumber104</measType>
+ <measType p="14">pmCounterNumber105</measType>
+ <measType p="15">pmCounterNumber106</measType>
+ <measType p="16">pmCounterNumber107</measType>
+ <measType p="17">pmCounterNumber108</measType>
+ <measType p="18">pmCounterNumber108Init</measType>
+ <measType p="19">pmCounterNumber110</measType>
+ <measType p="20">pmCounterNumber110Init</measType>
+ <measType p="21">pmCounterNumber112</measType>
+ <measType p="22">pmCounterNumber112Init</measType>
+ <measType p="23">pmCounterNumber114</measType>
+ <measType p="24">pmCounterNumber114Init</measType>
+ <measType p="25">pmCounterNumber116</measType>
+ <measType p="26">pmCounterNumber116Init</measType>
+ <measType p="27">pmCounterNumber118</measType>
+ <measType p="28">pmCounterNumber118Init</measType>
+ <measType p="29">pmCounterNumber120</measType>
+ <measType p="30">pmCounterNumber120Init</measType>
+ <measType p="31">pmCounterNumber122</measType>
+ <measType p="32">pmCounterNumber122Init</measType>
+ <measType p="33">pmCounterNumber124</measType>
+ <measType p="34">pmCounterNumber125</measType>
+ <measType p="35">pmCounterNumber125Init</measType>
+ <measType p="36">pmCounterNumber127</measType>
+ <measType p="37">pmCounterNumber127Init</measType>
+ <measType p="38">pmCounterNumber129</measType>
+ <measType p="39">pmCounterNumber129Init</measType>
+ <measType p="40">pmCounterNumber131</measType>
+ <measType p="41">pmCounterNumber131Init</measType>
+ <measType p="42">pmCounterNumber133</measType>
+ <measType p="43">pmCounterNumber133Init</measType>
+ <measType p="44">pmCounterNumber135</measType>
+ <measType p="45">pmCounterNumber135Init</measType>
+ <measType p="46">pmCounterNumber137</measType>
+ <measType p="47">pmCounterNumber137Init</measType>
+ <measType p="48">pmCounterNumber139</measType>
+ <measType p="49">pmCounterNumber139Init</measType>
+ <measType p="50">pmCounterNumber141</measType>
+ <measType p="51">pmCounterNumber141Init</measType>
+ <measType p="52">pmCounterNumber143</measType>
+ <measType p="53">pmCounterNumber143Init</measType>
+ <measType p="54">pmCounterNumber145</measType>
+ <measType p="55">pmCounterNumber145Init</measType>
+ <measType p="56">pmCounterNumber147</measType>
+ <measType p="57">pmCounterNumber147Init</measType>
+ <measType p="58">pmCounterNumber149</measType>
+ <measType p="59">pmCounterNumber150</measType>
+ <measType p="60">pmCounterNumber150Init</measType>
+ <measType p="61">pmCounterNumber152</measType>
+ <measType p="62">pmCounterNumber152Init</measType>
+ <measType p="63">pmCounterNumber154</measType>
+ <measType p="64">pmCounterNumber154Init</measType>
+ <measType p="65">pmCounterNumber156</measType>
+ <measType p="66">pmCounterNumber156Init</measType>
+ <measType p="67">pmCounterNumber158</measType>
+ <measType p="68">pmCounterNumber158Ext</measType>
+ <measType p="69">pmCounterNumber160</measType>
+ <measType p="70">pmCounterNumber161</measType>
+ <measType p="71">pmCounterNumber162</measType>
+ <measType p="72">pmCounterNumber163</measType>
+ <measType p="73">pmCounterNumber164</measType>
+ <measType p="74">pmCounterNumber165</measType>
+ <measType p="75">pmCounterNumber166</measType>
+ <measType p="76">pmCounterNumber1666</measType>
+ <measType p="77">pmCounterNumber168</measType>
+ <measType p="78">pmCounterNumber169</measType>
+ <measType p="79">pmCounterNumber170</measType>
+ <measType p="80">pmCounterNumber171</measType>
+ <measType p="81">pmCounterNumber172</measType>
+ <measType p="82">pmCounterNumber173</measType>
+ <measType p="83">pmCounterNumber174</measType>
+ <measType p="84">pmCounterNumber175</measType>
+ <measType p="85">pmCounterNumber176</measType>
+ <measType p="86">pmCounterNumber177</measType>
+ <measType p="87">pmCounterNumber178</measType>
+ <measType p="88">pmCounterNumber179</measType>
+ <measType p="89">pmCounterNumber180</measType>
+ <measType p="90">pmCounterNumber181</measType>
+ <measType p="91">pmCounterNumber182</measType>
+ <measType p="92">pmCounterNumber183</measType>
+ <measType p="93">pmCounterNumber184</measType>
+ <measType p="94">pmCounterNumber185</measType>
+ <measType p="95">pmCounterNumber185Qos</measType>
+ <measType p="96">pmCounterNumber185Samp</measType>
+ <measType p="97">pmCounterNumber185SampQos</measType>
+ <measType p="98">pmCounterNumber189</measType>
+ <measType p="99">pmCounterNumber189Qos</measType>
+ <measType p="100">pmCounterNumber191</measType>
+ <measType p="101">pmCounterNumber191Qos</measType>
+ <measType p="102">pmCounterNumber193</measType>
+ <measType p="103">pmCounterNumber193Samp</measType>
+ <measType p="104">pmCounterNumber195</measType>
+ <measType p="105">pmCounterNumber195Ext</measType>
+ <measType p="106">pmCounterNumber197</measType>
+ <measType p="107">pmCounterNumber198</measType>
+ <measType p="108">pmCounterNumber199</measType>
+ <measType p="109">pmCounterNumber200</measType>
+ <measType p="110">pmCounterNumber200BsrGrant</measType>
+ <measType p="111">pmCounterNumber200PreemptGrant</measType>
+ <measType p="112">pmCounterNumber200PucchSrGrant</measType>
+ <measType p="113">pmCounterNumber204</measType>
+ <measType p="114">pmCounterNumber205</measType>
+ <measType p="115">pmCounterNumber206</measType>
+ <measType p="116">pmCounterNumber207</measType>
+ <measType p="117">pmCounterNumber208</measType>
+ <measType p="118">pmCounterNumber209</measType>
+ <measType p="119">pmCounterNumber210</measType>
+ <measType p="120">pmCounterNumber211</measType>
+ <measType p="121">pmCounterNumber212</measType>
+ <measType p="122">pmCounterNumber213</measType>
+ <measType p="123">pmCounterNumber214</measType>
+ <measType p="124">pmCounterNumber215</measType>
+ <measType p="125">pmCounterNumber216</measType>
+ <measType p="126">pmCounterNumber216MacCe</measType>
+ <measType p="127">pmCounterNumber218</measType>
+ <measType p="128">pmCounterNumber219</measType>
+ <measType p="129">pmCounterNumber220</measType>
+ <measType p="130">pmCounterNumber221</measType>
+ <measType p="131">pmCounterNumber222</measType>
+ <measType p="132">pmCounterNumber223</measType>
+ <measType p="133">pmCounterNumber224</measType>
+ <measType p="134">pmCounterNumber225</measType>
+ <measType p="135">pmCounterNumber226</measType>
+ <measType p="136">pmCounterNumber227</measType>
+ <measType p="137">pmCounterNumber228</measType>
+ <measType p="138">pmCounterNumber228Forced</measType>
+ <measType p="139">pmCounterNumber230</measType>
+ <measType p="140">pmCounterNumber231</measType>
+ <measType p="141">pmCounterNumber232</measType>
+ <measType p="142">pmCounterNumber233</measType>
+ <measType p="143">pmCounterNumber234</measType>
+ <measType p="144">pmCounterNumber235</measType>
+ <measType p="145">pmCounterNumber236</measType>
+ <measType p="146">pmCounterNumber237</measType>
+ <measType p="147">pmCounterNumber238</measType>
+ <measType p="148">pmCounterNumber239</measType>
+ <measType p="149">pmCounterNumber240</measType>
+ <measType p="150">pmCounterNumber241</measType>
+ <measType p="151">pmCounterNumber242</measType>
+ <measType p="152">pmCounterNumber243</measType>
+ <measType p="153">pmCounterNumber244</measType>
+ <measType p="154">pmCounterNumber245</measType>
+ <measType p="155">pmCounterNumber246</measType>
+ <measType p="156">pmCounterNumber247</measType>
+ <measType p="157">pmCounterNumber248</measType>
+ <measType p="158">pmCounterNumber249</measType>
+ <measType p="159">pmCounterNumber250</measType>
+ <measType p="160">pmCounterNumber251</measType>
+ <measType p="161">pmCounterNumber252</measType>
+ <measType p="162">pmCounterNumber252Qos</measType>
+ <measType p="163">pmCounterNumber254</measType>
+ <measType p="164">pmCounterNumber254Qos</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=32">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="12">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="13">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="14">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="15">0</r>
+ <r p="16">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">2880</r>
+ <r p="80">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="81">0,0,0,0,0,0,0,0</r>
+ <r p="82">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="83">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="84">0,0,0,0,0,0,0,0</r>
+ <r p="85">0,0,0,0,0,0,0,0</r>
+ <r p="86">0,0,0,0,0,0,0,0</r>
+ <r p="87">0,0,0,0,0,0,0,0</r>
+ <r p="88">0,0,0,0,0,0,0,0</r>
+ <r p="89">0,0,0,0,0,0,0,0</r>
+ <r p="90">0,0,0,0,0,0,0,0</r>
+ <r p="91">0,0,0,0,0,0,0,0</r>
+ <r p="92">0,0,0,0,0,0,0,0</r>
+ <r p="93">0</r>
+ <r p="94">0</r>
+ <r p="95">0</r>
+ <r p="96">0</r>
+ <r p="97">0</r>
+ <r p="98">0</r>
+ <r p="99">0</r>
+ <r p="100">0</r>
+ <r p="101">0</r>
+ <r p="102">0</r>
+ <r p="103">0</r>
+ <r p="104">0</r>
+ <r p="105">0</r>
+ <r p="106">0</r>
+ <r p="107">0</r>
+ <r p="108">0</r>
+ <r p="109">0</r>
+ <r p="110">0</r>
+ <r p="111">0</r>
+ <r p="112">0</r>
+ <r p="113">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="114">0</r>
+ <r p="115">0</r>
+ <r p="116">0</r>
+ <r p="117">179</r>
+ <r p="118">0</r>
+ <r p="119">0,0,0,0</r>
+ <r p="120">0,0,0,0</r>
+ <r p="121">0</r>
+ <r p="122">0</r>
+ <r p="123">0</r>
+ <r p="124">0</r>
+ <r p="125">0</r>
+ <r p="126">0</r>
+ <r p="127">0</r>
+ <r p="128">0</r>
+ <r p="129">0</r>
+ <r p="130">0</r>
+ <r p="131">0</r>
+ <r p="132">0</r>
+ <r p="133">0</r>
+ <r p="134">900,0,0,0,0</r>
+ <r p="135">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="136">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="137">1440001</r>
+ <r p="138">0</r>
+ <r p="139">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="140">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="141">0</r>
+ <r p="142">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="143">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="144">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="145">0</r>
+ <r p="146">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="147">0,0,0,0,0,0,0,0,0,0,0,1800001,0,0,0,0,0,0,0,0,0</r>
+ <r p="148">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="149">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="150">0,0,0,0,0,0,0,0</r>
+ <r p="151">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="152">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="153">0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="154">0</r>
+ <r p="155">0</r>
+ <r p="156">0</r>
+ <r p="157">0</r>
+ <r p="158">0</r>
+ <r p="159">0</r>
+ <r p="160">0</r>
+ <r p="161">0</r>
+ <r p="162">0</r>
+ <r p="163">0</r>
+ <r p="164">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=31">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="12">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="13">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="14">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="15">0</r>
+ <r p="16">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">5376</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="81">0,0,0,0,0,0,0,0</r>
+ <r p="82">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="83">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="84">0,0,0,0,0,0,0,0</r>
+ <r p="85">0,0,0,0,0,0,0,0</r>
+ <r p="86">0,0,0,0,0,0,0,0</r>
+ <r p="87">0,0,0,0,0,0,0,0</r>
+ <r p="88">0,0,0,0,0,0,0,0</r>
+ <r p="89">0,0,0,0,0,0,0,0</r>
+ <r p="90">0,0,0,0,0,0,0,0</r>
+ <r p="91">0,0,0,0,0,0,0,0</r>
+ <r p="92">0,0,0,0,0,0,0,0</r>
+ <r p="93">0</r>
+ <r p="94">0</r>
+ <r p="95">0</r>
+ <r p="96">0</r>
+ <r p="97">0</r>
+ <r p="98">0</r>
+ <r p="99">0</r>
+ <r p="100">0</r>
+ <r p="101">0</r>
+ <r p="102">0</r>
+ <r p="103">0</r>
+ <r p="104">0</r>
+ <r p="105">0</r>
+ <r p="106">0</r>
+ <r p="107">0</r>
+ <r p="108">0</r>
+ <r p="109">0</r>
+ <r p="110">0</r>
+ <r p="111">0</r>
+ <r p="112">0</r>
+ <r p="113">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="114">0</r>
+ <r p="115">0</r>
+ <r p="116">0</r>
+ <r p="117">179</r>
+ <r p="118">0</r>
+ <r p="119">0,0,0,0</r>
+ <r p="120">0,0,0,0</r>
+ <r p="121">0</r>
+ <r p="122">0</r>
+ <r p="123">0</r>
+ <r p="124">0</r>
+ <r p="125">0</r>
+ <r p="126">0</r>
+ <r p="127">0</r>
+ <r p="128">0</r>
+ <r p="129">0</r>
+ <r p="130">0</r>
+ <r p="131">0</r>
+ <r p="132">0</r>
+ <r p="133">0</r>
+ <r p="134">900,0,0,0,0</r>
+ <r p="135">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="136">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="137">1440001</r>
+ <r p="138">0</r>
+ <r p="139">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="140">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="141">0</r>
+ <r p="142">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="143">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="144">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="145">0</r>
+ <r p="146">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="147">0,0,0,0,0,0,0,0,0,0,0,1800001,0,0,0,0,0,0,0,0,0</r>
+ <r p="148">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="149">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="150">0,0,0,0,0,0,0,0</r>
+ <r p="151">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="152">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="153">0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="154">0</r>
+ <r p="155">0</r>
+ <r p="156">0</r>
+ <r p="157">0</r>
+ <r p="158">0</r>
+ <r p="159">0</r>
+ <r p="160">0</r>
+ <r p="161">0</r>
+ <r p="162">0</r>
+ <r p="163">0</r>
+ <r p="164">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="12">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="13">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="14">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="15">0</r>
+ <r p="16">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="81">0,0,0,0,0,0,0,0</r>
+ <r p="82">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="83">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="84">0,0,0,0,0,0,0,0</r>
+ <r p="85">0,0,0,0,0,0,0,0</r>
+ <r p="86">0,0,0,0,0,0,0,0</r>
+ <r p="87">0,0,0,0,0,0,0,0</r>
+ <r p="88">0,0,0,0,0,0,0,0</r>
+ <r p="89">0,0,0,0,0,0,0,0</r>
+ <r p="90">0,0,0,0,0,0,0,0</r>
+ <r p="91">0,0,0,0,0,0,0,0</r>
+ <r p="92">0,0,0,0,0,0,0,0</r>
+ <r p="93">0</r>
+ <r p="94">0</r>
+ <r p="95">0</r>
+ <r p="96">0</r>
+ <r p="97">0</r>
+ <r p="98">0</r>
+ <r p="99">0</r>
+ <r p="100">0</r>
+ <r p="101">0</r>
+ <r p="102">0</r>
+ <r p="103">0</r>
+ <r p="104">0</r>
+ <r p="105">0</r>
+ <r p="106">0</r>
+ <r p="107">0</r>
+ <r p="108">0</r>
+ <r p="109">0</r>
+ <r p="110">0</r>
+ <r p="111">0</r>
+ <r p="112">0</r>
+ <r p="113">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="114">0</r>
+ <r p="115">0</r>
+ <r p="116">0</r>
+ <r p="117">0</r>
+ <r p="118">0</r>
+ <r p="119">0,0,0,0</r>
+ <r p="120">0,0,0,0</r>
+ <r p="121">0</r>
+ <r p="122">0</r>
+ <r p="123">0</r>
+ <r p="124">0</r>
+ <r p="125">0</r>
+ <r p="126">0</r>
+ <r p="127">0</r>
+ <r p="128">0</r>
+ <r p="129">0</r>
+ <r p="130">0</r>
+ <r p="131">0</r>
+ <r p="132">0</r>
+ <r p="133">0</r>
+ <r p="134">0,0,0,0,0</r>
+ <r p="135">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="136">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="137">0</r>
+ <r p="138">0</r>
+ <r p="139">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="140">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="141">0</r>
+ <r p="142">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="143">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="144">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="145">0</r>
+ <r p="146">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="147">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="148">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="149">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="150">0,0,0,0,0,0,0,0</r>
+ <r p="151">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="152">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="153">0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="154">0</r>
+ <r p="155">0</r>
+ <r p="156">0</r>
+ <r p="157">0</r>
+ <r p="158">0</r>
+ <r p="159">0</r>
+ <r p="160">0</r>
+ <r p="161">0</r>
+ <r p="162">0</r>
+ <r p="163">0</r>
+ <r p="164">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="12">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="13">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="14">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="15">0</r>
+ <r p="16">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="81">0,0,0,0,0,0,0,0</r>
+ <r p="82">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="83">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="84">0,0,0,0,0,0,0,0</r>
+ <r p="85">0,0,0,0,0,0,0,0</r>
+ <r p="86">0,0,0,0,0,0,0,0</r>
+ <r p="87">0,0,0,0,0,0,0,0</r>
+ <r p="88">0,0,0,0,0,0,0,0</r>
+ <r p="89">0,0,0,0,0,0,0,0</r>
+ <r p="90">0,0,0,0,0,0,0,0</r>
+ <r p="91">0,0,0,0,0,0,0,0</r>
+ <r p="92">0,0,0,0,0,0,0,0</r>
+ <r p="93">0</r>
+ <r p="94">0</r>
+ <r p="95">0</r>
+ <r p="96">0</r>
+ <r p="97">0</r>
+ <r p="98">0</r>
+ <r p="99">0</r>
+ <r p="100">0</r>
+ <r p="101">0</r>
+ <r p="102">0</r>
+ <r p="103">0</r>
+ <r p="104">0</r>
+ <r p="105">0</r>
+ <r p="106">0</r>
+ <r p="107">0</r>
+ <r p="108">0</r>
+ <r p="109">0</r>
+ <r p="110">0</r>
+ <r p="111">0</r>
+ <r p="112">0</r>
+ <r p="113">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="114">0</r>
+ <r p="115">0</r>
+ <r p="116">0</r>
+ <r p="117">0</r>
+ <r p="118">0</r>
+ <r p="119">0,0,0,0</r>
+ <r p="120">0,0,0,0</r>
+ <r p="121">0</r>
+ <r p="122">0</r>
+ <r p="123">0</r>
+ <r p="124">0</r>
+ <r p="125">0</r>
+ <r p="126">0</r>
+ <r p="127">0</r>
+ <r p="128">0</r>
+ <r p="129">0</r>
+ <r p="130">0</r>
+ <r p="131">0</r>
+ <r p="132">0</r>
+ <r p="133">0</r>
+ <r p="134">0,0,0,0,0</r>
+ <r p="135">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="136">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="137">0</r>
+ <r p="138">0</r>
+ <r p="139">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="140">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="141">0</r>
+ <r p="142">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="143">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="144">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="145">0</r>
+ <r p="146">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="147">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="148">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="149">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="150">0,0,0,0,0,0,0,0</r>
+ <r p="151">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="152">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="153">0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="154">0</r>
+ <r p="155">0</r>
+ <r p="156">0</r>
+ <r p="157">0</r>
+ <r p="158">0</r>
+ <r p="159">0</r>
+ <r p="160">0</r>
+ <r p="161">0</r>
+ <r p="162">0</r>
+ <r p="163">0</r>
+ <r p="164">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=NRSectorCarrier_GNBDU">
+ <job jobId="nr_all"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber256</measType>
+ <measType p="2">pmCounterNumber257</measType>
+ <measType p="3">pmCounterNumber258</measType>
+ <measType p="4">pmCounterNumber259</measType>
+ <measType p="5">pmCounterNumber260</measType>
+ <measType p="6">pmCounterNumber261</measType>
+ <measType p="7">pmCounterNumber262</measType>
+ <measType p="8">pmCounterNumber263</measType>
+ <measType p="9">pmCounterNumber263On</measType>
+ <measType p="10">pmCounterNumber265</measType>
+ <measType p="11">pmCounterNumber266</measType>
+ <measType p="12">pmCounterNumber267</measType>
+ <measType p="13">pmCounterNumber267Auto</measType>
+ <measType p="14">pmCounterNumber267AutoCbrs</measType>
+ <measType p="15">pmCounterNumber267Man</measType>
+ <measType p="16">pmCounterNumber267ManCbrs</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRSectorCarrier=32">
+ <r p="1">0,0,0,0,0,0,0,0,0,15,0,0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="3">0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">10000</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRSectorCarrier=31">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,15,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="3">0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">15000</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRSectorCarrier=2">
+ <r p="1">15,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="3">0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRSectorCarrier=1">
+ <r p="1">15,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="3">0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=EUtranCellFDD">
+ <job jobId="stat"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber272</measType>
+ <measType p="2">pmCounterNumber273</measType>
+ <measType p="3">pmCounterNumber274</measType>
+ <measType p="4">pmCounterNumber275</measType>
+ <measType p="5">pmCounterNumber276</measType>
+ <measType p="6">pmCounterNumber277</measType>
+ <measType p="7">pmCounterNumber278</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=2">
+ <r p="1">0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="3">0,0,0,0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=1">
+ <r p="1">0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="3">0,0,0,0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=NRCellDU_GNBDU">
+ <job jobId="stat"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber279</measType>
+ <measType p="2">pmCounterNumber280</measType>
+ <measType p="3">pmCounterNumber281</measType>
+ <measType p="4">pmCounterNumber282</measType>
+ <measType p="5">pmCounterNumber283</measType>
+ <measType p="6">pmCounterNumber284</measType>
+ <measType p="7">pmCounterNumber285</measType>
+ <measType p="8">pmCounterNumber286</measType>
+ <measType p="9">pmCounterNumber287</measType>
+ <measType p="10">pmCounterNumber288</measType>
+ <measType p="11">pmCounterNumber289</measType>
+ <measType p="12">pmCounterNumber290</measType>
+ <measType p="13">pmCounterNumber291</measType>
+ <measType p="14">pmCounterNumber292</measType>
+ <measType p="15">pmCounterNumber293</measType>
+ <measType p="16">pmCounterNumber294</measType>
+ <measType p="17">pmCounterNumber295</measType>
+ <measType p="18">pmCounterNumber296</measType>
+ <measType p="19">pmCounterNumber274</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=32">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0</r>
+ <r p="3">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0,0,0,0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=31">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0</r>
+ <r p="3">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0,0,0,0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=2">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0</r>
+ <r p="3">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0,0,0,0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=1">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0</r>
+ <r p="3">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0,0,0,0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=EUtranCellFDD">
+ <job jobId="inter"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber297</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=2">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=1">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=NRCellDU_GNBDU">
+ <job jobId="inter"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber297F0Distr</measType>
+ <measType p="2">pmCounterNumber297F2Distr</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=32">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=31">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=2">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=1">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=GNBCUCPFunction_GNBCUCP">
+ <job jobId="PREDEF_5GRC"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber300</measType>
+ <measType p="2">pmCounterNumber301</measType>
+ <measType p="3">pmCounterNumber302</measType>
+ <measType p="4">pmCounterNumber303</measType>
+ <measType p="5">pmCounterNumber304</measType>
+ <measType p="6">pmCounterNumber305</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">180</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=NRCellCU_GNBCUCP">
+ <job jobId="PREDEF_5GRC"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber306</measType>
+ <measType p="2">pmCounterNumber307</measType>
+ <measType p="3">pmCounterNumber308</measType>
+ <measType p="4">pmCounterNumber309</measType>
+ <measType p="5">pmCounterNumber310</measType>
+ <measType p="6">pmCounterNumber311</measType>
+ <measType p="7">pmCounterNumber312</measType>
+ <measType p="8">pmCounterNumber313</measType>
+ <measType p="9">pmCounterNumber314</measType>
+ <measType p="10">pmCounterNumber315</measType>
+ <measType p="11">pmCounterNumber316</measType>
+ <measType p="12">pmCounterNumber317</measType>
+ <measType p="13">pmCounterNumber318</measType>
+ <measType p="14">pmCounterNumber319</measType>
+ <measType p="15">pmCounterNumber320</measType>
+ <measType p="16">pmCounterNumber321</measType>
+ <measType p="17">pmCounterNumber322</measType>
+ <measType p="18">pmCounterNumber323</measType>
+ <measType p="19">pmCounterNumber324</measType>
+ <measType p="20">pmCounterNumber324Act</measType>
+ <measType p="21">pmCounterNumber326</measType>
+ <measType p="22">pmCounterNumber326Act</measType>
+ <measType p="23">pmCounterNumber328</measType>
+ <measType p="24">pmCounterNumber329</measType>
+ <measType p="25">pmCounterNumber330</measType>
+ <measType p="26">pmCounterNumber331</measType>
+ <measType p="27">pmCounterNumber332</measType>
+ <measType p="28">pmCounterNumber333</measType>
+ <measType p="29">pmCounterNumber334</measType>
+ <measType p="30">pmCounterNumber335</measType>
+ <measType p="31">pmCounterNumber336</measType>
+ <measType p="32">pmCounterNumber337</measType>
+ <measType p="33">pmCounterNumber338</measType>
+ <measType p="34">pmCounterNumber339</measType>
+ <measType p="35">pmCounterNumber340</measType>
+ <measType p="36">pmCounterNumber341</measType>
+ <measType p="37">pmCounterNumber342</measType>
+ <measType p="38">pmCounterNumber343</measType>
+ <measType p="39">pmCounterNumber343Mos</measType>
+ <measType p="40">pmCounterNumber345</measType>
+ <measType p="41">pmCounterNumber345Mos</measType>
+ <measType p="42">pmCounterNumber347</measType>
+ <measType p="43">pmCounterNumber348</measType>
+ <measType p="44">pmCounterNumber349</measType>
+ <measType p="45">pmCounterNumber350</measType>
+ <measType p="46">pmCounterNumber350Mos</measType>
+ <measType p="47">pmCounterNumber350Reatt</measType>
+ <measType p="48">pmCounterNumber350ReattMos</measType>
+ <measType p="49">pmCounterNumber354</measType>
+ <measType p="50">pmCounterNumber354Mos</measType>
+ <measType p="51">pmCounterNumber301</measType>
+ <measType p="52">pmCounterNumber302</measType>
+ <measType p="53">pmCounterNumber303</measType>
+ <measType p="54">pmCounterNumber304</measType>
+ <measType p="55">pmCounterNumber305</measType>
+ <measType p="56">pmCounterNumber356</measType>
+ <measType p="57">pmCounterNumber357</measType>
+ <measType p="58">pmCounterNumber358</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=32">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">180</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">180</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">180</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=31">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">180</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">180</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">180</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">180</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">180</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">180</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">180</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">180</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">180</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=GNBDUFunction_GNBDU">
+ <job jobId="PREDEF_5GRP"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber359</measType>
+ <measType p="2">pmCounterNumber360</measType>
+ <measType p="3">pmCounterNumber361</measType>
+ <measType p="4">pmCounterNumber362</measType>
+ <measType p="5">pmCounterNumber363</measType>
+ <measType p="6">pmCounterNumber364</measType>
+ <measType p="7">pmCounterNumber365</measType>
+ <measType p="8">pmCounterNumber366</measType>
+ <measType p="9">pmCounterNumber367</measType>
+ <measType p="10">pmCounterNumber368</measType>
+ <measType p="11">pmCounterNumber369</measType>
+ <measType p="12">pmCounterNumber370</measType>
+ <measType p="13">pmCounterNumber371</measType>
+ <measType p="14">pmCounterNumber372</measType>
+ <measType p="15">pmCounterNumber373</measType>
+ <measType p="16">pmCounterNumber374</measType>
+ <measType p="17">pmCounterNumber375</measType>
+ <measType p="18">pmCounterNumber376</measType>
+ <measType p="19">pmCounterNumber377</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">32</r>
+ <r p="6">16</r>
+ <r p="7">0</r>
+ <r p="8">16</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=NRCellDU_GNBDU">
+ <job jobId="PREDEF_5GRP"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber378</measType>
+ <measType p="2">pmCounterNumber379</measType>
+ <measType p="3">pmCounterNumber380</measType>
+ <measType p="4">pmCounterNumber381</measType>
+ <measType p="5">pmCounterNumber382</measType>
+ <measType p="6">pmCounterNumber383</measType>
+ <measType p="7">pmCounterNumber384</measType>
+ <measType p="8">pmCounterNumber385</measType>
+ <measType p="9">pmCounterNumber386</measType>
+ <measType p="10">pmCounterNumber306</measType>
+ <measType p="11">pmCounterNumber307</measType>
+ <measType p="12">pmCounterNumber307ual</measType>
+ <measType p="13">pmCounterNumber388</measType>
+ <measType p="14">pmCounterNumber389</measType>
+ <measType p="15">pmCounterNumber390</measType>
+ <measType p="16">pmCounterNumber391</measType>
+ <measType p="17">pmCounterNumber392</measType>
+ <measType p="18">pmCounterNumber393</measType>
+ <measType p="19">pmCounterNumber394</measType>
+ <measType p="20">pmCounterNumber395</measType>
+ <measType p="21">pmCounterNumber396</measType>
+ <measType p="22">pmCounterNumber397</measType>
+ <measType p="23">pmCounterNumber398</measType>
+ <measType p="24">pmCounterNumber399</measType>
+ <measType p="25">pmCounterNumber399Broadcasting</measType>
+ <measType p="26">pmCounterNumber401</measType>
+ <measType p="27">pmCounterNumber402</measType>
+ <measType p="28">pmCounterNumber403</measType>
+ <measType p="29">pmCounterNumber404</measType>
+ <measType p="30">pmCounterNumber405</measType>
+ <measType p="31">pmCounterNumber406</measType>
+ <measType p="32">pmCounterNumber407</measType>
+ <measType p="33">pmCounterNumber407Qos</measType>
+ <measType p="34">pmCounterNumber409</measType>
+ <measType p="35">pmCounterNumber410</measType>
+ <measType p="36">pmCounterNumber410Drb</measType>
+ <measType p="37">pmCounterNumber410DrbQos</measType>
+ <measType p="38">pmCounterNumber413</measType>
+ <measType p="39">pmCounterNumber413ResUe</measType>
+ <measType p="40">pmCounterNumber415</measType>
+ <measType p="41">pmCounterNumber416</measType>
+ <measType p="42">pmCounterNumber417</measType>
+ <measType p="43">pmCounterNumber418</measType>
+ <measType p="44">pmCounterNumber419</measType>
+ <measType p="45">pmCounterNumber420</measType>
+ <measType p="46">pmCounterNumber421</measType>
+ <measType p="47">pmCounterNumber422</measType>
+ <measType p="48">pmCounterNumber423</measType>
+ <measType p="49">pmCounterNumber424</measType>
+ <measType p="50">pmCounterNumber425</measType>
+ <measType p="51">pmCounterNumber426</measType>
+ <measType p="52">pmCounterNumber427</measType>
+ <measType p="53">pmCounterNumber428</measType>
+ <measType p="54">pmCounterNumber429</measType>
+ <measType p="55">pmCounterNumber430</measType>
+ <measType p="56">pmCounterNumber431</measType>
+ <measType p="57">pmCounterNumber432</measType>
+ <measType p="58">pmCounterNumber433</measType>
+ <measType p="59">pmCounterNumber434</measType>
+ <measType p="60">pmCounterNumber435</measType>
+ <measType p="61">pmCounterNumber436</measType>
+ <measType p="62">pmCounterNumber437</measType>
+ <measType p="63">pmCounterNumber438</measType>
+ <measType p="64">pmCounterNumber439</measType>
+ <measType p="65">pmCounterNumber440</measType>
+ <measType p="66">pmCounterNumber441</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=32">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">1800000</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">1800001</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">3032642268</r>
+ <r p="18">20160056</r>
+ <r p="19">15120000</r>
+ <r p="20">816482268</r>
+ <r p="21">0</r>
+ <r p="22">2880</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">3780540</r>
+ <r p="26">2520</r>
+ <r p="27">0</r>
+ <r p="28">900,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="29">0</r>
+ <r p="30">900,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">5760004</r>
+ <r p="41">0</r>
+ <r p="42">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="43">1440004</r>
+ <r p="44">0</r>
+ <r p="45">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="46">2,1,1,2,2,3,2,1,1,0,0,0</r>
+ <r p="47">15</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">60</r>
+ <r p="54">15</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">179</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=31">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">1800000</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">1800001</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">5110563822</r>
+ <r p="18">20160056</r>
+ <r p="19">15120000</r>
+ <r p="20">1375923822</r>
+ <r p="21">0</r>
+ <r p="22">5376</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">3780504</r>
+ <r p="26">2352</r>
+ <r p="27">0</r>
+ <r p="28">900,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="29">0</r>
+ <r p="30">900,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">5760004</r>
+ <r p="41">0</r>
+ <r p="42">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="43">1440004</r>
+ <r p="44">0</r>
+ <r p="45">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="46">3,1,2,1,2,0,3,2,0,0,0,0</r>
+ <r p="47">14</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">56</r>
+ <r p="54">14</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">179</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">900</r>
+ <r p="12">900</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="29">0</r>
+ <r p="30">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="46">0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">900</r>
+ <r p="12">900</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="29">0</r>
+ <r p="30">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="46">0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=PpControlLink_GNBCUUP">
+ <job jobId="PREDEF_5GPP"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber310</measType>
+ <measType p="2">pmCounterNumber311</measType>
+ <measType p="3">pmCounterNumber312</measType>
+ <measType p="4">pmCounterNumber313</measType>
+ <measType p="5">pmCounterNumber314</measType>
+ <measType p="6">pmCounterNumber347</measType>
+ <measType p="7">pmCounterNumber348</measType>
+ <measType p="8">pmCounterNumber349</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUUPFunction=1,PpControlTermination=1,PpControlLink=internal">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">900</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">900</r>
+ <r p="8">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=EUtranCellFDD">
+ <job jobId="ltearq"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber442</measType>
+ <measType p="2">pmCounterNumber443</measType>
+ <measType p="3">pmCounterNumber444</measType>
+ <measType p="4">pmCounterNumber445</measType>
+ <measType p="5">pmCounterNumber446</measType>
+ <measType p="6">pmCounterNumber447</measType>
+ <measType p="7">pmCounterNumber448</measType>
+ <measType p="8">pmCounterNumber448PCell</measType>
+ <measType p="9">pmCounterNumber448SCell</measType>
+ <measType p="10">pmCounterNumber448Volte</measType>
+ <measType p="11">pmCounterNumber452</measType>
+ <measType p="12">pmCounterNumber453</measType>
+ <measType p="13">pmCounterNumber454</measType>
+ <measType p="14">pmCounterNumber455</measType>
+ <measType p="15">pmCounterNumber114</measType>
+ <measType p="16">pmCounterNumber456</measType>
+ <measType p="17">pmCounterNumber457</measType>
+ <measType p="18">pmCounterNumber458</measType>
+ <measType p="19">pmCounterNumber122</measType>
+ <measType p="20">pmCounterNumber459</measType>
+ <measType p="21">pmCounterNumber460</measType>
+ <measType p="22">pmCounterNumber461</measType>
+ <measType p="23">pmCounterNumber462</measType>
+ <measType p="24">pmCounterNumber131</measType>
+ <measType p="25">pmCounterNumber463</measType>
+ <measType p="26">pmCounterNumber464</measType>
+ <measType p="27">pmCounterNumber143</measType>
+ <measType p="28">pmCounterNumber145</measType>
+ <measType p="29">pmCounterNumber147</measType>
+ <measType p="30">pmCounterNumber14916qam</measType>
+ <measType p="31">pmCounterNumber149256Qam</measType>
+ <measType p="32">pmCounterNumber14964Qam</measType>
+ <measType p="33">pmCounterNumber149Iua16qam</measType>
+ <measType p="34">pmCounterNumber149IuaQpsk</measType>
+ <measType p="35">pmCounterNumber149Qpsk</measType>
+ <measType p="36">pmCounterNumber471</measType>
+ <measType p="37">pmCounterNumber472</measType>
+ <measType p="38">pmCounterNumber473</measType>
+ <measType p="39">pmCounterNumber474</measType>
+ <measType p="40">pmCounterNumber475</measType>
+ <measType p="41">pmCounterNumber476</measType>
+ <measType p="42">pmCounterNumber477</measType>
+ <measType p="43">pmCounterNumber478</measType>
+ <measType p="44">pmCounterNumber248</measType>
+ <measType p="45">pmCounterNumber249</measType>
+ <measType p="46">pmCounterNumber479</measType>
+ <measType p="47">pmCounterNumber250</measType>
+ <measType p="48">pmCounterNumber251</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=FieldReplaceableUnit">
+ <job jobId="PREDEF_Nc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber480</measType>
+ <measType p="2">pmCounterNumber481</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S3-1">
+ <r p="1">0</r>
+ <r p="2">4,4,4</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S2-1">
+ <r p="1">0</r>
+ <r p="2">4,4,4</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S1-1">
+ <r p="1">0</r>
+ <r p="2">4,4,4</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608">
+ <r p="1">0</r>
+ <r p="2"> , , </r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1">
+ <r p="1"> </r>
+ <r p="2">4,4,4</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=RiEthernetPort">
+ <job jobId="PREDEF_Nc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber482</measType>
+ <measType p="2">pmCounterNumber483</measType>
+ <measType p="3">pmCounterNumber484</measType>
+ <measType p="4">pmCounterNumber485</measType>
+ <measType p="5">pmCounterNumber486</measType>
+ <measType p="6">pmCounterNumber487</measType>
+ <measType p="7">pmCounterNumber488</measType>
+ <measType p="8">pmCounterNumber489</measType>
+ <measType p="9">pmCounterNumber490</measType>
+ <measType p="10">pmCounterNumber491</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,RiPort=P,RiEthernetPort=1">
+ <r p="1">0</r>
+ <r p="2">51885</r>
+ <r p="3">4628315</r>
+ <r p="4">9190</r>
+ <r p="5">0</r>
+ <r p="6">15493</r>
+ <r p="7">1956503</r>
+ <r p="8">7326</r>
+ <r p="9">0</r>
+ <r p="10"> </r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,RiPort=N,RiEthernetPort=1">
+ <r p="1">0</r>
+ <r p="2">37309</r>
+ <r p="3">2868954</r>
+ <r p="4">4551</r>
+ <r p="5">0</r>
+ <r p="6">915</r>
+ <r p="7">380361</r>
+ <r p="8">4549</r>
+ <r p="9">0</r>
+ <r p="10"> </r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,RiPort=B,RiEthernetPort=1">
+ <r p="1">0</r>
+ <r p="2">15490</r>
+ <r p="3">1512626</r>
+ <r p="4">7326</r>
+ <r p="5">0</r>
+ <r p="6">51883</r>
+ <r p="7">3492085</r>
+ <r p="8">9190</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,RiPort=A,RiEthernetPort=1">
+ <r p="1">0</r>
+ <r p="2">916</r>
+ <r p="3">260228</r>
+ <r p="4">4549</r>
+ <r p="5">0</r>
+ <r p="6">37309</r>
+ <r p="7">2097258</r>
+ <r p="8">4551</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=RiLink">
+ <job jobId="PREDEF_Nc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber492</measType>
+ <measType p="2">pmCounterNumber493</measType>
+ <measType p="3">pmCounterNumber494</measType>
+ <measType p="4">pmCounterNumber495</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,RiLink=S3-1">
+ <r p="1">1077</r>
+ <r p="2">1076</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,RiLink=S2-1">
+ <r p="1">450</r>
+ <r p="2">450</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,RiLink=S1-1">
+ <r p="1">427</r>
+ <r p="2">427</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,RiLink=R608-2">
+ <r p="1">0</r>
+ <r p="2">2147483647</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,RiLink=R608-1">
+ <r p="1">0</r>
+ <r p="2">2147483647</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=RiPort">
+ <job jobId="PREDEF_Nc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber496</measType>
+ <measType p="2">pmCounterNumber497</measType>
+ <measType p="3">pmCounterNumber498</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S3-1,RiPort=DATA_2">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S3-1,RiPort=DATA_1">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S2-1,RiPort=DATA_2">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S2-1,RiPort=DATA_1">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S1-1,RiPort=DATA_2">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S1-1,RiPort=DATA_1">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,RiPort=P">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,RiPort=N">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,RiPort=B">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,RiPort=A">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,RiPort=K">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,RiPort=C">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,RiPort=B">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,RiPort=A">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=SfpChannel">
+ <job jobId="PREDEF_Nc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber499</measType>
+ <measType p="2">pmCounterNumber500</measType>
+ <measType p="3">pmCounterNumber501</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,SfpModule=P,SfpChannel=1">
+ <r p="1">2951</r>
+ <r p="2">3600</r>
+ <r p="3">2922</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,SfpModule=N,SfpChannel=1">
+ <r p="1">3018</r>
+ <r p="2">4200</r>
+ <r p="3">2953</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,SfpModule=K,SfpChannel=1">
+ <r p="1">2809</r>
+ <r p="2">3500</r>
+ <r p="3">2812</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S3-1,SfpModule=DATA_2,SfpChannel=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S2-1,SfpModule=DATA_2,SfpChannel=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S1-1,SfpModule=DATA_2,SfpChannel=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S3-1,SfpModule=DATA_1,SfpChannel=1">
+ <r p="1">2810</r>
+ <r p="2">3100</r>
+ <r p="3">2830</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S2-1,SfpModule=DATA_1,SfpChannel=1">
+ <r p="1">2717</r>
+ <r p="2">3600</r>
+ <r p="3">2775</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S1-1,SfpModule=DATA_1,SfpChannel=1">
+ <r p="1">2700</r>
+ <r p="2">3900</r>
+ <r p="3">2773</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,SfpModule=C,SfpChannel=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,SfpModule=B,SfpChannel=1">
+ <r p="1">2744</r>
+ <r p="2">3200</r>
+ <r p="3">2775</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,SfpModule=B,SfpChannel=1">
+ <r p="1">2863</r>
+ <r p="2">3800</r>
+ <r p="3">2898</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,SfpModule=A,SfpChannel=1">
+ <r p="1">2684</r>
+ <r p="2">3900</r>
+ <r p="3">2737</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,SfpModule=A,SfpChannel=1">
+ <r p="1">2892</r>
+ <r p="2">4400</r>
+ <r p="3">2893</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=SfpModule">
+ <job jobId="PREDEF_Nc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber502</measType>
+ <measType p="2">pmCounterNumber503</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S3-1,SfpModule=DATA_2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S3-1,SfpModule=DATA_1">
+ <r p="1">1310</r>
+ <r p="2">32552</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S2-1,SfpModule=DATA_2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S2-1,SfpModule=DATA_1">
+ <r p="1">1430</r>
+ <r p="2">32904</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S1-1,SfpModule=DATA_2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S1-1,SfpModule=DATA_1">
+ <r p="1">1410</r>
+ <r p="2">33141</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,SfpModule=P">
+ <r p="1">1388</r>
+ <r p="2">32558</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,SfpModule=N">
+ <r p="1">1384</r>
+ <r p="2">32505</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,SfpModule=B">
+ <r p="1">1297</r>
+ <r p="2">32999</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,SfpModule=A">
+ <r p="1">1297</r>
+ <r p="2">33041</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,SfpModule=K">
+ <r p="1">1474</r>
+ <r p="2">32588</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,SfpModule=C">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,SfpModule=B">
+ <r p="1">1463</r>
+ <r p="2">32493</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,SfpModule=A">
+ <r p="1">1464</r>
+ <r p="2">32534</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=EthernetPort">
+ <job jobId="PREDEF_Rtn"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber482</measType>
+ <measType p="2">pmCounterNumber483</measType>
+ <measType p="3">pmCounterNumber484</measType>
+ <measType p="4">pmCounterNumber485</measType>
+ <measType p="5">pmCounterNumber486</measType>
+ <measType p="6">pmCounterNumber487</measType>
+ <measType p="7">pmCounterNumber488</measType>
+ <measType p="8">pmCounterNumber489</measType>
+ <measType p="9">pmCounterNumber504</measType>
+ <measType p="10">pmCounterNumber490</measType>
+ <measType p="11">pmCounterNumber505</measType>
+ <measType p="12">pmCounterNumber506</measType>
+ <measType p="13">pmCounterNumber507</measType>
+ <measType p="14">pmCounterNumber491</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,EthernetPort=TN_IDL_B_1">
+ <r p="1">22345</r>
+ <r p="2">1057</r>
+ <r p="3">2921772</r>
+ <r p="4">4472</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">9147991</r>
+ <r p="8">17099</r>
+ <r p="9">0</r>
+ <r p="10">7627</r>
+ <r p="11">3582</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=InterfaceIPv4">
+ <job jobId="PREDEF_Rtn"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber508</measType>
+ <measType p="2">pmCounterNumber509</measType>
+ <measType p="3">pmCounterNumber510</measType>
+ <measType p="4">pmCounterNumber511</measType>
+ <measType p="5">pmCounterNumber512</measType>
+ <measType p="6">pmCounterNumber513</measType>
+ <measType p="7">pmCounterNumber514</measType>
+ <measType p="8">pmCounterNumber515</measType>
+ <measType p="9">pmCounterNumber516</measType>
+ <measType p="10">pmCounterNumber517</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,Router=vr_OAM,InterfaceIPv4=1">
+ <r p="1">314834</r>
+ <r p="2">4561</r>
+ <r p="3">8697703</r>
+ <r p="4">16811</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,Router=vr_NR,InterfaceIPv4=1">
+ <r p="1">19900</r>
+ <r p="2">388</r>
+ <r p="3">1260</r>
+ <r p="4">30</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,Router=vr_LTE,InterfaceIPv4=1">
+ <r p="1">26656</r>
+ <r p="2">574</r>
+ <r p="3">14580</r>
+ <r p="4">243</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,Router=Node_Internal_F1,InterfaceIPv4=NRDU">
+ <r p="1"> </r>
+ <r p="2"> </r>
+ <r p="3"> </r>
+ <r p="4"> </r>
+ <r p="5"> </r>
+ <r p="6"> </r>
+ <r p="7"> </r>
+ <r p="8"> </r>
+ <r p="9"> </r>
+ <r p="10"> </r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,Router=Node_Internal_F1,InterfaceIPv4=NRCUCP">
+ <r p="1"> </r>
+ <r p="2"> </r>
+ <r p="3"> </r>
+ <r p="4"> </r>
+ <r p="5"> </r>
+ <r p="6"> </r>
+ <r p="7"> </r>
+ <r p="8"> </r>
+ <r p="9"> </r>
+ <r p="10"> </r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=SctpAssociation">
+ <job jobId="PREDEF_Rtn"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber518</measType>
+ <measType p="2">pmCounterNumber519</measType>
+ <measType p="3">pmCounterNumber520</measType>
+ <measType p="4">pmCounterNumber521</measType>
+ <measType p="5">pmCounterNumber522</measType>
+ <measType p="6">pmCounterNumber523</measType>
+ <measType p="7">pmCounterNumber524</measType>
+ <measType p="8">pmCounterNumber525</measType>
+ <measType p="9">pmCounterNumber526</measType>
+ <measType p="10">pmCounterNumber527</measType>
+ <measType p="11">pmCounterNumber528</measType>
+ <measType p="12">pmCounterNumber529</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,SctpEndpoint=F1_NRDU,SctpAssociation=38472-10.0.0.1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">833</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">87820</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">87820</r>
+ <r p="12">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,SctpEndpoint=F1_NRCUCP,SctpAssociation=38472-10.0.0.2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">833</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">87820</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">87820</r>
+ <r p="12">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=VlanPort">
+ <job jobId="PREDEF_Rtn"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber482</measType>
+ <measType p="2">pmCounterNumber483</measType>
+ <measType p="3">pmCounterNumber484</measType>
+ <measType p="4">pmCounterNumber485</measType>
+ <measType p="5">pmCounterNumber486</measType>
+ <measType p="6">pmCounterNumber487</measType>
+ <measType p="7">pmCounterNumber488</measType>
+ <measType p="8">pmCounterNumber489</measType>
+ <measType p="9">pmCounterNumber507</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,VlanPort=vr_OAM.IF1">
+ <r p="1">1996</r>
+ <r p="2">341</r>
+ <r p="3">657544</r>
+ <r p="4">4205</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">9067777</r>
+ <r p="8">16814</r>
+ <r p="9">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,VlanPort=vr_NR.IF1">
+ <r p="1">8457</r>
+ <r p="2">343</r>
+ <r p="3">711892</r>
+ <r p="4">33</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">2368</r>
+ <r p="8">37</r>
+ <r p="9">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,VlanPort=vr_LTE.IF1">
+ <r p="1">11894</r>
+ <r p="2">343</r>
+ <r p="3">1006906</r>
+ <r p="4">234</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">20246</r>
+ <r p="8">248</r>
+ <r p="9">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=ConsumedEnergyMeasurement">
+ <job jobId="PREDEF_Apc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber530</measType>
+ <measType p="2">pmCounterNumber530Accumulated</measType>
+ <measType p="3">pmCounterNumber532</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,NodeSupport=1,ConsumedEnergyMeasurement=1">
+ <r p="1"> </r>
+ <r p="2"> </r>
+ <r p="3"> , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , </r>
+ <suspect>true</suspect>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=EnergyMeter">
+ <job jobId="PREDEF_Apc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber530</measType>
+ <measType p="2">pmCounterNumber530Accumulated</measType>
+ <measType p="3">pmCounterNumber532</measType>
+ <measType p="4">pmCounterNumber533</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,EnergyMeter=1">
+ <r p="1">83</r>
+ <r p="2">34846</r>
+ <r p="3">333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,334,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333</r>
+ <r p="4">52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S1-1,EnergyMeter=1">
+ <r p="1">12</r>
+ <r p="2">4947</r>
+ <r p="3">47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47</r>
+ <r p="4">53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S2-1,EnergyMeter=1">
+ <r p="1">13</r>
+ <r p="2">5394</r>
+ <r p="3">52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,51,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,51,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52</r>
+ <r p="4">54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S3-1,EnergyMeter=1">
+ <r p="1">22</r>
+ <r p="2">9338</r>
+ <r p="3">89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89</r>
+ <r p="4">53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,52,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,52,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,EnergyMeter=1">
+ <r p="1"> </r>
+ <r p="2"> </r>
+ <r p="3"> , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , </r>
+ <r p="4"> , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , </r>
+ <suspect>true</suspect>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=SupportUnit">
+ <job jobId="PREDEF_Apc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber534</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,SupportUnit=2">
+ <r p="1">18,18,18</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,SupportUnit=1">
+ <r p="1">30,30,30</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=BbProcessingResource">
+ <job jobId="PREDEF_Lrat"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber535</measType>
+ <measType p="2">pmCounterNumber367</measType>
+ <measType p="3">pmCounterNumber368</measType>
+ <measType p="4">pmCounterNumber369</measType>
+ <measType p="5">pmCounterNumber370</measType>
+ <measType p="6">pmCounterNumber536</measType>
+ <measType p="7">pmCounterNumber537</measType>
+ <measType p="8">pmCounterNumber538</measType>
+ <measType p="9">pmCounterNumber539</measType>
+ <measType p="10">pmCounterNumber540</measType>
+ <measType p="11">pmCounterNumber541</measType>
+ <measType p="12">pmCounterNumber542</measType>
+ <measType p="13">pmCounterNumber543</measType>
+ <measType p="14">pmCounterNumber374</measType>
+ <measType p="15">pmCounterNumber375</measType>
+ <measType p="16">pmCounterNumber376</measType>
+ <measType p="17">pmCounterNumber377</measType>
+ <measType p="18">pmCounterNumber544</measType>
+ <measType p="19">pmCounterNumber545</measType>
+ <measType p="20">pmCounterNumber546</measType>
+ <measType p="21">pmCounterNumber547</measType>
+ <measType p="22">pmCounterNumber548</measType>
+ <measType p="23">pmCounterNumber549</measType>
+ <measType p="24">pmCounterNumber550</measType>
+ <measType p="25">pmCounterNumber551</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,BbProcessingResource=1">
+ <r p="1">0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="20">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=ENodeBFunction">
+ <job jobId="PREDEF_Lrat"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber359Aas</measType>
+ <measType p="2">pmCounterNumber360Aas</measType>
+ <measType p="3">pmCounterNumber554</measType>
+ <measType p="4">pmCounterNumber555</measType>
+ <measType p="5">pmCounterNumber365Actual</measType>
+ <measType p="6">pmCounterNumber366Actual</measType>
+ <measType p="7">pmCounterNumber558</measType>
+ <measType p="8">pmCounterNumber559</measType>
+ <measType p="9">pmCounterNumber560</measType>
+ <measType p="10">pmCounterNumber561</measType>
+ <measType p="11">pmCounterNumber562</measType>
+ <measType p="12">pmCounterNumber563</measType>
+ <measType p="13">pmCounterNumber564</measType>
+ <measType p="14">pmCounterNumber565</measType>
+ <measType p="15">pmCounterNumber566</measType>
+ <measType p="16">pmCounterNumber567</measType>
+ <measType p="17">pmCounterNumber568</measType>
+ <measType p="18">pmCounterNumber569</measType>
+ <measType p="19">pmCounterNumber570</measType>
+ <measType p="20">pmCounterNumber571</measType>
+ <measType p="21">pmCounterNumber572</measType>
+ <measType p="22">pmCounterNumber573</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">5</r>
+ <r p="8">900,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">180</r>
+ <r p="10">0</r>
+ <r p="11">8000</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">10000</r>
+ <r p="15">1800</r>
+ <r p="16">10000</r>
+ <r p="17">1800</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=EUtranCellFDD">
+ <job jobId="PREDEF_Lrat"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber306</measType>
+ <measType p="2">pmCounterNumber307</measType>
+ <measType p="3">pmCounterNumber574</measType>
+ <measType p="4">pmCounterNumber575</measType>
+ <measType p="5">pmCounterNumber576</measType>
+ <measType p="6">pmCounterNumber577</measType>
+ <measType p="7">pmCounterNumber578</measType>
+ <measType p="8">pmCounterNumber579</measType>
+ <measType p="9">pmCounterNumber580</measType>
+ <measType p="10">pmCounterNumber581</measType>
+ <measType p="11">pmCounterNumber582</measType>
+ <measType p="12">pmCounterNumber33</measType>
+ <measType p="13">pmCounterNumber34</measType>
+ <measType p="14">pmCounterNumber329</measType>
+ <measType p="15">pmCounterNumber330</measType>
+ <measType p="16">pmCounterNumber583</measType>
+ <measType p="17">pmCounterNumber583Arp</measType>
+ <measType p="18">pmCounterNumber583Csfb</measType>
+ <measType p="19">pmCounterNumber583CsfbArp</measType>
+ <measType p="20">pmCounterNumber583CsfbQci</measType>
+ <measType p="21">pmCounterNumber583HoOngoing</measType>
+ <measType p="22">pmCounterNumber583HoOngoingArp</measType>
+ <measType p="23">pmCounterNumber583HoOngoingQci</measType>
+ <measType p="24">pmCounterNumber583Qci</measType>
+ <measType p="25">pmCounterNumber592</measType>
+ <measType p="26">pmCounterNumber592Arp</measType>
+ <measType p="27">pmCounterNumber594</measType>
+ <measType p="28">pmCounterNumber595</measType>
+ <measType p="29">pmCounterNumber596</measType>
+ <measType p="30">pmCounterNumber597</measType>
+ <measType p="31">pmCounterNumber598</measType>
+ <measType p="32">pmCounterNumber599</measType>
+ <measType p="33">pmCounterNumber599Arp</measType>
+ <measType p="34">pmCounterNumber599Qci</measType>
+ <measType p="35">pmCounterNumber602</measType>
+ <measType p="36">pmCounterNumber602Arp</measType>
+ <measType p="37">pmCounterNumber604</measType>
+ <measType p="38">pmCounterNumber605</measType>
+ <measType p="39">pmCounterNumber606</measType>
+ <measType p="40">pmCounterNumber607</measType>
+ <measType p="41">pmCounterNumber608</measType>
+ <measType p="42">pmCounterNumber609</measType>
+ <measType p="43">pmCounterNumber610</measType>
+ <measType p="44">pmCounterNumber611</measType>
+ <measType p="45">pmCounterNumber612</measType>
+ <measType p="46">pmCounterNumber613</measType>
+ <measType p="47">pmCounterNumber614</measType>
+ <measType p="48">pmCounterNumber615</measType>
+ <measType p="49">pmCounterNumber616</measType>
+ <measType p="50">pmCounterNumber617</measType>
+ <measType p="51">pmCounterNumber618</measType>
+ <measType p="52">pmCounterNumber619</measType>
+ <measType p="53">pmCounterNumber620</measType>
+ <measType p="54">pmCounterNumber621</measType>
+ <measType p="55">pmCounterNumber409</measType>
+ <measType p="56">pmCounterNumber622</measType>
+ <measType p="57">pmCounterNumber623</measType>
+ <measType p="58">pmCounterNumber624</measType>
+ <measType p="59">pmCounterNumber625</measType>
+ <measType p="60">pmCounterNumber626</measType>
+ <measType p="61">pmCounterNumber627</measType>
+ <measType p="62">pmCounterNumber413ResUe</measType>
+ <measType p="63">pmCounterNumber570</measType>
+ <measType p="64">pmCounterNumber213Ce</measType>
+ <measType p="65">pmCounterNumber629</measType>
+ <measType p="66">pmCounterNumber630</measType>
+ <measType p="67">pmCounterNumber631</measType>
+ <measType p="68">pmCounterNumber631Uu</measType>
+ <measType p="69">pmCounterNumber633</measType>
+ <measType p="70">pmCounterNumber634</measType>
+ <measType p="71">pmCounterNumber635</measType>
+ <measType p="72">pmCounterNumber636</measType>
+ <measType p="73">pmCounterNumber637</measType>
+ <measType p="74">pmCounterNumber637FiltQci</measType>
+ <measType p="75">pmCounterNumber637LastTTI</measType>
+ <measType p="76">pmCounterNumber637LastTTIQci</measType>
+ <measType p="77">pmCounterNumber641</measType>
+ <measType p="78">pmCounterNumber642</measType>
+ <measType p="79">pmCounterNumber643</measType>
+ <measType p="80">pmCounterNumber350</measType>
+ <measType p="81">pmCounterNumber350Ce</measType>
+ <measType p="82">pmCounterNumber350Dta</measType>
+ <measType p="83">pmCounterNumber350DtaCe</measType>
+ <measType p="84">pmCounterNumber350Reatt</measType>
+ <measType p="85">pmCounterNumber350ReattCe</measType>
+ <measType p="86">pmCounterNumber350ReattDta</measType>
+ <measType p="87">pmCounterNumber350ReattDtaCe</measType>
+ <measType p="88">pmCounterNumber650</measType>
+ <measType p="89">pmCounterNumber650ActiveUsers</measType>
+ <measType p="90">pmCounterNumber652</measType>
+ <measType p="91">pmCounterNumber652Ce</measType>
+ <measType p="92">pmCounterNumber654</measType>
+ <measType p="93">pmCounterNumber654Ce</measType>
+ <measType p="94">pmCounterNumber354</measType>
+ <measType p="95">pmCounterNumber354Ce</measType>
+ <measType p="96">pmCounterNumber354Dta</measType>
+ <measType p="97">pmCounterNumber354DtaCe</measType>
+ <measType p="98">pmCounterNumber354GummeiNative</measType>
+ <measType p="99">pmCounterNumber660</measType>
+ <measType p="100">pmCounterNumber661</measType>
+ <measType p="101">pmCounterNumber662</measType>
+ <measType p="102">pmCounterNumber663</measType>
+ <measType p="103">pmCounterNumber664</measType>
+ <measType p="104">pmCounterNumber664Ce</measType>
+ <measType p="105">pmCounterNumber664Dta</measType>
+ <measType p="106">pmCounterNumber664DtaCe</measType>
+ <measType p="107">pmCounterNumber664Em</measType>
+ <measType p="108">pmCounterNumber664Hpa</measType>
+ <measType p="109">pmCounterNumber664Mod</measType>
+ <measType p="110">pmCounterNumber664ModCe</measType>
+ <measType p="111">pmCounterNumber664Mos</measType>
+ <measType p="112">pmCounterNumber664Mta</measType>
+ <measType p="113">pmCounterNumber664MtaCe</measType>
+ <measType p="114">pmCounterNumber675</measType>
+ <measType p="115">pmCounterNumber675Ce</measType>
+ <measType p="116">pmCounterNumber677</measType>
+ <measType p="117">pmCounterNumber677Ce</measType>
+ <measType p="118">pmCounterNumber677Dta</measType>
+ <measType p="119">pmCounterNumber677DtaCe</measType>
+ <measType p="120">pmCounterNumber677Em</measType>
+ <measType p="121">pmCounterNumber677Hpa</measType>
+ <measType p="122">pmCounterNumber677Mod</measType>
+ <measType p="123">pmCounterNumber677ModCe</measType>
+ <measType p="124">pmCounterNumber677Mos</measType>
+ <measType p="125">pmCounterNumber677Mta</measType>
+ <measType p="126">pmCounterNumber677MtaCe</measType>
+ <measType p="127">pmCounterNumber688</measType>
+ <measType p="128">pmCounterNumber689</measType>
+ <measType p="129">pmCounterNumber690</measType>
+ <measType p="130">pmCounterNumber691</measType>
+ <measType p="131">pmCounterNumber692</measType>
+ <measType p="132">pmCounterNumber693</measType>
+ <measType p="133">pmCounterNumber694</measType>
+ <measType p="134">pmCounterNumber694Em</measType>
+ <measType p="135">pmCounterNumber696</measType>
+ <measType p="136">pmCounterNumber696Em</measType>
+ <measType p="137">pmCounterNumber698</measType>
+ <measType p="138">pmCounterNumber699</measType>
+ <measType p="139">pmCounterNumber699Em</measType>
+ <measType p="140">pmCounterNumber701</measType>
+ <measType p="141">pmCounterNumber701Em</measType>
+ <measType p="142">pmCounterNumber703</measType>
+ <measType p="143">pmCounterNumber704</measType>
+ <measType p="144">pmCounterNumber705</measType>
+ <measType p="145">pmCounterNumber706</measType>
+ <measType p="146">pmCounterNumber7062</measType>
+ <measType p="147">pmCounterNumber708</measType>
+ <measType p="148">pmCounterNumber709</measType>
+ <measType p="149">pmCounterNumber710</measType>
+ <measType p="150">pmCounterNumber711</measType>
+ <measType p="151">pmCounterNumber712</measType>
+ <measType p="152">pmCounterNumber713</measType>
+ <measType p="153">pmCounterNumber714</measType>
+ <measType p="154">pmCounterNumber715</measType>
+ <measType p="155">pmCounterNumber716</measType>
+ <measType p="156">pmCounterNumber717</measType>
+ <measType p="157">pmCounterNumber718</measType>
+ <measType p="158">pmCounterNumber719</measType>
+ <measType p="159">pmCounterNumber720</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=2">
+ <r p="1">0</r>
+ <r p="2">900</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0,0,0,0</r>
+ <r p="48">0,0,0,0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0,0,0,0</r>
+ <r p="54">0,0,0,0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="59">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0,0,0,0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0</r>
+ <r p="81">0,0,0,0</r>
+ <r p="82">0</r>
+ <r p="83">0,0,0,0</r>
+ <r p="84">0</r>
+ <r p="85">0,0,0,0</r>
+ <r p="86">0</r>
+ <r p="87">0,0,0,0</r>
+ <r p="88">0</r>
+ <r p="89">0</r>
+ <r p="90">0</r>
+ <r p="91">0,0,0,0</r>
+ <r p="92">0</r>
+ <r p="93">0,0,0,0</r>
+ <r p="94">0</r>
+ <r p="95">0,0,0,0</r>
+ <r p="96">0</r>
+ <r p="97">0,0,0,0</r>
+ <r p="98">0</r>
+ <r p="99">0</r>
+ <r p="100">0</r>
+ <r p="101">0</r>
+ <r p="102">0</r>
+ <r p="103">0</r>
+ <r p="104">0,0,0,0</r>
+ <r p="105">0</r>
+ <r p="106">0,0,0,0</r>
+ <r p="107">0</r>
+ <r p="108">0</r>
+ <r p="109">0</r>
+ <r p="110">0,0,0,0</r>
+ <r p="111">0</r>
+ <r p="112">0</r>
+ <r p="113">0,0,0,0</r>
+ <r p="114">0</r>
+ <r p="115">0,0,0,0</r>
+ <r p="116">0</r>
+ <r p="117">0,0,0,0</r>
+ <r p="118">0</r>
+ <r p="119">0,0,0,0</r>
+ <r p="120">0</r>
+ <r p="121">0</r>
+ <r p="122">0</r>
+ <r p="123">0,0,0,0</r>
+ <r p="124">0</r>
+ <r p="125">0</r>
+ <r p="126">0,0,0,0</r>
+ <r p="127">0</r>
+ <r p="128">0</r>
+ <r p="129">0</r>
+ <r p="130">0</r>
+ <r p="131">0</r>
+ <r p="132">0</r>
+ <r p="133">0</r>
+ <r p="134">0</r>
+ <r p="135">0</r>
+ <r p="136">0</r>
+ <r p="137">0</r>
+ <r p="138">0</r>
+ <r p="139">0</r>
+ <r p="140">0</r>
+ <r p="141">0</r>
+ <r p="142">0</r>
+ <r p="143">0</r>
+ <r p="144">0</r>
+ <r p="145">0</r>
+ <r p="146">0</r>
+ <r p="147">0</r>
+ <r p="148">0</r>
+ <r p="149">0</r>
+ <r p="150">0</r>
+ <r p="151">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="152">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="153">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="154">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="155">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="156">0</r>
+ <r p="157">0</r>
+ <r p="158">0,0,0,0,0,0,0,0</r>
+ <r p="159">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=1">
+ <r p="1">0</r>
+ <r p="2">900</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0,0,0,0</r>
+ <r p="48">0,0,0,0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0,0,0,0</r>
+ <r p="54">0,0,0,0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="59">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0,0,0,0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0</r>
+ <r p="81">0,0,0,0</r>
+ <r p="82">0</r>
+ <r p="83">0,0,0,0</r>
+ <r p="84">0</r>
+ <r p="85">0,0,0,0</r>
+ <r p="86">0</r>
+ <r p="87">0,0,0,0</r>
+ <r p="88">0</r>
+ <r p="89">0</r>
+ <r p="90">0</r>
+ <r p="91">0,0,0,0</r>
+ <r p="92">0</r>
+ <r p="93">0,0,0,0</r>
+ <r p="94">0</r>
+ <r p="95">0,0,0,0</r>
+ <r p="96">0</r>
+ <r p="97">0,0,0,0</r>
+ <r p="98">0</r>
+ <r p="99">0</r>
+ <r p="100">0</r>
+ <r p="101">0</r>
+ <r p="102">0</r>
+ <r p="103">0</r>
+ <r p="104">0,0,0,0</r>
+ <r p="105">0</r>
+ <r p="106">0,0,0,0</r>
+ <r p="107">0</r>
+ <r p="108">0</r>
+ <r p="109">0</r>
+ <r p="110">0,0,0,0</r>
+ <r p="111">0</r>
+ <r p="112">0</r>
+ <r p="113">0,0,0,0</r>
+ <r p="114">0</r>
+ <r p="115">0,0,0,0</r>
+ <r p="116">0</r>
+ <r p="117">0,0,0,0</r>
+ <r p="118">0</r>
+ <r p="119">0,0,0,0</r>
+ <r p="120">0</r>
+ <r p="121">0</r>
+ <r p="122">0</r>
+ <r p="123">0,0,0,0</r>
+ <r p="124">0</r>
+ <r p="125">0</r>
+ <r p="126">0,0,0,0</r>
+ <r p="127">0</r>
+ <r p="128">0</r>
+ <r p="129">0</r>
+ <r p="130">0</r>
+ <r p="131">0</r>
+ <r p="132">0</r>
+ <r p="133">0</r>
+ <r p="134">0</r>
+ <r p="135">0</r>
+ <r p="136">0</r>
+ <r p="137">0</r>
+ <r p="138">0</r>
+ <r p="139">0</r>
+ <r p="140">0</r>
+ <r p="141">0</r>
+ <r p="142">0</r>
+ <r p="143">0</r>
+ <r p="144">0</r>
+ <r p="145">0</r>
+ <r p="146">0</r>
+ <r p="147">0</r>
+ <r p="148">0</r>
+ <r p="149">0</r>
+ <r p="150">0</r>
+ <r p="151">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="152">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="153">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="154">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="155">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="156">0</r>
+ <r p="157">0</r>
+ <r p="158">0,0,0,0,0,0,0,0</r>
+ <r p="159">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=BbProcessingResource">
+ <job jobId="nrcell"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber550Burst</measType>
+ <measType p="2">pmCounterNumber550Format</measType>
+ <measType p="3">pmCounterNumber550X2Fwd</measType>
+ <measType p="4">pmCounterNumber724</measType>
+ <measType p="5">pmCounterNumber725</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,BbProcessingResource=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=EUtranCellFDD">
+ <job jobId="nrcell"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber726</measType>
+ <measType p="2">pmCounterNumber727</measType>
+ <measType p="3">pmCounterNumber728</measType>
+ <measType p="4">pmCounterNumber729</measType>
+ <measType p="5">pmCounterNumber730</measType>
+ <measType p="6">pmCounterNumber731</measType>
+ <measType p="7">pmCounterNumber732</measType>
+ <measType p="8">pmCounterNumber733</measType>
+ <measType p="9">pmCounterNumber734</measType>
+ <measType p="10">pmCounterNumber735</measType>
+ <measType p="11">pmCounterNumber629CatMDrxNoSyncQci</measType>
+ <measType p="12">pmCounterNumber629CatMDrxSyncQci</measType>
+ <measType p="13">pmCounterNumber629CatMNoDrxNoSyncQci</measType>
+ <measType p="14">pmCounterNumber629CatMNoDrxSyncQci</measType>
+ <measType p="15">pmCounterNumber629DrxNoSyncQci</measType>
+ <measType p="16">pmCounterNumber629DrxSync</measType>
+ <measType p="17">pmCounterNumber629DrxSyncQci</measType>
+ <measType p="18">pmCounterNumber629NoDrxNoSyncQci</measType>
+ <measType p="19">pmCounterNumber629NoDrxSyncQci</measType>
+ <measType p="20">pmCounterNumber629Qci</measType>
+ <measType p="21">pmCounterNumber630CatMDrxNoSyncQci</measType>
+ <measType p="22">pmCounterNumber630CatMDrxSyncQci</measType>
+ <measType p="23">pmCounterNumber630CatMNoDrxNoSyncQci</measType>
+ <measType p="24">pmCounterNumber630CatMNoDrxSyncQci</measType>
+ <measType p="25">pmCounterNumber630DrxNoSyncQci</measType>
+ <measType p="26">pmCounterNumber630DrxSync</measType>
+ <measType p="27">pmCounterNumber630DrxSyncQci</measType>
+ <measType p="28">pmCounterNumber630NoDrxNoSyncQci</measType>
+ <measType p="29">pmCounterNumber630NoDrxSyncQci</measType>
+ <measType p="30">pmCounterNumber630Qci</measType>
+ <measType p="31">pmCounterNumber756</measType>
+ <measType p="32">pmCounterNumber756Qci</measType>
+ <measType p="33">pmCounterNumber758</measType>
+ <measType p="34">pmCounterNumber758Qci</measType>
+ <measType p="35">pmCounterNumber631Qci</measType>
+ <measType p="36">pmCounterNumber631UuQci</measType>
+ <measType p="37">pmCounterNumber762</measType>
+ <measType p="38">pmCounterNumber633Limitations</measType>
+ <measType p="39">pmCounterNumber633MissingPdus2Qci</measType>
+ <measType p="40">pmCounterNumber633Qci</measType>
+ <measType p="41">pmCounterNumber633RohcFail2Qci</measType>
+ <measType p="42">pmCounterNumber633SrbTooLarge</measType>
+ <measType p="43">pmCounterNumber768</measType>
+ <measType p="44">pmCounterNumber769</measType>
+ <measType p="45">pmCounterNumber770</measType>
+ <measType p="46">pmCounterNumber771</measType>
+ <measType p="47">pmCounterNumber771Qci</measType>
+ <measType p="48">pmCounterNumber634Qci</measType>
+ <measType p="49">pmCounterNumber635Qci</measType>
+ <measType p="50">pmCounterNumber775</measType>
+ <measType p="51">pmCounterNumber637Ca</measType>
+ <measType p="52">pmCounterNumber637LastTTICa</measType>
+ <measType p="53">pmCounterNumber637Qci</measType>
+ <measType p="54">pmCounterNumber637TransPlmn0</measType>
+ <measType p="55">pmCounterNumber637TransPlmn1</measType>
+ <measType p="56">pmCounterNumber637TransPlmn2</measType>
+ <measType p="57">pmCounterNumber637TransPlmn3</measType>
+ <measType p="58">pmCounterNumber637TransPlmn4</measType>
+ <measType p="59">pmCounterNumber637TransPlmn5</measType>
+ <measType p="60">pmCounterNumber637TransPlmn6</measType>
+ <measType p="61">pmCounterNumber637TransQci</measType>
+ <measType p="62">pmCounterNumber787</measType>
+ <measType p="63">pmCounterNumber641Trans</measType>
+ <measType p="64">pmCounterNumber789</measType>
+ <measType p="65">pmCounterNumber642Plmn0</measType>
+ <measType p="66">pmCounterNumber642Plmn1</measType>
+ <measType p="67">pmCounterNumber642Plmn2</measType>
+ <measType p="68">pmCounterNumber642Plmn3</measType>
+ <measType p="69">pmCounterNumber642Plmn4</measType>
+ <measType p="70">pmCounterNumber642Plmn5</measType>
+ <measType p="71">pmCounterNumber642Plmn6</measType>
+ <measType p="72">pmCounterNumber642Qci</measType>
+ <measType p="73">pmCounterNumber798</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=GNBCUUPFunction_GNBCUUP">
+ <job jobId="nrcell"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber799</measType>
+ <measType p="2">pmCounterNumber799Gtpu</measType>
+ <measType p="3">pmCounterNumber799NoCtxt</measType>
+ <measType p="4">pmCounterNumber802</measType>
+ <measType p="5">pmCounterNumber803</measType>
+ <measType p="6">pmCounterNumber804</measType>
+ <measType p="7">pmCounterNumber805</measType>
+ <measType p="8">pmCounterNumber806</measType>
+ <measType p="9">pmCounterNumber807</measType>
+ <measType p="10">pmCounterNumber808</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUUPFunction=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=NRCellCU_GNBCUCP">
+ <job jobId="nrcell"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmEndcUeCapabilityUlPdcpDelay</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=32">
+ <r p="1">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=31">
+ <r p="1">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=2">
+ <r p="1">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=1">
+ <r p="1">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=X2UTermination_GNBCUUP">
+ <job jobId="nrcell"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber802</measType>
+ <measType p="2">pmCounterNumber803</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUUPFunction=1,X2UTermination=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ </measValue>
+ </measInfo>
+ </measData>
+ <fileFooter>
+ <measCollec endTime="2022-04-18T19:15:00+00:00"/>
+ </fileFooter>
+</measCollecFile>
diff --git a/pm-file-flow-demo/docker-proj/ne-files/pm.xml.gz b/pm-file-flow-demo/docker-proj/ne-files/pm.xml.gz
new file mode 100644
index 0000000..df90359
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/ne-files/pm.xml.gz
Binary files differ
diff --git a/pm-file-flow-demo/docker-proj/pm-files/pm.xml b/pm-file-flow-demo/docker-proj/pm-files/pm.xml
new file mode 100644
index 0000000..529f69f
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/pm-files/pm.xml
@@ -0,0 +1,4023 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="MeasDataCollection.xsl"?>
+<measCollecFile xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec">
+ <fileHeader fileFormatVersion="32.435 V10.0"
+ vendorName="Ericsson AB"
+ dnPrefix="SubNetwork=G3">
+ <fileSender localDn="nodedntest"
+ elementType="RadioNode"/>
+ <measCollec beginTime="2022-04-18T19:00:00+00:00"/>
+ </fileHeader>
+ <measData>
+ <managedElement localDn="nodedntest"
+ swVersion="CXP2010174_1 R44B17"/>
+ <measInfo measInfoId="PM=1,PmGroup=NRCellCU_GNBCUCP">
+ <job jobId="nr_all"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber0</measType>
+ <measType p="2">pmCounterNumber1</measType>
+ <measType p="3">pmCounterNumber2</measType>
+ <measType p="4">pmCounterNumber3</measType>
+ <measType p="5">pmCounterNumber4</measType>
+ <measType p="6">pmCounterNumber5</measType>
+ <measType p="7">pmCounterNumber6</measType>
+ <measType p="8">pmCounterNumber7</measType>
+ <measType p="9">pmCounterNumber8</measType>
+ <measType p="10">pmCounterNumber9</measType>
+ <measType p="11">pmCounterNumber10</measType>
+ <measType p="12">pmCounterNumber11</measType>
+ <measType p="13">pmCounterNumber12</measType>
+ <measType p="14">pmCounterNumber13</measType>
+ <measType p="15">pmCounterNumber14</measType>
+ <measType p="16">pmCounterNumber15</measType>
+ <measType p="17">pmCounterNumber16</measType>
+ <measType p="18">pmCounterNumber17</measType>
+ <measType p="19">pmCounterNumber18</measType>
+ <measType p="20">pmCounterNumber19</measType>
+ <measType p="21">pmCounterNumber20</measType>
+ <measType p="22">pmCounterNumber21</measType>
+ <measType p="23">pmCounterNumber22</measType>
+ <measType p="24">pmCounterNumber23</measType>
+ <measType p="25">pmCounterNumber24</measType>
+ <measType p="26">pmCounterNumber25</measType>
+ <measType p="27">pmCounterNumber26</measType>
+ <measType p="28">pmCounterNumber27</measType>
+ <measType p="29">pmCounterNumber28</measType>
+ <measType p="30">pmCounterNumber29</measType>
+ <measType p="31">pmCounterNumber30</measType>
+ <measType p="32">pmCounterNumber31</measType>
+ <measType p="33">pmCounterNumber32</measType>
+ <measType p="34">pmCounterNumber33</measType>
+ <measType p="35">pmCounterNumber34</measType>
+ <measType p="36">pmCounterNumber35</measType>
+ <measType p="37">pmCounterNumber36</measType>
+ <measType p="38">pmCounterNumber37</measType>
+ <measType p="39">pmCounterNumber38</measType>
+ <measType p="40">pmCounterNumber39</measType>
+ <measType p="41">pmCounterNumber40</measType>
+ <measType p="42">pmCounterNumber41</measType>
+ <measType p="43">pmCounterNumber42</measType>
+ <measType p="44">pmCounterNumber43</measType>
+ <measType p="45">pmCounterNumber44</measType>
+ <measType p="46">pmCounterNumber45</measType>
+ <measType p="47">pmCounterNumber46</measType>
+ <measType p="48">pmCounterNumber47</measType>
+ <measType p="49">pmCounterNumber48</measType>
+ <measType p="50">pmCounterNumber49</measType>
+ <measType p="51">pmCounterNumber50</measType>
+ <measType p="52">pmCounterNumber51</measType>
+ <measType p="53">pmCounterNumber51Act</measType>
+ <measType p="54">pmCounterNumber53</measType>
+ <measType p="55">pmCounterNumber53Act</measType>
+ <measType p="56">pmCounterNumber55</measType>
+ <measType p="57">pmCounterNumber56</measType>
+ <measType p="58">pmCounterNumber57</measType>
+ <measType p="59">pmCounterNumber58</measType>
+ <measType p="60">pmCounterNumber59</measType>
+ <measType p="61">pmCounterNumber60</measType>
+ <measType p="62">pmCounterNumber60IntgProt64kbps</measType>
+ <measType p="63">pmCounterNumber62</measType>
+ <measType p="64">pmCounterNumber63</measType>
+ <measType p="65">pmCounterNumber64</measType>
+ <measType p="66">pmCounterNumber65</measType>
+ <measType p="67">pmCounterNumber66</measType>
+ <measType p="68">pmCounterNumber67</measType>
+ <measType p="69">pmCounterNumber68</measType>
+ <measType p="70">pmCounterNumber69</measType>
+ <measType p="71">pmCounterNumber70</measType>
+ <measType p="72">pmCounterNumber71</measType>
+ <measType p="73">pmCounterNumber72</measType>
+ <measType p="74">pmCounterNumber73</measType>
+ <measType p="75">pmCounterNumber74</measType>
+ <measType p="76">pmCounterNumber75</measType>
+ <measType p="77">pmCounterNumber76</measType>
+ <measType p="78">pmCounterNumber77</measType>
+ <measType p="79">pmCounterNumber78</measType>
+ <measType p="80">pmCounterNumber79</measType>
+ <measType p="81">pmCounterNumber80</measType>
+ <measType p="82">pmCounterNumber81</measType>
+ <measType p="83">pmCounterNumber82</measType>
+ <measType p="84">pmCounterNumber83</measType>
+ <measType p="85">pmCounterNumber84</measType>
+ <measType p="86">pmCounterNumber84Em</measType>
+ <measType p="87">pmCounterNumber84EmFbInd</measType>
+ <measType p="88">pmCounterNumber87</measType>
+ <measType p="89">pmCounterNumber88</measType>
+ <measType p="90">pmCounterNumber89</measType>
+ <measType p="91">pmCounterNumber90</measType>
+ <measType p="92">pmCounterNumber91</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=32">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">180</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0</r>
+ <r p="81">0</r>
+ <r p="82">0</r>
+ <r p="83">0</r>
+ <r p="84">0</r>
+ <r p="85">0</r>
+ <r p="86">0</r>
+ <r p="87">0</r>
+ <r p="88">0</r>
+ <r p="89">0</r>
+ <r p="90">0</r>
+ <r p="91">0</r>
+ <r p="92">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=31">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">180</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0</r>
+ <r p="81">0</r>
+ <r p="82">0</r>
+ <r p="83">0</r>
+ <r p="84">0</r>
+ <r p="85">0</r>
+ <r p="86">0</r>
+ <r p="87">0</r>
+ <r p="88">0</r>
+ <r p="89">0</r>
+ <r p="90">0</r>
+ <r p="91">0</r>
+ <r p="92">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">180</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0</r>
+ <r p="81">0</r>
+ <r p="82">0</r>
+ <r p="83">0</r>
+ <r p="84">0</r>
+ <r p="85">0</r>
+ <r p="86">0</r>
+ <r p="87">0</r>
+ <r p="88">0</r>
+ <r p="89">0</r>
+ <r p="90">0</r>
+ <r p="91">0</r>
+ <r p="92">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">180</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0</r>
+ <r p="81">0</r>
+ <r p="82">0</r>
+ <r p="83">0</r>
+ <r p="84">0</r>
+ <r p="85">0</r>
+ <r p="86">0</r>
+ <r p="87">0</r>
+ <r p="88">0</r>
+ <r p="89">0</r>
+ <r p="90">0</r>
+ <r p="91">0</r>
+ <r p="92">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=NRCellDU_GNBDU">
+ <job jobId="nr_all"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber92</measType>
+ <measType p="2">pmCounterNumber93</measType>
+ <measType p="3">pmCounterNumber94</measType>
+ <measType p="4">pmCounterNumber95</measType>
+ <measType p="5">pmCounterNumber96</measType>
+ <measType p="6">pmCounterNumber97</measType>
+ <measType p="7">pmCounterNumber98</measType>
+ <measType p="8">pmCounterNumber99</measType>
+ <measType p="9">pmCounterNumber100</measType>
+ <measType p="10">pmCounterNumber101</measType>
+ <measType p="11">pmCounterNumber102</measType>
+ <measType p="12">pmCounterNumber103</measType>
+ <measType p="13">pmCounterNumber104</measType>
+ <measType p="14">pmCounterNumber105</measType>
+ <measType p="15">pmCounterNumber106</measType>
+ <measType p="16">pmCounterNumber107</measType>
+ <measType p="17">pmCounterNumber108</measType>
+ <measType p="18">pmCounterNumber108Init</measType>
+ <measType p="19">pmCounterNumber110</measType>
+ <measType p="20">pmCounterNumber110Init</measType>
+ <measType p="21">pmCounterNumber112</measType>
+ <measType p="22">pmCounterNumber112Init</measType>
+ <measType p="23">pmCounterNumber114</measType>
+ <measType p="24">pmCounterNumber114Init</measType>
+ <measType p="25">pmCounterNumber116</measType>
+ <measType p="26">pmCounterNumber116Init</measType>
+ <measType p="27">pmCounterNumber118</measType>
+ <measType p="28">pmCounterNumber118Init</measType>
+ <measType p="29">pmCounterNumber120</measType>
+ <measType p="30">pmCounterNumber120Init</measType>
+ <measType p="31">pmCounterNumber122</measType>
+ <measType p="32">pmCounterNumber122Init</measType>
+ <measType p="33">pmCounterNumber124</measType>
+ <measType p="34">pmCounterNumber125</measType>
+ <measType p="35">pmCounterNumber125Init</measType>
+ <measType p="36">pmCounterNumber127</measType>
+ <measType p="37">pmCounterNumber127Init</measType>
+ <measType p="38">pmCounterNumber129</measType>
+ <measType p="39">pmCounterNumber129Init</measType>
+ <measType p="40">pmCounterNumber131</measType>
+ <measType p="41">pmCounterNumber131Init</measType>
+ <measType p="42">pmCounterNumber133</measType>
+ <measType p="43">pmCounterNumber133Init</measType>
+ <measType p="44">pmCounterNumber135</measType>
+ <measType p="45">pmCounterNumber135Init</measType>
+ <measType p="46">pmCounterNumber137</measType>
+ <measType p="47">pmCounterNumber137Init</measType>
+ <measType p="48">pmCounterNumber139</measType>
+ <measType p="49">pmCounterNumber139Init</measType>
+ <measType p="50">pmCounterNumber141</measType>
+ <measType p="51">pmCounterNumber141Init</measType>
+ <measType p="52">pmCounterNumber143</measType>
+ <measType p="53">pmCounterNumber143Init</measType>
+ <measType p="54">pmCounterNumber145</measType>
+ <measType p="55">pmCounterNumber145Init</measType>
+ <measType p="56">pmCounterNumber147</measType>
+ <measType p="57">pmCounterNumber147Init</measType>
+ <measType p="58">pmCounterNumber149</measType>
+ <measType p="59">pmCounterNumber150</measType>
+ <measType p="60">pmCounterNumber150Init</measType>
+ <measType p="61">pmCounterNumber152</measType>
+ <measType p="62">pmCounterNumber152Init</measType>
+ <measType p="63">pmCounterNumber154</measType>
+ <measType p="64">pmCounterNumber154Init</measType>
+ <measType p="65">pmCounterNumber156</measType>
+ <measType p="66">pmCounterNumber156Init</measType>
+ <measType p="67">pmCounterNumber158</measType>
+ <measType p="68">pmCounterNumber158Ext</measType>
+ <measType p="69">pmCounterNumber160</measType>
+ <measType p="70">pmCounterNumber161</measType>
+ <measType p="71">pmCounterNumber162</measType>
+ <measType p="72">pmCounterNumber163</measType>
+ <measType p="73">pmCounterNumber164</measType>
+ <measType p="74">pmCounterNumber165</measType>
+ <measType p="75">pmCounterNumber166</measType>
+ <measType p="76">pmCounterNumber1666</measType>
+ <measType p="77">pmCounterNumber168</measType>
+ <measType p="78">pmCounterNumber169</measType>
+ <measType p="79">pmCounterNumber170</measType>
+ <measType p="80">pmCounterNumber171</measType>
+ <measType p="81">pmCounterNumber172</measType>
+ <measType p="82">pmCounterNumber173</measType>
+ <measType p="83">pmCounterNumber174</measType>
+ <measType p="84">pmCounterNumber175</measType>
+ <measType p="85">pmCounterNumber176</measType>
+ <measType p="86">pmCounterNumber177</measType>
+ <measType p="87">pmCounterNumber178</measType>
+ <measType p="88">pmCounterNumber179</measType>
+ <measType p="89">pmCounterNumber180</measType>
+ <measType p="90">pmCounterNumber181</measType>
+ <measType p="91">pmCounterNumber182</measType>
+ <measType p="92">pmCounterNumber183</measType>
+ <measType p="93">pmCounterNumber184</measType>
+ <measType p="94">pmCounterNumber185</measType>
+ <measType p="95">pmCounterNumber185Qos</measType>
+ <measType p="96">pmCounterNumber185Samp</measType>
+ <measType p="97">pmCounterNumber185SampQos</measType>
+ <measType p="98">pmCounterNumber189</measType>
+ <measType p="99">pmCounterNumber189Qos</measType>
+ <measType p="100">pmCounterNumber191</measType>
+ <measType p="101">pmCounterNumber191Qos</measType>
+ <measType p="102">pmCounterNumber193</measType>
+ <measType p="103">pmCounterNumber193Samp</measType>
+ <measType p="104">pmCounterNumber195</measType>
+ <measType p="105">pmCounterNumber195Ext</measType>
+ <measType p="106">pmCounterNumber197</measType>
+ <measType p="107">pmCounterNumber198</measType>
+ <measType p="108">pmCounterNumber199</measType>
+ <measType p="109">pmCounterNumber200</measType>
+ <measType p="110">pmCounterNumber200BsrGrant</measType>
+ <measType p="111">pmCounterNumber200PreemptGrant</measType>
+ <measType p="112">pmCounterNumber200PucchSrGrant</measType>
+ <measType p="113">pmCounterNumber204</measType>
+ <measType p="114">pmCounterNumber205</measType>
+ <measType p="115">pmCounterNumber206</measType>
+ <measType p="116">pmCounterNumber207</measType>
+ <measType p="117">pmCounterNumber208</measType>
+ <measType p="118">pmCounterNumber209</measType>
+ <measType p="119">pmCounterNumber210</measType>
+ <measType p="120">pmCounterNumber211</measType>
+ <measType p="121">pmCounterNumber212</measType>
+ <measType p="122">pmCounterNumber213</measType>
+ <measType p="123">pmCounterNumber214</measType>
+ <measType p="124">pmCounterNumber215</measType>
+ <measType p="125">pmCounterNumber216</measType>
+ <measType p="126">pmCounterNumber216MacCe</measType>
+ <measType p="127">pmCounterNumber218</measType>
+ <measType p="128">pmCounterNumber219</measType>
+ <measType p="129">pmCounterNumber220</measType>
+ <measType p="130">pmCounterNumber221</measType>
+ <measType p="131">pmCounterNumber222</measType>
+ <measType p="132">pmCounterNumber223</measType>
+ <measType p="133">pmCounterNumber224</measType>
+ <measType p="134">pmCounterNumber225</measType>
+ <measType p="135">pmCounterNumber226</measType>
+ <measType p="136">pmCounterNumber227</measType>
+ <measType p="137">pmCounterNumber228</measType>
+ <measType p="138">pmCounterNumber228Forced</measType>
+ <measType p="139">pmCounterNumber230</measType>
+ <measType p="140">pmCounterNumber231</measType>
+ <measType p="141">pmCounterNumber232</measType>
+ <measType p="142">pmCounterNumber233</measType>
+ <measType p="143">pmCounterNumber234</measType>
+ <measType p="144">pmCounterNumber235</measType>
+ <measType p="145">pmCounterNumber236</measType>
+ <measType p="146">pmCounterNumber237</measType>
+ <measType p="147">pmCounterNumber238</measType>
+ <measType p="148">pmCounterNumber239</measType>
+ <measType p="149">pmCounterNumber240</measType>
+ <measType p="150">pmCounterNumber241</measType>
+ <measType p="151">pmCounterNumber242</measType>
+ <measType p="152">pmCounterNumber243</measType>
+ <measType p="153">pmCounterNumber244</measType>
+ <measType p="154">pmCounterNumber245</measType>
+ <measType p="155">pmCounterNumber246</measType>
+ <measType p="156">pmCounterNumber247</measType>
+ <measType p="157">pmCounterNumber248</measType>
+ <measType p="158">pmCounterNumber249</measType>
+ <measType p="159">pmCounterNumber250</measType>
+ <measType p="160">pmCounterNumber251</measType>
+ <measType p="161">pmCounterNumber252</measType>
+ <measType p="162">pmCounterNumber252Qos</measType>
+ <measType p="163">pmCounterNumber254</measType>
+ <measType p="164">pmCounterNumber254Qos</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=32">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="12">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="13">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="14">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="15">0</r>
+ <r p="16">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">2880</r>
+ <r p="80">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="81">0,0,0,0,0,0,0,0</r>
+ <r p="82">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="83">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="84">0,0,0,0,0,0,0,0</r>
+ <r p="85">0,0,0,0,0,0,0,0</r>
+ <r p="86">0,0,0,0,0,0,0,0</r>
+ <r p="87">0,0,0,0,0,0,0,0</r>
+ <r p="88">0,0,0,0,0,0,0,0</r>
+ <r p="89">0,0,0,0,0,0,0,0</r>
+ <r p="90">0,0,0,0,0,0,0,0</r>
+ <r p="91">0,0,0,0,0,0,0,0</r>
+ <r p="92">0,0,0,0,0,0,0,0</r>
+ <r p="93">0</r>
+ <r p="94">0</r>
+ <r p="95">0</r>
+ <r p="96">0</r>
+ <r p="97">0</r>
+ <r p="98">0</r>
+ <r p="99">0</r>
+ <r p="100">0</r>
+ <r p="101">0</r>
+ <r p="102">0</r>
+ <r p="103">0</r>
+ <r p="104">0</r>
+ <r p="105">0</r>
+ <r p="106">0</r>
+ <r p="107">0</r>
+ <r p="108">0</r>
+ <r p="109">0</r>
+ <r p="110">0</r>
+ <r p="111">0</r>
+ <r p="112">0</r>
+ <r p="113">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="114">0</r>
+ <r p="115">0</r>
+ <r p="116">0</r>
+ <r p="117">179</r>
+ <r p="118">0</r>
+ <r p="119">0,0,0,0</r>
+ <r p="120">0,0,0,0</r>
+ <r p="121">0</r>
+ <r p="122">0</r>
+ <r p="123">0</r>
+ <r p="124">0</r>
+ <r p="125">0</r>
+ <r p="126">0</r>
+ <r p="127">0</r>
+ <r p="128">0</r>
+ <r p="129">0</r>
+ <r p="130">0</r>
+ <r p="131">0</r>
+ <r p="132">0</r>
+ <r p="133">0</r>
+ <r p="134">900,0,0,0,0</r>
+ <r p="135">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="136">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="137">1440001</r>
+ <r p="138">0</r>
+ <r p="139">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="140">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="141">0</r>
+ <r p="142">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="143">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="144">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="145">0</r>
+ <r p="146">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="147">0,0,0,0,0,0,0,0,0,0,0,1800001,0,0,0,0,0,0,0,0,0</r>
+ <r p="148">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="149">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="150">0,0,0,0,0,0,0,0</r>
+ <r p="151">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="152">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="153">0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="154">0</r>
+ <r p="155">0</r>
+ <r p="156">0</r>
+ <r p="157">0</r>
+ <r p="158">0</r>
+ <r p="159">0</r>
+ <r p="160">0</r>
+ <r p="161">0</r>
+ <r p="162">0</r>
+ <r p="163">0</r>
+ <r p="164">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=31">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="12">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="13">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="14">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="15">0</r>
+ <r p="16">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">5376</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="81">0,0,0,0,0,0,0,0</r>
+ <r p="82">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="83">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="84">0,0,0,0,0,0,0,0</r>
+ <r p="85">0,0,0,0,0,0,0,0</r>
+ <r p="86">0,0,0,0,0,0,0,0</r>
+ <r p="87">0,0,0,0,0,0,0,0</r>
+ <r p="88">0,0,0,0,0,0,0,0</r>
+ <r p="89">0,0,0,0,0,0,0,0</r>
+ <r p="90">0,0,0,0,0,0,0,0</r>
+ <r p="91">0,0,0,0,0,0,0,0</r>
+ <r p="92">0,0,0,0,0,0,0,0</r>
+ <r p="93">0</r>
+ <r p="94">0</r>
+ <r p="95">0</r>
+ <r p="96">0</r>
+ <r p="97">0</r>
+ <r p="98">0</r>
+ <r p="99">0</r>
+ <r p="100">0</r>
+ <r p="101">0</r>
+ <r p="102">0</r>
+ <r p="103">0</r>
+ <r p="104">0</r>
+ <r p="105">0</r>
+ <r p="106">0</r>
+ <r p="107">0</r>
+ <r p="108">0</r>
+ <r p="109">0</r>
+ <r p="110">0</r>
+ <r p="111">0</r>
+ <r p="112">0</r>
+ <r p="113">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="114">0</r>
+ <r p="115">0</r>
+ <r p="116">0</r>
+ <r p="117">179</r>
+ <r p="118">0</r>
+ <r p="119">0,0,0,0</r>
+ <r p="120">0,0,0,0</r>
+ <r p="121">0</r>
+ <r p="122">0</r>
+ <r p="123">0</r>
+ <r p="124">0</r>
+ <r p="125">0</r>
+ <r p="126">0</r>
+ <r p="127">0</r>
+ <r p="128">0</r>
+ <r p="129">0</r>
+ <r p="130">0</r>
+ <r p="131">0</r>
+ <r p="132">0</r>
+ <r p="133">0</r>
+ <r p="134">900,0,0,0,0</r>
+ <r p="135">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="136">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="137">1440001</r>
+ <r p="138">0</r>
+ <r p="139">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="140">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="141">0</r>
+ <r p="142">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="143">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="144">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="145">0</r>
+ <r p="146">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="147">0,0,0,0,0,0,0,0,0,0,0,1800001,0,0,0,0,0,0,0,0,0</r>
+ <r p="148">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="149">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="150">0,0,0,0,0,0,0,0</r>
+ <r p="151">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="152">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="153">0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="154">0</r>
+ <r p="155">0</r>
+ <r p="156">0</r>
+ <r p="157">0</r>
+ <r p="158">0</r>
+ <r p="159">0</r>
+ <r p="160">0</r>
+ <r p="161">0</r>
+ <r p="162">0</r>
+ <r p="163">0</r>
+ <r p="164">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="12">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="13">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="14">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="15">0</r>
+ <r p="16">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="81">0,0,0,0,0,0,0,0</r>
+ <r p="82">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="83">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="84">0,0,0,0,0,0,0,0</r>
+ <r p="85">0,0,0,0,0,0,0,0</r>
+ <r p="86">0,0,0,0,0,0,0,0</r>
+ <r p="87">0,0,0,0,0,0,0,0</r>
+ <r p="88">0,0,0,0,0,0,0,0</r>
+ <r p="89">0,0,0,0,0,0,0,0</r>
+ <r p="90">0,0,0,0,0,0,0,0</r>
+ <r p="91">0,0,0,0,0,0,0,0</r>
+ <r p="92">0,0,0,0,0,0,0,0</r>
+ <r p="93">0</r>
+ <r p="94">0</r>
+ <r p="95">0</r>
+ <r p="96">0</r>
+ <r p="97">0</r>
+ <r p="98">0</r>
+ <r p="99">0</r>
+ <r p="100">0</r>
+ <r p="101">0</r>
+ <r p="102">0</r>
+ <r p="103">0</r>
+ <r p="104">0</r>
+ <r p="105">0</r>
+ <r p="106">0</r>
+ <r p="107">0</r>
+ <r p="108">0</r>
+ <r p="109">0</r>
+ <r p="110">0</r>
+ <r p="111">0</r>
+ <r p="112">0</r>
+ <r p="113">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="114">0</r>
+ <r p="115">0</r>
+ <r p="116">0</r>
+ <r p="117">0</r>
+ <r p="118">0</r>
+ <r p="119">0,0,0,0</r>
+ <r p="120">0,0,0,0</r>
+ <r p="121">0</r>
+ <r p="122">0</r>
+ <r p="123">0</r>
+ <r p="124">0</r>
+ <r p="125">0</r>
+ <r p="126">0</r>
+ <r p="127">0</r>
+ <r p="128">0</r>
+ <r p="129">0</r>
+ <r p="130">0</r>
+ <r p="131">0</r>
+ <r p="132">0</r>
+ <r p="133">0</r>
+ <r p="134">0,0,0,0,0</r>
+ <r p="135">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="136">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="137">0</r>
+ <r p="138">0</r>
+ <r p="139">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="140">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="141">0</r>
+ <r p="142">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="143">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="144">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="145">0</r>
+ <r p="146">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="147">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="148">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="149">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="150">0,0,0,0,0,0,0,0</r>
+ <r p="151">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="152">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="153">0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="154">0</r>
+ <r p="155">0</r>
+ <r p="156">0</r>
+ <r p="157">0</r>
+ <r p="158">0</r>
+ <r p="159">0</r>
+ <r p="160">0</r>
+ <r p="161">0</r>
+ <r p="162">0</r>
+ <r p="163">0</r>
+ <r p="164">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="12">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="13">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="14">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="15">0</r>
+ <r p="16">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="81">0,0,0,0,0,0,0,0</r>
+ <r p="82">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="83">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="84">0,0,0,0,0,0,0,0</r>
+ <r p="85">0,0,0,0,0,0,0,0</r>
+ <r p="86">0,0,0,0,0,0,0,0</r>
+ <r p="87">0,0,0,0,0,0,0,0</r>
+ <r p="88">0,0,0,0,0,0,0,0</r>
+ <r p="89">0,0,0,0,0,0,0,0</r>
+ <r p="90">0,0,0,0,0,0,0,0</r>
+ <r p="91">0,0,0,0,0,0,0,0</r>
+ <r p="92">0,0,0,0,0,0,0,0</r>
+ <r p="93">0</r>
+ <r p="94">0</r>
+ <r p="95">0</r>
+ <r p="96">0</r>
+ <r p="97">0</r>
+ <r p="98">0</r>
+ <r p="99">0</r>
+ <r p="100">0</r>
+ <r p="101">0</r>
+ <r p="102">0</r>
+ <r p="103">0</r>
+ <r p="104">0</r>
+ <r p="105">0</r>
+ <r p="106">0</r>
+ <r p="107">0</r>
+ <r p="108">0</r>
+ <r p="109">0</r>
+ <r p="110">0</r>
+ <r p="111">0</r>
+ <r p="112">0</r>
+ <r p="113">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="114">0</r>
+ <r p="115">0</r>
+ <r p="116">0</r>
+ <r p="117">0</r>
+ <r p="118">0</r>
+ <r p="119">0,0,0,0</r>
+ <r p="120">0,0,0,0</r>
+ <r p="121">0</r>
+ <r p="122">0</r>
+ <r p="123">0</r>
+ <r p="124">0</r>
+ <r p="125">0</r>
+ <r p="126">0</r>
+ <r p="127">0</r>
+ <r p="128">0</r>
+ <r p="129">0</r>
+ <r p="130">0</r>
+ <r p="131">0</r>
+ <r p="132">0</r>
+ <r p="133">0</r>
+ <r p="134">0,0,0,0,0</r>
+ <r p="135">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="136">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="137">0</r>
+ <r p="138">0</r>
+ <r p="139">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="140">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="141">0</r>
+ <r p="142">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="143">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="144">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="145">0</r>
+ <r p="146">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="147">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="148">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="149">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="150">0,0,0,0,0,0,0,0</r>
+ <r p="151">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="152">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="153">0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="154">0</r>
+ <r p="155">0</r>
+ <r p="156">0</r>
+ <r p="157">0</r>
+ <r p="158">0</r>
+ <r p="159">0</r>
+ <r p="160">0</r>
+ <r p="161">0</r>
+ <r p="162">0</r>
+ <r p="163">0</r>
+ <r p="164">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=NRSectorCarrier_GNBDU">
+ <job jobId="nr_all"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber256</measType>
+ <measType p="2">pmCounterNumber257</measType>
+ <measType p="3">pmCounterNumber258</measType>
+ <measType p="4">pmCounterNumber259</measType>
+ <measType p="5">pmCounterNumber260</measType>
+ <measType p="6">pmCounterNumber261</measType>
+ <measType p="7">pmCounterNumber262</measType>
+ <measType p="8">pmCounterNumber263</measType>
+ <measType p="9">pmCounterNumber263On</measType>
+ <measType p="10">pmCounterNumber265</measType>
+ <measType p="11">pmCounterNumber266</measType>
+ <measType p="12">pmCounterNumber267</measType>
+ <measType p="13">pmCounterNumber267Auto</measType>
+ <measType p="14">pmCounterNumber267AutoCbrs</measType>
+ <measType p="15">pmCounterNumber267Man</measType>
+ <measType p="16">pmCounterNumber267ManCbrs</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRSectorCarrier=32">
+ <r p="1">0,0,0,0,0,0,0,0,0,15,0,0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="3">0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">10000</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRSectorCarrier=31">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,15,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="3">0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">15000</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRSectorCarrier=2">
+ <r p="1">15,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="3">0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRSectorCarrier=1">
+ <r p="1">15,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="3">0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=EUtranCellFDD">
+ <job jobId="stat"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber272</measType>
+ <measType p="2">pmCounterNumber273</measType>
+ <measType p="3">pmCounterNumber274</measType>
+ <measType p="4">pmCounterNumber275</measType>
+ <measType p="5">pmCounterNumber276</measType>
+ <measType p="6">pmCounterNumber277</measType>
+ <measType p="7">pmCounterNumber278</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=2">
+ <r p="1">0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="3">0,0,0,0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=1">
+ <r p="1">0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="3">0,0,0,0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=NRCellDU_GNBDU">
+ <job jobId="stat"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber279</measType>
+ <measType p="2">pmCounterNumber280</measType>
+ <measType p="3">pmCounterNumber281</measType>
+ <measType p="4">pmCounterNumber282</measType>
+ <measType p="5">pmCounterNumber283</measType>
+ <measType p="6">pmCounterNumber284</measType>
+ <measType p="7">pmCounterNumber285</measType>
+ <measType p="8">pmCounterNumber286</measType>
+ <measType p="9">pmCounterNumber287</measType>
+ <measType p="10">pmCounterNumber288</measType>
+ <measType p="11">pmCounterNumber289</measType>
+ <measType p="12">pmCounterNumber290</measType>
+ <measType p="13">pmCounterNumber291</measType>
+ <measType p="14">pmCounterNumber292</measType>
+ <measType p="15">pmCounterNumber293</measType>
+ <measType p="16">pmCounterNumber294</measType>
+ <measType p="17">pmCounterNumber295</measType>
+ <measType p="18">pmCounterNumber296</measType>
+ <measType p="19">pmCounterNumber274</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=32">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0</r>
+ <r p="3">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0,0,0,0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=31">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0</r>
+ <r p="3">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0,0,0,0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=2">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0</r>
+ <r p="3">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0,0,0,0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=1">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0</r>
+ <r p="3">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="4">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0,0,0,0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=EUtranCellFDD">
+ <job jobId="inter"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber297</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=2">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=1">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=NRCellDU_GNBDU">
+ <job jobId="inter"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber297F0Distr</measType>
+ <measType p="2">pmCounterNumber297F2Distr</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=32">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=31">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=2">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=1">
+ <r p="1">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=GNBCUCPFunction_GNBCUCP">
+ <job jobId="PREDEF_5GRC"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber300</measType>
+ <measType p="2">pmCounterNumber301</measType>
+ <measType p="3">pmCounterNumber302</measType>
+ <measType p="4">pmCounterNumber303</measType>
+ <measType p="5">pmCounterNumber304</measType>
+ <measType p="6">pmCounterNumber305</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">180</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=NRCellCU_GNBCUCP">
+ <job jobId="PREDEF_5GRC"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber306</measType>
+ <measType p="2">pmCounterNumber307</measType>
+ <measType p="3">pmCounterNumber308</measType>
+ <measType p="4">pmCounterNumber309</measType>
+ <measType p="5">pmCounterNumber310</measType>
+ <measType p="6">pmCounterNumber311</measType>
+ <measType p="7">pmCounterNumber312</measType>
+ <measType p="8">pmCounterNumber313</measType>
+ <measType p="9">pmCounterNumber314</measType>
+ <measType p="10">pmCounterNumber315</measType>
+ <measType p="11">pmCounterNumber316</measType>
+ <measType p="12">pmCounterNumber317</measType>
+ <measType p="13">pmCounterNumber318</measType>
+ <measType p="14">pmCounterNumber319</measType>
+ <measType p="15">pmCounterNumber320</measType>
+ <measType p="16">pmCounterNumber321</measType>
+ <measType p="17">pmCounterNumber322</measType>
+ <measType p="18">pmCounterNumber323</measType>
+ <measType p="19">pmCounterNumber324</measType>
+ <measType p="20">pmCounterNumber324Act</measType>
+ <measType p="21">pmCounterNumber326</measType>
+ <measType p="22">pmCounterNumber326Act</measType>
+ <measType p="23">pmCounterNumber328</measType>
+ <measType p="24">pmCounterNumber329</measType>
+ <measType p="25">pmCounterNumber330</measType>
+ <measType p="26">pmCounterNumber331</measType>
+ <measType p="27">pmCounterNumber332</measType>
+ <measType p="28">pmCounterNumber333</measType>
+ <measType p="29">pmCounterNumber334</measType>
+ <measType p="30">pmCounterNumber335</measType>
+ <measType p="31">pmCounterNumber336</measType>
+ <measType p="32">pmCounterNumber337</measType>
+ <measType p="33">pmCounterNumber338</measType>
+ <measType p="34">pmCounterNumber339</measType>
+ <measType p="35">pmCounterNumber340</measType>
+ <measType p="36">pmCounterNumber341</measType>
+ <measType p="37">pmCounterNumber342</measType>
+ <measType p="38">pmCounterNumber343</measType>
+ <measType p="39">pmCounterNumber343Mos</measType>
+ <measType p="40">pmCounterNumber345</measType>
+ <measType p="41">pmCounterNumber345Mos</measType>
+ <measType p="42">pmCounterNumber347</measType>
+ <measType p="43">pmCounterNumber348</measType>
+ <measType p="44">pmCounterNumber349</measType>
+ <measType p="45">pmCounterNumber350</measType>
+ <measType p="46">pmCounterNumber350Mos</measType>
+ <measType p="47">pmCounterNumber350Reatt</measType>
+ <measType p="48">pmCounterNumber350ReattMos</measType>
+ <measType p="49">pmCounterNumber354</measType>
+ <measType p="50">pmCounterNumber354Mos</measType>
+ <measType p="51">pmCounterNumber301</measType>
+ <measType p="52">pmCounterNumber302</measType>
+ <measType p="53">pmCounterNumber303</measType>
+ <measType p="54">pmCounterNumber304</measType>
+ <measType p="55">pmCounterNumber305</measType>
+ <measType p="56">pmCounterNumber356</measType>
+ <measType p="57">pmCounterNumber357</measType>
+ <measType p="58">pmCounterNumber358</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=32">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">180</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">180</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">180</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=31">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">180</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">180</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">180</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">180</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">180</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">180</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">180</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">180</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">180</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=GNBDUFunction_GNBDU">
+ <job jobId="PREDEF_5GRP"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber359</measType>
+ <measType p="2">pmCounterNumber360</measType>
+ <measType p="3">pmCounterNumber361</measType>
+ <measType p="4">pmCounterNumber362</measType>
+ <measType p="5">pmCounterNumber363</measType>
+ <measType p="6">pmCounterNumber364</measType>
+ <measType p="7">pmCounterNumber365</measType>
+ <measType p="8">pmCounterNumber366</measType>
+ <measType p="9">pmCounterNumber367</measType>
+ <measType p="10">pmCounterNumber368</measType>
+ <measType p="11">pmCounterNumber369</measType>
+ <measType p="12">pmCounterNumber370</measType>
+ <measType p="13">pmCounterNumber371</measType>
+ <measType p="14">pmCounterNumber372</measType>
+ <measType p="15">pmCounterNumber373</measType>
+ <measType p="16">pmCounterNumber374</measType>
+ <measType p="17">pmCounterNumber375</measType>
+ <measType p="18">pmCounterNumber376</measType>
+ <measType p="19">pmCounterNumber377</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">32</r>
+ <r p="6">16</r>
+ <r p="7">0</r>
+ <r p="8">16</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=NRCellDU_GNBDU">
+ <job jobId="PREDEF_5GRP"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber378</measType>
+ <measType p="2">pmCounterNumber379</measType>
+ <measType p="3">pmCounterNumber380</measType>
+ <measType p="4">pmCounterNumber381</measType>
+ <measType p="5">pmCounterNumber382</measType>
+ <measType p="6">pmCounterNumber383</measType>
+ <measType p="7">pmCounterNumber384</measType>
+ <measType p="8">pmCounterNumber385</measType>
+ <measType p="9">pmCounterNumber386</measType>
+ <measType p="10">pmCounterNumber306</measType>
+ <measType p="11">pmCounterNumber307</measType>
+ <measType p="12">pmCounterNumber307ual</measType>
+ <measType p="13">pmCounterNumber388</measType>
+ <measType p="14">pmCounterNumber389</measType>
+ <measType p="15">pmCounterNumber390</measType>
+ <measType p="16">pmCounterNumber391</measType>
+ <measType p="17">pmCounterNumber392</measType>
+ <measType p="18">pmCounterNumber393</measType>
+ <measType p="19">pmCounterNumber394</measType>
+ <measType p="20">pmCounterNumber395</measType>
+ <measType p="21">pmCounterNumber396</measType>
+ <measType p="22">pmCounterNumber397</measType>
+ <measType p="23">pmCounterNumber398</measType>
+ <measType p="24">pmCounterNumber399</measType>
+ <measType p="25">pmCounterNumber399Broadcasting</measType>
+ <measType p="26">pmCounterNumber401</measType>
+ <measType p="27">pmCounterNumber402</measType>
+ <measType p="28">pmCounterNumber403</measType>
+ <measType p="29">pmCounterNumber404</measType>
+ <measType p="30">pmCounterNumber405</measType>
+ <measType p="31">pmCounterNumber406</measType>
+ <measType p="32">pmCounterNumber407</measType>
+ <measType p="33">pmCounterNumber407Qos</measType>
+ <measType p="34">pmCounterNumber409</measType>
+ <measType p="35">pmCounterNumber410</measType>
+ <measType p="36">pmCounterNumber410Drb</measType>
+ <measType p="37">pmCounterNumber410DrbQos</measType>
+ <measType p="38">pmCounterNumber413</measType>
+ <measType p="39">pmCounterNumber413ResUe</measType>
+ <measType p="40">pmCounterNumber415</measType>
+ <measType p="41">pmCounterNumber416</measType>
+ <measType p="42">pmCounterNumber417</measType>
+ <measType p="43">pmCounterNumber418</measType>
+ <measType p="44">pmCounterNumber419</measType>
+ <measType p="45">pmCounterNumber420</measType>
+ <measType p="46">pmCounterNumber421</measType>
+ <measType p="47">pmCounterNumber422</measType>
+ <measType p="48">pmCounterNumber423</measType>
+ <measType p="49">pmCounterNumber424</measType>
+ <measType p="50">pmCounterNumber425</measType>
+ <measType p="51">pmCounterNumber426</measType>
+ <measType p="52">pmCounterNumber427</measType>
+ <measType p="53">pmCounterNumber428</measType>
+ <measType p="54">pmCounterNumber429</measType>
+ <measType p="55">pmCounterNumber430</measType>
+ <measType p="56">pmCounterNumber431</measType>
+ <measType p="57">pmCounterNumber432</measType>
+ <measType p="58">pmCounterNumber433</measType>
+ <measType p="59">pmCounterNumber434</measType>
+ <measType p="60">pmCounterNumber435</measType>
+ <measType p="61">pmCounterNumber436</measType>
+ <measType p="62">pmCounterNumber437</measType>
+ <measType p="63">pmCounterNumber438</measType>
+ <measType p="64">pmCounterNumber439</measType>
+ <measType p="65">pmCounterNumber440</measType>
+ <measType p="66">pmCounterNumber441</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=32">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">1800000</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">1800001</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">3032642268</r>
+ <r p="18">20160056</r>
+ <r p="19">15120000</r>
+ <r p="20">816482268</r>
+ <r p="21">0</r>
+ <r p="22">2880</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">3780540</r>
+ <r p="26">2520</r>
+ <r p="27">0</r>
+ <r p="28">900,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="29">0</r>
+ <r p="30">900,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">5760004</r>
+ <r p="41">0</r>
+ <r p="42">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="43">1440004</r>
+ <r p="44">0</r>
+ <r p="45">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="46">2,1,1,2,2,3,2,1,1,0,0,0</r>
+ <r p="47">15</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">60</r>
+ <r p="54">15</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">179</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=31">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">1800000</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">1800001</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">5110563822</r>
+ <r p="18">20160056</r>
+ <r p="19">15120000</r>
+ <r p="20">1375923822</r>
+ <r p="21">0</r>
+ <r p="22">5376</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">3780504</r>
+ <r p="26">2352</r>
+ <r p="27">0</r>
+ <r p="28">900,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="29">0</r>
+ <r p="30">900,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">5760004</r>
+ <r p="41">0</r>
+ <r p="42">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="43">1440004</r>
+ <r p="44">0</r>
+ <r p="45">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="46">3,1,2,1,2,0,3,2,0,0,0,0</r>
+ <r p="47">14</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">56</r>
+ <r p="54">14</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">179</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">900</r>
+ <r p="12">900</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="29">0</r>
+ <r p="30">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="46">0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBDUFunction=1,NRCellDU=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">900</r>
+ <r p="12">900</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="29">0</r>
+ <r p="30">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="46">0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=PpControlLink_GNBCUUP">
+ <job jobId="PREDEF_5GPP"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber310</measType>
+ <measType p="2">pmCounterNumber311</measType>
+ <measType p="3">pmCounterNumber312</measType>
+ <measType p="4">pmCounterNumber313</measType>
+ <measType p="5">pmCounterNumber314</measType>
+ <measType p="6">pmCounterNumber347</measType>
+ <measType p="7">pmCounterNumber348</measType>
+ <measType p="8">pmCounterNumber349</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUUPFunction=1,PpControlTermination=1,PpControlLink=internal">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">900</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">900</r>
+ <r p="8">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=EUtranCellFDD">
+ <job jobId="ltearq"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber442</measType>
+ <measType p="2">pmCounterNumber443</measType>
+ <measType p="3">pmCounterNumber444</measType>
+ <measType p="4">pmCounterNumber445</measType>
+ <measType p="5">pmCounterNumber446</measType>
+ <measType p="6">pmCounterNumber447</measType>
+ <measType p="7">pmCounterNumber448</measType>
+ <measType p="8">pmCounterNumber448PCell</measType>
+ <measType p="9">pmCounterNumber448SCell</measType>
+ <measType p="10">pmCounterNumber448Volte</measType>
+ <measType p="11">pmCounterNumber452</measType>
+ <measType p="12">pmCounterNumber453</measType>
+ <measType p="13">pmCounterNumber454</measType>
+ <measType p="14">pmCounterNumber455</measType>
+ <measType p="15">pmCounterNumber114</measType>
+ <measType p="16">pmCounterNumber456</measType>
+ <measType p="17">pmCounterNumber457</measType>
+ <measType p="18">pmCounterNumber458</measType>
+ <measType p="19">pmCounterNumber122</measType>
+ <measType p="20">pmCounterNumber459</measType>
+ <measType p="21">pmCounterNumber460</measType>
+ <measType p="22">pmCounterNumber461</measType>
+ <measType p="23">pmCounterNumber462</measType>
+ <measType p="24">pmCounterNumber131</measType>
+ <measType p="25">pmCounterNumber463</measType>
+ <measType p="26">pmCounterNumber464</measType>
+ <measType p="27">pmCounterNumber143</measType>
+ <measType p="28">pmCounterNumber145</measType>
+ <measType p="29">pmCounterNumber147</measType>
+ <measType p="30">pmCounterNumber14916qam</measType>
+ <measType p="31">pmCounterNumber149256Qam</measType>
+ <measType p="32">pmCounterNumber14964Qam</measType>
+ <measType p="33">pmCounterNumber149Iua16qam</measType>
+ <measType p="34">pmCounterNumber149IuaQpsk</measType>
+ <measType p="35">pmCounterNumber149Qpsk</measType>
+ <measType p="36">pmCounterNumber471</measType>
+ <measType p="37">pmCounterNumber472</measType>
+ <measType p="38">pmCounterNumber473</measType>
+ <measType p="39">pmCounterNumber474</measType>
+ <measType p="40">pmCounterNumber475</measType>
+ <measType p="41">pmCounterNumber476</measType>
+ <measType p="42">pmCounterNumber477</measType>
+ <measType p="43">pmCounterNumber478</measType>
+ <measType p="44">pmCounterNumber248</measType>
+ <measType p="45">pmCounterNumber249</measType>
+ <measType p="46">pmCounterNumber479</measType>
+ <measType p="47">pmCounterNumber250</measType>
+ <measType p="48">pmCounterNumber251</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=FieldReplaceableUnit">
+ <job jobId="PREDEF_Nc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber480</measType>
+ <measType p="2">pmCounterNumber481</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S3-1">
+ <r p="1">0</r>
+ <r p="2">4,4,4</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S2-1">
+ <r p="1">0</r>
+ <r p="2">4,4,4</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S1-1">
+ <r p="1">0</r>
+ <r p="2">4,4,4</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608">
+ <r p="1">0</r>
+ <r p="2"> , , </r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1">
+ <r p="1"> </r>
+ <r p="2">4,4,4</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=RiEthernetPort">
+ <job jobId="PREDEF_Nc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber482</measType>
+ <measType p="2">pmCounterNumber483</measType>
+ <measType p="3">pmCounterNumber484</measType>
+ <measType p="4">pmCounterNumber485</measType>
+ <measType p="5">pmCounterNumber486</measType>
+ <measType p="6">pmCounterNumber487</measType>
+ <measType p="7">pmCounterNumber488</measType>
+ <measType p="8">pmCounterNumber489</measType>
+ <measType p="9">pmCounterNumber490</measType>
+ <measType p="10">pmCounterNumber491</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,RiPort=P,RiEthernetPort=1">
+ <r p="1">0</r>
+ <r p="2">51885</r>
+ <r p="3">4628315</r>
+ <r p="4">9190</r>
+ <r p="5">0</r>
+ <r p="6">15493</r>
+ <r p="7">1956503</r>
+ <r p="8">7326</r>
+ <r p="9">0</r>
+ <r p="10"> </r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,RiPort=N,RiEthernetPort=1">
+ <r p="1">0</r>
+ <r p="2">37309</r>
+ <r p="3">2868954</r>
+ <r p="4">4551</r>
+ <r p="5">0</r>
+ <r p="6">915</r>
+ <r p="7">380361</r>
+ <r p="8">4549</r>
+ <r p="9">0</r>
+ <r p="10"> </r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,RiPort=B,RiEthernetPort=1">
+ <r p="1">0</r>
+ <r p="2">15490</r>
+ <r p="3">1512626</r>
+ <r p="4">7326</r>
+ <r p="5">0</r>
+ <r p="6">51883</r>
+ <r p="7">3492085</r>
+ <r p="8">9190</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,RiPort=A,RiEthernetPort=1">
+ <r p="1">0</r>
+ <r p="2">916</r>
+ <r p="3">260228</r>
+ <r p="4">4549</r>
+ <r p="5">0</r>
+ <r p="6">37309</r>
+ <r p="7">2097258</r>
+ <r p="8">4551</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=RiLink">
+ <job jobId="PREDEF_Nc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber492</measType>
+ <measType p="2">pmCounterNumber493</measType>
+ <measType p="3">pmCounterNumber494</measType>
+ <measType p="4">pmCounterNumber495</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,RiLink=S3-1">
+ <r p="1">1077</r>
+ <r p="2">1076</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,RiLink=S2-1">
+ <r p="1">450</r>
+ <r p="2">450</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,RiLink=S1-1">
+ <r p="1">427</r>
+ <r p="2">427</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,RiLink=R608-2">
+ <r p="1">0</r>
+ <r p="2">2147483647</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,RiLink=R608-1">
+ <r p="1">0</r>
+ <r p="2">2147483647</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=RiPort">
+ <job jobId="PREDEF_Nc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber496</measType>
+ <measType p="2">pmCounterNumber497</measType>
+ <measType p="3">pmCounterNumber498</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S3-1,RiPort=DATA_2">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S3-1,RiPort=DATA_1">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S2-1,RiPort=DATA_2">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S2-1,RiPort=DATA_1">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S1-1,RiPort=DATA_2">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S1-1,RiPort=DATA_1">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,RiPort=P">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,RiPort=N">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,RiPort=B">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,RiPort=A">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,RiPort=K">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,RiPort=C">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,RiPort=B">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,RiPort=A">
+ <r p="1">0,0,0,0,0,0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=SfpChannel">
+ <job jobId="PREDEF_Nc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber499</measType>
+ <measType p="2">pmCounterNumber500</measType>
+ <measType p="3">pmCounterNumber501</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,SfpModule=P,SfpChannel=1">
+ <r p="1">2951</r>
+ <r p="2">3600</r>
+ <r p="3">2922</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,SfpModule=N,SfpChannel=1">
+ <r p="1">3018</r>
+ <r p="2">4200</r>
+ <r p="3">2953</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,SfpModule=K,SfpChannel=1">
+ <r p="1">2809</r>
+ <r p="2">3500</r>
+ <r p="3">2812</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S3-1,SfpModule=DATA_2,SfpChannel=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S2-1,SfpModule=DATA_2,SfpChannel=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S1-1,SfpModule=DATA_2,SfpChannel=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S3-1,SfpModule=DATA_1,SfpChannel=1">
+ <r p="1">2810</r>
+ <r p="2">3100</r>
+ <r p="3">2830</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S2-1,SfpModule=DATA_1,SfpChannel=1">
+ <r p="1">2717</r>
+ <r p="2">3600</r>
+ <r p="3">2775</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S1-1,SfpModule=DATA_1,SfpChannel=1">
+ <r p="1">2700</r>
+ <r p="2">3900</r>
+ <r p="3">2773</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,SfpModule=C,SfpChannel=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,SfpModule=B,SfpChannel=1">
+ <r p="1">2744</r>
+ <r p="2">3200</r>
+ <r p="3">2775</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,SfpModule=B,SfpChannel=1">
+ <r p="1">2863</r>
+ <r p="2">3800</r>
+ <r p="3">2898</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,SfpModule=A,SfpChannel=1">
+ <r p="1">2684</r>
+ <r p="2">3900</r>
+ <r p="3">2737</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,SfpModule=A,SfpChannel=1">
+ <r p="1">2892</r>
+ <r p="2">4400</r>
+ <r p="3">2893</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=SfpModule">
+ <job jobId="PREDEF_Nc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber502</measType>
+ <measType p="2">pmCounterNumber503</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S3-1,SfpModule=DATA_2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S3-1,SfpModule=DATA_1">
+ <r p="1">1310</r>
+ <r p="2">32552</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S2-1,SfpModule=DATA_2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S2-1,SfpModule=DATA_1">
+ <r p="1">1430</r>
+ <r p="2">32904</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S1-1,SfpModule=DATA_2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S1-1,SfpModule=DATA_1">
+ <r p="1">1410</r>
+ <r p="2">33141</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,SfpModule=P">
+ <r p="1">1388</r>
+ <r p="2">32558</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,SfpModule=N">
+ <r p="1">1384</r>
+ <r p="2">32505</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,SfpModule=B">
+ <r p="1">1297</r>
+ <r p="2">32999</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,SfpModule=A">
+ <r p="1">1297</r>
+ <r p="2">33041</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,SfpModule=K">
+ <r p="1">1474</r>
+ <r p="2">32588</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,SfpModule=C">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,SfpModule=B">
+ <r p="1">1463</r>
+ <r p="2">32493</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,SfpModule=A">
+ <r p="1">1464</r>
+ <r p="2">32534</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=EthernetPort">
+ <job jobId="PREDEF_Rtn"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber482</measType>
+ <measType p="2">pmCounterNumber483</measType>
+ <measType p="3">pmCounterNumber484</measType>
+ <measType p="4">pmCounterNumber485</measType>
+ <measType p="5">pmCounterNumber486</measType>
+ <measType p="6">pmCounterNumber487</measType>
+ <measType p="7">pmCounterNumber488</measType>
+ <measType p="8">pmCounterNumber489</measType>
+ <measType p="9">pmCounterNumber504</measType>
+ <measType p="10">pmCounterNumber490</measType>
+ <measType p="11">pmCounterNumber505</measType>
+ <measType p="12">pmCounterNumber506</measType>
+ <measType p="13">pmCounterNumber507</measType>
+ <measType p="14">pmCounterNumber491</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,EthernetPort=TN_IDL_B_1">
+ <r p="1">22345</r>
+ <r p="2">1057</r>
+ <r p="3">2921772</r>
+ <r p="4">4472</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">9147991</r>
+ <r p="8">17099</r>
+ <r p="9">0</r>
+ <r p="10">7627</r>
+ <r p="11">3582</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=InterfaceIPv4">
+ <job jobId="PREDEF_Rtn"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber508</measType>
+ <measType p="2">pmCounterNumber509</measType>
+ <measType p="3">pmCounterNumber510</measType>
+ <measType p="4">pmCounterNumber511</measType>
+ <measType p="5">pmCounterNumber512</measType>
+ <measType p="6">pmCounterNumber513</measType>
+ <measType p="7">pmCounterNumber514</measType>
+ <measType p="8">pmCounterNumber515</measType>
+ <measType p="9">pmCounterNumber516</measType>
+ <measType p="10">pmCounterNumber517</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,Router=vr_OAM,InterfaceIPv4=1">
+ <r p="1">314834</r>
+ <r p="2">4561</r>
+ <r p="3">8697703</r>
+ <r p="4">16811</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,Router=vr_NR,InterfaceIPv4=1">
+ <r p="1">19900</r>
+ <r p="2">388</r>
+ <r p="3">1260</r>
+ <r p="4">30</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,Router=vr_LTE,InterfaceIPv4=1">
+ <r p="1">26656</r>
+ <r p="2">574</r>
+ <r p="3">14580</r>
+ <r p="4">243</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,Router=Node_Internal_F1,InterfaceIPv4=NRDU">
+ <r p="1"> </r>
+ <r p="2"> </r>
+ <r p="3"> </r>
+ <r p="4"> </r>
+ <r p="5"> </r>
+ <r p="6"> </r>
+ <r p="7"> </r>
+ <r p="8"> </r>
+ <r p="9"> </r>
+ <r p="10"> </r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,Router=Node_Internal_F1,InterfaceIPv4=NRCUCP">
+ <r p="1"> </r>
+ <r p="2"> </r>
+ <r p="3"> </r>
+ <r p="4"> </r>
+ <r p="5"> </r>
+ <r p="6"> </r>
+ <r p="7"> </r>
+ <r p="8"> </r>
+ <r p="9"> </r>
+ <r p="10"> </r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=SctpAssociation">
+ <job jobId="PREDEF_Rtn"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber518</measType>
+ <measType p="2">pmCounterNumber519</measType>
+ <measType p="3">pmCounterNumber520</measType>
+ <measType p="4">pmCounterNumber521</measType>
+ <measType p="5">pmCounterNumber522</measType>
+ <measType p="6">pmCounterNumber523</measType>
+ <measType p="7">pmCounterNumber524</measType>
+ <measType p="8">pmCounterNumber525</measType>
+ <measType p="9">pmCounterNumber526</measType>
+ <measType p="10">pmCounterNumber527</measType>
+ <measType p="11">pmCounterNumber528</measType>
+ <measType p="12">pmCounterNumber529</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,SctpEndpoint=F1_NRDU,SctpAssociation=38472-10.0.0.1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">833</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">87820</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">87820</r>
+ <r p="12">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,SctpEndpoint=F1_NRCUCP,SctpAssociation=38472-10.0.0.2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">833</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">87820</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">87820</r>
+ <r p="12">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=VlanPort">
+ <job jobId="PREDEF_Rtn"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber482</measType>
+ <measType p="2">pmCounterNumber483</measType>
+ <measType p="3">pmCounterNumber484</measType>
+ <measType p="4">pmCounterNumber485</measType>
+ <measType p="5">pmCounterNumber486</measType>
+ <measType p="6">pmCounterNumber487</measType>
+ <measType p="7">pmCounterNumber488</measType>
+ <measType p="8">pmCounterNumber489</measType>
+ <measType p="9">pmCounterNumber507</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,VlanPort=vr_OAM.IF1">
+ <r p="1">1996</r>
+ <r p="2">341</r>
+ <r p="3">657544</r>
+ <r p="4">4205</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">9067777</r>
+ <r p="8">16814</r>
+ <r p="9">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,VlanPort=vr_NR.IF1">
+ <r p="1">8457</r>
+ <r p="2">343</r>
+ <r p="3">711892</r>
+ <r p="4">33</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">2368</r>
+ <r p="8">37</r>
+ <r p="9">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Transport=1,VlanPort=vr_LTE.IF1">
+ <r p="1">11894</r>
+ <r p="2">343</r>
+ <r p="3">1006906</r>
+ <r p="4">234</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">20246</r>
+ <r p="8">248</r>
+ <r p="9">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=ConsumedEnergyMeasurement">
+ <job jobId="PREDEF_Apc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber530</measType>
+ <measType p="2">pmCounterNumber530Accumulated</measType>
+ <measType p="3">pmCounterNumber532</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,NodeSupport=1,ConsumedEnergyMeasurement=1">
+ <r p="1"> </r>
+ <r p="2"> </r>
+ <r p="3"> , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , </r>
+ <suspect>true</suspect>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=EnergyMeter">
+ <job jobId="PREDEF_Apc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber530</measType>
+ <measType p="2">pmCounterNumber530Accumulated</measType>
+ <measType p="3">pmCounterNumber532</measType>
+ <measType p="4">pmCounterNumber533</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,EnergyMeter=1">
+ <r p="1">83</r>
+ <r p="2">34846</r>
+ <r p="3">333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,334,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333</r>
+ <r p="4">52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S1-1,EnergyMeter=1">
+ <r p="1">12</r>
+ <r p="2">4947</r>
+ <r p="3">47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47</r>
+ <r p="4">53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S2-1,EnergyMeter=1">
+ <r p="1">13</r>
+ <r p="2">5394</r>
+ <r p="3">52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,51,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,51,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52</r>
+ <r p="4">54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=Radio-S3-1,EnergyMeter=1">
+ <r p="1">22</r>
+ <r p="2">9338</r>
+ <r p="3">89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89</r>
+ <r p="4">53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,52,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,52,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=R608,EnergyMeter=1">
+ <r p="1"> </r>
+ <r p="2"> </r>
+ <r p="3"> , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , </r>
+ <r p="4"> , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , </r>
+ <suspect>true</suspect>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=SupportUnit">
+ <job jobId="PREDEF_Apc"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber534</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,SupportUnit=2">
+ <r p="1">18,18,18</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,SupportUnit=1">
+ <r p="1">30,30,30</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=BbProcessingResource">
+ <job jobId="PREDEF_Lrat"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber535</measType>
+ <measType p="2">pmCounterNumber367</measType>
+ <measType p="3">pmCounterNumber368</measType>
+ <measType p="4">pmCounterNumber369</measType>
+ <measType p="5">pmCounterNumber370</measType>
+ <measType p="6">pmCounterNumber536</measType>
+ <measType p="7">pmCounterNumber537</measType>
+ <measType p="8">pmCounterNumber538</measType>
+ <measType p="9">pmCounterNumber539</measType>
+ <measType p="10">pmCounterNumber540</measType>
+ <measType p="11">pmCounterNumber541</measType>
+ <measType p="12">pmCounterNumber542</measType>
+ <measType p="13">pmCounterNumber543</measType>
+ <measType p="14">pmCounterNumber374</measType>
+ <measType p="15">pmCounterNumber375</measType>
+ <measType p="16">pmCounterNumber376</measType>
+ <measType p="17">pmCounterNumber377</measType>
+ <measType p="18">pmCounterNumber544</measType>
+ <measType p="19">pmCounterNumber545</measType>
+ <measType p="20">pmCounterNumber546</measType>
+ <measType p="21">pmCounterNumber547</measType>
+ <measType p="22">pmCounterNumber548</measType>
+ <measType p="23">pmCounterNumber549</measType>
+ <measType p="24">pmCounterNumber550</measType>
+ <measType p="25">pmCounterNumber551</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,BbProcessingResource=1">
+ <r p="1">0</r>
+ <r p="2">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="20">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=ENodeBFunction">
+ <job jobId="PREDEF_Lrat"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber359Aas</measType>
+ <measType p="2">pmCounterNumber360Aas</measType>
+ <measType p="3">pmCounterNumber554</measType>
+ <measType p="4">pmCounterNumber555</measType>
+ <measType p="5">pmCounterNumber365Actual</measType>
+ <measType p="6">pmCounterNumber366Actual</measType>
+ <measType p="7">pmCounterNumber558</measType>
+ <measType p="8">pmCounterNumber559</measType>
+ <measType p="9">pmCounterNumber560</measType>
+ <measType p="10">pmCounterNumber561</measType>
+ <measType p="11">pmCounterNumber562</measType>
+ <measType p="12">pmCounterNumber563</measType>
+ <measType p="13">pmCounterNumber564</measType>
+ <measType p="14">pmCounterNumber565</measType>
+ <measType p="15">pmCounterNumber566</measType>
+ <measType p="16">pmCounterNumber567</measType>
+ <measType p="17">pmCounterNumber568</measType>
+ <measType p="18">pmCounterNumber569</measType>
+ <measType p="19">pmCounterNumber570</measType>
+ <measType p="20">pmCounterNumber571</measType>
+ <measType p="21">pmCounterNumber572</measType>
+ <measType p="22">pmCounterNumber573</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">5</r>
+ <r p="8">900,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">180</r>
+ <r p="10">0</r>
+ <r p="11">8000</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">10000</r>
+ <r p="15">1800</r>
+ <r p="16">10000</r>
+ <r p="17">1800</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=EUtranCellFDD">
+ <job jobId="PREDEF_Lrat"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber306</measType>
+ <measType p="2">pmCounterNumber307</measType>
+ <measType p="3">pmCounterNumber574</measType>
+ <measType p="4">pmCounterNumber575</measType>
+ <measType p="5">pmCounterNumber576</measType>
+ <measType p="6">pmCounterNumber577</measType>
+ <measType p="7">pmCounterNumber578</measType>
+ <measType p="8">pmCounterNumber579</measType>
+ <measType p="9">pmCounterNumber580</measType>
+ <measType p="10">pmCounterNumber581</measType>
+ <measType p="11">pmCounterNumber582</measType>
+ <measType p="12">pmCounterNumber33</measType>
+ <measType p="13">pmCounterNumber34</measType>
+ <measType p="14">pmCounterNumber329</measType>
+ <measType p="15">pmCounterNumber330</measType>
+ <measType p="16">pmCounterNumber583</measType>
+ <measType p="17">pmCounterNumber583Arp</measType>
+ <measType p="18">pmCounterNumber583Csfb</measType>
+ <measType p="19">pmCounterNumber583CsfbArp</measType>
+ <measType p="20">pmCounterNumber583CsfbQci</measType>
+ <measType p="21">pmCounterNumber583HoOngoing</measType>
+ <measType p="22">pmCounterNumber583HoOngoingArp</measType>
+ <measType p="23">pmCounterNumber583HoOngoingQci</measType>
+ <measType p="24">pmCounterNumber583Qci</measType>
+ <measType p="25">pmCounterNumber592</measType>
+ <measType p="26">pmCounterNumber592Arp</measType>
+ <measType p="27">pmCounterNumber594</measType>
+ <measType p="28">pmCounterNumber595</measType>
+ <measType p="29">pmCounterNumber596</measType>
+ <measType p="30">pmCounterNumber597</measType>
+ <measType p="31">pmCounterNumber598</measType>
+ <measType p="32">pmCounterNumber599</measType>
+ <measType p="33">pmCounterNumber599Arp</measType>
+ <measType p="34">pmCounterNumber599Qci</measType>
+ <measType p="35">pmCounterNumber602</measType>
+ <measType p="36">pmCounterNumber602Arp</measType>
+ <measType p="37">pmCounterNumber604</measType>
+ <measType p="38">pmCounterNumber605</measType>
+ <measType p="39">pmCounterNumber606</measType>
+ <measType p="40">pmCounterNumber607</measType>
+ <measType p="41">pmCounterNumber608</measType>
+ <measType p="42">pmCounterNumber609</measType>
+ <measType p="43">pmCounterNumber610</measType>
+ <measType p="44">pmCounterNumber611</measType>
+ <measType p="45">pmCounterNumber612</measType>
+ <measType p="46">pmCounterNumber613</measType>
+ <measType p="47">pmCounterNumber614</measType>
+ <measType p="48">pmCounterNumber615</measType>
+ <measType p="49">pmCounterNumber616</measType>
+ <measType p="50">pmCounterNumber617</measType>
+ <measType p="51">pmCounterNumber618</measType>
+ <measType p="52">pmCounterNumber619</measType>
+ <measType p="53">pmCounterNumber620</measType>
+ <measType p="54">pmCounterNumber621</measType>
+ <measType p="55">pmCounterNumber409</measType>
+ <measType p="56">pmCounterNumber622</measType>
+ <measType p="57">pmCounterNumber623</measType>
+ <measType p="58">pmCounterNumber624</measType>
+ <measType p="59">pmCounterNumber625</measType>
+ <measType p="60">pmCounterNumber626</measType>
+ <measType p="61">pmCounterNumber627</measType>
+ <measType p="62">pmCounterNumber413ResUe</measType>
+ <measType p="63">pmCounterNumber570</measType>
+ <measType p="64">pmCounterNumber213Ce</measType>
+ <measType p="65">pmCounterNumber629</measType>
+ <measType p="66">pmCounterNumber630</measType>
+ <measType p="67">pmCounterNumber631</measType>
+ <measType p="68">pmCounterNumber631Uu</measType>
+ <measType p="69">pmCounterNumber633</measType>
+ <measType p="70">pmCounterNumber634</measType>
+ <measType p="71">pmCounterNumber635</measType>
+ <measType p="72">pmCounterNumber636</measType>
+ <measType p="73">pmCounterNumber637</measType>
+ <measType p="74">pmCounterNumber637FiltQci</measType>
+ <measType p="75">pmCounterNumber637LastTTI</measType>
+ <measType p="76">pmCounterNumber637LastTTIQci</measType>
+ <measType p="77">pmCounterNumber641</measType>
+ <measType p="78">pmCounterNumber642</measType>
+ <measType p="79">pmCounterNumber643</measType>
+ <measType p="80">pmCounterNumber350</measType>
+ <measType p="81">pmCounterNumber350Ce</measType>
+ <measType p="82">pmCounterNumber350Dta</measType>
+ <measType p="83">pmCounterNumber350DtaCe</measType>
+ <measType p="84">pmCounterNumber350Reatt</measType>
+ <measType p="85">pmCounterNumber350ReattCe</measType>
+ <measType p="86">pmCounterNumber350ReattDta</measType>
+ <measType p="87">pmCounterNumber350ReattDtaCe</measType>
+ <measType p="88">pmCounterNumber650</measType>
+ <measType p="89">pmCounterNumber650ActiveUsers</measType>
+ <measType p="90">pmCounterNumber652</measType>
+ <measType p="91">pmCounterNumber652Ce</measType>
+ <measType p="92">pmCounterNumber654</measType>
+ <measType p="93">pmCounterNumber654Ce</measType>
+ <measType p="94">pmCounterNumber354</measType>
+ <measType p="95">pmCounterNumber354Ce</measType>
+ <measType p="96">pmCounterNumber354Dta</measType>
+ <measType p="97">pmCounterNumber354DtaCe</measType>
+ <measType p="98">pmCounterNumber354GummeiNative</measType>
+ <measType p="99">pmCounterNumber660</measType>
+ <measType p="100">pmCounterNumber661</measType>
+ <measType p="101">pmCounterNumber662</measType>
+ <measType p="102">pmCounterNumber663</measType>
+ <measType p="103">pmCounterNumber664</measType>
+ <measType p="104">pmCounterNumber664Ce</measType>
+ <measType p="105">pmCounterNumber664Dta</measType>
+ <measType p="106">pmCounterNumber664DtaCe</measType>
+ <measType p="107">pmCounterNumber664Em</measType>
+ <measType p="108">pmCounterNumber664Hpa</measType>
+ <measType p="109">pmCounterNumber664Mod</measType>
+ <measType p="110">pmCounterNumber664ModCe</measType>
+ <measType p="111">pmCounterNumber664Mos</measType>
+ <measType p="112">pmCounterNumber664Mta</measType>
+ <measType p="113">pmCounterNumber664MtaCe</measType>
+ <measType p="114">pmCounterNumber675</measType>
+ <measType p="115">pmCounterNumber675Ce</measType>
+ <measType p="116">pmCounterNumber677</measType>
+ <measType p="117">pmCounterNumber677Ce</measType>
+ <measType p="118">pmCounterNumber677Dta</measType>
+ <measType p="119">pmCounterNumber677DtaCe</measType>
+ <measType p="120">pmCounterNumber677Em</measType>
+ <measType p="121">pmCounterNumber677Hpa</measType>
+ <measType p="122">pmCounterNumber677Mod</measType>
+ <measType p="123">pmCounterNumber677ModCe</measType>
+ <measType p="124">pmCounterNumber677Mos</measType>
+ <measType p="125">pmCounterNumber677Mta</measType>
+ <measType p="126">pmCounterNumber677MtaCe</measType>
+ <measType p="127">pmCounterNumber688</measType>
+ <measType p="128">pmCounterNumber689</measType>
+ <measType p="129">pmCounterNumber690</measType>
+ <measType p="130">pmCounterNumber691</measType>
+ <measType p="131">pmCounterNumber692</measType>
+ <measType p="132">pmCounterNumber693</measType>
+ <measType p="133">pmCounterNumber694</measType>
+ <measType p="134">pmCounterNumber694Em</measType>
+ <measType p="135">pmCounterNumber696</measType>
+ <measType p="136">pmCounterNumber696Em</measType>
+ <measType p="137">pmCounterNumber698</measType>
+ <measType p="138">pmCounterNumber699</measType>
+ <measType p="139">pmCounterNumber699Em</measType>
+ <measType p="140">pmCounterNumber701</measType>
+ <measType p="141">pmCounterNumber701Em</measType>
+ <measType p="142">pmCounterNumber703</measType>
+ <measType p="143">pmCounterNumber704</measType>
+ <measType p="144">pmCounterNumber705</measType>
+ <measType p="145">pmCounterNumber706</measType>
+ <measType p="146">pmCounterNumber7062</measType>
+ <measType p="147">pmCounterNumber708</measType>
+ <measType p="148">pmCounterNumber709</measType>
+ <measType p="149">pmCounterNumber710</measType>
+ <measType p="150">pmCounterNumber711</measType>
+ <measType p="151">pmCounterNumber712</measType>
+ <measType p="152">pmCounterNumber713</measType>
+ <measType p="153">pmCounterNumber714</measType>
+ <measType p="154">pmCounterNumber715</measType>
+ <measType p="155">pmCounterNumber716</measType>
+ <measType p="156">pmCounterNumber717</measType>
+ <measType p="157">pmCounterNumber718</measType>
+ <measType p="158">pmCounterNumber719</measType>
+ <measType p="159">pmCounterNumber720</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=2">
+ <r p="1">0</r>
+ <r p="2">900</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0,0,0,0</r>
+ <r p="48">0,0,0,0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0,0,0,0</r>
+ <r p="54">0,0,0,0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="59">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0,0,0,0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0</r>
+ <r p="81">0,0,0,0</r>
+ <r p="82">0</r>
+ <r p="83">0,0,0,0</r>
+ <r p="84">0</r>
+ <r p="85">0,0,0,0</r>
+ <r p="86">0</r>
+ <r p="87">0,0,0,0</r>
+ <r p="88">0</r>
+ <r p="89">0</r>
+ <r p="90">0</r>
+ <r p="91">0,0,0,0</r>
+ <r p="92">0</r>
+ <r p="93">0,0,0,0</r>
+ <r p="94">0</r>
+ <r p="95">0,0,0,0</r>
+ <r p="96">0</r>
+ <r p="97">0,0,0,0</r>
+ <r p="98">0</r>
+ <r p="99">0</r>
+ <r p="100">0</r>
+ <r p="101">0</r>
+ <r p="102">0</r>
+ <r p="103">0</r>
+ <r p="104">0,0,0,0</r>
+ <r p="105">0</r>
+ <r p="106">0,0,0,0</r>
+ <r p="107">0</r>
+ <r p="108">0</r>
+ <r p="109">0</r>
+ <r p="110">0,0,0,0</r>
+ <r p="111">0</r>
+ <r p="112">0</r>
+ <r p="113">0,0,0,0</r>
+ <r p="114">0</r>
+ <r p="115">0,0,0,0</r>
+ <r p="116">0</r>
+ <r p="117">0,0,0,0</r>
+ <r p="118">0</r>
+ <r p="119">0,0,0,0</r>
+ <r p="120">0</r>
+ <r p="121">0</r>
+ <r p="122">0</r>
+ <r p="123">0,0,0,0</r>
+ <r p="124">0</r>
+ <r p="125">0</r>
+ <r p="126">0,0,0,0</r>
+ <r p="127">0</r>
+ <r p="128">0</r>
+ <r p="129">0</r>
+ <r p="130">0</r>
+ <r p="131">0</r>
+ <r p="132">0</r>
+ <r p="133">0</r>
+ <r p="134">0</r>
+ <r p="135">0</r>
+ <r p="136">0</r>
+ <r p="137">0</r>
+ <r p="138">0</r>
+ <r p="139">0</r>
+ <r p="140">0</r>
+ <r p="141">0</r>
+ <r p="142">0</r>
+ <r p="143">0</r>
+ <r p="144">0</r>
+ <r p="145">0</r>
+ <r p="146">0</r>
+ <r p="147">0</r>
+ <r p="148">0</r>
+ <r p="149">0</r>
+ <r p="150">0</r>
+ <r p="151">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="152">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="153">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="154">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="155">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="156">0</r>
+ <r p="157">0</r>
+ <r p="158">0,0,0,0,0,0,0,0</r>
+ <r p="159">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=1">
+ <r p="1">0</r>
+ <r p="2">900</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0,0,0,0</r>
+ <r p="48">0,0,0,0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0,0,0,0</r>
+ <r p="54">0,0,0,0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="59">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0,0,0,0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ <r p="74">0</r>
+ <r p="75">0</r>
+ <r p="76">0</r>
+ <r p="77">0</r>
+ <r p="78">0</r>
+ <r p="79">0</r>
+ <r p="80">0</r>
+ <r p="81">0,0,0,0</r>
+ <r p="82">0</r>
+ <r p="83">0,0,0,0</r>
+ <r p="84">0</r>
+ <r p="85">0,0,0,0</r>
+ <r p="86">0</r>
+ <r p="87">0,0,0,0</r>
+ <r p="88">0</r>
+ <r p="89">0</r>
+ <r p="90">0</r>
+ <r p="91">0,0,0,0</r>
+ <r p="92">0</r>
+ <r p="93">0,0,0,0</r>
+ <r p="94">0</r>
+ <r p="95">0,0,0,0</r>
+ <r p="96">0</r>
+ <r p="97">0,0,0,0</r>
+ <r p="98">0</r>
+ <r p="99">0</r>
+ <r p="100">0</r>
+ <r p="101">0</r>
+ <r p="102">0</r>
+ <r p="103">0</r>
+ <r p="104">0,0,0,0</r>
+ <r p="105">0</r>
+ <r p="106">0,0,0,0</r>
+ <r p="107">0</r>
+ <r p="108">0</r>
+ <r p="109">0</r>
+ <r p="110">0,0,0,0</r>
+ <r p="111">0</r>
+ <r p="112">0</r>
+ <r p="113">0,0,0,0</r>
+ <r p="114">0</r>
+ <r p="115">0,0,0,0</r>
+ <r p="116">0</r>
+ <r p="117">0,0,0,0</r>
+ <r p="118">0</r>
+ <r p="119">0,0,0,0</r>
+ <r p="120">0</r>
+ <r p="121">0</r>
+ <r p="122">0</r>
+ <r p="123">0,0,0,0</r>
+ <r p="124">0</r>
+ <r p="125">0</r>
+ <r p="126">0,0,0,0</r>
+ <r p="127">0</r>
+ <r p="128">0</r>
+ <r p="129">0</r>
+ <r p="130">0</r>
+ <r p="131">0</r>
+ <r p="132">0</r>
+ <r p="133">0</r>
+ <r p="134">0</r>
+ <r p="135">0</r>
+ <r p="136">0</r>
+ <r p="137">0</r>
+ <r p="138">0</r>
+ <r p="139">0</r>
+ <r p="140">0</r>
+ <r p="141">0</r>
+ <r p="142">0</r>
+ <r p="143">0</r>
+ <r p="144">0</r>
+ <r p="145">0</r>
+ <r p="146">0</r>
+ <r p="147">0</r>
+ <r p="148">0</r>
+ <r p="149">0</r>
+ <r p="150">0</r>
+ <r p="151">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="152">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="153">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="154">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="155">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</r>
+ <r p="156">0</r>
+ <r p="157">0</r>
+ <r p="158">0,0,0,0,0,0,0,0</r>
+ <r p="159">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=BbProcessingResource">
+ <job jobId="nrcell"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber550Burst</measType>
+ <measType p="2">pmCounterNumber550Format</measType>
+ <measType p="3">pmCounterNumber550X2Fwd</measType>
+ <measType p="4">pmCounterNumber724</measType>
+ <measType p="5">pmCounterNumber725</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,Equipment=1,FieldReplaceableUnit=BB-1,BbProcessingResource=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=EUtranCellFDD">
+ <job jobId="nrcell"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber726</measType>
+ <measType p="2">pmCounterNumber727</measType>
+ <measType p="3">pmCounterNumber728</measType>
+ <measType p="4">pmCounterNumber729</measType>
+ <measType p="5">pmCounterNumber730</measType>
+ <measType p="6">pmCounterNumber731</measType>
+ <measType p="7">pmCounterNumber732</measType>
+ <measType p="8">pmCounterNumber733</measType>
+ <measType p="9">pmCounterNumber734</measType>
+ <measType p="10">pmCounterNumber735</measType>
+ <measType p="11">pmCounterNumber629CatMDrxNoSyncQci</measType>
+ <measType p="12">pmCounterNumber629CatMDrxSyncQci</measType>
+ <measType p="13">pmCounterNumber629CatMNoDrxNoSyncQci</measType>
+ <measType p="14">pmCounterNumber629CatMNoDrxSyncQci</measType>
+ <measType p="15">pmCounterNumber629DrxNoSyncQci</measType>
+ <measType p="16">pmCounterNumber629DrxSync</measType>
+ <measType p="17">pmCounterNumber629DrxSyncQci</measType>
+ <measType p="18">pmCounterNumber629NoDrxNoSyncQci</measType>
+ <measType p="19">pmCounterNumber629NoDrxSyncQci</measType>
+ <measType p="20">pmCounterNumber629Qci</measType>
+ <measType p="21">pmCounterNumber630CatMDrxNoSyncQci</measType>
+ <measType p="22">pmCounterNumber630CatMDrxSyncQci</measType>
+ <measType p="23">pmCounterNumber630CatMNoDrxNoSyncQci</measType>
+ <measType p="24">pmCounterNumber630CatMNoDrxSyncQci</measType>
+ <measType p="25">pmCounterNumber630DrxNoSyncQci</measType>
+ <measType p="26">pmCounterNumber630DrxSync</measType>
+ <measType p="27">pmCounterNumber630DrxSyncQci</measType>
+ <measType p="28">pmCounterNumber630NoDrxNoSyncQci</measType>
+ <measType p="29">pmCounterNumber630NoDrxSyncQci</measType>
+ <measType p="30">pmCounterNumber630Qci</measType>
+ <measType p="31">pmCounterNumber756</measType>
+ <measType p="32">pmCounterNumber756Qci</measType>
+ <measType p="33">pmCounterNumber758</measType>
+ <measType p="34">pmCounterNumber758Qci</measType>
+ <measType p="35">pmCounterNumber631Qci</measType>
+ <measType p="36">pmCounterNumber631UuQci</measType>
+ <measType p="37">pmCounterNumber762</measType>
+ <measType p="38">pmCounterNumber633Limitations</measType>
+ <measType p="39">pmCounterNumber633MissingPdus2Qci</measType>
+ <measType p="40">pmCounterNumber633Qci</measType>
+ <measType p="41">pmCounterNumber633RohcFail2Qci</measType>
+ <measType p="42">pmCounterNumber633SrbTooLarge</measType>
+ <measType p="43">pmCounterNumber768</measType>
+ <measType p="44">pmCounterNumber769</measType>
+ <measType p="45">pmCounterNumber770</measType>
+ <measType p="46">pmCounterNumber771</measType>
+ <measType p="47">pmCounterNumber771Qci</measType>
+ <measType p="48">pmCounterNumber634Qci</measType>
+ <measType p="49">pmCounterNumber635Qci</measType>
+ <measType p="50">pmCounterNumber775</measType>
+ <measType p="51">pmCounterNumber637Ca</measType>
+ <measType p="52">pmCounterNumber637LastTTICa</measType>
+ <measType p="53">pmCounterNumber637Qci</measType>
+ <measType p="54">pmCounterNumber637TransPlmn0</measType>
+ <measType p="55">pmCounterNumber637TransPlmn1</measType>
+ <measType p="56">pmCounterNumber637TransPlmn2</measType>
+ <measType p="57">pmCounterNumber637TransPlmn3</measType>
+ <measType p="58">pmCounterNumber637TransPlmn4</measType>
+ <measType p="59">pmCounterNumber637TransPlmn5</measType>
+ <measType p="60">pmCounterNumber637TransPlmn6</measType>
+ <measType p="61">pmCounterNumber637TransQci</measType>
+ <measType p="62">pmCounterNumber787</measType>
+ <measType p="63">pmCounterNumber641Trans</measType>
+ <measType p="64">pmCounterNumber789</measType>
+ <measType p="65">pmCounterNumber642Plmn0</measType>
+ <measType p="66">pmCounterNumber642Plmn1</measType>
+ <measType p="67">pmCounterNumber642Plmn2</measType>
+ <measType p="68">pmCounterNumber642Plmn3</measType>
+ <measType p="69">pmCounterNumber642Plmn4</measType>
+ <measType p="70">pmCounterNumber642Plmn5</measType>
+ <measType p="71">pmCounterNumber642Plmn6</measType>
+ <measType p="72">pmCounterNumber642Qci</measType>
+ <measType p="73">pmCounterNumber798</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=2">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,ENodeBFunction=1,EUtranCellFDD=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="6">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="7">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="8">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="9">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="10">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="11">0</r>
+ <r p="12">0</r>
+ <r p="13">0</r>
+ <r p="14">0</r>
+ <r p="15">0</r>
+ <r p="16">0</r>
+ <r p="17">0</r>
+ <r p="18">0</r>
+ <r p="19">0</r>
+ <r p="20">0</r>
+ <r p="21">0</r>
+ <r p="22">0</r>
+ <r p="23">0</r>
+ <r p="24">0</r>
+ <r p="25">0</r>
+ <r p="26">0</r>
+ <r p="27">0</r>
+ <r p="28">0</r>
+ <r p="29">0</r>
+ <r p="30">0</r>
+ <r p="31">0</r>
+ <r p="32">0</r>
+ <r p="33">0</r>
+ <r p="34">0</r>
+ <r p="35">0</r>
+ <r p="36">0</r>
+ <r p="37">0</r>
+ <r p="38">0</r>
+ <r p="39">0</r>
+ <r p="40">0</r>
+ <r p="41">0</r>
+ <r p="42">0,0,0,0,0,0,0,0,0,0</r>
+ <r p="43">0</r>
+ <r p="44">0</r>
+ <r p="45">0</r>
+ <r p="46">0</r>
+ <r p="47">0</r>
+ <r p="48">0</r>
+ <r p="49">0</r>
+ <r p="50">0</r>
+ <r p="51">0</r>
+ <r p="52">0</r>
+ <r p="53">0</r>
+ <r p="54">0</r>
+ <r p="55">0</r>
+ <r p="56">0</r>
+ <r p="57">0</r>
+ <r p="58">0</r>
+ <r p="59">0</r>
+ <r p="60">0</r>
+ <r p="61">0</r>
+ <r p="62">0</r>
+ <r p="63">0</r>
+ <r p="64">0</r>
+ <r p="65">0</r>
+ <r p="66">0</r>
+ <r p="67">0</r>
+ <r p="68">0</r>
+ <r p="69">0</r>
+ <r p="70">0</r>
+ <r p="71">0</r>
+ <r p="72">0</r>
+ <r p="73">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=GNBCUUPFunction_GNBCUUP">
+ <job jobId="nrcell"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber799</measType>
+ <measType p="2">pmCounterNumber799Gtpu</measType>
+ <measType p="3">pmCounterNumber799NoCtxt</measType>
+ <measType p="4">pmCounterNumber802</measType>
+ <measType p="5">pmCounterNumber803</measType>
+ <measType p="6">pmCounterNumber804</measType>
+ <measType p="7">pmCounterNumber805</measType>
+ <measType p="8">pmCounterNumber806</measType>
+ <measType p="9">pmCounterNumber807</measType>
+ <measType p="10">pmCounterNumber808</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUUPFunction=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ <r p="3">0</r>
+ <r p="4">0</r>
+ <r p="5">0</r>
+ <r p="6">0</r>
+ <r p="7">0</r>
+ <r p="8">0</r>
+ <r p="9">0</r>
+ <r p="10">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=NRCellCU_GNBCUCP">
+ <job jobId="nrcell"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmEndcUeCapabilityUlPdcpDelay</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=32">
+ <r p="1">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=31">
+ <r p="1">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=2">
+ <r p="1">0</r>
+ </measValue>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUCPFunction=1,NRCellCU=1">
+ <r p="1">0</r>
+ </measValue>
+ </measInfo>
+ <measInfo measInfoId="PM=1,PmGroup=X2UTermination_GNBCUUP">
+ <job jobId="nrcell"/>
+ <granPeriod duration="PT900S"
+ endTime="2022-04-18T19:15:00+00:00"/>
+ <repPeriod duration="PT900S"/>
+ <measType p="1">pmCounterNumber802</measType>
+ <measType p="2">pmCounterNumber803</measType>
+ <measValue measObjLdn="ManagedElement=nodedntest,GNBCUUPFunction=1,X2UTermination=1">
+ <r p="1">0</r>
+ <r p="2">0</r>
+ </measValue>
+ </measInfo>
+ </measData>
+ <fileFooter>
+ <measCollec endTime="2022-04-18T19:15:00+00:00"/>
+ </fileFooter>
+</measCollecFile>
diff --git a/pm-file-flow-demo/docker-proj/pm-files/pm.xml.gz b/pm-file-flow-demo/docker-proj/pm-files/pm.xml.gz
new file mode 100644
index 0000000..df90359
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/pm-files/pm.xml.gz
Binary files differ
diff --git a/pm-file-flow-demo/docker-proj/scripts/clean-ne-files.sh b/pm-file-flow-demo/docker-proj/scripts/clean-ne-files.sh
new file mode 100755
index 0000000..74f98d2
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/scripts/clean-ne-files.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+SD=$(dirname -- "$0")
+echo "script-home: "$SD
+
+cd $SD/..
+
+if [ -d "ne-files" ]; then
+ cd "ne-files"
+ if [ $? -eq 0 ]; then
+ if [[ "$PWD" == *"/ne-files" ]]; then
+ CNT=$(find . -maxdepth 2 -name 'A*' | wc -l)
+ echo " Deleting $CNT files in $PWD"
+ find . -maxdepth 2 -name 'A*' -delete
+ else
+ echo "Cannot determine if current dir is ne-files"
+ echo "Exiting..."
+ exit 1
+ fi
+ else
+ echo "Cannnot cd to ne-files"
+ echo "Exiting..."
+ exit 1
+ fi
+else
+ echo "Dir ne-files not found"
+ echo "Exiting..."
+ exit 1
+fi
+
+echo "DONE"
+exit 0
+
diff --git a/pm-file-flow-demo/docker-proj/scripts/clean-shared-volume.sh b/pm-file-flow-demo/docker-proj/scripts/clean-shared-volume.sh
new file mode 100755
index 0000000..6f937ab
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/scripts/clean-shared-volume.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+echo "Deleting files in shared volumes"
+SD=$(dirname -- "$0")
+echo " script-home: "$SD
+
+cd $SD/..
+
+if [ -d "shared-volume" ]; then
+ cd "shared-volume"
+ if [ $? -eq 0 ]; then
+ if [[ "$PWD" == *"/shared-volume" ]]; then
+ CNT=$(find . -maxdepth 2 -name 'A*' | wc -l)
+ echo " Deleting $CNT files in $PWD"
+ find . -maxdepth 2 -name 'A*' -delete
+ else
+ echo "Cannot determine if current dir is shared-volume"
+ echo "Exiting..."
+ exit 1
+ fi
+ else
+ echo "Cannnot cd to shared-volume"
+ echo "Exiting..."
+ exit 1
+ fi
+else
+ echo "Dir shared-volume not found"
+ echo "Exiting..."
+ exit 1
+fi
+
+echo "DONE"
+exit 0
diff --git a/pm-file-flow-demo/docker-proj/scripts/cont-stats.sh b/pm-file-flow-demo/docker-proj/scripts/cont-stats.sh
new file mode 100755
index 0000000..69cab82
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/scripts/cont-stats.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+while [ true ]; do
+ docker stats --no-stream > .tmp.stats;
+ clear
+ cat .tmp.stats
+done
+
diff --git a/pm-file-flow-demo/docker-proj/scripts/kafka-client-send-collected-file.sh b/pm-file-flow-demo/docker-proj/scripts/kafka-client-send-collected-file.sh
new file mode 100755
index 0000000..4a67774
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/scripts/kafka-client-send-collected-file.sh
@@ -0,0 +1,69 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+SD=$(dirname -- "$0")
+echo "script-home: "$SD
+cd $SD
+CWD=$PWD
+
+NODE_COUNT=$1
+EVT_COUNT=$2
+NODE_NAME_BASE=$3
+FILE_EXT=$4
+DIR=$5
+
+
+
+print_usage() {
+ echo "Usage: kafka-client-send-collected-file.sh <node-count> <num-of-events> <node-name-base> <file-extension> dir|no-dir"
+ exit 1
+}
+
+if [ $# -ne 5 ]; then
+ print_usage
+fi
+
+if [ $DIR == "dir" ]; then
+ :
+elif [ $DIR == "no-dir" ]; then
+ :
+else
+ print_usage
+fi
+
+rm .out.json
+touch .out.json
+
+for (( i=0; i<$EVT_COUNT; i++)); do
+
+ for (( j=0; j<$NODE_COUNT; j++)); do
+ NO="$NODE_NAME_BASE-$j"
+ FN="A20000626.2315+0200-2330+0200_$NO-$i.$FILE_EXT"
+ if [ $DIR == "dir" ]; then
+ FN=$NO/$FN
+ fi
+ echo "NODE "$NO
+ echo "FILENAME "$FN
+ EVT='{"productName":"RnNode","vendorName":"Ericsson","lastEpochMicrosec":151983,"sourceName":"'$NO'","startEpochMicrosec":15198378,"timeZoneOffset":"UTC+05:00","compression":"gzip","fileFormatType":"org.3GPP.32.435#measCollec","fileFormatVersion":"V10","name":"'$FN'","changeIdentifier":"PM_MEAS_FILES"}'
+ echo $EVT >> .out.json
+ done
+
+done
+cat .out.json| kafka-console-producer --topic collected-file --broker-list kafka-1:29092
+
diff --git a/pm-file-flow-demo/docker-proj/scripts/kafka-client-send-file-ready.sh b/pm-file-flow-demo/docker-proj/scripts/kafka-client-send-file-ready.sh
new file mode 100755
index 0000000..a62a9ab
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/scripts/kafka-client-send-file-ready.sh
@@ -0,0 +1,179 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+SD=$(dirname -- "$0")
+echo "script-home: "$SD
+cd $SD
+CWD=$PWD
+
+NODE_COUNT=$1
+EVT_COUNT=$2
+NODE_NAME_BASE=$3
+FILE_EXT=$4
+TYPE=$5
+SRV_COUNT=$6
+HIST=$7
+
+FTPES_PORT=2021
+SFTP_PORT=2022
+HTTPS_PORT=443
+
+print_usage() {
+ echo "Usage: kafka-client-send-file-ready.sh <node-count> <num-of-events> <node-name-base> <file-extension> sftp|ftpes|https <num-servers> [hist]"
+ exit 1
+}
+echo $@
+if [ $# -lt 6 ] && [ $# -gt 7 ]; then
+ print_usage
+fi
+
+if [ $TYPE == "sftp" ]; then
+ :
+elif [ $TYPE == "ftpes" ]; then
+ :
+elif [ $TYPE == "https" ]; then
+ :
+else
+ print_usage
+fi
+HIST_LEN=0
+if [ ! -z "$HIST" ]; then
+ if [ $HIST != "hist" ]; then
+ print_usage
+ fi
+ HIST_LEN=96
+fi
+
+BEGINTIME=1665146700
+CURTIME=$BEGINTIME
+
+BATCHSIZE=1000
+
+CNTR=0
+TCNTR=0
+
+for (( i=0; i<$EVT_COUNT; i++)); do
+
+ if [ $CNTR -eq 0 ]; then
+ rm .out.json
+ touch .out.json
+ fi
+
+ if [ "$HIST" == "" ]; then
+ echo "EVENT NO: $i for $NODE_COUNT NODES - 1 FILE PER EVENT"
+ else
+ echo "EVENT NO: $i for $NODE_COUNT NODES - $HIST_LEN FILES PER EVENT"
+ fi
+
+ ST=$(date -d @$CURTIME +'%Y%m%d.%H%M')
+ let CURTIME=CURTIME+900
+ ET=$(date -d @$CURTIME +'%H%M')
+
+ for (( j=0; j<$NODE_COUNT; j++)); do
+
+ if [ "$HIST" == "" ]; then
+ NO="$NODE_NAME_BASE-$j"
+
+ #FN="A20000626.2315+0200-2330+0200_$NO-$i.$FILE_EXT"
+ FN="A$ST+0200-$ET+0200_$NO-$i.$FILE_EXT"
+ let SRV_ID=$j%$SRV_COUNT
+ let SRV_ID=SRV_ID+1
+ echo "NODE "$NO
+ echo "FILENAME "$FN
+
+
+ if [ $TYPE == "sftp" ]; then
+ SRV="ftp-sftp-$SRV_ID"
+ echo "FTP SERVER "$SRV
+ URL="sftp://onap:pano@$SRV:$SFTP_PORT/$FN"
+ elif [ $TYPE == "ftpes" ]; then
+ SRV="ftp-ftpes-$SRV_ID"
+ echo "FTP SERVER "$SRV
+ URL="ftpes://onap:pano@$SRV:$FTPES_PORT/$FN"
+ elif [ $TYPE == "https" ]; then
+ SRV="pm-https-server-$SRV_ID"
+ echo "HTTP SERVER "$SRV
+ URL="https://$SRV:$HTTPS_PORT/files/$FN"
+ fi
+ EVT='{"event":{"commonEventHeader":{"sequence":0,"eventName":"Noti_RnNode-Ericsson_FileReady","sourceName":"'$NO'","lastEpochMicrosec":151983,"startEpochMicrosec":15198378,"timeZoneOffset":"UTC+05:00","changeIdentifier":"PM_MEAS_FILES"},"notificationFields":{"notificationFieldsVersion":"notificationFieldsVersion","changeType":"FileReady","changeIdentifier":"PM_MEAS_FILES","arrayOfNamedHashMap":[{"name":"'$FN'","hashMap":{"fileFormatType":"org.3GPP.32.435#measCollec","location":"'$URL'","fileFormatVersion":"V10","compression":"gzip"}}]}}}'
+ echo $EVT >> .out.json
+ else
+ NO="$NODE_NAME_BASE-$j"
+
+ let SRV_ID=$j%$SRV_COUNT
+ let SRV_ID=SRV_ID+1
+ echo "NODE "$NO
+
+ EVT_FRAG=""
+ for(( k=95; k>=0; k-- )); do
+
+ let FID=$i-k
+ CURTIME=$(($BEGINTIME+$FID*900))
+ ST=$(date -d @$CURTIME +'%Y%m%d.%H%M')
+ let CURTIME=CURTIME+900
+ ET=$(date -d @$CURTIME +'%H%M')
+ if [ $FID -lt 0 ]; then
+ FN="NONEXISTING_$NO-$FID.$FILE_EXT"
+ else
+ #FN="A20000626.2315+0200-2330+0200_$NO-$FID.$FILE_EXT"
+ FN="A$ST+0200-$ET+0200_$NO-$FID.$FILE_EXT"
+ fi
+ echo "FILENAME "$FN
+ if [ $TYPE == "sftp" ]; then
+ SRV="ftp-sftp-$SRV_ID"
+ #echo "FTP SERVER "$SRV
+ URL="sftp://onap:pano@$SRV:$SFTP_PORT/$FN"
+ elif [ $TYPE == "ftpes" ]; then
+ SRV="ftp-ftpes-$SRV_ID"
+ #echo "FTP SERVER "$SRV
+ URL="ftpes://onap:pano@$SRV:$FTPES_PORT/$FN"
+ elif [ $TYPE == "https" ]; then
+ SRV="pm-https-server-$SRV_ID"
+ #echo "HTTP SERVER "$SRV
+ URL="https://$SRV:$HTTPS_PORT/files/$FN"
+ fi
+ if [ "$EVT_FRAG" != "" ]; then
+ EVT_FRAG=$EVT_FRAG","
+ fi
+ EVT_FRAG=$EVT_FRAG'{"name":"'$FN'","hashMap":{"fileFormatType":"org.3GPP.32.435#measCollec","location":"'$URL'","fileFormatVersion":"V10","compression":"gzip"}}'
+ done
+
+ EVT='{"event":{"commonEventHeader":{"sequence":0,"eventName":"Noti_RnNode-Ericsson_FileReady","sourceName":"'$NO'","lastEpochMicrosec":151983,"startEpochMicrosec":15198378,"timeZoneOffset":"UTC+05:00","changeIdentifier":"PM_MEAS_FILES"},"notificationFields":{"notificationFieldsVersion":"notificationFieldsVersion","changeType":"FileReady","changeIdentifier":"PM_MEAS_FILES","arrayOfNamedHashMap":['$EVT_FRAG']}}}'
+ echo $EVT >> .out.json
+
+ fi
+
+ let CNTR=CNTR+1
+ let TCNTR=TCNTR+1
+ if [ $CNTR -ge $BATCHSIZE ]; then
+ echo "Pushing batch of $CNTR events"
+ cat .out.json | kafka-console-producer --topic file-ready --broker-list kafka-1:29092
+ rm .out.json
+ touch .out.json
+ CNTR=0
+ fi
+ done
+
+done
+if [ $CNTR -ne 0 ]; then
+ echo "Pushing batch of $CNTR events"
+ cat .out.json | kafka-console-producer --topic file-ready --broker-list kafka-1:29092
+fi
+
+echo "Pushed $TCNTR events"
diff --git a/pm-file-flow-demo/docker-proj/scripts/list-topics.sh b/pm-file-flow-demo/docker-proj/scripts/list-topics.sh
new file mode 100755
index 0000000..a4d949b
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/scripts/list-topics.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+docker exec -it client \
+ bash -c 'kafka-topics --list --bootstrap-server kafka-1:29092'
diff --git a/pm-file-flow-demo/docker-proj/scripts/populate-ne-files.sh b/pm-file-flow-demo/docker-proj/scripts/populate-ne-files.sh
new file mode 100755
index 0000000..2250615
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/scripts/populate-ne-files.sh
@@ -0,0 +1,75 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+SD=$(dirname -- "$0")
+echo "script-home: "$SD
+cd $SD
+CWD=$PWD
+
+NODE_COUNT=$1
+FILE_COUNT=$2
+NODE_NAME_BASE=$3
+FILE_EXT=$4
+
+print_usage() {
+ echo "Usage: populate-ne-files.sh <node-count> <file-count> <node-name-base> <file-extension>"
+ exit 1
+}
+if [ $# -ne 4 ]; then
+ print_usage
+fi
+
+create_files() {
+ cp ../pm-files/pm.$FILE_EXT $DIR/pm.$FILE_EXT
+ if [ $? -ne 0 ]; then
+ echo "Copy base file: pm.$FILE_EXT to $DIR failed"
+ echo "Exiting..."
+ exit 1
+ fi
+
+ cd $DIR
+ CNT=0
+ for (( i=0; i<$NODE_COUNT; i++ )); do
+ for (( j=0; j<$FILE_COUNT; j++ )); do
+ ERR=$(ln -s pm.$FILE_EXT A20000626.2315+0200-2330+0200_$NODE_NAME_BASE-$i-$j.$FILE_EXT 2>&1)
+ if [ $? -ne 0 ]; then
+ if [[ "$ERR" != *"File exists"* ]]; then
+ echo "Cannot create symbolic link in $DIR, err: $ERR"
+ echo "Exiting..."
+ exit 1
+ fi
+ fi
+ let CNT=CNT+1
+ done
+ done
+ echo " Created $CNT symlinks to pm.$FILE_EXT"
+}
+
+
+echo "Creating files for download"
+cd $CWD
+DIR="../ne-files"
+if [ ! -d "$DIR" ]; then
+ echo "Dir $DIR for ne-files not foud"
+ exit 1
+fi
+create_files
+
+echo "DONE"
+
diff --git a/pm-file-flow-demo/docker-proj/scripts/push-evt-to-topic.sh b/pm-file-flow-demo/docker-proj/scripts/push-evt-to-topic.sh
new file mode 100755
index 0000000..22baae5
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/scripts/push-evt-to-topic.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+print_usage() {
+ echo "Usage: push-evt-to-topic.sh <topic> <num-msgs> key|nokey <file-name>"
+ exit 1
+}
+
+if [ $# -ne 4 ]; then
+ print_usage
+fi
+
+retcode=0
+
+if [ $3 == "key" ]; then
+ docker exec -it client \
+ bash -c ' for (( i=0; i<'$2'; i++ )); do echo "a,{\"filename\":\"'$4'\"}"; done | kafka-console-producer --topic '$1' --broker-list kafka-1:29092 --property parse.key=true --property key.separator=,'
+ retcode=$?
+elif [ $3 == "nokey" ]; then
+ docker exec -it client \
+ bash -c ' for (( i=0; i<'$2'; i++ )); do echo "{\"filename\":\"'$4'\"}"; done | kafka-console-producer --topic '$1' --broker-list kafka-1:29092'
+ retcode=$?
+else
+ print_usage
+fi
+
+if [ $retcode -eq 0 ]; then
+ echo "Pushed $2 msgs to $1 using $3"
+else
+ echo "FAILED to push $2 msgs to $1 using $3"
+fi
diff --git a/pm-file-flow-demo/docker-proj/scripts/push-evt-to-topic2.sh b/pm-file-flow-demo/docker-proj/scripts/push-evt-to-topic2.sh
new file mode 100755
index 0000000..5a215ff
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/scripts/push-evt-to-topic2.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+print_usage() {
+ echo "Usage: push-evt-to-topic2.sh <topic> <num-msgs>" ## key|nokey <file-name>"
+ exit 1
+}
+
+if [ $# -ne 2 ]; then
+ print_usage
+fi
+
+
+D='{\"productName\":\"\",\"vendorName\":\"\",\"lastEpochMicrosec\":1650309300000,\"sourceName\":\"\",\"startEpochMicrosec\":1650308400000,\"timeZoneOffset\":\"\",\"location\":\"\",\"compression\":\"\",\"fileFormatType\":\"\",\"fileFormatVersion\":\"\",\"name\":\"pm.xml.gz\",\"changeIdentifier\":\"PM_MEAS_FILES\",\"internalLocation\":\"internalLocation\"}'
+docker exec -it client \
+ bash -c ' for (( i=0; i<'$2'; i++ )) ; do echo "'$D'" ; done | kafka-console-producer --topic '$1' --broker-list kafka-1:29092'
+
+
+
diff --git a/pm-file-flow-demo/docker-proj/scripts/push-to-collected-file-topic.sh b/pm-file-flow-demo/docker-proj/scripts/push-to-collected-file-topic.sh
new file mode 100755
index 0000000..f3db76c
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/scripts/push-to-collected-file-topic.sh
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+SD=$(dirname -- "$0")
+echo "${0##*/} script-home: "$SD
+cd $SD
+CWD=$PWD
+
+NODE_COUNT=$1
+EVT_COUNT=$2
+NODE_NAME_BASE=$3
+FILE_EXT=$4
+DIR=$5
+
+print_usage() {
+ echo "Usage: push-to-collected-file-topic.sh <node-count> <num-of-events> <node-name-base> <file-extension> dir|no-dir"
+ exit 1
+}
+
+if [ $# -ne 5 ]; then
+ print_usage
+fi
+
+if [ $DIR == "dir" ]; then
+ :
+elif [ $DIR == "no-dir" ]; then
+ :
+else
+ print_usage
+fi
+
+
+chmod +x kafka-client-send-collected-file.sh
+docker cp kafka-client-send-collected-file.sh client:/home/appuser
+
+docker exec -it client bash -c './kafka-client-send-collected-file.sh '$NODE_COUNT' '$EVT_COUNT' '$NODE_NAME_BASE' '$FILE_EXT' '$DIR
+
+echo done
diff --git a/pm-file-flow-demo/docker-proj/scripts/push-to-file-ready-topic.sh b/pm-file-flow-demo/docker-proj/scripts/push-to-file-ready-topic.sh
new file mode 100755
index 0000000..3e19071
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/scripts/push-to-file-ready-topic.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+SD=$(dirname -- "$0")
+echo "${0##*/} script-home: "$SD
+cd $SD
+CWD=$PWD
+
+
+NODE_COUNT=$1
+EVT_COUNT=$2
+NODE_NAME_BASE=$3
+FILE_EXT=$4
+TYPE=$5
+SRV_COUNT=$6
+HIST=$7
+
+print_usage() {
+ echo "Usage: push-to-file-ready-topic.sh <node-count> <num-of-events> <node-name-base> <file-extension> sftp|ftpes|https <num-servers> [hist]"
+ exit 1
+}
+if [ $# -lt 6 ] || [ $# -gt 7 ]; then
+ print_usage
+fi
+
+if [ $TYPE == "sftp" ]; then
+ :
+elif [ $TYPE == "ftpes" ]; then
+ :
+elif [ $TYPE == "https" ]; then
+ :
+else
+ print_usage
+fi
+
+if [ ! -z "$HIST" ]; then
+ if [ $HIST != "hist" ]; then
+ print_usage
+ fi
+fi
+
+chmod +x kafka-client-send-file-ready.sh
+docker cp kafka-client-send-file-ready.sh client:/home/appuser
+
+docker exec -it client bash -c './kafka-client-send-file-ready.sh '$NODE_COUNT' '$EVT_COUNT' '$NODE_NAME_BASE' '$FILE_EXT' '$TYPE' '$SRV_COUNT' '$HIST
+
+echo done
+
diff --git a/pm-file-flow-demo/docker-proj/scripts/push-to-ves-collector.sh b/pm-file-flow-demo/docker-proj/scripts/push-to-ves-collector.sh
new file mode 100755
index 0000000..a21baa6
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/scripts/push-to-ves-collector.sh
@@ -0,0 +1,177 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+SD=$(dirname -- "$0")
+echo "script-home: "$SD
+cd $SD
+CWD=$PWD
+
+NODE_COUNT=$1
+EVT_COUNT=$2
+NODE_NAME_BASE=$3
+FILE_EXT=$4
+TYPE=$5
+SRV_COUNT=$6
+HIST=$7
+
+FTPES_PORT=2021
+SFTP_PORT=2022
+HTTPS_PORT=443
+
+print_usage() {
+ echo "Usage: push-to-ves-collector.sh <node-count> <num-of-events> <node-name-base> <file-extension> sftp|ftpes|https <num-servers> [hist]"
+ exit 1
+}
+echo $@
+if [ $# -lt 6 ] || [ $# -gt 7 ]; then
+ print_usage
+fi
+
+if [ $TYPE == "sftp" ]; then
+ :
+elif [ $TYPE == "ftpes" ]; then
+ :
+elif [ $TYPE == "https" ]; then
+ :
+else
+ print_usage
+fi
+HIST_LEN=0
+if [ ! -z "$HIST" ]; then
+ if [ $HIST != "hist" ]; then
+ print_usage
+ fi
+ HIST_LEN=96
+fi
+
+rm .out.json
+touch .out.json
+
+BEGINTIME=1665146700
+CURTIME=$BEGINTIME
+
+for (( i=0; i<$EVT_COUNT; i++)); do
+
+ if [ "$HIST" == "" ]; then
+ echo "EVENT BATCH: $i of $EVT_COUNT events for $NODE_COUNT NODES - 1 FILE PER EVENT"
+ else
+ echo "EVENT BATCH: $i of $EVT_COUNT events for $NODE_COUNT NODES - $HIST_LEN FILES PER EVENT"
+ fi
+ echo '{"eventList": [' > .out.json
+ first=0
+
+ arch="$(uname -s)"
+ if [[ $arch == "Darwin"* ]]; then
+ ST=$(date -r $CURTIME +'%Y%m%d.%H%M')
+ let CURTIME=CURTIME+900
+ ET=$(date -r $CURTIME +'%H%M')
+ else
+ ST=$(date -d @$CURTIME +'%Y%m%d.%H%M')
+ let CURTIME=CURTIME+900
+ ET=$(date -d @$CURTIME +'%H%M')
+ fi
+
+ for (( j=0; j<$NODE_COUNT; j++)); do
+
+ if [ "$HIST" == "" ]; then
+ NO="$NODE_NAME_BASE-$j"
+ #FN="A20000626.2315+0200-2330+0200_$NO-$i.$FILE_EXT"
+ FN="A$ST+0200-$ET+0200_$NO-$i.$FILE_EXT"
+ let SRV_ID=$j%$SRV_COUNT
+ let SRV_ID=SRV_ID+1
+ #echo "NODE "$NO
+ echo "FILENAME "$FN
+ if [ $TYPE == "sftp" ]; then
+ SRV="ftp-sftp-$SRV_ID"
+ echo "FTP SERVER "$SRV
+ URL="sftp://onap:pano@$SRV:$SFTP_PORT/$FN"
+ elif [ $TYPE == "ftpes" ]; then
+ SRV="ftp-ftpes-$SRV_ID"
+ echo "FTP SERVER "$SRV
+ URL="ftpes://onap:pano@$SRV:$FTPES_PORT/$FN"
+ elif [ $TYPE == "https" ]; then
+ SRV="pm-https-server-$SRV_ID"
+ #echo "HTTP SERVER "$SRV
+ URL="https://$SRV:$HTTPS_PORT/files/$FN"
+ fi
+ EVT='{"commonEventHeader":{"startEpochMicrosec":15198378,"eventId":"FileReady_1797490e-10ae-4d48-9ea7-3d7d790b25e1","timeZoneOffset":"UTC+05.30","internalHeaderFields":{"collectorTimeStamp":"Wed,0907202211:56:02GMT"},"priority":"Normal","version":"4.0.1","reportingEntityName":"'$NO'","sequence":0,"domain":"notification","lastEpochMicrosec":151983,"eventName":"Notification_gnb-Ericsson_FileReady","vesEventListenerVersion":"7.0.1","sourceName":"'$NO'"},"notificationFields":{"notificationFieldsVersion":"2.0","changeType":"FileReady","changeIdentifier":"PM_MEAS_FILES","arrayOfNamedHashMap":[{"name":"'$FN'","hashMap":{"location":"'$URL'","fileFormatType":"org.3GPP.32.435#measCollec","fileFormatVersion":"V10","compression":"gzip"}}]}}'
+ if [ $first -ne 0 ]; then
+ echo "," >> .out.json
+ fi
+ first=1
+ echo "$EVT" >> .out.json
+ else
+ NO="$NODE_NAME_BASE-$j"
+
+ let SRV_ID=$j%$SRV_COUNT
+ let SRV_ID=SRV_ID+1
+ #echo "NODE "$NO
+
+ EVT_FRAG=""
+ for(( k=95; k>=0; k-- )); do
+ let FID=$i-k
+ #FN="A20000626.2315+0200-2330+0200_$NO-$FID.$FILE_EXT"
+ CURTIME=$(($BEGINTIME+$FID*900))
+ if [[ $arch == "Darwin"* ]]; then
+ ST=$(date -r $CURTIME +'%Y%m%d.%H%M')
+ let CURTIME=CURTIME+900
+ ET=$(date -r $CURTIME +'%H%M')
+ else
+ ST=$(date -d @$CURTIME +'%Y%m%d.%H%M')
+ let CURTIME=CURTIME+900
+ ET=$(date -d @$CURTIME +'%H%M')
+ fi
+ if [ $FID -lt 0 ]; then
+ FN="NONEXISTING_$NO-$FID.$FILE_EXT"
+ else
+ #FN="A20000626.2315+0200-2330+0200_$NO-$FID.$FILE_EXT"
+ FN="A$ST+0200-$ET+0200_$NO-$FID.$FILE_EXT"
+ fi
+ echo "FILENAME "$FN
+ if [ $TYPE == "sftp" ]; then
+ SRV="ftp-sftp-$SRV_ID"
+ #echo "FTP SERVER "$SRV
+ URL="sftp://onap:pano@$SRV:$SFTP_PORT/$FN"
+ elif [ $TYPE == "ftpes" ]; then
+ SRV="ftp-ftpes-$SRV_ID"
+ #echo "FTP SERVER "$SRV
+ URL="ftpes://onap:pano@$SRV:$FTPES_PORT/$FN"
+ elif [ $TYPE == "https" ]; then
+ SRV="pm-https-server-$SRV_ID"
+ #echo "HTTP SERVER "$SRV
+ URL="https://$SRV:$HTTPS_PORT/files/$FN"
+ fi
+ if [ "$EVT_FRAG" != "" ]; then
+ EVT_FRAG=$EVT_FRAG","
+ fi
+ EVT_FRAG=$EVT_FRAG'{"name":"'$FN'","hashMap":{"location":"'$URL'","fileFormatType":"org.3GPP.32.435#measCollec","fileFormatVersion":"V10","compression":"gzip"}}'
+ done
+ EVT='{"commonEventHeader":{"startEpochMicrosec":15198378,"eventId":"FileReady_1797490e-10ae-4d48-9ea7-3d7d790b25e1","timeZoneOffset":"UTC+05.30","internalHeaderFields":{"collectorTimeStamp":"Wed,0907202211:56:02GMT"},"priority":"Normal","version":"4.0.1","reportingEntityName":"'$NO'","sequence":0,"domain":"notification","lastEpochMicrosec":151983,"eventName":"Notification_gnb-Ericsson_FileReady","vesEventListenerVersion":"7.0.1","sourceName":"'$NO'"},"notificationFields":{"notificationFieldsVersion":"2.0","changeType":"FileReady","changeIdentifier":"PM_MEAS_FILES","arrayOfNamedHashMap":['$EVT_FRAG']}}'
+ if [ $first -ne 0 ]; then
+ echo "," >> .out.json
+ fi
+ first=1
+ echo $EVT >> .out.json
+ fi
+ done
+ echo ']}' >> .out.json
+ RES=$(curl -s -X POST 'localhost:8080/eventListener/v7/eventBatch' --header 'Content-Type: application/json' --data-binary @.out.json)
+ echo $RES
+done
+
diff --git a/pm-file-flow-demo/docker-proj/scripts/read-from-topic.sh b/pm-file-flow-demo/docker-proj/scripts/read-from-topic.sh
new file mode 100755
index 0000000..bd9ceab
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/scripts/read-from-topic.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+print_usage() {
+ echo "Usage: read-from-topic.sh <topic-name> [timeout-milliseconds]"
+ exit 1
+}
+TOPIC=$1
+TO=15000
+if [ $# -eq 1 ]; then
+ :
+elif [ $# -eq 2 ]; then
+ TO=$2
+else
+ print_usage
+fi
+
+echo "Reading msgs on topic $TOPIC from beginning, $TO ms timeout"
+
+docker exec -it client \
+ bash -c 'kafka-console-consumer --timeout-ms '$TO' --topic '$TOPIC' --from-beginning --bootstrap-server kafka-1:29092'
+
+echo "Read msgs on topic $TOPIC from beginning, $TO ms timeout"
\ No newline at end of file
diff --git a/pm-file-flow-demo/docker-proj/setup-phase1.sh b/pm-file-flow-demo/docker-proj/setup-phase1.sh
new file mode 100755
index 0000000..7211862
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/setup-phase1.sh
@@ -0,0 +1,59 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+echo "Cleaning previously started containers..."
+
+./docker-tear-down.sh
+
+echo "Docker pruning"
+#echo "Docker pruning disabled"
+docker system prune -f
+docker volume prune -f
+
+echo "Creating dir for minio, kafka and zookeeper volume mappings"
+echo " ....may take time if cleaning is needed"
+
+mkdir -p /tmp/kafka-test
+
+mkdir -p /tmp/kafka-test/z1-log
+mkdir -p /tmp/kafka-test/z1-data
+
+mkdir -p /tmp/kafka-test/k1-data
+mkdir -p /tmp/kafka-test/k2-data
+mkdir -p /tmp/kafka-test/k3-data
+
+rm -rf /tmp/kafka-test/z1-log/*
+rm -rf /tmp/kafka-test/z1-data/*
+
+rm -rf /tmp/kafka-test/k1-data/*
+rm -rf /tmp/kafka-test/k2-data/*
+rm -rf /tmp/kafka-test/k3-data/*
+
+mkdir -p /tmp/minio-test
+mkdir -p /tmp/minio-test/0
+rm -rf /tmp/minio-test/0/*
+
+NW="nonrtric-docker-net"
+echo "Creating docker network"
+docker network inspect $NW 2> /dev/null 1> /dev/null
+if [ $? -ne 0 ]; then
+ docker network create $NW
+else
+ echo " Network: $NW exits"
+fi
diff --git a/pm-file-flow-demo/docker-proj/setup-phase2.sh b/pm-file-flow-demo/docker-proj/setup-phase2.sh
new file mode 100755
index 0000000..9dc60d6
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/setup-phase2.sh
@@ -0,0 +1,96 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+print_usage() {
+ echo "Usage: setup-phase2.sh 1|3 file|minio data-mount|no-data-mount"
+ echo "Got: $@"
+ exit 1
+}
+
+if [ $# -ne 3 ]; then
+ print_usage $@
+ exit 1
+fi
+
+NUM=3
+
+if [ $1 == "1" ]; then
+ NUM=1
+elif [ $1 == "3" ]; then
+ NUM=3
+else
+ print_usage $@
+fi
+
+STORAGE_TYPE=$2
+if [ $2 == "file" ]; then
+ :
+elif [ $2 == "minio" ]; then
+ :
+else
+ print_usage $@
+fi
+
+if [ $3 == "data-mount" ]; then
+ :
+elif [ $3 == "no-data-mount" ]; then
+ :
+else
+ print_usage $@
+fi
+
+echo "Starting containers for: kafka, zookeeper, kafka client, kcat, callback, ics"
+
+if [ $NUM -eq 1 ]; then
+ envsubst < docker-compose-k1.yaml > docker-compose_gen-1.yaml
+else
+ envsubst < docker-compose-k3.yaml > docker-compose_gen-1.yaml
+fi
+
+if [ $3 == "data-mount" ]; then
+ cp docker-compose_gen-1.yaml docker-compose_gen.yaml
+else
+ cat docker-compose_gen-1.yaml | sed '/#NO_DATA_VOLUME_MAP_LOCALHOST_START/,/#NO_DATA_VOLUME_MAP_LOCALHOST_STOP/d' > docker-compose_gen.yaml
+fi
+
+docker-compose -p common -f docker-compose_gen.yaml up -d
+
+if [ $STORAGE_TYPE == "minio" ]; then
+ envsubst < docker-compose-minio.yaml > docker-compose-minio_gen-1.yaml
+ if [ $3 == "data-mount" ]; then
+ cp docker-compose-minio_gen-1.yaml docker-compose-minio_gen.yaml
+ else
+ cat docker-compose-minio_gen-1.yaml | sed '/#NO_DATA_VOLUME_MAP_LOCALHOST_START/,/#NO_DATA_VOLUME_MAP_LOCALHOST_STOP/d' > docker-compose-minio_gen.yaml
+ fi
+ docker-compose -p minio -f docker-compose-minio_gen.yaml up -d
+fi
+
+echo "Creating topics: $TOPICS, may take a while ..."
+for t in $TOPICS; do
+ retcode=1
+ rt=43200000
+ echo "Creating topic $t with retention $(($rt/1000)) seconds"
+ while [ $retcode -ne 0 ]; do
+ docker exec -it client \
+ bash -c 'kafka-topics --create --topic '$t' --config retention.ms='$rt' --bootstrap-server kafka-1:29092'
+ retcode=$?
+ sleep 1
+ done
+done
+
diff --git a/pm-file-flow-demo/docker-proj/setup-phase3.sh b/pm-file-flow-demo/docker-proj/setup-phase3.sh
new file mode 100755
index 0000000..6d54a0c
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/setup-phase3.sh
@@ -0,0 +1,302 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+KP_NUM=$(callback_get_num_jobs_kp)
+KPM_NUM=$(callback_get_num_jobs_kpm)
+KPADP_NUM=$(callback_get_num_jobs_kpadp)
+
+KP_JOB_SUFFIX=$(callback_get_job_sufffix_kp)
+KPM_JOB_SUFFIX=$(callback_get_job_sufffix_kpm)
+KPADP_JOB_SUFFIX=$(callback_get_job_sufffix_kpadp)
+
+check_error() {
+ if [ $1 -ne 0 ]; then
+ echo "Failed $2"
+ echo "Exiting..."
+ exit 1
+ fi
+}
+STORAGE_TYPE=$1
+FTP_FLAG=$2
+
+print_usage() {
+ echo "Usage: setup-phase3.sh file|minio no-ftp|ftp"
+ echo "Got: $@"
+ exit 1
+}
+
+if [ $# -ne 2 ]; then
+ print_usage $@
+ exit 1
+fi
+
+if [ $1 == "file" ]; then
+ :
+elif [ $1 == "minio" ]; then
+ :
+else
+ print_usage $@
+fi
+
+if [ $2 == "no-ftp" ]; then
+ :
+elif [ $1 == "frp" ]; then
+ :
+else
+ print_usage $@
+fi
+
+
+echo "Setting up certs and dfc truststore"
+if [ $FTP_FLAG == "ftp" ]; then
+ ./config/ftpes/certs/gen-certs.sh $NUM_FTPES
+ check_error $?
+fi
+
+./config/https/certs/gen-certs.sh $NUM_HTTP
+check_error $?
+
+echo "Installing certs and dfc truststore"
+
+if [ $FTP_FLAG == "ftp" ]; then
+ RSTS=""
+ for (( i=1; i<=$NUM_FTPES; i++ )); do
+ SRV="ftp-ftpes-$i"
+ echo "Adding cert to $SRV"
+ docker cp ./config/ftpes/certs/ftpes-$i.crt $SRV:/etc/ssl/private/ftp.crt
+ check_error $?
+ docker cp ./config/ftpes/certs/ftpes-$i.key $SRV:/etc/ssl/private/ftp.key
+ check_error $?
+ docker cp ./config/ftpes/certs/ftpesca.crt $SRV:/etc/ssl/private/ftpesca.crt
+ check_error $?
+ RSTS="$RSTS $SRV"
+ done
+ echo "Restarting $RSTS"
+ docker restart $RSTS
+fi
+
+RSTS=""
+for (( i=1; i<=$NUM_HTTP; i++ )); do
+ SRV="pm-https-server-$i"
+ echo "Adding cert to $SRV"
+ docker cp ./config/https/certs/https-$i.crt $SRV:/certs/server.crt
+ check_error $?
+ docker cp ./config/https/certs/https-$i.key $SRV:/certs/server.key
+ check_error $?
+ RSTS="$RSTS $SRV"
+done
+echo "Restarting $RSTS"
+docker restart $RSTS
+
+cwd=$PWD
+for (( i=1; i<=$NUM_DFC; i++ )); do
+ echo "Updating dfc$i truststore"
+ cd $cwd/config/dfc$i
+ cp ../dfc-common/template-truststore.jks truststore.jks
+ check_error $?
+
+ if [ $FTP_FLAG == "ftp" ]; then
+ echo " Adding ftpes ca cert to dfc$i truststore"
+cat <<__EOF__ | keytool -importcert -alias ftpes -file $cwd/config/ftpes/certs/ftpesca.crt -keystore truststore.jks -storetype JKS -storepass $(< ../dfc-common/truststore.pass)
+yes
+__EOF__
+ check_error $?
+ fi
+
+ echo " Adding https ca cert to dfc$i truststore"
+cat <<__EOF__ | keytool -importcert -alias pm-https -file $cwd/config/https/certs/httpsca.crt -keystore truststore.jks -storetype JKS -storepass $(< ../dfc-common/truststore.pass)
+yes
+__EOF__
+ check_error $?
+ echo " Copying truststore to dfc container"
+ docker cp truststore.jks dfc$i:/opt/app/datafile/config/truststore.jks
+ check_error $?
+ docker restart dfc$i
+done
+cd $cwd
+
+
+if [ $FTP_FLAG == "ftp" ]; then
+ echo "Creating users in ftpes servers"
+ for (( i=1; i<=$NUM_FTPES; i++ )); do
+ retcode=1
+ SRV=ftp-ftpes-$i
+ echo " Trying to get token from $SRV"
+ while [ $retcode -ne 0 ]; do
+ PORT=$(docker inspect $SRV | jq -r .[0].NetworkSettings.Ports.\"8080/tcp\"[0].HostPort)
+ RES=$(curl -s -w '%{http_code}' http://admin:admin@localhost:$PORT/api/v2/token)
+ retcode=$?
+ if [ $retcode -eq 0 ]; then
+ status=${RES:${#RES}-3}
+ if [ $status -ne 200 ]; then
+ retcode=1
+ fi
+ fi
+ if [ $retcode -ne 0 ]; then
+ echo "Retrying..."
+ sleep 1
+ fi
+ done
+ RES=${RES:0:${#RES}-3}
+ BEARER=$(echo $RES | jq -r .access_token)
+ echo " Got $SRV token"
+ echo " Trying to create user in $SRV"
+ retcode=1
+ while [ $retcode -ne 0 ]; do
+ RES=$(curl -s -w '%{http_code}' -X POST http://admin:admin@localhost:$PORT/api/v2/users -H "Authorization: Bearer $BEARER" -d'{"username":"onap","password":"pano","home_dir":"/srv/onap","permissions":{"/":["*"]},"status":1}')
+ retcode=$?
+ if [ $retcode -eq 0 ]; then
+ status=${RES:${#RES}-3}
+ if [ $status -ne 201 ]; then
+ retcode=1
+ fi
+ fi
+ if [ $retcode -ne 0 ]; then
+ echo "Retrying..."
+ sleep 1
+ fi
+ done
+ echo " User created in $SRV"
+ done
+
+
+ #https://github.com/drakkan/sftpgo/blob/main/openapi/openapi.yaml
+ echo "Creating users in sftp servers"
+ for (( i=1; i<=$NUM_SFTP; i++ )); do
+ retcode=1
+ SRV=ftp-sftp-$i
+ echo " Trying to get token from $SRV"
+ while [ $retcode -ne 0 ]; do
+ PORT=$(docker inspect $SRV | jq -r .[0].NetworkSettings.Ports.\"8080/tcp\"[0].HostPort)
+ RES=$(curl -s -w '%{http_code}' http://admin:admin@localhost:$PORT/api/v2/token)
+ retcode=$?
+ if [ $retcode -eq 0 ]; then
+ status=${RES:${#RES}-3}
+ if [ $status -ne 200 ]; then
+ retcode=1
+ fi
+ fi
+ if [ $retcode -ne 0 ]; then
+ echo "Retrying..."
+ sleep 1
+ fi
+ done
+ RES=${RES:0:${#RES}-3}
+ BEARER=$(echo $RES | jq -r .access_token)
+ echo " Got $SRV token"
+ echo " Trying to create user in $SRV"
+ retcode=1
+ while [ $retcode -ne 0 ]; do
+ RES=$(curl -s -w '%{http_code}' -X POST http://admin:admin@localhost:$PORT/api/v2/users -H "Authorization: Bearer $BEARER" -d'{"username":"onap","password":"pano","home_dir":"/srv/onap","permissions":{"/":["*"]},"status":1}')
+ retcode=$?
+ if [ $retcode -eq 0 ]; then
+ status=${RES:${#RES}-3}
+ if [ $status -ne 201 ]; then
+ retcode=1
+ fi
+ fi
+ if [ $retcode -ne 0 ]; then
+ echo "Retrying..."
+ sleep 1
+ fi
+ done
+ echo " User created in $SRV"
+ done
+fi
+
+echo "Creating job(s)..."
+for apps in {1..3}; do
+ if [ $apps == 1 ]; then
+ JOB_NUM=$KP_NUM
+ JOB_PRE=$KP_JOB_SUFFIX
+ elif [ $apps == 2 ]; then
+ JOB_NUM=$KPM_NUM
+ JOB_PRE=$KPM_JOB_SUFFIX
+ else
+ JOB_NUM=$KPADP_NUM
+ JOB_PRE=$KPADP_JOB_SUFFIX
+ fi
+ for ((i=1;i<=$JOB_NUM;i++)); do
+
+ rm .job.json 2> /dev/null
+ if [ $apps == 1 ]; then
+ callback_create_job_kp $i $STORAGE_TYPE
+ elif [ $apps == 2 ]; then
+ callback_create_job_kpm $i $STORAGE_TYPE
+ else
+ callback_create_job_kpadp $i $STORAGE_TYPE
+ fi
+
+ JOB=$(<.job.json)
+ echo $JOB
+ retcode=1
+ echo "Creating job-$JOB_PRE"'-'"$i"
+ while [ $retcode -ne 0 ]; do
+ STAT=$(curl -s -X PUT -w '%{http_code}' -H accept:application/json -H Content-Type:application/json http://localhost:8083/data-consumer/v1/info-jobs/job-$JOB_PRE"-"$i --data-binary @.job.json)
+ retcode=$?
+ echo "curl return code: $retcode"
+ if [ $retcode -eq 0 ]; then
+ status=${STAT:${#STAT}-3}
+ echo "http status code: "$status
+ if [ "$status" == "200" ]; then
+ echo "Job created ok"
+ elif [ "$status" == "201" ]; then
+ echo "Job created ok"
+ else
+ retcode=1
+ fi
+ fi
+ sleep 1
+ done
+ done
+done
+
+
+echo "Check job status..."
+for apps in {1..3}; do
+ if [ $apps == 1 ]; then
+ JOB_NUM=$KP_NUM
+ JOB_PRE=$KP_JOB_SUFFIX
+ elif [ $apps == 2 ]; then
+ JOB_NUM=$KPM_NUM
+ JOB_PRE=$KPM_JOB_SUFFIX
+ else
+ JOB_NUM=$KPADP_NUM
+ JOB_PRE=$KPADP_JOB_SUFFIX
+ fi
+ for ((i=1;i<=$JOB_NUM;i++)); do
+ retcode=1
+ echo "job-$JOB_PRE"'-'"$i status?"
+ while [ $retcode -ne 0 ]; do
+ STAT=$(curl -s http://localhost:8083/data-consumer/v1/info-jobs/job-$JOB_PRE"-"$i/status)
+ retcode=$?
+ if [ $retcode -eq 0 ]; then
+ if [[ "$STAT" != '{"info_job_status":"ENABLED","producers":['* ]]; then
+ retcode=1
+ echo "Not expected status (retrying): $STAT"
+ else
+ echo $STAT
+ echo " job-$JOB_PRE"'-'"$i status ok"
+ fi
+ fi
+ sleep 1
+ done
+ done
+done
+
diff --git a/pm-file-flow-demo/docker-proj/shared-volume/dummy.txt b/pm-file-flow-demo/docker-proj/shared-volume/dummy.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/shared-volume/dummy.txt
diff --git a/pm-file-flow-demo/docker-proj/x-jobs.sh b/pm-file-flow-demo/docker-proj/x-jobs.sh
new file mode 100755
index 0000000..51a5045
--- /dev/null
+++ b/pm-file-flow-demo/docker-proj/x-jobs.sh
@@ -0,0 +1,151 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+# Script to set a series of topics and jobs/rapps to simulate a set of "real rapps" reciving filtered PM json
+
+print_args() {
+ echo "args: file|minio topics|no-topics jobs|rapps|none [<num-jobs>]"
+ exit 1
+}
+
+eval_cmd() {
+ RESP=$@
+ status=${RESP:${#RESP}-3}
+ if [ "$status" == "200" ]; then
+ echo " Job created ok"
+ elif [ "$status" == "201" ]; then
+ echo " Job created ok"
+ else
+ echo $@
+ echo "FAILED"
+ exit 1
+ fi
+}
+
+
+if [ "$1" == "file" ]; then
+ :
+elif [ "$1" == "minio" ]; then
+ :
+else
+ print_args
+fi
+
+if [ "$2" == "topics" ]; then
+ :
+elif [ "$2" == "no-topics" ]; then
+ :
+else
+ print_args
+fi
+
+if [ "$3" == "jobs" ]; then
+ :
+elif [ "$3" == "rapps" ]; then
+ :
+elif [ "$3" == "none" ]; then
+ :
+else
+ print_args
+fi
+
+NUM=$4
+if [ -z "$NUM" ]; then
+ print_args
+fi
+
+if [ "$2" == "topics" ]; then
+ echo "Creating $NUM topics"
+fi
+if [ "$3" == "jobs" ]; then
+ echo "Creating $NUM jobs in kafka-producer and $NUM jobs in dmaap-adapter"
+fi
+if [ "$3" == "rapps" ]; then
+ echo "Creating $NUM rapps with individual jobs in kafka-producer and $NUM rapps with individual jobs in dmaap-adapter"
+fi
+
+ID=0
+while [ $ID -lt $NUM ]; do
+
+ if [ "$2" == "topics" ]; then
+ echo " Creating topic: xa-topic-$ID"
+ docker exec -it client bash -c 'kafka-topics --if-not-exists --create --topic xa-topic-'$ID' --bootstrap-server kafka-1:29092'
+ if [ $? -ne 0 ]; then
+ echo "FAILED"
+ exit 1
+ fi
+ echo " Topic ok"
+ fi
+
+ if [ "$3" == "jobs" ]; then
+ JOB='{"info_type_id": "PmData", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {"kafkaOutputTopic":"xa-topic-'$ID'","filterType":"pmdata","filter":{"measTypes":["pmCounterNumber101"]}}}'
+ echo " Creating job: xa-$ID"
+ CMD=$(curl -s -w '%{http_code}' localhost:8083/data-consumer/v1/info-jobs/xa-$ID -X PUT -H 'Content-Type: application/json' --data-binary "$JOB")
+ eval_cmd "$CMD"
+ echo " Job ok"
+ fi
+
+ if [ "$3" == "rapps" ]; then
+ docker run -d -l "dmaap_test=yes" --name pm-rapp-kpadp-$ID --network nonrtric-docker-net -e RAPPID=$ID -e KAFKA_SERVER=kafka-1:29092 -e TOPIC=xa-topic-$ID -e ICS=ics:8083 -e JOBTYPE=PmData pm-rapp:latest
+ if [ $? -ne 0 ]; then
+ echo "FAILED"
+ exit 1
+ fi
+ echo " Rapp ok"
+ fi
+
+ if [ "$2" == "topics" ]; then
+ echo " Creating topic: xp-topic-$ID"
+ docker exec -it client bash -c 'kafka-topics --if-not-exists --create --topic xp-topic-'$ID' --bootstrap-server kafka-1:29092'
+ if [ $? -ne 0 ]; then
+ echo "FAILED"
+ exit 1
+ fi
+ echo " Topic ok"
+ fi
+
+ if [ "$3" == "jobs" ]; then
+ if [ $1 == "file" ]; then
+ JOB='{"info_type_id": "json-file-data", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {"kafkaOutputTopic":"xp-topic-'$ID'","filterType":"pmdata","filter":{"measTypes":["pmCounterNumber101"]}}}'
+ else
+ JOB='{"info_type_id": "json-file-data-from-filestore", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {"kafkaOutputTopic":"xp-topic-'$ID'","filterType":"pmdata","filter":{"measTypes":["pmCounterNumber101"]}}}'
+ fi
+ echo " Creating job: xp-$ID"
+ CMD=$(curl -s -w '%{http_code}' localhost:8083/data-consumer/v1/info-jobs/xp-$ID -X PUT -H 'Content-Type: application/json' --data-binary "$JOB")
+ eval_cmd "$CMD"
+ echo " Job ok"
+ fi
+
+ if [ "$3" == "rapps" ]; then
+ if [ $1 == "file" ]; then
+ docker run -d -l "dmaap_test=yes" --name pm-rapp-kp-$ID --network nonrtric-docker-net -e RAPPID=$ID -e KAFKA_SERVER=kafka-1:29092 -e TOPIC=xp-topic-$ID -e ICS=ics:8083 -e JOBTYPE=json-file-data pm-rapp:latest
+ else
+ docker run -d -l "dmaap_test=yes" --name pm-rapp-kp-$ID --network nonrtric-docker-net -e RAPPID=$ID -e KAFKA_SERVER=kafka-1:29092 -e TOPIC=xp-topic-$ID -e ICS=ics:8083 -e JOBTYPE=json-file-data-from-filestore pm-rapp:latest
+ fi
+ if [ $? -ne 0 ]; then
+ echo "FAILED"
+ exit 1
+ fi
+ echo " Rapp ok"
+ fi
+ let ID=ID+1
+
+done
+
+echo "DONE"
\ No newline at end of file
diff --git a/pm-file-flow-demo/https-server/Dockerfile b/pm-file-flow-demo/https-server/Dockerfile
new file mode 100644
index 0000000..1a7796c
--- /dev/null
+++ b/pm-file-flow-demo/https-server/Dockerfile
@@ -0,0 +1,37 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+FROM golang:1.19-bullseye AS build
+WORKDIR /app
+COPY go.mod .
+COPY go.sum .
+RUN go mod download
+COPY main.go .
+RUN go build -o /pm-https-server
+
+#Replaced distroless image with ubuntu for debug purposes
+#FROM gcr.io/distroless/base-debian11
+FROM ubuntu
+WORKDIR /
+## Copy from "build" stage
+COPY --from=build /pm-https-server .
+COPY certs/server.key /certs/server.key
+COPY certs/server.crt /certs/server.crt
+
+##Uncomment this when using distroless image
+#USER nonroot:nonroot
+ENTRYPOINT ["/pm-https-server"]
diff --git a/pm-file-flow-demo/https-server/build.sh b/pm-file-flow-demo/https-server/build.sh
new file mode 100755
index 0000000..4b24a59
--- /dev/null
+++ b/pm-file-flow-demo/https-server/build.sh
@@ -0,0 +1,81 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+#Build image from Dockerfile with/without custom image tag
+#Optionally push to external docker hub repo
+
+print_usage() {
+ echo "Usage: build.sh no-push|bm|<docker-hub-repo-name> [<image-tag>]"
+ exit 1
+}
+
+if [ $# -ne 1 ] && [ $# -ne 2 ]; then
+ print_usage
+fi
+
+IMAGE_NAME="pm-https-server"
+IMAGE_TAG="latest"
+REPO=""
+if [ $1 == "no-push" ]; then
+ echo "Only local image build"
+elif [ $1 == "bm" ]; then
+ REPO="bjornmagnussonest"
+ echo "Attempt to push built image to: "$REPO
+else
+ REPO=$1
+ echo "Attempt to push built image to: "$REPO
+fi
+
+if [ "$2" != "" ]; then
+ IMAGE_TAG=$2
+fi
+ echo "Setting image tag to: "$IMAGE_TAG
+
+IMAGE=$IMAGE_NAME:$IMAGE_TAG
+echo "Building image $IMAGE"
+docker build -t $IMAGE_NAME:$IMAGE_TAG .
+if [ $? -ne 0 ]; then
+ echo "BUILD FAILED"
+ exit 1
+fi
+echo "BUILD OK"
+
+if [ "$REPO" != "" ]; then
+ echo "Tagging image"
+ NEW_IMAGE=$REPO/$IMAGE_NAME:$IMAGE_TAG
+ docker tag $IMAGE $NEW_IMAGE
+ if [ $? -ne 0 ]; then
+ echo "RE-TAGGING FAILED"
+ exit 1
+ fi
+ echo "RE-TAG OK"
+
+ echo "Pushing image $NEW_IMAGE"
+ docker push $NEW_IMAGE
+ if [ $? -ne 0 ]; then
+ echo "PUSHED FAILED"
+ echo " Perhaps not logged into docker-hub repo $REPO?"
+ exit 1
+ fi
+ IMAGE=$NEW_IMAGE
+ echo "PUSH OK"
+fi
+
+echo "IMAGE OK: $IMAGE"
+echo "DONE"
diff --git a/pm-file-flow-demo/https-server/certs/server.crt b/pm-file-flow-demo/https-server/certs/server.crt
new file mode 100644
index 0000000..3fec650
--- /dev/null
+++ b/pm-file-flow-demo/https-server/certs/server.crt
@@ -0,0 +1,10 @@
+-----BEGIN CERTIFICATE-----
+MIIBYTCB6QIJAN2mIVs0HwRDMAoGCCqGSM49BAMCMBsxCzAJBgNVBAYTAlNFMQww
+CgYDVQQKDANFU1QwHhcNMjIwODMwMTEwNzE5WhcNMzIwODI3MTEwNzE5WjAbMQsw
+CQYDVQQGEwJTRTEMMAoGA1UECgwDRVNUMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE
+dZPhTZJ53kCBHz4qYgAXOuR6DykkJzcgy2isYLZS4KeYsGeOrtM2iWiF5Evqj09u
+q5RUtdcqK17egIlJsculZniRR7l0q8vG93uryWp8dwzFOiDe4tKpl20qqiG0RBha
+MAoGCCqGSM49BAMCA2cAMGQCMEGiwE8PIYVlDVymUfQg6zytCix+I2c65hlxRJhL
+NBuPDu7VmLsW+pjAxhcpmZyrywIwU6AUtH8EFxiwyAggdl7Wime9FveDl5nozWx+
+LGE45/Iq3DXvCTjeG9sAkCMnhcL4
+-----END CERTIFICATE-----
diff --git a/pm-file-flow-demo/https-server/certs/server.key b/pm-file-flow-demo/https-server/certs/server.key
new file mode 100644
index 0000000..92c9da6
--- /dev/null
+++ b/pm-file-flow-demo/https-server/certs/server.key
@@ -0,0 +1,9 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAIg==
+-----END EC PARAMETERS-----
+-----BEGIN EC PRIVATE KEY-----
+MIGkAgEBBDD2457suhRbAIRIyrZ7FuQO0RYYlcrkw4jyj8U8lFddbvgC9iHcCz3U
+BKg9HOegfFugBwYFK4EEACKhZANiAAT6b2dYjagRiQvQwbsyTmXFpYoyHOR/Cmh5
+42ZV4ry/PfZ7FJfcdu9Tc3/9ggU4QaqxdVlMm4jBm/Yio73djdvcLRodRnV50jty
+8u53dRa2LDJTn8DziZ+oMDoLRoDil6I=
+-----END EC PRIVATE KEY-----
diff --git a/pm-file-flow-demo/https-server/gen-cert.sh b/pm-file-flow-demo/https-server/gen-cert.sh
new file mode 100755
index 0000000..5061928
--- /dev/null
+++ b/pm-file-flow-demo/https-server/gen-cert.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+#Generate basic cert and key for web server
+
+openssl genrsa -out certs/server.key 2048
+openssl ecparam -genkey -name secp384r1 -out certs/server.key
+openssl req -new -x509 -sha256 -key certs/server.key -out certs/server.crt -days 3650
diff --git a/pm-file-flow-demo/https-server/go.mod b/pm-file-flow-demo/https-server/go.mod
new file mode 100644
index 0000000..a729797
--- /dev/null
+++ b/pm-file-flow-demo/https-server/go.mod
@@ -0,0 +1,13 @@
+module main
+
+go 1.19
+
+require github.com/gorilla/mux v1.8.0
+
+require github.com/sirupsen/logrus v1.9.0
+
+require (
+ github.com/stretchr/testify v1.7.1 // indirect
+ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
+ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
+)
diff --git a/pm-file-flow-demo/https-server/go.sum b/pm-file-flow-demo/https-server/go.sum
new file mode 100644
index 0000000..d960876
--- /dev/null
+++ b/pm-file-flow-demo/https-server/go.sum
@@ -0,0 +1,19 @@
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
+github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
+github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/pm-file-flow-demo/https-server/main.go b/pm-file-flow-demo/https-server/main.go
new file mode 100644
index 0000000..7ba9b79
--- /dev/null
+++ b/pm-file-flow-demo/https-server/main.go
@@ -0,0 +1,109 @@
+// ============LICENSE_START===============================================
+// Copyright (C) 2022 Nordix Foundation. All rights reserved.
+// ========================================================================
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ============LICENSE_END=================================================
+//
+
+package main
+
+import (
+ "net/http"
+ "os"
+ "runtime"
+ "strconv"
+ "strings"
+ "time"
+
+ log "github.com/sirupsen/logrus"
+
+ "github.com/gorilla/mux"
+
+ "net/http/pprof"
+)
+
+//== Constants ==//
+
+const https_port = 443
+
+const shared_files = "/files"
+
+var always_return_file = os.Getenv("ALWAYS_RETURN")
+
+// get file
+func files(w http.ResponseWriter, req *http.Request) {
+ start := time.Now()
+ if req.Method != http.MethodGet {
+ w.WriteHeader(http.StatusMethodNotAllowed)
+ return
+ }
+
+ vars := mux.Vars(req)
+
+ if id, ok := vars["fileid"]; ok {
+ if strings.HasPrefix(id, "NONEXISTING") {
+ w.WriteHeader(http.StatusNotFound)
+ }
+ fn := shared_files + "/" + id
+ if always_return_file != "" {
+ fn = always_return_file
+ }
+ fileBytes, err := os.ReadFile(fn)
+ if err != nil {
+ w.WriteHeader(http.StatusNotFound)
+ return
+ }
+ w.WriteHeader(http.StatusOK)
+ w.Header().Set("Content-Type", "application/octet-stream")
+ w.Write(fileBytes)
+
+ log.Info("File retrieval : ", fn, " time:", time.Since(start).String())
+ return
+ }
+
+ w.WriteHeader(http.StatusNotFound)
+}
+
+// Simple alive check
+func alive(w http.ResponseWriter, req *http.Request) {
+ //Alive check
+}
+
+// == Main ==//
+func main() {
+
+ log.SetLevel(log.InfoLevel)
+
+ log.Info("Server starting...")
+
+ rtr := mux.NewRouter()
+ rtr.HandleFunc("/files/{fileid}", files)
+ rtr.HandleFunc("/", alive)
+
+ rtr.HandleFunc("/custom_debug_path/profile", pprof.Profile)
+
+ http.Handle("/", rtr)
+
+ // Run https
+ log.Info("Starting https service...")
+ err := http.ListenAndServeTLS(":"+strconv.Itoa(https_port), "certs/server.crt", "certs/server.key", nil)
+ if err != nil {
+ log.Fatal("Cannot setup listener on https: ", err)
+ }
+
+ //Wait until all go routines has exited
+ runtime.Goexit()
+
+ log.Warn("main routine exit")
+ log.Warn("server i stopping...")
+}
diff --git a/pm-file-flow-demo/kafka-pm-producer/Dockerfile b/pm-file-flow-demo/kafka-pm-producer/Dockerfile
new file mode 100644
index 0000000..b02e425
--- /dev/null
+++ b/pm-file-flow-demo/kafka-pm-producer/Dockerfile
@@ -0,0 +1,39 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+FROM golang:1.19-bullseye AS build
+WORKDIR /app
+COPY go.mod .
+COPY go.sum .
+RUN go mod download
+COPY main.go .
+RUN go build -o /kafka-pm-producer
+
+#Replaced distroless image with ubuntu for debug purpose
+#FROM gcr.io/distroless/base-debian11
+FROM ubuntu
+WORKDIR /
+## Copy from "build" stage
+COPY --from=build /kafka-pm-producer .
+COPY server.key /server.key
+COPY server.crt /server.crt
+
+COPY application_configuration.json /application_configuration.json
+
+##Uncomment this when using distroless image
+#USER nonroot:nonroot
+ENTRYPOINT ["/kafka-pm-producer"]
diff --git a/pm-file-flow-demo/kafka-pm-producer/application_configuration.json b/pm-file-flow-demo/kafka-pm-producer/application_configuration.json
new file mode 100644
index 0000000..7bf8018
--- /dev/null
+++ b/pm-file-flow-demo/kafka-pm-producer/application_configuration.json
@@ -0,0 +1,3 @@
+{
+ "types": []
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/kafka-pm-producer/build.sh b/pm-file-flow-demo/kafka-pm-producer/build.sh
new file mode 100755
index 0000000..ffb5bb1
--- /dev/null
+++ b/pm-file-flow-demo/kafka-pm-producer/build.sh
@@ -0,0 +1,81 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+#Build image from Dockerfile with/without custom image tag
+#Optionally push to external docker hub repo
+
+print_usage() {
+ echo "Usage: build.sh no-push|bm|<docker-hub-repo-name> [<image-tag>]"
+ exit 1
+}
+
+if [ $# -ne 1 ] && [ $# -ne 2 ]; then
+ print_usage
+fi
+
+IMAGE_NAME="kafka-pm-producer"
+IMAGE_TAG="latest"
+REPO=""
+if [ $1 == "no-push" ]; then
+ echo "Only local image build"
+elif [ $1 == "bm" ]; then
+ REPO="bjornmagnussonest"
+ echo "Attempt to push built image to: "$REPO
+else
+ REPO=$1
+ echo "Attempt to push built image to: "$REPO
+fi
+
+if [ "$2" != "" ]; then
+ IMAGE_TAG=$2
+fi
+ echo "Setting image tag to: "$IMAGE_TAG
+
+IMAGE=$IMAGE_NAME:$IMAGE_TAG
+echo "Building image $IMAGE"
+docker build -t $IMAGE_NAME:$IMAGE_TAG .
+if [ $? -ne 0 ]; then
+ echo "BUILD FAILED"
+ exit 1
+fi
+echo "BUILD OK"
+
+if [ "$REPO" != "" ]; then
+ echo "Tagging image"
+ NEW_IMAGE=$REPO/$IMAGE_NAME:$IMAGE_TAG
+ docker tag $IMAGE $NEW_IMAGE
+ if [ $? -ne 0 ]; then
+ echo "RE-TAGGING FAILED"
+ exit 1
+ fi
+ echo "RE-TAG OK"
+
+ echo "Pushing image $NEW_IMAGE"
+ docker push $NEW_IMAGE
+ if [ $? -ne 0 ]; then
+ echo "PUSHED FAILED"
+ echo " Perhaps not logged into docker-hub repo $REPO?"
+ exit 1
+ fi
+ IMAGE=$NEW_IMAGE
+ echo "PUSH OK"
+fi
+
+echo "IMAGE OK: $IMAGE"
+echo "DONE"
diff --git a/pm-file-flow-demo/kafka-pm-producer/gen-cert.sh b/pm-file-flow-demo/kafka-pm-producer/gen-cert.sh
new file mode 100755
index 0000000..b2ef105
--- /dev/null
+++ b/pm-file-flow-demo/kafka-pm-producer/gen-cert.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+#Generate basic cert and key for web server
+
+openssl genrsa -out server.key 2048
+openssl ecparam -genkey -name secp384r1 -out server.key
+openssl req -new -x509 -sha256 -key server.key -out server.crt -days 3650
diff --git a/pm-file-flow-demo/kafka-pm-producer/go.mod b/pm-file-flow-demo/kafka-pm-producer/go.mod
new file mode 100644
index 0000000..9a5bf80
--- /dev/null
+++ b/pm-file-flow-demo/kafka-pm-producer/go.mod
@@ -0,0 +1,29 @@
+module main
+
+go 1.19
+
+require (
+ github.com/confluentinc/confluent-kafka-go v1.9.2
+ github.com/gorilla/mux v1.8.0
+)
+
+require github.com/json-iterator/go v1.1.12
+
+require (
+ github.com/dustin/go-humanize v1.0.0 // indirect
+ github.com/google/uuid v1.3.0 // indirect
+ github.com/klauspost/compress v1.15.9 // indirect
+ github.com/klauspost/cpuid/v2 v2.1.0 // indirect
+ github.com/minio/md5-simd v1.1.2 // indirect
+ github.com/minio/minio-go/v7 v7.0.35 // indirect
+ github.com/minio/sha256-simd v1.0.0 // indirect
+ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+ github.com/modern-go/reflect2 v1.0.2 // indirect
+ github.com/rs/xid v1.4.0 // indirect
+ github.com/sirupsen/logrus v1.9.0 // indirect
+ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect
+ golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect
+ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect
+ golang.org/x/text v0.3.7 // indirect
+ gopkg.in/ini.v1 v1.66.6 // indirect
+)
diff --git a/pm-file-flow-demo/kafka-pm-producer/go.sum b/pm-file-flow-demo/kafka-pm-producer/go.sum
new file mode 100644
index 0000000..8fe283c
--- /dev/null
+++ b/pm-file-flow-demo/kafka-pm-producer/go.sum
@@ -0,0 +1,256 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/actgardner/gogen-avro/v10 v10.1.0/go.mod h1:o+ybmVjEa27AAr35FRqU98DJu1fXES56uXniYFv4yDA=
+github.com/actgardner/gogen-avro/v10 v10.2.1/go.mod h1:QUhjeHPchheYmMDni/Nx7VB0RsT/ee8YIgGY/xpEQgQ=
+github.com/actgardner/gogen-avro/v9 v9.1.0/go.mod h1:nyTj6wPqDJoxM3qdnjcLv+EnMDSDFqE0qDpva2QRmKc=
+github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
+github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
+github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
+github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/confluentinc/confluent-kafka-go v1.9.1 h1:L3aW6KvTyrq/+BOMnDm9xJylhAEoAgqhoaJbMPe3GQI=
+github.com/confluentinc/confluent-kafka-go v1.9.1/go.mod h1:ptXNqsuDfYbAE/LBW6pnwWZElUoWxHoV8E43DCrliyo=
+github.com/confluentinc/confluent-kafka-go v1.9.2 h1:gV/GxhMBUb03tFWkN+7kdhg+zf+QUM+wVkI9zwh770Q=
+github.com/confluentinc/confluent-kafka-go v1.9.2/go.mod h1:ptXNqsuDfYbAE/LBW6pnwWZElUoWxHoV8E43DCrliyo=
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
+github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/frankban/quicktest v1.2.2/go.mod h1:Qh/WofXFeiAFII1aEBu529AtJo6Zg2VHscnEsbBnJ20=
+github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o=
+github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y=
+github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.2.1-0.20190312032427-6f77996f0c42/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/pprof v0.0.0-20211008130755-947d60d73cc0/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
+github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
+github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
+github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
+github.com/hamba/avro v1.5.6/go.mod h1:3vNT0RLXXpFm2Tb/5KC71ZRJlOroggq1Rcitb6k4Fr8=
+github.com/heetch/avro v0.3.1/go.mod h1:4xn38Oz/+hiEUTpbVfGVLfvOg0yKLlRP7Q9+gJJILgA=
+github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA=
+github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w=
+github.com/invopop/jsonschema v0.4.0/go.mod h1:O9uiLokuu0+MGFlyiaqtWxwqJm41/+8Nj0lD7A36YH0=
+github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI=
+github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI=
+github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ=
+github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E=
+github.com/jhump/protoreflect v1.12.0/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI=
+github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/juju/qthttptest v0.1.1/go.mod h1:aTlAv8TYaflIiTDIQYzxnl1QdPjAg8Q8qJMErpKy6A4=
+github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
+github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY=
+github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
+github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
+github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
+github.com/klauspost/cpuid/v2 v2.1.0 h1:eyi1Ad2aNJMW95zcSbmGg7Cg6cq3ADwLpMAP96d8rF0=
+github.com/klauspost/cpuid/v2 v2.1.0/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/linkedin/goavro v2.1.0+incompatible/go.mod h1:bBCwI2eGYpUI/4820s67MElg9tdeLbINjLjiM2xZFYM=
+github.com/linkedin/goavro/v2 v2.10.0/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA=
+github.com/linkedin/goavro/v2 v2.10.1/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA=
+github.com/linkedin/goavro/v2 v2.11.1/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA=
+github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
+github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
+github.com/minio/minio-go/v7 v7.0.35 h1:JuPPxWLdxQmNLSaS8AWZnO5HBadeI1xg6FGrEELQEVU=
+github.com/minio/minio-go/v7 v7.0.35/go.mod h1:nCrRzjoSUQh8hgKKtu3Y708OLvRLtuASMg2/nvmbarw=
+github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g=
+github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/nrwiersma/avro-benchmarks v0.0.0-20210913175520-21aec48c8f76/go.mod h1:iKyFMidsk/sVYONJRE372sJuX/QTRPacU7imPqqsu7g=
+github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/rogpeppe/clock v0.0.0-20190514195947-2896927a307a/go.mod h1:4r5QyqhjIWCcK8DO4KMclc5Iknq5qVBAlbYYzAbUScQ=
+github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
+github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
+github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
+github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY=
+github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
+github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0=
+github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
+github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.3.1-0.20190311161405-34c6fa2dc709/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c=
+golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200505041828-1ed23360d12c/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
+google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
+google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+gopkg.in/avro.v0 v0.0.0-20171217001914-a730b5802183/go.mod h1:FvqrFXt+jCsyQibeRv4xxEJBL5iG2DDW5aeJwzDiq4A=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/errgo.v1 v1.0.0/go.mod h1:CxwszS/Xz1C49Ucd2i6Zil5UToP1EmyrFhKaMVbg1mk=
+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/httprequest.v1 v1.2.1/go.mod h1:x2Otw96yda5+8+6ZeWwHIJTFkEHWP/qP8pJOzqEtWPM=
+gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI=
+gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
+gopkg.in/retry.v1 v1.0.3/go.mod h1:FJkXmWiMaAo7xB+xhvDF59zhfjDWyzmyAxiT4dB688g=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/pm-file-flow-demo/kafka-pm-producer/main.go b/pm-file-flow-demo/kafka-pm-producer/main.go
new file mode 100644
index 0000000..a340007
--- /dev/null
+++ b/pm-file-flow-demo/kafka-pm-producer/main.go
@@ -0,0 +1,2145 @@
+// ============LICENSE_START===============================================
+// Copyright (C) 2022 Nordix Foundation. All rights reserved.
+// ========================================================================
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ============LICENSE_END=================================================
+//
+
+package main
+
+import (
+ "bytes"
+ "compress/gzip"
+ "context"
+ "crypto/tls"
+ "encoding/json"
+ "encoding/xml"
+ "errors"
+ "fmt"
+ "io"
+ "net"
+ "os/signal"
+ "reflect"
+ "strings"
+ "sync"
+ "syscall"
+
+ "net/http"
+ "os"
+ "runtime"
+ "strconv"
+ "time"
+
+ "github.com/google/uuid"
+
+ log "github.com/sirupsen/logrus"
+
+ "github.com/gorilla/mux"
+
+ "net/http/pprof"
+
+ "github.com/confluentinc/confluent-kafka-go/kafka"
+ jsoniter "github.com/json-iterator/go"
+ "github.com/minio/minio-go/v7"
+ "github.com/minio/minio-go/v7/pkg/credentials"
+)
+
+//== Constants ==//
+
+const http_port = 80
+const https_port = 443
+const config_file = "application_configuration.json"
+const server_crt = "server.crt"
+const server_key = "server.key"
+
+const producer_name = "kafka-producer"
+
+const registration_delay_short = 5
+const registration_delay_long = 120
+
+const mutexLocked = 1
+
+const (
+ Init AppStates = iota
+ Running
+ Terminating
+)
+
+const reader_queue_length = 100 //Per type job
+const writer_queue_length = 100 //Per info job
+const parallelism_limiter = 100 //For all jobs
+
+//== Types ==//
+
+type AppStates int64
+
+type FilterParameters struct {
+ MeasuredEntityDns []string `json:"measuredEntityDns"`
+ MeasTypes []string `json:"measTypes"`
+ MeasObjClass []string `json:"measObjClass"`
+ MeasObjInstIds []string `json:"measObjInstIds"`
+}
+
+type InfoJobDataType struct {
+ InfoJobData struct {
+ KafkaOutputTopic string `json:"kafkaOutputTopic"`
+ FilterParams FilterParameters `json:"filter"`
+ } `json:"info_job_data"`
+ InfoJobIdentity string `json:"info_job_identity"`
+ InfoTypeIdentity string `json:"info_type_identity"`
+ LastUpdated string `json:"last_updated"`
+ Owner string `json:"owner"`
+ TargetURI string `json:"target_uri"`
+}
+
+// Type for an infojob
+type InfoJobRecord struct {
+ job_info InfoJobDataType
+ output_topic string
+
+ statistics *InfoJobStats
+}
+
+// Type for an infojob
+type TypeJobRecord struct {
+ InfoType string
+ InputTopic string
+ data_in_channel chan *KafkaPayload
+ reader_control chan ReaderControl
+ job_control chan JobControl
+ groupId string
+ clientId string
+
+ statistics *TypeJobStats
+}
+
+// Type for controlling the topic reader
+type ReaderControl struct {
+ command string
+}
+
+// Type for controlling the topic writer
+type WriterControl struct {
+ command string
+}
+
+// Type for controlling the job
+type JobControl struct {
+ command string
+ filter Filter
+}
+
+type KafkaPayload struct {
+ msg *kafka.Message
+ topic string
+ jobid string
+}
+
+type FilterMaps struct {
+ sourceNameMap map[string]bool
+ measObjClassMap map[string]bool
+ measObjInstIdsMap map[string]bool
+ measTypesMap map[string]bool
+}
+
+type Filter struct {
+ JobId string
+ OutputTopic string
+ filter FilterMaps
+}
+
+// Type for info job statistics
+type InfoJobStats struct {
+ out_msg_cnt int
+ out_data_vol int64
+}
+
+// Type for type job statistics
+type TypeJobStats struct {
+ in_msg_cnt int
+ in_data_vol int64
+}
+
+// == API Datatypes ==//
+// Type for supported data types
+type DataType struct {
+ ID string `json:"id"`
+ KafkaInputTopic string `json:"kafkaInputTopic"`
+ InputJobType string `json:inputJobType`
+ InputJobDefinition struct {
+ KafkaOutputTopic string `json:kafkaOutputTopic`
+ } `json:inputJobDefinition`
+
+ ext_job []byte
+ ext_job_created bool
+ ext_job_id string
+}
+
+type DataTypes struct {
+ ProdDataTypes []DataType `json:"types"`
+}
+
+type Minio_buckets struct {
+ Buckets map[string]bool
+}
+
+//== External data types ==//
+
+// // Data type for event xml file download
+type XmlFileEventHeader struct {
+ ProductName string `json:"productName"`
+ VendorName string `json:"vendorName"`
+ Location string `json:"location"`
+ Compression string `json:"compression"`
+ SourceName string `json:"sourceName"`
+ FileFormatType string `json:"fileFormatType"`
+ FileFormatVersion string `json:"fileFormatVersion"`
+ StartEpochMicrosec int64 `json:"startEpochMicrosec"`
+ LastEpochMicrosec int64 `json:"lastEpochMicrosec"`
+ Name string `json:"name"`
+ ChangeIdentifier string `json:"changeIdentifier"`
+ InternalLocation string `json:"internalLocation"`
+ TimeZoneOffset string `json:"timeZoneOffset"`
+ //ObjectStoreBucket string `json:"objectStoreBucket"`
+}
+
+// Data types for input xml file
+type MeasCollecFile struct {
+ XMLName xml.Name `xml:"measCollecFile"`
+ Text string `xml:",chardata"`
+ Xmlns string `xml:"xmlns,attr"`
+ Xsi string `xml:"xsi,attr"`
+ SchemaLocation string `xml:"schemaLocation,attr"`
+ FileHeader struct {
+ Text string `xml:",chardata"`
+ FileFormatVersion string `xml:"fileFormatVersion,attr"`
+ VendorName string `xml:"vendorName,attr"`
+ DnPrefix string `xml:"dnPrefix,attr"`
+ FileSender struct {
+ Text string `xml:",chardata"`
+ LocalDn string `xml:"localDn,attr"`
+ ElementType string `xml:"elementType,attr"`
+ } `xml:"fileSender"`
+ MeasCollec struct {
+ Text string `xml:",chardata"`
+ BeginTime string `xml:"beginTime,attr"`
+ } `xml:"measCollec"`
+ } `xml:"fileHeader"`
+ MeasData struct {
+ Text string `xml:",chardata"`
+ ManagedElement struct {
+ Text string `xml:",chardata"`
+ LocalDn string `xml:"localDn,attr"`
+ SwVersion string `xml:"swVersion,attr"`
+ } `xml:"managedElement"`
+ MeasInfo []struct {
+ Text string `xml:",chardata"`
+ MeasInfoId string `xml:"measInfoId,attr"`
+ Job struct {
+ Text string `xml:",chardata"`
+ JobId string `xml:"jobId,attr"`
+ } `xml:"job"`
+ GranPeriod struct {
+ Text string `xml:",chardata"`
+ Duration string `xml:"duration,attr"`
+ EndTime string `xml:"endTime,attr"`
+ } `xml:"granPeriod"`
+ RepPeriod struct {
+ Text string `xml:",chardata"`
+ Duration string `xml:"duration,attr"`
+ } `xml:"repPeriod"`
+ MeasType []struct {
+ Text string `xml:",chardata"`
+ P string `xml:"p,attr"`
+ } `xml:"measType"`
+ MeasValue []struct {
+ Text string `xml:",chardata"`
+ MeasObjLdn string `xml:"measObjLdn,attr"`
+ R []struct {
+ Text string `xml:",chardata"`
+ P string `xml:"p,attr"`
+ } `xml:"r"`
+ Suspect string `xml:"suspect"`
+ } `xml:"measValue"`
+ } `xml:"measInfo"`
+ } `xml:"measData"`
+ FileFooter struct {
+ Text string `xml:",chardata"`
+ MeasCollec struct {
+ Text string `xml:",chardata"`
+ EndTime string `xml:"endTime,attr"`
+ } `xml:"measCollec"`
+ } `xml:"fileFooter"`
+}
+
+// Data type for json file
+// Splitted in sevreal part to allow add/remove in lists
+type MeasResults struct {
+ P int `json:"p"`
+ SValue string `json:"sValue"`
+}
+
+type MeasValues struct {
+ MeasObjInstID string `json:"measObjInstId"`
+ SuspectFlag string `json:"suspectFlag"`
+ MeasResultsList []MeasResults `json:"measResults"`
+}
+
+type SMeasTypes struct {
+ SMeasType string `json:"sMeasTypesList"`
+}
+
+type MeasInfoList struct {
+ MeasInfoID struct {
+ SMeasInfoID string `json:"sMeasInfoId"`
+ } `json:"measInfoId"`
+ MeasTypes struct {
+ SMeasTypesList []string `json:"sMeasTypesList"`
+ } `json:"measTypes"`
+ MeasValuesList []MeasValues `json:"measValuesList"`
+}
+
+type PMJsobFile struct {
+ Event struct {
+ CommonEventHeader struct {
+ Domain string `json:"domain"`
+ EventID string `json:"eventId"`
+ Sequence int `json:"sequence"`
+ EventName string `json:"eventName"`
+ SourceName string `json:"sourceName"`
+ ReportingEntityName string `json:"reportingEntityName"`
+ Priority string `json:"priority"`
+ StartEpochMicrosec int64 `json:"startEpochMicrosec"`
+ LastEpochMicrosec int64 `json:"lastEpochMicrosec"`
+ Version string `json:"version"`
+ VesEventListenerVersion string `json:"vesEventListenerVersion"`
+ TimeZoneOffset string `json:"timeZoneOffset"`
+ } `json:"commonEventHeader"`
+ Perf3GppFields struct {
+ Perf3GppFieldsVersion string `json:"perf3gppFieldsVersion"`
+ MeasDataCollection struct {
+ GranularityPeriod int `json:"granularityPeriod"`
+ MeasuredEntityUserName string `json:"measuredEntityUserName"`
+ MeasuredEntityDn string `json:"measuredEntityDn"`
+ MeasuredEntitySoftwareVersion string `json:"measuredEntitySoftwareVersion"`
+ SMeasInfoList []MeasInfoList `json:"measInfoList"`
+ } `json:"measDataCollection"`
+ } `json:"perf3gppFields"`
+ } `json:"event"`
+}
+
+// Data type for converted json file message
+type FileDownloadedEvt struct {
+ Filename string `json:"filename"`
+}
+
+//== Variables ==//
+
+var AppState = Init
+
+// Lock for all internal data
+var datalock sync.Mutex
+
+var producer_instance_name string = producer_name
+
+// Keep all info type jobs, key == type id
+var TypeJobs map[string]TypeJobRecord = make(map[string]TypeJobRecord)
+
+// Keep all info jobs, key == job id
+var InfoJobs map[string]InfoJobRecord = make(map[string]InfoJobRecord)
+
+var InfoTypes DataTypes
+
+// Limiter - valid for all jobs
+var jobLimiterChan = make(chan struct{}, parallelism_limiter)
+
+// TODO: Config param?
+var bucket_location = "swe"
+
+// == Env variables ==//
+var bootstrapserver = os.Getenv("KAFKA_SERVER")
+var files_volume = os.Getenv("FILES_VOLUME")
+var ics_server = os.Getenv("ICS")
+var self = os.Getenv("SELF")
+var filestore_user = os.Getenv("FILESTORE_USER")
+var filestore_pwd = os.Getenv("FILESTORE_PWD")
+var filestore_server = os.Getenv("FILESTORE_SERVER")
+
+var data_out_channel = make(chan *KafkaPayload, writer_queue_length)
+var writer_control = make(chan WriterControl, 1)
+
+var minio_bucketlist map[string]Minio_buckets = make(map[string]Minio_buckets)
+
+// == Main ==//
+func main() {
+
+ //log.SetLevel(log.InfoLevel)
+ log.SetLevel(log.TraceLevel)
+
+ log.Info("Server starting...")
+
+ if self == "" {
+ log.Panic("Env SELF not configured")
+ }
+ if bootstrapserver == "" {
+ log.Panic("Env KAFKA_SERVER not set")
+ }
+ if ics_server == "" {
+ log.Panic("Env ICS not set")
+ }
+ if os.Getenv("KP") != "" {
+ producer_instance_name = producer_instance_name + "-" + os.Getenv("KP")
+ }
+
+ rtr := mux.NewRouter()
+ rtr.HandleFunc("/callbacks/job/"+producer_name, create_job)
+ rtr.HandleFunc("/callbacks/job/"+producer_name+"/{job_id}", delete_job)
+ rtr.HandleFunc("/callbacks/supervision/"+producer_name, supervise_job)
+ rtr.HandleFunc("/statistics", statistics)
+ rtr.HandleFunc("/logging/{level}", logging_level)
+ rtr.HandleFunc("/logging", logging_level)
+ rtr.HandleFunc("/", alive)
+
+ //For perf/mem profiling
+ rtr.HandleFunc("/custom_debug_path/profile", pprof.Profile)
+
+ http.Handle("/", rtr)
+
+ http_server := &http.Server{Addr: ":" + strconv.Itoa(http_port), Handler: nil}
+
+ cer, err := tls.LoadX509KeyPair(server_crt, server_key)
+ if err != nil {
+ log.Error("Cannot load key and cert - %v\n", err)
+ return
+ }
+ config := &tls.Config{Certificates: []tls.Certificate{cer}}
+ https_server := &http.Server{Addr: ":" + strconv.Itoa(https_port), TLSConfig: config, Handler: nil}
+
+ //TODO: Make http on/off configurable
+ // Run http
+ go func() {
+ log.Info("Starting http service...")
+ err := http_server.ListenAndServe()
+ if err == http.ErrServerClosed { // graceful shutdown
+ log.Info("http server shutdown...")
+ } else if err != nil {
+ log.Error("http server error: %v\n", err)
+ }
+ }()
+
+ //TODO: Make https on/off configurable
+ // Run https
+ go func() {
+ log.Info("Starting https service...")
+ err := https_server.ListenAndServe()
+ if err == http.ErrServerClosed { // graceful shutdown
+ log.Info("https server shutdown...")
+ } else if err != nil {
+ log.Error("https server error: %v\n", err)
+ }
+ }()
+ check_tcp(strconv.Itoa(http_port))
+ check_tcp(strconv.Itoa(https_port))
+
+ go start_topic_writer(writer_control, data_out_channel)
+
+ //Setup proc for periodic type registration
+ var event_chan = make(chan int) //Channel for stopping the proc
+ go periodic_registration(event_chan)
+
+ //Wait for term/int signal do try to shut down gracefully
+ sigs := make(chan os.Signal, 1)
+ signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
+ go func() {
+ sig := <-sigs
+ fmt.Printf("Received signal %s - application will terminate\n", sig)
+ event_chan <- 0 // Stop periodic registration
+ datalock.Lock()
+ defer datalock.Unlock()
+ AppState = Terminating
+ http_server.Shutdown(context.Background())
+ https_server.Shutdown(context.Background())
+ // Stopping jobs
+ for key, _ := range TypeJobs {
+ log.Info("Stopping type job:", key)
+ for _, dp := range InfoTypes.ProdDataTypes {
+ if key == dp.ID {
+ remove_type_job(dp)
+ }
+ }
+ }
+ }()
+
+ AppState = Running
+
+ //Wait until all go routines has exited
+ runtime.Goexit()
+
+ fmt.Println("main routine exit")
+ fmt.Println("server stopped")
+}
+
+func check_tcp(port string) {
+ log.Info("Checking tcp port: ", port)
+ for true {
+ address := net.JoinHostPort("localhost", port)
+ // 3 second timeout
+ conn, err := net.DialTimeout("tcp", address, 3*time.Second)
+ if err != nil {
+ log.Info("Checking tcp port: ", port, " failed, retrying...")
+ } else {
+ if conn != nil {
+ log.Info("Checking tcp port: ", port, " - OK")
+ _ = conn.Close()
+ return
+ } else {
+ log.Info("Checking tcp port: ", port, " failed, retrying...")
+ }
+ }
+ }
+}
+
+//== Core functions ==//
+
+// Run periodic registration of producers
+func periodic_registration(evtch chan int) {
+ var delay int = registration_delay_short
+ for {
+ select {
+ case msg := <-evtch:
+ if msg == 0 { // Stop thread
+ return
+ }
+ case <-time.After(time.Duration(delay) * time.Second):
+ ok := register_producer()
+ if ok {
+ delay = registration_delay_long
+ } else {
+ if delay < registration_delay_long {
+ delay += registration_delay_short
+ } else {
+ delay = registration_delay_short
+ }
+ }
+ }
+ }
+}
+
+func register_producer() bool {
+
+ log.Info("Registering producer: ", producer_instance_name)
+
+ file, err := os.ReadFile(config_file)
+ if err != nil {
+ log.Error("Cannot read config file: ", config_file)
+ log.Error("Registering producer: ", producer_instance_name, " - failed")
+ return false
+ }
+ data := DataTypes{}
+ err = jsoniter.Unmarshal([]byte(file), &data)
+ if err != nil {
+ log.Error("Cannot parse config file: ", config_file)
+ log.Error("Registering producer: ", producer_instance_name, " - failed")
+ return false
+ }
+ var new_type_names []string
+
+ for i := 0; i < len(data.ProdDataTypes); i++ {
+ t1 := make(map[string]interface{})
+ t2 := make(map[string]interface{})
+
+ t2["schema"] = "http://json-schema.org/draft-07/schema#"
+ t2["title"] = data.ProdDataTypes[i].ID
+ t2["description"] = data.ProdDataTypes[i].ID
+ t2["type"] = "object"
+
+ t1["info_job_data_schema"] = t2
+
+ json, err := json.Marshal(t1)
+ if err != nil {
+ log.Error("Cannot create json for type: ", data.ProdDataTypes[i].ID)
+ log.Error("Registering producer: ", producer_instance_name, " - failed")
+ return false
+ } else {
+ //TODO: http/https should be configurable
+ ok := send_http_request(json, http.MethodPut, "http://"+ics_server+"/data-producer/v1/info-types/"+data.ProdDataTypes[i].ID, true)
+ if !ok {
+ log.Error("Cannot register type: ", data.ProdDataTypes[i].ID)
+ log.Error("Registering producer: ", producer_instance_name, " - failed")
+ return false
+ }
+ new_type_names = append(new_type_names, data.ProdDataTypes[i].ID)
+ }
+ }
+
+ log.Debug("Registering types: ", new_type_names)
+ m := make(map[string]interface{})
+ m["supported_info_types"] = new_type_names
+ //TODO: http/https should be configurable
+ m["info_job_callback_url"] = "http://" + self + "/callbacks/job/" + producer_name
+ //TODO: http/https should be configurable
+ m["info_producer_supervision_callback_url"] = "http://" + self + "/callbacks/supervision/job/" + producer_name
+
+ json, err := json.Marshal(m)
+ if err != nil {
+ log.Error("Cannot create json for producer: ", producer_instance_name)
+ log.Error("Registering producer: ", producer_instance_name, " - failed")
+ return false
+ }
+ ok := send_http_request(json, http.MethodPut, "http://"+ics_server+"/data-producer/v1/info-producers/"+producer_instance_name, true)
+ if !ok {
+ log.Error("Cannot register producer: ", producer_instance_name)
+ log.Error("Registering producer: ", producer_instance_name, " - failed")
+ return false
+ }
+ datalock.Lock()
+ defer datalock.Unlock()
+
+ var current_type_names []string
+ for _, v := range InfoTypes.ProdDataTypes {
+ current_type_names = append(current_type_names, v.ID)
+ if contains_str(new_type_names, v.ID) {
+ //Type exist
+ log.Debug("Type ", v.ID, " exists")
+ create_ext_job(v)
+ } else {
+ //Type is removed
+ log.Info("Removing type job for type: ", v.ID, " Type not in configuration")
+ remove_type_job(v)
+ }
+ }
+
+ for _, v := range data.ProdDataTypes {
+ if contains_str(current_type_names, v.ID) {
+ //Type exist
+ log.Debug("Type ", v.ID, " exists")
+ create_ext_job(v)
+ } else {
+ //Type is new
+ log.Info("Adding type job for type: ", v.ID, " Type added to configuration")
+ start_type_job(v)
+ }
+ }
+
+ InfoTypes = data
+ log.Debug("Datatypes: ", InfoTypes)
+
+ log.Info("Registering producer: ", producer_instance_name, " - OK")
+ return true
+}
+
+func remove_type_job(dp DataType) {
+ log.Info("Removing type job: ", dp.ID)
+ j, ok := TypeJobs[dp.ID]
+ if ok {
+ j.reader_control <- ReaderControl{"EXIT"}
+ }
+
+ if dp.ext_job_created == true {
+ dp.ext_job_id = dp.InputJobType + "_" + generate_uuid_from_type(dp.InputJobType)
+ //TODO: http/https should be configurable
+ ok := send_http_request(dp.ext_job, http.MethodDelete, "http://"+ics_server+"/data-consumer/v1/info-jobs/"+dp.ext_job_id, true)
+ if !ok {
+ log.Error("Cannot delete job: ", dp.ext_job_id)
+ }
+ dp.ext_job_created = false
+ dp.ext_job = nil
+ }
+
+}
+
+func start_type_job(dp DataType) {
+ log.Info("Starting type job: ", dp.ID)
+ job_record := TypeJobRecord{}
+
+ job_record.job_control = make(chan JobControl, 1)
+ job_record.reader_control = make(chan ReaderControl, 1)
+ job_record.data_in_channel = make(chan *KafkaPayload, reader_queue_length)
+ job_record.InfoType = dp.ID
+ job_record.InputTopic = dp.KafkaInputTopic
+ job_record.groupId = "kafka-procon-" + dp.ID
+ job_record.clientId = dp.ID + "-" + os.Getenv("KP")
+ var stats TypeJobStats
+ job_record.statistics = &stats
+
+ switch dp.ID {
+ case "xml-file-data-to-filestore":
+ go start_job_xml_file_data(dp.ID, job_record.job_control, job_record.data_in_channel, data_out_channel, "", "pm-files-json")
+ case "xml-file-data":
+ go start_job_xml_file_data(dp.ID, job_record.job_control, job_record.data_in_channel, data_out_channel, files_volume, "")
+ case "json-file-data-from-filestore":
+ go start_job_json_file_data(dp.ID, job_record.job_control, job_record.data_in_channel, data_out_channel, true)
+ case "json-file-data":
+ go start_job_json_file_data(dp.ID, job_record.job_control, job_record.data_in_channel, data_out_channel, false)
+ default:
+ }
+
+ go start_topic_reader(dp.KafkaInputTopic, dp.ID, job_record.reader_control, job_record.data_in_channel, job_record.groupId, job_record.clientId, &stats)
+
+ TypeJobs[dp.ID] = job_record
+
+ if dp.InputJobType != "" {
+ jb := make(map[string]interface{})
+ jb["info_type_id"] = dp.InputJobType
+ jb["job_owner"] = "console" //TODO:
+ jb["status_notification_uri"] = "http://callback:80/post"
+ jb1 := make(map[string]interface{})
+ jb["job_definition"] = jb1
+ jb1["kafkaOutputTopic"] = dp.InputJobDefinition.KafkaOutputTopic
+
+ json, err := json.Marshal(jb)
+ dp.ext_job_created = false
+ dp.ext_job = nil
+ if err != nil {
+ log.Error("Cannot create json for type: ", dp.InputJobType)
+
+ } else {
+
+ dp.ext_job = json
+
+ create_ext_job(dp)
+ }
+ }
+}
+
+func create_ext_job(dp DataType) {
+
+ log.Debug("create_ext_job ", dp.InputJobType)
+ if dp.ext_job != nil {
+ log.Debug("create_ext_job ext job not nil")
+ } else {
+ log.Debug("create_ext_job ext job nil")
+ }
+
+ if dp.ext_job_created == false {
+ log.Debug("create_ext_job ext job false")
+ } else {
+ log.Debug("create_ext_job ext job true")
+ }
+ if dp.ext_job != nil && dp.ext_job_created == false {
+ dp.ext_job_id = dp.InputJobType + "_" + generate_uuid_from_type(dp.InputJobType)
+ //TODO: http/https should be configurable
+ ok := send_http_request(dp.ext_job, http.MethodPut, "http://"+ics_server+"/data-consumer/v1/info-jobs/"+dp.ext_job_id, true)
+ if !ok {
+ log.Error("Cannot register job: ", dp.InputJobType)
+ return
+ }
+ log.Error("Registered job ok: ", dp.InputJobType)
+ dp.ext_job_created = true
+ }
+}
+
+func remove_info_job(jobid string) {
+ log.Info("Removing info job: ", jobid)
+ filter := Filter{}
+ filter.JobId = jobid
+ jc := JobControl{}
+ jc.command = "REMOVE-FILTER"
+ jc.filter = filter
+ infoJob := InfoJobs[jobid]
+ typeJob := TypeJobs[infoJob.job_info.InfoTypeIdentity]
+ typeJob.job_control <- jc
+
+}
+
+// == Helper functions ==//
+
+// Function to check the status of a mutex lock
+func MutexLocked(m *sync.Mutex) bool {
+ state := reflect.ValueOf(m).Elem().FieldByName("state")
+ return state.Int()&mutexLocked == mutexLocked
+}
+
+// Test if slice contains a string
+func contains_str(s []string, e string) bool {
+ for _, a := range s {
+ if a == e {
+ return true
+ }
+ }
+ return false
+}
+
+// Send a http request with json (json may be nil)
+func send_http_request(json []byte, method string, url string, retry bool) bool {
+ // initialize http client
+ client := &http.Client{}
+
+ // set the HTTP method, url, and request body
+ var req *http.Request
+ var err error
+ if json == nil {
+ req, err = http.NewRequest(method, url, http.NoBody)
+ } else {
+ req, err = http.NewRequest(method, url, bytes.NewBuffer(json))
+ }
+ if err != nil {
+ log.Error("Cannot create http request method: ", method, " url: ", url)
+ return false
+ }
+ if json != nil {
+ // set the request header Content-Type for json
+ req.Header.Set("Content-Type", "application/json; charset=utf-8")
+ }
+
+ retries := 1
+ if retry {
+ retries = 5
+ }
+ sleep_time := 1
+ for i := retries; i > 0; i-- {
+ resp, err2 := client.Do(req)
+ if err2 != nil {
+ log.Error("Cannot send http request method: ", method, "url: ", url, " - retries left: ", i)
+
+ time.Sleep(time.Duration(sleep_time) * time.Second)
+ sleep_time = 2 * sleep_time
+ } else {
+ if resp.StatusCode == 200 || resp.StatusCode == 201 {
+ return true
+ }
+ }
+ }
+ return false
+}
+
+// Function to print memory details
+// https://pkg.go.dev/runtime#MemStats
+func PrintMemUsage() {
+ if log.IsLevelEnabled(log.DebugLevel) || log.IsLevelEnabled(log.TraceLevel) {
+ var m runtime.MemStats
+ runtime.ReadMemStats(&m)
+ fmt.Printf("Alloc = %v MiB", bToMb(m.Alloc))
+ fmt.Printf("\tTotalAlloc = %v MiB", bToMb(m.TotalAlloc))
+ fmt.Printf("\tSys = %v MiB", bToMb(m.Sys))
+ fmt.Printf("\tNumGC = %v\n", m.NumGC)
+ fmt.Printf("HeapSys = %v MiB", bToMb(m.HeapSys))
+ fmt.Printf("\tStackSys = %v MiB", bToMb(m.StackSys))
+ fmt.Printf("\tMSpanSys = %v MiB", bToMb(m.MSpanSys))
+ fmt.Printf("\tMCacheSys = %v MiB", bToMb(m.MCacheSys))
+ fmt.Printf("\tBuckHashSys = %v MiB", bToMb(m.BuckHashSys))
+ fmt.Printf("\tGCSys = %v MiB", bToMb(m.GCSys))
+ fmt.Printf("\tOtherSys = %v MiB\n", bToMb(m.OtherSys))
+ }
+}
+
+func bToMb(b uint64) uint64 {
+ return b / 1024 / 1024
+}
+
+func generate_uuid_from_type(s string) string {
+ if len(s) > 16 {
+ s = s[:16]
+ }
+ for len(s) < 16 {
+ s = s + "0"
+ }
+ b := []byte(s)
+ b = b[:16]
+ uuid, _ := uuid.FromBytes(b)
+ return uuid.String()
+}
+
+// Write gzipped data to a Writer
+func gzipWrite(w io.Writer, data *[]byte) error {
+ gw, err1 := gzip.NewWriterLevel(w, gzip.BestSpeed)
+
+ if err1 != nil {
+ return err1
+ }
+ defer gw.Close()
+ _, err2 := gw.Write(*data)
+ return err2
+}
+
+// Write gunzipped data from Reader to a Writer
+func gunzipReaderToWriter(w io.Writer, data io.Reader) error {
+ gr, err1 := gzip.NewReader(data)
+
+ if err1 != nil {
+ return err1
+ }
+ defer gr.Close()
+ data2, err2 := io.ReadAll(gr)
+ if err2 != nil {
+ return err2
+ }
+ _, err3 := w.Write(data2)
+ if err3 != nil {
+ return err3
+ }
+ return nil
+}
+
+func create_minio_bucket(mc *minio.Client, client_id string, bucket string) error {
+ tctx := context.Background()
+ err := mc.MakeBucket(tctx, bucket, minio.MakeBucketOptions{Region: bucket_location})
+ if err != nil {
+ // Check to see if we already own this bucket (which happens if you run this twice)
+ exists, errBucketExists := mc.BucketExists(tctx, bucket)
+ if errBucketExists == nil && exists {
+ log.Debug("Already own bucket:", bucket)
+ add_bucket(client_id, bucket)
+ return nil
+ } else {
+ log.Error("Cannot create or check bucket ", bucket, " in minio client", err)
+ return err
+ }
+ }
+ log.Debug("Successfully created bucket: ", bucket)
+ add_bucket(client_id, bucket)
+ return nil
+}
+
+func check_minio_bucket(mc *minio.Client, client_id string, bucket string) bool {
+ ok := bucket_exist(client_id, bucket)
+ if ok {
+ return true
+ }
+ tctx := context.Background()
+ exists, err := mc.BucketExists(tctx, bucket)
+ if err == nil && exists {
+ log.Debug("Already own bucket:", bucket)
+ return true
+ }
+ log.Error("Bucket does not exist, bucket ", bucket, " in minio client", err)
+ return false
+}
+
+func add_bucket(minio_id string, bucket string) {
+ datalock.Lock()
+ defer datalock.Unlock()
+
+ b, ok := minio_bucketlist[minio_id]
+ if !ok {
+ b = Minio_buckets{}
+ b.Buckets = make(map[string]bool)
+ }
+ b.Buckets[bucket] = true
+ minio_bucketlist[minio_id] = b
+}
+
+func bucket_exist(minio_id string, bucket string) bool {
+ datalock.Lock()
+ defer datalock.Unlock()
+
+ b, ok := minio_bucketlist[minio_id]
+ if !ok {
+ return false
+ }
+ _, ok = b.Buckets[bucket]
+ return ok
+}
+
+//== http api functions ==//
+
+// create/update job
+func create_job(w http.ResponseWriter, req *http.Request) {
+ log.Debug("Create job, http method: ", req.Method)
+ if req.Method != http.MethodPost {
+ log.Error("Create job, http method not allowed")
+ w.WriteHeader(http.StatusMethodNotAllowed)
+ return
+ }
+ ct := req.Header.Get("Content-Type")
+ if ct != "application/json" {
+ log.Error("Create job, bad content type")
+ http.Error(w, "Bad content type", http.StatusBadRequest)
+ return
+ }
+
+ var t InfoJobDataType
+ err := json.NewDecoder(req.Body).Decode(&t)
+ if err != nil {
+ log.Error("Create job, cannot parse json,", err)
+ http.Error(w, "Cannot parse json", http.StatusBadRequest)
+ return
+ }
+
+ datalock.Lock()
+ defer datalock.Unlock()
+
+ job_id := t.InfoJobIdentity
+ job_record, job_found := InfoJobs[job_id]
+ type_job_record, found_type := TypeJobs[t.InfoTypeIdentity]
+ if !job_found {
+ if !found_type {
+ log.Error("Type ", t.InfoTypeIdentity, " does not exist")
+ http.Error(w, "Type "+t.InfoTypeIdentity+" does not exist", http.StatusBadRequest)
+ return
+ }
+ } else if t.InfoTypeIdentity != job_record.job_info.InfoTypeIdentity {
+ log.Error("Job cannot change type")
+ http.Error(w, "Job cannot change type", http.StatusBadRequest)
+ return
+ } else if t.InfoJobData.KafkaOutputTopic != job_record.job_info.InfoJobData.KafkaOutputTopic {
+ log.Error("Job cannot change topic")
+ http.Error(w, "Job cannot change topic", http.StatusBadRequest)
+ return
+ } else if !found_type {
+ //Should never happen, if the type is removed then job is stopped
+ log.Error("Type ", t.InfoTypeIdentity, " does not exist")
+ http.Error(w, "Type "+t.InfoTypeIdentity+" does not exist", http.StatusBadRequest)
+ return
+ }
+
+ // // TODO: Create topics should be configurable....
+ // if kafka_admin_client == nil {
+ // kafka_admin_client = start_adminclient()
+ // }
+ // if kafka_admin_client != nil {
+ // ctx := context.Background()
+ // maxdur := time.Duration(30)
+ // _, err := kafka_admin_client.CreateTopics(
+ // ctx,
+ // // Multiple topics can be created simultaneously
+ // // by providing more TopicSpecification structs here.
+ // []kafka.TopicSpecification{{
+ // Topic: job_record.output_topic}},
+ // // Admin options
+ // kafka.SetAdminOperationTimeout(maxdur))
+ // if err != nil {
+ // log.Warn("Cound not create topic: ", job_record.output_topic)
+ // }
+ // }
+
+ //TODO: Verify that job contains enough parameters...
+
+ if !job_found {
+ job_record = InfoJobRecord{}
+ job_record.job_info = t
+ output_topic := t.InfoJobData.KafkaOutputTopic
+ job_record.output_topic = t.InfoJobData.KafkaOutputTopic
+ log.Debug("Starting infojob ", job_id, ", type ", t.InfoTypeIdentity, ", output topic", output_topic)
+
+ var stats InfoJobStats
+ job_record.statistics = &stats
+
+ filter := Filter{}
+ filter.JobId = job_id
+ filter.OutputTopic = job_record.output_topic
+
+ jc := JobControl{}
+
+ jc.command = "ADD-FILTER"
+
+ //TODO: Refactor
+ if t.InfoTypeIdentity == "json-file-data-from-filestore" || t.InfoTypeIdentity == "json-file-data" {
+ fm := FilterMaps{}
+ fm.sourceNameMap = make(map[string]bool)
+ fm.measObjClassMap = make(map[string]bool)
+ fm.measObjInstIdsMap = make(map[string]bool)
+ fm.measTypesMap = make(map[string]bool)
+ if t.InfoJobData.FilterParams.MeasuredEntityDns != nil {
+ for _, v := range t.InfoJobData.FilterParams.MeasuredEntityDns {
+ fm.sourceNameMap[v] = true
+ }
+ }
+ if t.InfoJobData.FilterParams.MeasObjClass != nil {
+ for _, v := range t.InfoJobData.FilterParams.MeasObjClass {
+ fm.measObjClassMap[v] = true
+ }
+ }
+ if t.InfoJobData.FilterParams.MeasObjInstIds != nil {
+ for _, v := range t.InfoJobData.FilterParams.MeasObjInstIds {
+ fm.measObjInstIdsMap[v] = true
+ }
+ }
+ if t.InfoJobData.FilterParams.MeasTypes != nil {
+ for _, v := range t.InfoJobData.FilterParams.MeasTypes {
+ fm.measTypesMap[v] = true
+ }
+ }
+ filter.filter = fm
+ }
+
+ jc.filter = filter
+ InfoJobs[job_id] = job_record
+
+ type_job_record.job_control <- jc
+
+ } else {
+ //TODO
+ //Update job
+ }
+}
+
+// delete job
+func delete_job(w http.ResponseWriter, req *http.Request) {
+ if req.Method != http.MethodDelete {
+ w.WriteHeader(http.StatusMethodNotAllowed)
+ return
+ }
+ datalock.Lock()
+ defer datalock.Unlock()
+
+ vars := mux.Vars(req)
+
+ if id, ok := vars["job_id"]; ok {
+ if _, ok := InfoJobs[id]; ok {
+ remove_info_job(id)
+ w.WriteHeader(http.StatusNoContent)
+ log.Info("Job ", id, " deleted")
+ return
+ }
+ }
+ w.WriteHeader(http.StatusNotFound)
+}
+
+// job supervision
+func supervise_job(w http.ResponseWriter, req *http.Request) {
+ if req.Method != http.MethodGet {
+ w.WriteHeader(http.StatusMethodNotAllowed)
+ return
+ }
+ datalock.Lock()
+ defer datalock.Unlock()
+
+ vars := mux.Vars(req)
+
+ log.Debug("Supervising, job: ", vars["job_id"])
+ if id, ok := vars["job_id"]; ok {
+ if _, ok := InfoJobs[id]; ok {
+ log.Debug("Supervision ok, job", id)
+ return
+ }
+ }
+ w.WriteHeader(http.StatusNotFound)
+}
+
+// producer statictics, all jobs
+func statistics(w http.ResponseWriter, req *http.Request) {
+ if req.Method != http.MethodGet {
+ w.WriteHeader(http.StatusMethodNotAllowed)
+ return
+ }
+ m := make(map[string]interface{})
+ log.Debug("producer statictics, locked? ", MutexLocked(&datalock))
+ datalock.Lock()
+ defer datalock.Unlock()
+ req.Header.Set("Content-Type", "application/json; charset=utf-8")
+ m["number-of-jobs"] = len(InfoJobs)
+ m["number-of-types"] = len(InfoTypes.ProdDataTypes)
+ qm := make(map[string]interface{})
+ m["jobs"] = qm
+ for key, elem := range InfoJobs {
+ jm := make(map[string]interface{})
+ qm[key] = jm
+ jm["type"] = elem.job_info.InfoTypeIdentity
+ typeJob := TypeJobs[elem.job_info.InfoTypeIdentity]
+ jm["groupId"] = typeJob.groupId
+ jm["clientID"] = typeJob.clientId
+ jm["input topic"] = typeJob.InputTopic
+ jm["input queue length - job ("+fmt.Sprintf("%v", cap(typeJob.data_in_channel))+")"] = len(typeJob.data_in_channel)
+ jm["output topic"] = elem.output_topic
+ jm["output queue length - producer ("+fmt.Sprintf("%v", cap(data_out_channel))+")"] = len(data_out_channel)
+ jm["msg_in (type)"] = typeJob.statistics.in_msg_cnt
+ jm["msg_out (job)"] = elem.statistics.out_msg_cnt
+
+ }
+ json, err := json.Marshal(m)
+ if err != nil {
+ w.WriteHeader(http.StatusInternalServerError)
+ log.Error("Cannot marshal statistics json")
+ return
+ }
+ _, err = w.Write(json)
+ if err != nil {
+ w.WriteHeader(http.StatusInternalServerError)
+ log.Error("Cannot send statistics json")
+ return
+ }
+}
+
+// Simple alive check
+func alive(w http.ResponseWriter, req *http.Request) {
+ //Alive check
+}
+
+// Get/Set logging level
+func logging_level(w http.ResponseWriter, req *http.Request) {
+ vars := mux.Vars(req)
+ if level, ok := vars["level"]; ok {
+ if req.Method == http.MethodPut {
+ switch level {
+ case "trace":
+ log.SetLevel(log.TraceLevel)
+ case "debug":
+ log.SetLevel(log.DebugLevel)
+ case "info":
+ log.SetLevel(log.InfoLevel)
+ case "warn":
+ log.SetLevel(log.WarnLevel)
+ case "error":
+ log.SetLevel(log.ErrorLevel)
+ case "fatal":
+ log.SetLevel(log.FatalLevel)
+ case "panic":
+ log.SetLevel(log.PanicLevel)
+ default:
+ w.WriteHeader(http.StatusNotFound)
+ }
+ } else {
+ w.WriteHeader(http.StatusMethodNotAllowed)
+ }
+ } else {
+ if req.Method == http.MethodGet {
+ msg := "none"
+ if log.IsLevelEnabled(log.PanicLevel) {
+ msg = "panic"
+ } else if log.IsLevelEnabled(log.FatalLevel) {
+ msg = "fatal"
+ } else if log.IsLevelEnabled(log.ErrorLevel) {
+ msg = "error"
+ } else if log.IsLevelEnabled(log.WarnLevel) {
+ msg = "warn"
+ } else if log.IsLevelEnabled(log.InfoLevel) {
+ msg = "info"
+ } else if log.IsLevelEnabled(log.DebugLevel) {
+ msg = "debug"
+ } else if log.IsLevelEnabled(log.TraceLevel) {
+ msg = "trace"
+ }
+ w.Header().Set("Content-Type", "application/text")
+ w.Write([]byte(msg))
+ } else {
+ w.WriteHeader(http.StatusMethodNotAllowed)
+ }
+ }
+}
+
+func start_topic_reader(topic string, type_id string, control_ch chan ReaderControl, data_ch chan *KafkaPayload, gid string, cid string, stats *TypeJobStats) {
+
+ log.Info("Topic reader starting, topic: ", topic, " for type: ", type_id)
+
+ topic_ok := false
+ var c *kafka.Consumer = nil
+ running := true
+
+ for topic_ok == false {
+
+ select {
+ case reader_ctrl := <-control_ch:
+ if reader_ctrl.command == "EXIT" {
+ log.Info("Topic reader on topic: ", topic, " for type: ", type_id, " - stopped")
+ //TODO: Stop consumer if present?
+ data_ch <- nil //Signal to job handler
+ running = false
+ return
+ }
+ case <-time.After(1 * time.Second):
+ if !running {
+ return
+ }
+ if c == nil {
+ c = create_kafka_consumer(type_id, gid, cid)
+ if c == nil {
+ log.Info("Cannot start consumer on topic: ", topic, " for type: ", type_id, " - retrying")
+ } else {
+ log.Info("Consumer started on topic: ", topic, " for type: ", type_id)
+ }
+ }
+ if c != nil && topic_ok == false {
+ err := c.SubscribeTopics([]string{topic}, nil)
+ if err != nil {
+ log.Info("Topic reader cannot start subscribing on topic: ", topic, " for type: ", type_id, " - retrying -- error details: ", err)
+ } else {
+ log.Info("Topic reader subscribing on topic: ", topic, " for type: ", type_id)
+ topic_ok = true
+ }
+ }
+ }
+ }
+ log.Info("Topic reader ready on topic: ", topic, " for type: ", type_id)
+
+ var event_chan = make(chan int)
+ go func() {
+ for {
+ select {
+ case evt := <-c.Events():
+ //TODO: Handle these?
+ log.Debug("Dumping topic reader event on topic: ", topic, " for type: ", type_id, " evt: ", evt.String())
+ case msg := <-event_chan:
+ if msg == 0 {
+ return
+ }
+ case <-time.After(1 * time.Second):
+ if !running {
+ return
+ }
+ }
+ }
+ }()
+
+ go func() {
+ for {
+ maxDur := 1 * time.Second
+ for {
+ select {
+ case reader_ctrl := <-control_ch:
+ if reader_ctrl.command == "EXIT" {
+ event_chan <- 0
+ log.Debug("Topic reader on topic: ", topic, " for type: ", type_id, " - stopped")
+ data_ch <- nil //Signal to job handler
+ defer c.Close()
+ return
+ }
+ default:
+
+ msg, err := c.ReadMessage(maxDur)
+ if err == nil {
+ var kmsg KafkaPayload
+ kmsg.msg = msg
+
+ c.Commit() //TODO: Ok?
+
+ //TODO: Check for exception
+ data_ch <- &kmsg
+ stats.in_msg_cnt++
+ log.Debug("Reader msg: ", &kmsg)
+ } else {
+ log.Debug("Topic Reader for type: ", type_id, " Nothing to consume on topic: ", topic, ", reason: ", err)
+ }
+
+ }
+ }
+ }
+ }()
+}
+
+func start_topic_writer(control_ch chan WriterControl, data_ch chan *KafkaPayload) {
+
+ var kafka_producer *kafka.Producer
+
+ running := true
+ log.Info("Topic writer starting")
+
+ // Wait for kafka producer to become available - and be prepared to exit the writer
+ for kafka_producer == nil {
+ select {
+ case writer_ctl := <-control_ch:
+ if writer_ctl.command == "EXIT" {
+ //ignore cmd
+ }
+ default:
+ kafka_producer = start_producer()
+ if kafka_producer == nil {
+ log.Debug("Could not start kafka producer - retrying")
+ time.Sleep(1 * time.Second)
+ } else {
+ log.Debug("Kafka producer started")
+ //defer kafka_producer.Close()
+ }
+ }
+ }
+
+ var event_chan = make(chan int)
+ go func() {
+ for {
+ select {
+ case evt := <-kafka_producer.Events():
+ //TODO: Handle this? Probably yes, look if the msg was delivered and if not, resend?
+ switch evt.(type) {
+ case *kafka.Message:
+ m := evt.(*kafka.Message)
+
+ if m.TopicPartition.Error != nil {
+ log.Debug("Dumping topic writer event, failed: ", m.TopicPartition.Error)
+ } else {
+ log.Debug("Dumping topic writer event, message to topic: ", *m.TopicPartition.Topic, " at offset: ", m.TopicPartition.Partition, " at partiotion: ", m.TopicPartition.Offset)
+ }
+ case kafka.Error:
+ log.Debug("Dumping topic writer event, error: ", evt)
+
+ default:
+ log.Debug("Dumping topic writer event, unknown: ", evt)
+ }
+
+ case msg := <-event_chan:
+ if msg == 0 {
+ return
+ }
+ case <-time.After(1 * time.Second):
+ if !running {
+ return
+ }
+ }
+ }
+ }()
+ go func() {
+ for {
+ select {
+ case writer_ctl := <-control_ch:
+ if writer_ctl.command == "EXIT" {
+ // ignore - wait for channel signal
+ }
+
+ case kmsg := <-data_ch:
+ if kmsg == nil {
+ event_chan <- 0
+ // TODO: Close producer?
+ log.Info("Topic writer stopped by channel signal - start_topic_writer")
+ defer kafka_producer.Close()
+ return
+ }
+
+ retries := 10
+ msg_ok := false
+ var err error
+ for retry := 1; retry <= retries && msg_ok == false; retry++ {
+ err = kafka_producer.Produce(&kafka.Message{
+ TopicPartition: kafka.TopicPartition{Topic: &kmsg.topic, Partition: kafka.PartitionAny},
+ Value: kmsg.msg.Value, Key: kmsg.msg.Key}, nil)
+
+ if err == nil {
+ incr_out_msg_cnt(kmsg.jobid)
+ msg_ok = true
+ log.Debug("Topic writer, msg sent ok")
+ } else {
+ log.Info("Topic writer failed to send message on topic: ", kmsg.topic, " - Retrying. Error details: ", err)
+ time.Sleep(time.Duration(retry) * time.Second)
+ }
+ }
+ if !msg_ok {
+ //TODO: Retry sending msg?
+ log.Error("Topic writer failed to send message on topic: ", kmsg.topic, " - Msg discarded. Error details: ", err)
+ }
+ case <-time.After(1000 * time.Millisecond):
+ if !running {
+ return
+ }
+ }
+ }
+ }()
+}
+
+func create_kafka_consumer(type_id string, gid string, cid string) *kafka.Consumer {
+ log.Info("Creating kafka consumer for type: ", type_id)
+ c, err := kafka.NewConsumer(&kafka.ConfigMap{
+ "bootstrap.servers": bootstrapserver,
+ "group.id": gid,
+ "client.id": cid,
+ "auto.offset.reset": "latest",
+ "enable.auto.commit": false,
+ //"auto.commit.interval.ms": 5000,
+ })
+
+ //TODO: How to handle autocommit or commit message by message
+ //TODO: Make arg to kafka configurable
+
+ if err != nil {
+ log.Error("Cannot create kafka consumer for type: ", type_id, ", error details: ", err)
+ return nil
+ }
+ c.Commit()
+ log.Info("Created kafka consumer for type: ", type_id, " OK")
+ return c
+}
+
+// Start kafka producer
+func start_producer() *kafka.Producer {
+ log.Info("Creating kafka producer")
+ p, err := kafka.NewProducer(&kafka.ConfigMap{"bootstrap.servers": bootstrapserver})
+ if err != nil {
+ log.Error("Cannot create kafka producer,", err)
+ return nil
+ }
+ return p
+}
+
+func start_adminclient() *kafka.AdminClient {
+ log.Info("Creating kafka admin client")
+ a, err := kafka.NewAdminClient(&kafka.ConfigMap{"bootstrap.servers": bootstrapserver})
+ if err != nil {
+ log.Error("Cannot create kafka admin client,", err)
+ return nil
+ }
+ return a
+}
+
+func create_minio_client(id string) (*minio.Client, *error) {
+ log.Debug("Get minio client")
+ minio_client, err := minio.New(filestore_server, &minio.Options{
+ Secure: false,
+ Creds: credentials.NewStaticV4(filestore_user, filestore_pwd, ""),
+ })
+ if err != nil {
+ log.Error("Cannot create minio client, ", err)
+ return nil, &err
+ }
+ return minio_client, nil
+}
+
+func incr_out_msg_cnt(jobid string) {
+ j, ok := InfoJobs[jobid]
+ if ok {
+ j.statistics.out_msg_cnt++
+ }
+}
+
+func start_job_xml_file_data(type_id string, control_ch chan JobControl, data_in_ch chan *KafkaPayload, data_out_channel chan *KafkaPayload, fvolume string, fsbucket string) {
+
+ log.Info("Type job", type_id, " started")
+
+ filters := make(map[string]Filter)
+ topic_list := make(map[string]string)
+ var mc *minio.Client
+ const mc_id = "mc_" + "start_job_xml_file_data"
+ running := true
+ for {
+ select {
+ case job_ctl := <-control_ch:
+ log.Debug("Type job ", type_id, " new cmd received ", job_ctl.command)
+ switch job_ctl.command {
+ case "EXIT":
+ //ignore cmd - handled by channel signal
+ case "ADD-FILTER":
+ filters[job_ctl.filter.JobId] = job_ctl.filter
+ log.Debug("Type job ", type_id, " updated, topic: ", job_ctl.filter.OutputTopic, " jobid: ", job_ctl.filter.JobId)
+
+ tmp_topic_list := make(map[string]string)
+ for k, v := range topic_list {
+ tmp_topic_list[k] = v
+ }
+ tmp_topic_list[job_ctl.filter.JobId] = job_ctl.filter.OutputTopic
+ topic_list = tmp_topic_list
+ case "REMOVE-FILTER":
+ log.Debug("Type job ", type_id, " removing job: ", job_ctl.filter.JobId)
+
+ tmp_topic_list := make(map[string]string)
+ for k, v := range topic_list {
+ tmp_topic_list[k] = v
+ }
+ delete(tmp_topic_list, job_ctl.filter.JobId)
+ topic_list = tmp_topic_list
+ }
+
+ case msg := <-data_in_ch:
+ if msg == nil {
+ log.Info("Type job ", type_id, " stopped by channel signal - start_job_xml_file_data")
+
+ running = false
+ return
+ }
+ if fsbucket != "" && fvolume == "" {
+ if mc == nil {
+ var err *error
+ mc, err = create_minio_client(mc_id)
+ if err != nil {
+ log.Debug("Cannot create minio client for type job: ", type_id)
+ }
+ }
+ }
+ //TODO: Sort processed file conversions in order (FIFO)
+ jobLimiterChan <- struct{}{}
+ go run_xml_job(type_id, msg, "gz", data_out_channel, topic_list, jobLimiterChan, fvolume, fsbucket, mc, mc_id)
+
+ case <-time.After(1 * time.Second):
+ if !running {
+ return
+ }
+ }
+ }
+ //}()
+}
+
+func run_xml_job(type_id string, msg *KafkaPayload, outputCompression string, data_out_channel chan *KafkaPayload, topic_list map[string]string, jobLimiterChan chan struct{}, fvolume string, fsbucket string, mc *minio.Client, mc_id string) {
+ defer func() {
+ <-jobLimiterChan
+ }()
+ PrintMemUsage()
+
+ if fvolume == "" && fsbucket == "" {
+ log.Error("Type job: ", type_id, " cannot run, neither file volume nor filestore is set - discarding message")
+ return
+ } else if (fvolume != "") && (fsbucket != "") {
+ log.Error("Type job: ", type_id, " cannot run with output to both file volume and filestore bucket - discarding message")
+ return
+ }
+
+ start := time.Now()
+ var evt_data XmlFileEventHeader
+
+ err := jsoniter.Unmarshal(msg.msg.Value, &evt_data)
+ if err != nil {
+ log.Error("Cannot parse XmlFileEventHeader for type job: ", type_id, " - discarding message, error details", err)
+ return
+ }
+ log.Debug("Unmarshal file-collect event for type job: ", type_id, " time: ", time.Since(start).String())
+
+ var reader io.Reader
+
+ //TODO -> config
+ INPUTBUCKET := "ropfiles"
+
+ filename := ""
+ if fvolume != "" {
+ filename = fvolume + "/" + evt_data.Name
+ fi, err := os.Open(filename)
+
+ if err != nil {
+ log.Error("File ", filename, " - cannot be opened for type job: ", type_id, " - discarding message, error details: ", err)
+ return
+ }
+ defer fi.Close()
+ reader = fi
+ //} else if evt_data.ObjectStoreBucket != "" {
+ } else {
+ filename = evt_data.Name
+ if mc != nil {
+ tctx := context.Background()
+ mr, err := mc.GetObject(tctx, INPUTBUCKET, filename, minio.GetObjectOptions{})
+ if err != nil {
+ log.Error("Cannot get: ", filename, " for type job: ", type_id, " - discarding message, error details: ", err)
+ return
+ }
+ if mr == nil {
+ log.Error("Cannot get: ", filename, " for type job: ", type_id, " - minio get object returned null reader - discarding message, error details: ", err)
+ return
+ }
+ reader = mr
+ defer mr.Close()
+ } else {
+ log.Error("Cannot get: ", filename, " for type job: ", type_id, " - no minio client - discarding message")
+ return
+ }
+ }
+
+ if reader == nil {
+ log.Error("Cannot get: ", filename, " - null reader")
+ return
+ }
+ var file_bytes []byte
+ if strings.HasSuffix(filename, "gz") {
+ start := time.Now()
+ var buf3 bytes.Buffer
+ errb := gunzipReaderToWriter(&buf3, reader)
+ if errb != nil {
+ log.Error("Cannot gunzip file ", filename, " - discarding message, ", errb)
+ return
+ }
+ file_bytes = buf3.Bytes()
+ log.Debug("Gunzip file: ", filename, "time:", time.Since(start).String(), "len: ", len(file_bytes))
+
+ } else {
+ var buf3 bytes.Buffer
+ _, err2 := io.Copy(&buf3, reader)
+ if err2 != nil {
+ log.Error("File ", filename, " - cannot be read, discarding message, ", err)
+ return
+ }
+ file_bytes = buf3.Bytes()
+ }
+ start = time.Now()
+ b, err := xml_to_json_conv(&file_bytes, &evt_data)
+ if err != nil {
+ log.Error("Cannot convert file ", evt_data.Name, " - discarding message, ", err)
+ return
+ }
+ log.Debug("Converted file to json: ", filename, " time", time.Since(start).String(), "len;", len(b))
+
+ new_fn := evt_data.Name + os.Getenv("KP") + ".json"
+ if outputCompression == "gz" {
+ new_fn = new_fn + ".gz"
+ start = time.Now()
+ var buf bytes.Buffer
+ err = gzipWrite(&buf, &b)
+ if err != nil {
+ log.Error("Cannot gzip file ", new_fn, " - discarding message, ", err)
+ return
+ }
+ b = buf.Bytes()
+ log.Debug("Gzip file: ", new_fn, " time: ", time.Since(start).String(), "len:", len(file_bytes))
+
+ }
+ start = time.Now()
+
+ if fvolume != "" {
+ //Store on disk
+ err = os.WriteFile(fvolume+"/"+new_fn, b, 0644)
+ if err != nil {
+ log.Error("Cannot write file ", new_fn, " - discarding message,", err)
+ return
+ }
+ log.Debug("Write file to disk: "+new_fn, "time: ", time.Since(start).String(), " len: ", len(file_bytes))
+ } else if fsbucket != "" {
+ // Store in minio
+ objectName := new_fn
+ if mc != nil {
+
+ contentType := "application/json"
+ if strings.HasSuffix(objectName, ".gz") {
+ contentType = "application/gzip"
+ }
+
+ // Upload the xml file with PutObject
+ r := bytes.NewReader(b)
+ tctx := context.Background()
+ if check_minio_bucket(mc, mc_id, fsbucket) == false {
+ err := create_minio_bucket(mc, mc_id, fsbucket)
+ if err != nil {
+ log.Error("Cannot create bucket: ", fsbucket, ", ", err)
+ return
+ }
+ }
+ ok := false
+ for i := 1; i < 64 && ok == false; i = i * 2 {
+ info, err := mc.PutObject(tctx, fsbucket, objectName, r, int64(len(b)), minio.PutObjectOptions{ContentType: contentType})
+ if err != nil {
+
+ if i == 1 {
+ log.Warn("Cannot upload (first attempt): ", objectName, ", ", err)
+ } else {
+ log.Warn("Cannot upload (retry): ", objectName, ", ", err)
+ }
+ time.Sleep(time.Duration(i) * time.Second)
+ } else {
+ log.Debug("Store ", objectName, " in filestore, time: ", time.Since(start).String())
+ log.Debug("Successfully uploaded: ", objectName, " of size:", info.Size)
+ ok = true
+ }
+ }
+ if !ok {
+ log.Error("Cannot upload : ", objectName, ", ", err)
+ }
+ } else {
+ log.Error("Cannot upload: ", objectName, ", no client")
+ }
+ }
+
+ start = time.Now()
+ if fvolume == "" {
+ var fde FileDownloadedEvt
+ fde.Filename = new_fn
+ j, err := jsoniter.Marshal(fde)
+
+ if err != nil {
+ log.Error("Cannot marshal FileDownloadedEvt - discarding message, ", err)
+ return
+ }
+ msg.msg.Value = j
+ } else {
+ var fde FileDownloadedEvt
+ fde.Filename = new_fn
+ j, err := jsoniter.Marshal(fde)
+
+ if err != nil {
+ log.Error("Cannot marshal FileDownloadedEvt - discarding message, ", err)
+ return
+ }
+ msg.msg.Value = j
+ }
+ log.Debug("Marshal file-collect event ", time.Since(start).String())
+
+ for k, v := range topic_list {
+ var kmsg *KafkaPayload = new(KafkaPayload)
+ kmsg.msg = msg.msg
+ kmsg.topic = v
+ kmsg.jobid = k
+ data_out_channel <- kmsg
+ }
+}
+
+func xml_to_json_conv(f_byteValue *[]byte, xfeh *XmlFileEventHeader) ([]byte, error) {
+ var f MeasCollecFile
+ start := time.Now()
+ err := xml.Unmarshal(*f_byteValue, &f)
+ if err != nil {
+ return nil, errors.New("Cannot unmarshal xml-file")
+ }
+ log.Debug("Unmarshal xml file XmlFileEvent: ", time.Since(start).String())
+
+ start = time.Now()
+ var pmfile PMJsobFile
+
+ //TODO: Fill in more values
+ pmfile.Event.Perf3GppFields.Perf3GppFieldsVersion = "1.0"
+ pmfile.Event.Perf3GppFields.MeasDataCollection.GranularityPeriod = 900
+ pmfile.Event.Perf3GppFields.MeasDataCollection.MeasuredEntityUserName = ""
+ pmfile.Event.Perf3GppFields.MeasDataCollection.MeasuredEntityDn = f.FileHeader.FileSender.LocalDn
+ pmfile.Event.Perf3GppFields.MeasDataCollection.MeasuredEntitySoftwareVersion = f.MeasData.ManagedElement.SwVersion
+
+ for _, it := range f.MeasData.MeasInfo {
+ var mili MeasInfoList
+ mili.MeasInfoID.SMeasInfoID = it.MeasInfoId
+ for _, jt := range it.MeasType {
+ mili.MeasTypes.SMeasTypesList = append(mili.MeasTypes.SMeasTypesList, jt.Text)
+ }
+ for _, jt := range it.MeasValue {
+ var mv MeasValues
+ mv.MeasObjInstID = jt.MeasObjLdn
+ mv.SuspectFlag = jt.Suspect
+ if jt.Suspect == "" {
+ mv.SuspectFlag = "false"
+ }
+ for _, kt := range jt.R {
+ ni, _ := strconv.Atoi(kt.P)
+ nv := kt.Text
+ mr := MeasResults{ni, nv}
+ mv.MeasResultsList = append(mv.MeasResultsList, mr)
+ }
+ mili.MeasValuesList = append(mili.MeasValuesList, mv)
+ }
+
+ pmfile.Event.Perf3GppFields.MeasDataCollection.SMeasInfoList = append(pmfile.Event.Perf3GppFields.MeasDataCollection.SMeasInfoList, mili)
+ }
+
+ pmfile.Event.Perf3GppFields.MeasDataCollection.GranularityPeriod = 900
+
+ //TODO: Fill more values
+ pmfile.Event.CommonEventHeader.Domain = "" //xfeh.Domain
+ pmfile.Event.CommonEventHeader.EventID = "" //xfeh.EventID
+ pmfile.Event.CommonEventHeader.Sequence = 0 //xfeh.Sequence
+ pmfile.Event.CommonEventHeader.EventName = "" //xfeh.EventName
+ pmfile.Event.CommonEventHeader.SourceName = xfeh.SourceName
+ pmfile.Event.CommonEventHeader.ReportingEntityName = "" //xfeh.ReportingEntityName
+ pmfile.Event.CommonEventHeader.Priority = "" //xfeh.Priority
+ pmfile.Event.CommonEventHeader.StartEpochMicrosec = xfeh.StartEpochMicrosec
+ pmfile.Event.CommonEventHeader.LastEpochMicrosec = xfeh.LastEpochMicrosec
+ pmfile.Event.CommonEventHeader.Version = "" //xfeh.Version
+ pmfile.Event.CommonEventHeader.VesEventListenerVersion = "" //xfeh.VesEventListenerVersion
+ pmfile.Event.CommonEventHeader.TimeZoneOffset = xfeh.TimeZoneOffset
+
+ log.Debug("Convert xml to json : ", time.Since(start).String())
+
+ start = time.Now()
+ json, err := jsoniter.Marshal(pmfile)
+ log.Debug("Marshal json : ", time.Since(start).String())
+
+ if err != nil {
+ return nil, errors.New("Cannot marshal converted json")
+ }
+ return json, nil
+}
+
+func start_job_json_file_data(type_id string, control_ch chan JobControl, data_in_ch chan *KafkaPayload, data_out_channel chan *KafkaPayload, objectstore bool) {
+
+ log.Info("Type job", type_id, " started")
+
+ filters := make(map[string]Filter)
+ filterParams_list := make(map[string]FilterMaps)
+ // ch_list := make(map[string]chan *KafkaPayload)
+ topic_list := make(map[string]string)
+ var mc *minio.Client
+ const mc_id = "mc_" + "start_job_json_file_data"
+ running := true
+ for {
+ select {
+ case job_ctl := <-control_ch:
+ log.Debug("Type job ", type_id, " new cmd received ", job_ctl.command)
+ switch job_ctl.command {
+ case "EXIT":
+ //ignore cmd - handled by channel signal
+ case "ADD-FILTER":
+ //TODO: Refactor...
+ filters[job_ctl.filter.JobId] = job_ctl.filter
+ log.Debug("Type job ", type_id, " updated, topic: ", job_ctl.filter.OutputTopic, " jobid: ", job_ctl.filter.JobId)
+
+ tmp_filterParams_list := make(map[string]FilterMaps)
+ for k, v := range filterParams_list {
+ tmp_filterParams_list[k] = v
+ }
+ tmp_filterParams_list[job_ctl.filter.JobId] = job_ctl.filter.filter
+ filterParams_list = tmp_filterParams_list
+
+ tmp_topic_list := make(map[string]string)
+ for k, v := range topic_list {
+ tmp_topic_list[k] = v
+ }
+ tmp_topic_list[job_ctl.filter.JobId] = job_ctl.filter.OutputTopic
+ topic_list = tmp_topic_list
+ case "REMOVE-FILTER":
+ //TODO: Refactor...
+ log.Debug("Type job ", type_id, " removing job: ", job_ctl.filter.JobId)
+
+ tmp_filterParams_list := make(map[string]FilterMaps)
+ for k, v := range filterParams_list {
+ tmp_filterParams_list[k] = v
+ }
+ delete(tmp_filterParams_list, job_ctl.filter.JobId)
+ filterParams_list = tmp_filterParams_list
+
+ tmp_topic_list := make(map[string]string)
+ for k, v := range topic_list {
+ tmp_topic_list[k] = v
+ }
+ delete(tmp_topic_list, job_ctl.filter.JobId)
+ topic_list = tmp_topic_list
+ }
+
+ case msg := <-data_in_ch:
+ if msg == nil {
+ log.Info("Type job ", type_id, " stopped by channel signal - start_job_xml_file_data")
+
+ running = false
+ return
+ }
+ if objectstore {
+ if mc == nil {
+ var err *error
+ mc, err = create_minio_client(mc_id)
+ if err != nil {
+ log.Debug("Cannot create minio client for type job: ", type_id)
+ }
+ }
+ }
+ //TODO: Sort processed file conversions in order (FIFO)
+ jobLimiterChan <- struct{}{}
+ go run_json_job(type_id, msg, "", filterParams_list, topic_list, data_out_channel, jobLimiterChan, mc, mc_id, objectstore)
+
+ case <-time.After(1 * time.Second):
+ if !running {
+ return
+ }
+ }
+ }
+}
+
+func run_json_job(type_id string, msg *KafkaPayload, outputCompression string, filterList map[string]FilterMaps, topic_list map[string]string, data_out_channel chan *KafkaPayload, jobLimiterChan chan struct{}, mc *minio.Client, mc_id string, objectstore bool) {
+
+ //Release job limit
+ defer func() {
+ <-jobLimiterChan
+ }()
+
+ PrintMemUsage()
+
+ var evt_data FileDownloadedEvt
+ err := jsoniter.Unmarshal(msg.msg.Value, &evt_data)
+ if err != nil {
+ log.Error("Cannot parse FileDownloadedEvt for type job: ", type_id, " - discarding message, error details: ", err)
+ return
+ }
+ log.Debug("FileDownloadedEvt for job: ", type_id, " file: ", evt_data.Filename)
+
+ var reader io.Reader
+
+ //TODO -> config
+ //INPUTBUCKET := "json-file-ready"
+ INPUTBUCKET := "pm-files-json"
+ filename := ""
+ if objectstore == false {
+ filename = files_volume + "/" + evt_data.Filename
+ fi, err := os.Open(filename)
+
+ if err != nil {
+ log.Error("File: ", filename, "for type job: ", type_id, " - cannot be opened -discarding message - error details: ", err)
+ return
+ }
+ defer fi.Close()
+ reader = fi
+ } else {
+ filename = "/" + evt_data.Filename
+ if mc != nil {
+ if check_minio_bucket(mc, mc_id, INPUTBUCKET) == false {
+ log.Error("Bucket not available for reading in type job: ", type_id, "bucket: ", INPUTBUCKET)
+ return
+ }
+ tctx := context.Background()
+ mr, err := mc.GetObject(tctx, INPUTBUCKET, filename, minio.GetObjectOptions{})
+ if err != nil {
+ log.Error("Obj: ", filename, "for type job: ", type_id, " - cannot be fetched from bucket: ", INPUTBUCKET, " - discarding message, error details: ", err)
+ return
+ }
+ reader = mr
+ defer mr.Close()
+ } else {
+ log.Error("Cannot get obj: ", filename, "for type job: ", type_id, " from bucket: ", INPUTBUCKET, " - no client")
+ return
+ }
+ }
+
+ var data *[]byte
+ if strings.HasSuffix(filename, "gz") {
+ start := time.Now()
+ var buf2 bytes.Buffer
+ errb := gunzipReaderToWriter(&buf2, reader)
+ if errb != nil {
+ log.Error("Cannot decompress file/obj ", filename, "for type job: ", type_id, " - discarding message, error details", errb)
+ return
+ }
+ d := buf2.Bytes()
+ data = &d
+ log.Debug("Decompress file/obj ", filename, "for type job: ", type_id, " time:", time.Since(start).String())
+ } else {
+
+ start := time.Now()
+ d, err := io.ReadAll(reader)
+ if err != nil {
+ log.Error("Cannot read file/obj: ", filename, "for type job: ", type_id, " - discarding message, error details", err)
+ return
+ }
+ data = &d
+
+ log.Debug("Read file/obj: ", filename, "for type job: ", type_id, " time: ", time.Since(start).String())
+ }
+ var pmfile PMJsobFile
+ start := time.Now()
+ err = jsoniter.Unmarshal(*data, &pmfile)
+ log.Debug("Json unmarshal obj: ", filename, " time: ", time.Since(start).String())
+
+ if err != nil {
+ log.Error("Msg could not be unmarshalled - discarding message, obj: ", filename, " - error details:", err)
+ return
+ }
+ for k, v := range filterList {
+ var kmsg *KafkaPayload = new(KafkaPayload)
+ kmsg.msg = new(kafka.Message)
+ kmsg.msg.Key = nil
+
+ if len(v.sourceNameMap) > 0 || len(v.measObjInstIdsMap) > 0 || len(v.measTypesMap) > 0 || len(v.measObjClassMap) > 0 {
+ b := json_pm_filter(evt_data.Filename, &pmfile, v.sourceNameMap, v.measObjClassMap, v.measObjInstIdsMap, v.measTypesMap)
+ if b == nil {
+ log.Info("File/obj ", filename, "for job: ", k, " - empty after filering, discarding message ")
+ return
+ }
+ kmsg.msg.Value = *b
+ }
+ // if outputCompression == "json.gz" {
+ // start := time.Now()
+ // var buf bytes.Buffer
+ // err := gzipWrite(&buf, &kmsg.msg.Value)
+ // if err != nil {
+ // log.Error("Cannot compress file/obj ", filename, "for job: ", job_id, " - discarding message, error details", err)
+ // return
+
+ // }
+ // kmsg.msg.Value = buf.Bytes()
+ // log.Debug("Compress file/obj ", filename, "for job: ", job_id, " time:", time.Since(start).String())
+ // }
+
+ kmsg.msg.Key = nil
+
+ kmsg.topic = topic_list[k]
+ kmsg.jobid = k
+
+ data_out_channel <- kmsg
+ }
+
+}
+
+func json_pm_filter(resource string, data *PMJsobFile, sourceNameMap map[string]bool, measObjClassMap map[string]bool, measObjInstIdsMap map[string]bool, measTypesMap map[string]bool) *[]byte {
+
+ filter_req := true
+ start := time.Now()
+ if len(sourceNameMap) != 0 {
+ if !sourceNameMap[data.Event.CommonEventHeader.SourceName] {
+ filter_req = false
+ return nil
+ }
+ }
+ if filter_req {
+ modified := false
+ var temp_mil []MeasInfoList
+ for _, zz := range data.Event.Perf3GppFields.MeasDataCollection.SMeasInfoList {
+
+ check_cntr := false
+ var cnt_flags []bool
+ if len(measTypesMap) > 0 {
+ c_cntr := 0
+ var temp_mtl []string
+ for _, v := range zz.MeasTypes.SMeasTypesList {
+ if measTypesMap[v] {
+ cnt_flags = append(cnt_flags, true)
+ c_cntr++
+ temp_mtl = append(temp_mtl, v)
+ } else {
+ cnt_flags = append(cnt_flags, false)
+ }
+ }
+ if c_cntr > 0 {
+ check_cntr = true
+ zz.MeasTypes.SMeasTypesList = temp_mtl
+ } else {
+ modified = true
+ continue
+ }
+ }
+ keep := false
+ var temp_mvl []MeasValues
+ for _, yy := range zz.MeasValuesList {
+ keep_class := false
+ keep_inst := false
+ keep_cntr := false
+
+ dna := strings.Split(yy.MeasObjInstID, ",")
+ instName := dna[len(dna)-1]
+ cls := strings.Split(dna[len(dna)-1], "=")[0]
+
+ if len(measObjClassMap) > 0 {
+ if measObjClassMap[cls] {
+ keep_class = true
+ }
+ } else {
+ keep_class = true
+ }
+
+ if len(measObjInstIdsMap) > 0 {
+ if measObjInstIdsMap[instName] {
+ keep_inst = true
+ }
+ } else {
+ keep_inst = true
+ }
+
+ if check_cntr {
+ var temp_mrl []MeasResults
+ cnt_p := 1
+ for _, v := range yy.MeasResultsList {
+ if cnt_flags[v.P-1] {
+ v.P = cnt_p
+ cnt_p++
+ temp_mrl = append(temp_mrl, v)
+ }
+ }
+ yy.MeasResultsList = temp_mrl
+ keep_cntr = true
+ } else {
+ keep_cntr = true
+ }
+ if keep_class && keep_cntr && keep_inst {
+ keep = true
+ temp_mvl = append(temp_mvl, yy)
+ }
+ }
+ if keep {
+ zz.MeasValuesList = temp_mvl
+ temp_mil = append(temp_mil, zz)
+ modified = true
+ }
+
+ }
+ //Only if modified
+ if modified {
+ if len(temp_mil) == 0 {
+ log.Debug("Msg filtered, nothing found, discarding, obj: ", resource)
+ return nil
+ }
+ data.Event.Perf3GppFields.MeasDataCollection.SMeasInfoList = temp_mil
+ }
+ }
+ log.Debug("Filter: ", time.Since(start).String())
+
+ start = time.Now()
+ j, err := jsoniter.Marshal(&data)
+
+ log.Debug("Json marshal obj: ", resource, " time: ", time.Since(start).String())
+
+ if err != nil {
+ log.Error("Msg could not be marshalled discarding message, obj: ", resource, ", error details: ", err)
+ return nil
+ }
+
+ log.Debug("Filtered json obj: ", resource, " len: ", len(j))
+ return &j
+}
diff --git a/pm-file-flow-demo/kafka-pm-producer/server.crt b/pm-file-flow-demo/kafka-pm-producer/server.crt
new file mode 100644
index 0000000..bfadcd0
--- /dev/null
+++ b/pm-file-flow-demo/kafka-pm-producer/server.crt
@@ -0,0 +1,9 @@
+-----BEGIN CERTIFICATE-----
+MIIBRzCBzQIJAMUB5z+vkZd3MAoGCCqGSM49BAMCMA0xCzAJBgNVBAYTAlNWMB4X
+DTIyMDcwODAyNTU1MVoXDTMyMDcwNTAyNTU1MVowDTELMAkGA1UEBhMCU1YwdjAQ
+BgcqhkjOPQIBBgUrgQQAIgNiAASQpPx3X6Mt34+1CsvXHqT3x+4QITfVD4xHacuo
+Jsy3CHmmayORBrpf3gEc+lZZ4qW9jGO2HCc6aPu8TJtaZZtW+/FRk+1ULkxXQNu5
+a+n6ThVXnwCAnyXl92U/xBDzpcswCgYIKoZIzj0EAwIDaQAwZgIxANSn2wmiNLAV
+N/z3QXa7EXXwNj5t0fNSg8WbO9QK+6MIxaiyTzoNgETs3EtXUu21NAIxAL/O+PTd
+3Di0xJzTj3/Bg6WOmWhEmOcd7ohpk0wRIN1kD4VGvsLL4dTH9PxqQUqMeQ==
+-----END CERTIFICATE-----
diff --git a/pm-file-flow-demo/kafka-pm-producer/server.key b/pm-file-flow-demo/kafka-pm-producer/server.key
new file mode 100644
index 0000000..386f7cb
--- /dev/null
+++ b/pm-file-flow-demo/kafka-pm-producer/server.key
@@ -0,0 +1,9 @@
+-----BEGIN EC PARAMETERS-----
+BgUrgQQAIg==
+-----END EC PARAMETERS-----
+-----BEGIN EC PRIVATE KEY-----
+MIGkAgEBBDDGXu7K9Q48TDMXTgni66KtIyc6NZISg/XE7SgIzz6KvU0wM/4Djvxm
+m1F01DrCXoigBwYFK4EEACKhZANiAASQpPx3X6Mt34+1CsvXHqT3x+4QITfVD4xH
+acuoJsy3CHmmayORBrpf3gEc+lZZ4qW9jGO2HCc6aPu8TJtaZZtW+/FRk+1ULkxX
+QNu5a+n6ThVXnwCAnyXl92U/xBDzpcs=
+-----END EC PRIVATE KEY-----
diff --git a/pm-file-flow-demo/kube-proj/README.md b/pm-file-flow-demo/kube-proj/README.md
new file mode 100644
index 0000000..e26316d
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/README.md
@@ -0,0 +1,225 @@
+
+## Demo project in kubernetes
+
+A demo showing pm file flow from simlulates network elements to filtered pm data for rAPPs.
+
+The demo has been tested with kubernetes in local docker desktop as well as in remote multi-workernode kubernetes.
+
+Depending on running in local or remote kubernetes, some differnt config is neeed.
+
+IMPORTANT \
+If running on a remote kubernetes, a externally accessible image repo is needed - for a example a free account at docker-hub
+
+
+The following env var must be set for running with local kubernetes.
+
+`export KHOST=localhost` \
+`export KUBECONFIG=` - this assumes that kubectl is configured to use your local kubernetes
+
+The following env var must be set for running with local kubernetes.
+
+`export KHOST=<ip-of-the-cluster>` - run cmd "kubectl cluster-info" in you cloud instance to find the ip\
+`export KUBECONFIG=<config file for the instance>` - file can be downloaded from the cloud instance
+
+
+Note that all script in this readme is intended to be executed from your local machine regardless if local or remote kubernetes is used.
+
+
+## Run in kuberetes - local or remote kubernetes
+
+### Clone the protoyping repo:
+
+`git clone https://gerrit.nordix.org/local/oransc/nonrtric-prototyping`
+
+### Build Datafile component
+
+`cd datafile`
+
+`mvn install docker:build -Dmaven.test.skip=true`
+
+If running in remote cluster, push the image to external image repo\
+`./prepare.sh <external-image-repo>`
+
+
+### Build Kafka pm producer
+
+`cd pm-file-flow-demo/kafka-pm-producer`
+
+Build for local kubernetes\
+`./build.sh no-push`
+
+Build for remote kubernetes\
+`./build.sh <external-image-repo>`
+
+### Build Https server
+
+`cd pm-file-flow-demo/https-server`
+
+Build for local kubernetes\
+`./build.sh no-push`
+
+Build for remote kubernetes\
+`./build.sh <external-image-repo>`
+
+### Build rapp
+
+`cd pm-file-flow-demo/rapp`
+
+Build for local kubernetes\
+`./build.sh no-push`
+
+Build for remote kubernetes\
+`./build.sh <external-image-repo>`
+
+### Start demo
+
+NOTE: Dirs/files are in some cases mounted from the file system.\
+If you run local kubernetes you need to change the env var HOST_MNT_PATH (see kube-setup.sh) to for example ./local-mnt.
+
+If you run remote kubernetes you need to change the env var HOST_MNT_PATH to a path (disk) available on all worker nodes. In the xerces cloud the current value of the env var, HOST_MNT_PATH="/dockerdata-nfs", should work fine, although disk space is very limited.
+
+`cd pm-file-flow-demo/docker-proj`
+
+There are several ways to start and run the demo, with file or minio file storage, single or multi instances of data-file collector and kafka.
+Additional configuration can be made in the setup script.
+
+Command usage: `kube-setup.sh -k 1 -f file|minio -nm <num-minio-servers> -ms HOSTPATH|EMPTYDIR -ipp Always|IfNotPresent|Never -repo local|<external-image-repo>`
+
+Paratameters: \
+-k - Number of kafka brokers, only 1 is currently supported \
+-f - Select minio or raw file storage for pm files (xml/json) \
+-nm - Number of minio servers in the minio cluster (1 is enough) \
+-ms - Minio backend storage, EMPTYDIR (temp disk for pod) or HOSTPATH (mounted file system)
+-ipp - Image pull policy, Always (for remote kube) or Never (for local kube) \
+-repo - Image repo, local for local kube and name of external report for remote kube \
+
+
+Example cmd: \
+`./kube-setup.sh -k 1 -f minio -nm 1 -ms EMPTYDIR -ipp Never -repo local`
+
+Let the script finish, the script may ask for a few actions that need to done during setup.
+
+If the script fails, make sure to clean the setup before attempting a new setup.
+
+`./kube-tear-down.sh`
+
+The following components can be scaled in runtime, up to 10 instances (see kubectl get sts). Load will be shared automatically between available instances.
+- nonrtric kp
+- nonrtric kpadp
+- nonrtric kpm
+- onap dfc
+
+
+### Tools for monitoring
+
+Open browser to kowl (kafka gui) - watch topics, messages etc\
+browser: `localhost:31767`
+
+Open brower to minio - available only if minio is given on the cmd line when starting the demo\
+user: admin pwd: adminadmin\
+browser: `localhost:31768`
+
+For the following, run curl from within a container with curl installed.\
+Eg. `kubectl exec -it minio-0 -n nonrtric -- bash`
+
+dfc statictics, replace dfc-0 with dfc-1 etc if more dfcs are started\
+`curl -k https://dfc-0.dfc.onap:8433/status`\
+
+kafka-producer (xml->json), replace kp-0 with kp-1 etc if more dfcs are started\
+`kp-0.kp.nonrtric:80/statistics`
+
+kafka-producer (json->json), replace kpm-0 with kpm-1 etc if more dfcs are started\
+`kpm-0.kpm.nonrtric:80/statistics`
+
+dmaap-adapter (json->json), replace kpadp-0 with kpadp-1 etc if more dfcs are started\
+`kpadp-0.kpadp.nonrtric:8084/statistics`
+
+
+### Push data - basic
+
+The basic setup creates:
+- one job in a golang-kafka-producer (instance kp-0) for xml to json conversion
+- one job in a golang-kafka-producer (instance kpm-0)) json filtering
+- one job in a dmaap-adapter (kpadp-0) for json filtering
+
+For additional producer setup, see "Push data - extended below"
+
+`cd pm-file-flow-demo/kube-proj`
+
+File ready events can be pushed to the ves collector or pushed directly to the topic for file ready events (bypassing the ves collector).
+
+Push to ves collector:
+
+Usage: `push-to-ves-collector.sh <node-count> <num-of-events> <node-name-base> <file-extension> sftp|ftpes|https <num-servers> [hist]`
+
+Parameters:\
+node-count - number of unique NEs\
+num-of-events - number of events per NE\
+node-name-base - NE name prefix\
+file-extension - xml or xml.gz \
+https - use https for file download \
+num-servers - number of sftp/ftpes/https servers to simulate NEs (10 is default) \
+hist - include 24h of historical ropfiles (96 files) in each event\
+
+
+Usage: ` push-to-file-ready-topic.sh <node-count> <num-of-events> <node-name-base> <file-extension> sftp|ftpes|https <num-servers> [hist]`
+
+Parameter: \
+Same as `push-to-ves-collector.sh`
+
+Once the events has been pushed the progress can be viewed in the monitoring tools described above.
+
+If several sets of data shall be pushed, just change the parameter `<node-name-base>` to make the new files unique.
+
+### Push data - extended
+
+#### Set of jobs/rapps
+
+To simulate a larger amount of jobs, a number of jobs can be set up to send filtered json to individual topics.
+
+`cd pm-file-flow-demo/kube-proj`
+
+Usage: `x-jobs.sh file|minio topics|no-topics jobs|rapps|none [<num-jobs>]`
+
+Parameter with * must match the parameters in the setup script
+
+Parameters/
+file* - raw file storage \
+minio* - file storage in minio \
+topics - create unique topics\
+no-topics - do not create unique topics. Topics will be autocreated by the jobs/rapps\
+jobs - create jobs\
+rapps - create rapps\
+none - do not create jobs or rapps
+num-job - number of jobs in each producer (there are two producer applicable)
+
+The parameters file and minio must match the parameters used in the kube-setup.sh script.
+
+Warning: The rapp parameter will create two docker pod for each job - bigger number may exhaust the docker resources on your machine if you run in local kubernetes
+
+#### Historical pm data
+
+A job can be setup to seach and filter historical pm files (previously downloaded).
+Certain requirements apply, see the script.
+
+`cd pm-file-flow-demo/kube-proj`
+
+Usage: `./hist-job.sh`
+
+No parameters needed
+
+
+### Clean up
+
+`cd pm-file-flow-demo/scripts`
+
+Run the script to remove all docker containers.
+
+`./docker-tear-down.sh`
+
+To also cleanup files.
+
+`./clean-shared-volume.sh`
+
+`./clean-ne-files.sh`
+
diff --git a/pm-file-flow-demo/kube-proj/config/dfc-common/template-truststore.jks b/pm-file-flow-demo/kube-proj/config/dfc-common/template-truststore.jks
new file mode 100644
index 0000000..50a0f9e
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/dfc-common/template-truststore.jks
Binary files differ
diff --git a/pm-file-flow-demo/kube-proj/config/dfc-common/truststore.pass b/pm-file-flow-demo/kube-proj/config/dfc-common/truststore.pass
new file mode 100755
index 0000000..b915b0f
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/dfc-common/truststore.pass
@@ -0,0 +1 @@
+policy_agent
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/config/dfc/application-template.yaml b/pm-file-flow-demo/kube-proj/config/dfc/application-template.yaml
new file mode 100644
index 0000000..e1c827b
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/dfc/application-template.yaml
@@ -0,0 +1,80 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+spring:
+ profiles:
+ active: prod
+management:
+ endpoints:
+ web:
+ exposure:
+ include: "loggers,logfile,health,info,metrics"
+server:
+ port: 8433
+ ssl:
+ key-store-type: JKS
+ key-store-password: policy_agent
+ key-store: config/keystore.jks
+ key-password: policy_agent
+ key-alias: policy_agent
+logging:
+ level:
+ ROOT: WARN
+ org.onap: WARN
+ org.springframework: WARN
+ #TRACE
+ org.springframework.data: WARN
+ org.springframework.web.reactive.function.client.ExchangeFunctions: WARN
+ org.onap.dcaegen2.collectors.datafile: WARN
+ #org.onap.dcaegen2.collectors.datafile: TRACE
+
+ file:
+ name: /var/log/ONAP/application.log
+app:
+ filepath: config/datafile_endpoints_test.json
+ collected-files-path: "/tmp/onap_datafile/"
+ # KAFKA boostrap servers. This is only needed if there are Information Types that uses a kafkaInputTopic
+ # several redundant boostrap servers can be specified, separated by a comma ','.
+ kafka:
+ bootstrap-servers: kafka-1.onap:9092
+ # output topic
+ collected-file-topic: collected-file
+ client-id: datafile-$DFC_IDX
+ # input topic
+ file-ready-event-topic: file-ready
+ sftp:
+ known-hosts-file-path:
+ strict-host-key-checking: false
+ ssl:
+ key-store-password-file: /opt/app/datafile/config/ftps_keystore.pass
+ key-store: /opt/app/datafile/config/ftps_keystore.p12
+ trust-store-password-file: /opt/app/datafile/config/truststore.pass
+ trust-store: /opt/app/datafile/config/truststore.jks
+ s3:
+ endpointOverride: $DFC_MINIO
+ accessKeyId: admin
+ secretAccessKey: adminadmin
+ bucket: ropfiles
+
+springdoc:
+ show-actuator: true
+ swagger-ui.disable-swagger-default-url: true
+################
+
+
+
+
diff --git a/pm-file-flow-demo/kube-proj/config/dfc/truststore.jks b/pm-file-flow-demo/kube-proj/config/dfc/truststore.jks
new file mode 100644
index 0000000..82d0700
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/dfc/truststore.jks
Binary files differ
diff --git a/pm-file-flow-demo/kube-proj/config/dmaapmr/mr/MsgRtrApi.properties b/pm-file-flow-demo/kube-proj/config/dmaapmr/mr/MsgRtrApi.properties
new file mode 100644
index 0000000..233b6d6
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/dmaapmr/mr/MsgRtrApi.properties
@@ -0,0 +1,168 @@
+# LICENSE_START=======================================================
+# org.onap.dmaap
+# ================================================================================
+# Copyright © 2021 Nordix Foundation. All rights reserved.
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=========================================================
+#
+# ECOMP is a trademark and service mark of AT&T Intellectual Property.
+#
+###############################################################################
+###############################################################################
+##
+## Cambria API Server config
+##
+## Default values are shown as commented settings.
+##
+###############################################################################
+##
+## HTTP service
+##
+## 3904 is standard as of 7/29/14.
+#
+## Zookeeper Connection
+##
+## Both Cambria and Kafka make use of Zookeeper.
+##
+config.zk.servers=zookeeper.onap:32181
+#zookeeper:2181
+
+###############################################################################
+##
+## Kafka Connection
+##
+## Items below are passed through to Kafka's producer and consumer
+## configurations (after removing "kafka.")
+## if you want to change request.required.acks it can take this one value
+#kafka.metadata.broker.list=localhost:9092,localhost:9093
+#kafka.metadata.broker.list={{.Values.kafka.name}}:{{.Values.kafka.port}}
+kafka.metadata.broker.list=kafka-1.onap:9092
+#kafka-1:9092
+##kafka.request.required.acks=-1
+#kafka.client.zookeeper=${config.zk.servers}
+consumer.timeout.ms=100
+zookeeper.connection.timeout.ms=6000
+zookeeper.session.timeout.ms=20000
+zookeeper.sync.time.ms=2000
+auto.commit.interval.ms=1000
+fetch.message.max.bytes =1000000
+auto.commit.enable=false
+
+#(backoff*retries > zksessiontimeout)
+kafka.rebalance.backoff.ms=10000
+kafka.rebalance.max.retries=6
+
+###############################################################################
+##
+## Secured Config
+##
+## Some data stored in the config system is sensitive -- API keys and secrets,
+## for example. to protect it, we use an encryption layer for this section
+## of the config.
+##
+## The key is a base64 encode AES key. This must be created/configured for
+## each installation.
+#cambria.secureConfig.key=
+##
+## The initialization vector is a 16 byte value specific to the secured store.
+## This must be created/configured for each installation.
+#cambria.secureConfig.iv=
+
+## Southfield Sandbox
+cambria.secureConfig.key=b/7ouTn9FfEw2PQwL0ov/Q==
+cambria.secureConfig.iv=wR9xP5k5vbz/xD0LmtqQLw==
+authentication.adminSecret=fe3cCompound
+
+
+###############################################################################
+##
+## Consumer Caching
+##
+## Kafka expects live connections from the consumer to the broker, which
+## obviously doesn't work over connectionless HTTP requests. The Cambria
+## server proxies HTTP requests into Kafka consumer sessions that are kept
+## around for later re-use. Not doing so is costly for setup per request,
+## which would substantially impact a high volume consumer's performance.
+##
+## This complicates Cambria server failover, because we often need server
+## A to close its connection before server B brings up the replacement.
+##
+
+## The consumer cache is normally enabled.
+#cambria.consumer.cache.enabled=true
+
+## Cached consumers are cleaned up after a period of disuse. The server inspects
+## consumers every sweepFreqSeconds and will clean up any connections that are
+## dormant for touchFreqMs.
+#cambria.consumer.cache.sweepFreqSeconds=15
+cambria.consumer.cache.touchFreqMs=120000
+##stickforallconsumerrequests=false
+## The cache is managed through ZK. The default value for the ZK connection
+## string is the same as config.zk.servers.
+#cambria.consumer.cache.zkConnect=${config.zk.servers}
+
+##
+## Shared cache information is associated with this node's name. The default
+## name is the hostname plus the HTTP service port this host runs on. (The
+## hostname is determined via InetAddress.getLocalHost ().getCanonicalHostName(),
+## which is not always adequate.) You can set this value explicitly here.
+##
+#cambria.api.node.identifier=<use-something-unique-to-this-instance>
+
+#cambria.rateLimit.maxEmptyPollsPerMinute=30
+#cambria.rateLimitActual.delay.ms=10
+
+###############################################################################
+##
+## Metrics Reporting
+##
+## This server can report its metrics periodically on a topic.
+##
+#metrics.send.cambria.enabled=true
+#metrics.send.cambria.topic=cambria.apinode.metrics
+#msgrtr.apinode.metrics.dmaap
+#metrics.send.cambria.sendEverySeconds=60
+
+cambria.consumer.cache.zkBasePath=/fe3c/cambria/consumerCache
+consumer.timeout=17
+default.partitions=3
+default.replicas=1
+##############################################################################
+#100mb
+maxcontentlength=10000
+
+
+##############################################################################
+#AAF Properties
+msgRtr.namespace.aaf=org.onap.dmaap.mr.topic
+msgRtr.topicfactory.aaf=org.onap.dmaap.mr.topicFactory|:org.onap.dmaap.mr.topic:
+enforced.topic.name.AAF=org.onap.dmaap.mr
+forceAAF=false
+transidUEBtopicreqd=false
+defaultNSforUEB=org.onap.dmaap.mr
+##############################################################################
+#Mirror Maker Agent
+
+msgRtr.mirrormakeradmin.aaf=org.onap.dmaap.mr.mirrormaker|*|admin
+msgRtr.mirrormakeruser.aaf=org.onap.dmaap.mr.mirrormaker|*|user
+msgRtr.mirrormakeruser.aaf.create=org.onap.dmaap.mr.topicFactory|:org.onap.dmaap.mr.topic:
+msgRtr.mirrormaker.timeout=15000
+msgRtr.mirrormaker.topic=org.onap.dmaap.mr.mirrormakeragent
+msgRtr.mirrormaker.consumergroup=mmagentserver
+msgRtr.mirrormaker.consumerid=1
+
+kafka.max.poll.interval.ms=300000
+kafka.heartbeat.interval.ms=60000
+kafka.session.timeout.ms=240000
+kafka.max.poll.records=1000
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/config/dmaapmr/mr/cadi.properties b/pm-file-flow-demo/kube-proj/config/dmaapmr/mr/cadi.properties
new file mode 100644
index 0000000..75c782a
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/dmaapmr/mr/cadi.properties
@@ -0,0 +1,38 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2021 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+#Removed to be disable aaf in test env
+#aaf_locate_url=https://aaf-onap-test.osaaf.org:8095\
+aaf_url=https://AAF_LOCATE_URL/onap.org.osaaf.aaf.service:2.1
+aaf_env=DEV
+aaf_lur=org.onap.aaf.cadi.aaf.v2_0.AAFLurPerm
+
+#Removed to be disable aaf in test env
+# cadi_truststore=/appl/dmaapMR1/etc/org.onap.dmaap.mr.trust.jks
+# cadi_truststore_password=8FyfX+ar;0*oXchNX
+
+cadi_keyfile=/appl/dmaapMR1/etc/org.onap.dmaap.mr.keyfile
+
+cadi_alias=dmaapmr@mr.dmaap.onap.org
+cadi_keystore=/appl/dmaapMR1/etc/org.onap.dmaap.mr.p12
+cadi_keystore_password=GDQttV7)BlOvWMf6F7tz&cjy
+cadi_x509_issuers=CN=intermediateCA_1, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_7, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_9, OU=OSAAF, O=ONAP, C=US
+
+cadi_loglevel=INFO
+cadi_protocols=TLSv1.1,TLSv1.2
+cadi_latitude=37.78187
+cadi_longitude=-122.26147
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/config/https/certs/copy-certs.sh b/pm-file-flow-demo/kube-proj/config/https/certs/copy-certs.sh
new file mode 100755
index 0000000..07c3245
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/https/certs/copy-certs.sh
@@ -0,0 +1,21 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+# Script for pm-https-server initContainer
+SET_INDEX=${HOSTNAME##*-}
+cp /tmp/certs/https-$SET_INDEX.crt /certs/server.crt
+cp /tmp/certs/https-$SET_INDEX.key /certs/server.key
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/config/https/certs/gen-certs.sh b/pm-file-flow-demo/kube-proj/config/https/certs/gen-certs.sh
new file mode 100755
index 0000000..8cbca1e
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/https/certs/gen-certs.sh
@@ -0,0 +1,89 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+echo "Generating https certs"
+SD=$(dirname -- "$0")
+echo "script-home: "$SD
+
+cd $SD
+
+print_usage() {
+ echo "Usage: gen-certs.sh <num-certs>"
+ exit 1
+}
+
+check_error() {
+ if [ $1 -ne 0 ]; then
+ echo "Failed $2"
+ echo "Exiting..."
+ exit 1
+ fi
+}
+
+if [ $# -ne 1 ]; then
+ print_usage
+fi
+
+rm *.crt
+rm *.key
+
+echo "Generating ca cert and key"
+echo " Generating ca key"
+openssl genrsa 2048 > ca.key 2> /dev/null
+check_error $?
+
+echo " Generating ca cert"
+cat <<__EOF__ | openssl req -new -x509 -nodes -days 365000 -key ca.key -out httpsca.crt 2> /dev/null
+SE
+.
+.
+EST
+EST
+$SRV
+.
+__EOF__
+check_error $?
+
+
+for (( i=0; i<${1}; i++ )); do
+ SRV="pm-https-server-$i.pm-https-server.ran"
+
+ echo " Generating cert and key for server $SRV"
+cat <<__EOF__ | openssl req -newkey rsa:2048 -nodes -days 365000 -keyout https-$i.key -out https-req$i.crt 2> /dev/null
+SE
+.
+.
+ERIC
+ERIC
+$SRV
+.
+
+__EOF__
+ check_error $?
+
+ openssl x509 -req -days 365000 -set_serial 01 -in https-req$i.crt -out https-$i.crt -CA httpsca.crt -CAkey ca.key
+ check_error $?
+ echo " Verifying cert towards ca cert"
+ openssl verify -CAfile httpsca.crt httpsca.crt https-$i.crt
+ check_error $?
+
+done
+
+echo "DONE"
+exit 0
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/config/ics/application.yaml b/pm-file-flow-demo/kube-proj/config/ics/application.yaml
new file mode 100644
index 0000000..2434fa3
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/ics/application.yaml
@@ -0,0 +1,69 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+spring:
+ profiles:
+ active: prod
+ main:
+ allow-bean-definition-overriding: true
+ aop:
+ auto: false
+springdoc:
+ show-actuator: true
+management:
+ endpoints:
+ web:
+ exposure:
+ # Enabling of springboot actuator features. See springboot documentation.
+ include: "loggers,logfile,health,info,metrics,threaddump,heapdump"
+
+logging:
+ # Configuration of logging
+ level:
+ ROOT: ERROR
+ org.springframework: ERROR
+ org.springframework.data: ERROR
+ org.springframework.web.reactive.function.client.ExchangeFunctions: ERROR
+ org.oransc.ics: DEBUG
+ file:
+ name: /var/log/information-coordinator-service/application.log
+server:
+ # Configuration of the HTTP/REST server. The parameters are defined and handeled by the springboot framework.
+ # See springboot documentation.
+ port : 8434
+ http-port: 8083
+ ssl:
+ key-store-type: JKS
+ key-store-password: policy_agent
+ key-store: /opt/app/information-coordinator-service/etc/cert/keystore.jks
+ key-password: policy_agent
+ key-alias: policy_agent
+app:
+ webclient:
+ # Configuration of the trust store used for the HTTP client (outgoing requests)
+ # The file location and the password for the truststore is only relevant if trust-store-used == true
+ # Note that the same keystore as for the server is used.
+ trust-store-used: false
+ trust-store-password: policy_agent
+ trust-store: /opt/app/information-coordinator-service/etc/cert/truststore.jks
+ # Configuration of usage of HTTP Proxy for the southbound accesses.
+ # The HTTP proxy (if configured) will only be used for accessing NearRT RIC:s
+ http.proxy-host:
+ http.proxy-port: 0
+ vardata-directory: /var/information-coordinator-service
+ # If the file name is empty, no authorzation token is sent
+ auth-token-file:
diff --git a/pm-file-flow-demo/kube-proj/config/kowl/config.yaml b/pm-file-flow-demo/kube-proj/config/kowl/config.yaml
new file mode 100644
index 0000000..8059c18
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/kowl/config.yaml
@@ -0,0 +1,20 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+kafka:
+ brokers:
+ - kafka-1.onap:9092
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/config/kp/application_configuration-file.json b/pm-file-flow-demo/kube-proj/config/kp/application_configuration-file.json
new file mode 100644
index 0000000..e549eca
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/kp/application_configuration-file.json
@@ -0,0 +1,12 @@
+{
+ "types": [
+ {
+ "id": "json-file-data",
+ "kafkaInputTopic": "json-file-ready-kp",
+ "inputJobType": "xml-file-data",
+ "inputJobDefinition": {
+ "kafkaOutputTopic": "json-file-ready-kp"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/config/kp/application_configuration-minio.json b/pm-file-flow-demo/kube-proj/config/kp/application_configuration-minio.json
new file mode 100644
index 0000000..a4648c1
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/kp/application_configuration-minio.json
@@ -0,0 +1,12 @@
+{
+ "types": [
+ {
+ "id": "json-file-data-from-filestore",
+ "kafkaInputTopic": "json-file-ready-kp",
+ "inputJobType": "xml-file-data-to-filestore",
+ "inputJobDefinition": {
+ "kafkaOutputTopic": "json-file-ready-kp"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/config/kp/application_configuration.json b/pm-file-flow-demo/kube-proj/config/kp/application_configuration.json
new file mode 100644
index 0000000..a4648c1
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/kp/application_configuration.json
@@ -0,0 +1,12 @@
+{
+ "types": [
+ {
+ "id": "json-file-data-from-filestore",
+ "kafkaInputTopic": "json-file-ready-kp",
+ "inputJobType": "xml-file-data-to-filestore",
+ "inputJobDefinition": {
+ "kafkaOutputTopic": "json-file-ready-kp"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/config/kpadp/application-template-file.yaml b/pm-file-flow-demo/kube-proj/config/kpadp/application-template-file.yaml
new file mode 100644
index 0000000..64b7538
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/kpadp/application-template-file.yaml
@@ -0,0 +1,83 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2021-2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+spring:
+ profiles:
+ active: prod
+ main:
+ allow-bean-definition-overriding: true
+ aop:
+ auto: false
+management:
+ endpoints:
+ web:
+ exposure:
+ # Enabling of springboot actuator features. See springboot documentation.
+ include: "loggers,logfile,health,info,metrics,threaddump,heapdump"
+springdoc:
+ show-actuator: true
+logging:
+ # Configuration of logging
+ level:
+ ROOT: WARN
+ org.apache.kafka: WARN
+ org.springframework: ERROR
+ org.springframework.data: ERROR
+ org.springframework.web.reactive.function.client.ExchangeFunctions: ERROR
+ org.oran.dmaapadapter: INFO
+
+ file:
+ name: /var/log/dmaap-adapter-service/application.log
+server:
+ # Configuration of the HTTP/REST server. The parameters are defined and handeled by the springboot framework.
+ # See springboot documentation.
+ port : 8435
+ http-port: 8084
+ ssl:
+ key-store-type: JKS
+ key-store-password: policy_agent
+ key-store: /opt/app/dmaap-adapter-service/etc/cert/keystore.jks
+ key-password: policy_agent
+ key-alias: policy_agent
+app:
+ webclient:
+ # Configuration of the trust store used for the HTTP client (outgoing requests)
+ # The file location and the password for the truststore is only relevant if trust-store-used == true
+ # Note that the same keystore as for the server is used.
+ trust-store-used: false
+ trust-store-password: policy_agent
+ trust-store: /opt/app/dmaap-adapter-service/etc/cert/truststore.jks
+ # Configuration of usage of HTTP Proxy for the southbound accesses.
+ # The HTTP proxy (if configured) will only be used for accessing NearRT RIC:s
+ http.proxy-host:
+ http.proxy-port: 0
+ ics-base-url: http://informationservice.nonrtric:8083
+ # Location of the component configuration file. The file will only be used if the Consul database is not used;
+ # configuration from the Consul will override the file.
+ configuration-filepath: /opt/app/dmaap-adapter-service/data/application_configuration.json
+ dmaap-base-url: http://dradmin:dradmin@localhost:2222
+ # The url used to adress this component. This is used as a callback url sent to other components.
+ dmaap-adapter-base-url: http://kpadp-$KPADP_IDX.kpadp.nonrtric:8084
+ # KAFKA boostrap servers. This is only needed if there are Information Types that uses a kafkaInputTopic
+ # several redundant boostrap servers can be specified, separated by a comma ','.
+ kafka:
+ bootstrap-servers: kafka-1.onap:9092
+ # The maximum number of records returned in a single call to poll() (default 100)
+ max-poll-records: 500
+ # If the file name is empty, no authorization token is used
+ auth-token-file:
+ pm-files-path: /pm-files
diff --git a/pm-file-flow-demo/kube-proj/config/kpadp/application-template-minio.yaml b/pm-file-flow-demo/kube-proj/config/kpadp/application-template-minio.yaml
new file mode 100644
index 0000000..970bd80
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/kpadp/application-template-minio.yaml
@@ -0,0 +1,89 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2021-2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+spring:
+ profiles:
+ active: prod
+ main:
+ allow-bean-definition-overriding: true
+ aop:
+ auto: false
+management:
+ endpoints:
+ web:
+ exposure:
+ # Enabling of springboot actuator features. See springboot documentation.
+ include: "loggers,logfile,health,info,metrics,threaddump,heapdump"
+springdoc:
+ show-actuator: true
+logging:
+ # Configuration of logging
+ level:
+ ROOT: WARN
+ org.apache.kafka: WARN
+ org.springframework: ERROR
+ org.springframework.data: ERROR
+ org.springframework.web.reactive.function.client.ExchangeFunctions: ERROR
+ org.oran.dmaapadapter: INFO
+
+ file:
+ name: /var/log/dmaap-adapter-service/application.log
+server:
+ # Configuration of the HTTP/REST server. The parameters are defined and handeled by the springboot framework.
+ # See springboot documentation.
+ port : 8435
+ http-port: 8084
+ ssl:
+ key-store-type: JKS
+ key-store-password: policy_agent
+ key-store: /opt/app/dmaap-adapter-service/etc/cert/keystore.jks
+ key-password: policy_agent
+ key-alias: policy_agent
+app:
+ webclient:
+ # Configuration of the trust store used for the HTTP client (outgoing requests)
+ # The file location and the password for the truststore is only relevant if trust-store-used == true
+ # Note that the same keystore as for the server is used.
+ trust-store-used: false
+ trust-store-password: policy_agent
+ trust-store: /opt/app/dmaap-adapter-service/etc/cert/truststore.jks
+ # Configuration of usage of HTTP Proxy for the southbound accesses.
+ # The HTTP proxy (if configured) will only be used for accessing NearRT RIC:s
+ http.proxy-host:
+ http.proxy-port: 0
+ ics-base-url: http://informationservice.nonrtric:8083
+ # Location of the component configuration file. The file will only be used if the Consul database is not used;
+ # configuration from the Consul will override the file.
+ configuration-filepath: /opt/app/dmaap-adapter-service/data/application_configuration.json
+ dmaap-base-url: http://dradmin:dradmin@localhost:2222
+ # The url used to adress this component. This is used as a callback url sent to other components.
+ dmaap-adapter-base-url: http://kpadp-$KPADP_IDX.kpadp.nonrtric:8084
+ # KAFKA boostrap servers. This is only needed if there are Information Types that uses a kafkaInputTopic
+ # several redundant boostrap servers can be specified, separated by a comma ','.
+ kafka:
+ bootstrap-servers: kafka-1.onap:9092
+ # The maximum number of records returned in a single call to poll() (default 100)
+ max-poll-records: 500
+ # If the file name is empty, no authorization token is used
+ auth-token-file:
+ pm-files-path: /pm-files
+ s3:
+ endpointOverride: $KPX_MINIO
+ accessKeyId: admin
+ secretAccessKey: adminadmin
+ locksBucket: pm-files-json-locks
+ bucket: pm-files-json
diff --git a/pm-file-flow-demo/kube-proj/config/kpadp/application_configuration-file.json b/pm-file-flow-demo/kube-proj/config/kpadp/application_configuration-file.json
new file mode 100644
index 0000000..88b5ae2
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/kpadp/application_configuration-file.json
@@ -0,0 +1,14 @@
+{
+ "types": [
+ {
+ "id": "PmData",
+ "kafkaInputTopic": "json-file-ready-kpadp",
+ "useHttpProxy": false,
+ "dataType": "pmData",
+ "inputJobType": "xml-file-data",
+ "inputJobDefinition": {
+ "kafkaOutputTopic": "json-file-ready-kpadp"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/config/kpadp/application_configuration-minio.json b/pm-file-flow-demo/kube-proj/config/kpadp/application_configuration-minio.json
new file mode 100644
index 0000000..7c8a550
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/kpadp/application_configuration-minio.json
@@ -0,0 +1,14 @@
+{
+ "types": [
+ {
+ "id": "PmData",
+ "kafkaInputTopic": "json-file-ready-kpadp",
+ "useHttpProxy": false,
+ "dataType": "pmData",
+ "inputJobType": "xml-file-data-to-filestore",
+ "inputJobDefinition": {
+ "kafkaOutputTopic": "json-file-ready-kpadp"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/config/kpadp/application_configuration.json b/pm-file-flow-demo/kube-proj/config/kpadp/application_configuration.json
new file mode 100644
index 0000000..7c8a550
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/kpadp/application_configuration.json
@@ -0,0 +1,14 @@
+{
+ "types": [
+ {
+ "id": "PmData",
+ "kafkaInputTopic": "json-file-ready-kpadp",
+ "useHttpProxy": false,
+ "dataType": "pmData",
+ "inputJobType": "xml-file-data-to-filestore",
+ "inputJobDefinition": {
+ "kafkaOutputTopic": "json-file-ready-kpadp"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/config/kpm/application_configuration-file.json b/pm-file-flow-demo/kube-proj/config/kpm/application_configuration-file.json
new file mode 100644
index 0000000..4c4fb5c
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/kpm/application_configuration-file.json
@@ -0,0 +1,8 @@
+{
+ "types": [
+ {
+ "id": "xml-file-data",
+ "kafkaInputTopic": "collected-file"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/config/kpm/application_configuration-minio.json b/pm-file-flow-demo/kube-proj/config/kpm/application_configuration-minio.json
new file mode 100644
index 0000000..4c1bbdd
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/kpm/application_configuration-minio.json
@@ -0,0 +1,8 @@
+{
+ "types": [
+ {
+ "id": "xml-file-data-to-filestore",
+ "kafkaInputTopic": "collected-file"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/config/kpm/application_configuration.json b/pm-file-flow-demo/kube-proj/config/kpm/application_configuration.json
new file mode 100644
index 0000000..4c1bbdd
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/kpm/application_configuration.json
@@ -0,0 +1,8 @@
+{
+ "types": [
+ {
+ "id": "xml-file-data-to-filestore",
+ "kafkaInputTopic": "collected-file"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/config/ves-collector/collector.properties b/pm-file-flow-demo/kube-proj/config/ves-collector/collector.properties
new file mode 100644
index 0000000..3cd0a1d
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/ves-collector/collector.properties
@@ -0,0 +1,77 @@
+###############################################################################
+##
+## Collector Server config
+##
+## - Default values are shown as commented settings.
+##
+###############################################################################
+##
+## HTTP(S) service
+##
+## Normally:
+##
+## - 8080 is http service
+## - https is disabled by default
+##
+## - At this time, the server always binds to 0.0.0.0
+##
+##
+collector.service.port=8080
+
+## Authentication is only supported via secure port
+## When enabled - require valid keystore defined
+collector.service.secure.port=8443
+
+# auth.method flags:
+#
+# noAuth - default option - no security (http)
+# certBasicAuth - auth by certificate and basic auth username / password (https)
+#auth.method=certBasicAuth
+auth.method=noAuth
+
+## Combination of userid,hashPassword encoded pwd list to be supported
+## userid and pwd comma separated; pipe delimitation between each pair
+## Password is generated by crypt-password library using BCrypt algorithm stored in dcaegen2/sdk package
+## or https://nexus.onap.org/#nexus-search;quick~crypt-password
+header.authlist=sample1,$2a$10$0buh.2WeYwN868YMwnNNEuNEAMNYVU9.FSMJGyIKV3dGET/7oGOi6
+
+## The keystore must be setup per installation when secure port is configured
+collector.keystore.file.location=etc/keystore
+collector.keystore.passwordfile=etc/passwordfile
+
+collector.cert.subject.matcher=etc/certSubjectMatcher.properties
+
+## The truststore must be setup per installation when mutual tls support is configured
+collector.truststore.file.location=etc/truststore
+collector.truststore.passwordfile=etc/trustpasswordfile
+
+## Schema Validation checkflag
+## default no validation checkflag (-1)
+## If enabled (1) - schemafile location must be specified
+collector.schema.checkflag=1
+collector.schema.file={\"v1\":\"./etc/CommonEventFormat_27.2.json\",\"v2\":\"./etc/CommonEventFormat_27.2.json\",\"v3\":\"./etc/CommonEventFormat_27.2.json\",\"v4\":\"./etc/CommonEventFormat_27.2.json\",\"v5\":\"./etc/CommonEventFormat_28.4.1.json\",\"v7\":\"./etc/CommonEventFormat_30.2.1_ONAP.json\"}
+
+## Schema StndDefinedFields Validation checkflag
+## default no validation checkflag (-1)
+## If enabled (1) - schema files locations must be specified, mapping file path must be specified, schema reference path
+## in event json must be specified, path to stndDefined data field in event json must be specified
+collector.externalSchema.checkflag=1
+collector.externalSchema.schemasLocation=./etc/externalRepo/
+collector.externalSchema.mappingFileLocation=./etc/externalRepo/schema-map.json
+event.externalSchema.schemaRefPath=$.event.stndDefinedFields.schemaReference
+event.externalSchema.stndDefinedDataPath=$.event.stndDefinedFields.data
+
+## List all streamid per domain to be supported. The streamid should match to channel name on dmaapfile
+collector.dmaap.streamid=fault=ves-fault|syslog=ves-syslog|heartbeat=ves-heartbeat|measurementsForVfScaling=ves-measurement|mobileFlow=ves-mobileflow|other=ves-other|stateChange=ves-statechange|thresholdCrossingAlert=ves-thresholdCrossingAlert|voiceQuality=ves-voicequality|sipSignaling=ves-sipsignaling|notification=ves-measurement|pnfRegistration=ves-pnfRegistration|3GPP-FaultSupervision=ves-3gpp-fault-supervision|3GPP-Heartbeat=ves-3gpp-heartbeat|3GPP-Provisioning=ves-3gpp-provisioning|3GPP-PerformanceAssurance=ves-3gpp-performance-assurance|o-ran-sc-du-hello-world-pm-streaming-oas3=ves-o-ran-sc-du-hello-world-pm-streaming-oas3
+collector.dmaapfile=etc/ves-dmaap-config.json
+
+## Path to the file containing description of api versions
+collector.description.api.version.location=etc/api_version_description.json
+
+## Event transformation Flag - when set expects configurable transformation
+## defined under ./etc/eventTransform.json
+## Enabled by default; to disable set to 0
+event.transform.flag=1
+
+# Describes at what frequency (measured in minutes) should application try to fetch config from CBS
+collector.dynamic.config.update.frequency=5
diff --git a/pm-file-flow-demo/kube-proj/config/ves-collector/ves-dmaap-config.json b/pm-file-flow-demo/kube-proj/config/ves-collector/ves-dmaap-config.json
new file mode 100644
index 0000000..b5138ea
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/config/ves-collector/ves-dmaap-config.json
@@ -0,0 +1,11 @@
+{
+
+ "ves-measurement": {
+ "type": "message_router",
+ "dmaap_info": {
+ "location": "mtl5",
+ "topic_url": "http://message-router.onap:3904/events/file-ready/",
+ "ORIGINAL-topic_url": "http://onap-dmaap:3904/events/unauthenticated.VES_MEASUREMENT_OUTPUT/"
+ }
+ }
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/hist-job.sh b/pm-file-flow-demo/kube-proj/hist-job.sh
new file mode 100755
index 0000000..5d4ecb8
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/hist-job.sh
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+echo "Creating a job to filter historical pm files (json)"
+
+PORT=8083
+
+if [ "$KHOST" == "" ]; then
+ echo "Env var KHOST not set, assuming nodeports are available on localhost"
+ export KHOST=localhost
+else
+ echo "Env var KHOST set to $KHOST, assuming nodeports are available on this IP"
+ PORT=31764
+fi
+
+echo ""
+echo "The job assumes that pm files has been downloaded for node: HTTPS-0 "
+echo ""
+
+JOB='{"info_type_id": "PmData", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {"kafkaOutputTopic":"a-hist","filterType":"pmdata","filter":{"pmRopStartTime": "1999-12-27T10:50:44.000-08:00","sourceNames":["HTTPS-0"],"measTypes":["pmCounterNumber101"]}}}'
+RESP=$(curl -s -w '%{http_code}' $KHOST:$PORT/data-consumer/v1/info-jobs/xa-hist -X PUT -H 'Content-Type: application/json' --data-binary "$JOB")
+status=${RESP:${#RESP}-3}
+if [ "$status" == "200" ]; then
+ echo " Job created ok"
+elif [ "$status" == "201" ]; then
+ echo " Job created ok"
+else
+ echo $RESP
+ echo "FAILED"
+ exit 1
+fi
+
+echo "DONE"
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/kd.yaml b/pm-file-flow-demo/kube-proj/kd.yaml
new file mode 100644
index 0000000..fd22c78
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/kd.yaml
@@ -0,0 +1,74 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+
+## Create token for kube dashboard
+##
+## apply this yaml: kubectl apply -f kd.yaml
+##
+## run the cmd below to get a token for dashboard access
+##
+## kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | (grep admin-user || echo "$_") | awk '{print $1}') | grep token: | awk '{print $2}'
+##
+## Find nodeport of service: kubectl get svc -n kubernetes-dashboard
+##
+## Find cluster-adr (run on master node): kubectl cluster-info
+##
+## Open browser: <cluster-adr>:<nodeport>
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: kd
+ namespace: kubernetes-dashboard
+ labels:
+ k8s-app: kubernetes-dashboard
+spec:
+ type: NodePort
+ ports:
+ - port: 443
+ protocol: TCP
+ targetPort: 8443
+ nodePort: 31750
+ selector:
+ k8s-app: kubernetes-dashboard
+ sessionAffinity: None
+ type: NodePort
+
+---
+
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: admin-user
+ namespace: kubernetes-dashboard
+
+---
+
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: admin-user
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: cluster-admin
+subjects:
+- kind: ServiceAccount
+ name: admin-user
+ namespace: kubernetes-dashboard
+
diff --git a/pm-file-flow-demo/kube-proj/kube-dfc-gen.yaml b/pm-file-flow-demo/kube-proj/kube-dfc-gen.yaml
new file mode 100644
index 0000000..bac82af
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/kube-dfc-gen.yaml
@@ -0,0 +1,180 @@
+
+
+# DFC
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: dfc
+ namespace: onap
+ labels:
+ run: dfc
+ prodtest: dfc
+spec:
+ clusterIP: None # Headless service
+ selector:
+ run: dfc
+
+---
+
+# Expose 5 dfc's as individuals nodeports
+apiVersion: v1
+kind: Service
+metadata:
+ name: dfc0
+ namespace: onap
+ labels:
+ prodtest: dfc
+spec:
+ type: NodePort
+ ports:
+ - port: 8100
+ targetPort: 8100
+ protocol: TCP
+ name: http1
+ nodePort: 31770
+ selector:
+ statefulset.kubernetes.io/pod-name: dfc-0
+
+---
+
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: dfc1
+ namespace: onap
+ labels:
+ prodtest: dfc
+spec:
+ type: NodePort
+ ports:
+ - port: 8100
+ targetPort: 8100
+ protocol: TCP
+ name: http1
+ nodePort: 31771
+ selector:
+ statefulset.kubernetes.io/pod-name: dfc-1
+
+---
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: dfc2
+ namespace: onap
+ labels:
+ prodtest: dfc
+spec:
+ type: NodePort
+ ports:
+ - port: 8100
+ targetPort: 8100
+ protocol: TCP
+ name: http1
+ nodePort: 31772
+ selector:
+ statefulset.kubernetes.io/pod-name: dfc-2
+
+---
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: dfc3
+ namespace: onap
+ labels:
+ prodtest: dfc
+spec:
+ type: NodePort
+ ports:
+ - port: 8100
+ targetPort: 8100
+ protocol: TCP
+ name: http1
+ nodePort: 31773
+ selector:
+ statefulset.kubernetes.io/pod-name: dfc-3
+
+---
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: dfc4
+ namespace: onap
+ labels:
+ prodtest: dfc
+spec:
+ type: NodePort
+ ports:
+ - port: 8100
+ targetPort: 8100
+ protocol: TCP
+ name: http1
+ nodePort: 31774
+ selector:
+ statefulset.kubernetes.io/pod-name: dfc-4
+
+---
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: dfc
+ namespace: onap
+ labels:
+ run: dfc
+ prodtest: dfc
+spec:
+ replicas: 1
+ serviceName: dfc
+ selector:
+ matchLabels:
+ run: dfc
+ template:
+ metadata:
+ labels:
+ run: dfc
+ prodtest: dfc
+ spec:
+ volumes:
+ - name: config-truststore
+ configMap:
+ name: dfc-cm-truststore.jks
+ - name: config-cm
+ configMap:
+ name: dfc-cm
+ - name: config-cm-contr
+ emptyDir: {}
+ initContainers:
+ # Copy unique application.yaml to each replica
+ - name: init
+ image: alpine:latest
+ imagePullPolicy: IfNotPresent
+ command: ["ash","-c"]
+ args: ["cp /config-host/application-${HOSTNAME##*-}.yaml /opt/app/datafile/config/application.yaml"]
+ volumeMounts:
+ - name: config-cm
+ mountPath: /config-host
+ - name: config-cm-contr
+ mountPath: /opt/app/datafile/config
+ containers:
+ - name: dfc
+ securityContext:
+ runAsUser: 0 # Need to run as root - needed when writing to hostpath
+ image: onap/org.onap.dcaegen2.collectors.datafile.datafile-app-server:2.5.14
+ imagePullPolicy: Never
+ ports:
+ - name: http
+ containerPort: 8100
+ volumeMounts:
+ - name: config-truststore
+ mountPath: /opt/app/datafile/config/truststore.jks
+ subPath: truststore.jks
+ - name: config-cm-contr
+ mountPath: /opt/app/datafile/config/application.yaml
+ subPath: application.yaml
+
+
diff --git a/pm-file-flow-demo/kube-proj/kube-dfc.yaml b/pm-file-flow-demo/kube-proj/kube-dfc.yaml
new file mode 100644
index 0000000..9b66fc4
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/kube-dfc.yaml
@@ -0,0 +1,190 @@
+
+
+# DFC
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: dfc
+ namespace: onap
+ labels:
+ run: dfc
+ prodtest: dfc
+spec:
+ clusterIP: None # Headless service
+ selector:
+ run: dfc
+
+---
+
+# Expose 5 dfc's as individuals nodeports
+apiVersion: v1
+kind: Service
+metadata:
+ name: dfc0
+ namespace: onap
+ labels:
+ prodtest: dfc
+spec:
+ type: NodePort
+ ports:
+ - port: 8100
+ targetPort: 8100
+ protocol: TCP
+ name: http1
+ nodePort: 31770
+ selector:
+ statefulset.kubernetes.io/pod-name: dfc-0
+
+---
+
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: dfc1
+ namespace: onap
+ labels:
+ prodtest: dfc
+spec:
+ type: NodePort
+ ports:
+ - port: 8100
+ targetPort: 8100
+ protocol: TCP
+ name: http1
+ nodePort: 31771
+ selector:
+ statefulset.kubernetes.io/pod-name: dfc-1
+
+---
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: dfc2
+ namespace: onap
+ labels:
+ prodtest: dfc
+spec:
+ type: NodePort
+ ports:
+ - port: 8100
+ targetPort: 8100
+ protocol: TCP
+ name: http1
+ nodePort: 31772
+ selector:
+ statefulset.kubernetes.io/pod-name: dfc-2
+
+---
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: dfc3
+ namespace: onap
+ labels:
+ prodtest: dfc
+spec:
+ type: NodePort
+ ports:
+ - port: 8100
+ targetPort: 8100
+ protocol: TCP
+ name: http1
+ nodePort: 31773
+ selector:
+ statefulset.kubernetes.io/pod-name: dfc-3
+
+---
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: dfc4
+ namespace: onap
+ labels:
+ prodtest: dfc
+spec:
+ type: NodePort
+ ports:
+ - port: 8100
+ targetPort: 8100
+ protocol: TCP
+ name: http1
+ nodePort: 31774
+ selector:
+ statefulset.kubernetes.io/pod-name: dfc-4
+
+---
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: dfc
+ namespace: onap
+ labels:
+ run: dfc
+ prodtest: dfc
+spec:
+ replicas: $NUM_DFC
+ serviceName: dfc
+ selector:
+ matchLabels:
+ run: dfc
+ template:
+ metadata:
+ labels:
+ run: dfc
+ prodtest: dfc
+ spec:
+ volumes:
+ - name: config-truststore
+ configMap:
+ name: dfc-cm-truststore.jks
+ - name: config-cm
+ configMap:
+ name: dfc-cm
+ - name: config-cm-contr
+ emptyDir: {}
+#DFC_SHARED_DIR_START
+ - name: shared-vol
+ hostPath:
+ path: $DFC_MNT
+ type: DirectoryOrCreate
+#DFC_SHARED_DIR_STOP
+ initContainers:
+ # Copy unique application.yaml to each replica
+ - name: init
+ image: alpine:latest
+ imagePullPolicy: IfNotPresent
+ command: ["ash","-c"]
+ args: ["cp /config-host/application-${HOSTNAME##*-}.yaml /opt/app/datafile/config/application.yaml"]
+ volumeMounts:
+ - name: config-cm
+ mountPath: /config-host
+ - name: config-cm-contr
+ mountPath: /opt/app/datafile/config
+ containers:
+ - name: dfc
+ securityContext:
+ runAsUser: 0 # Need to run as root - needed when writing to hostpath
+ image: $DFC_IMAGE
+ imagePullPolicy: $LOCAL_IMAGE_PULL_POLICY
+ ports:
+ - name: http
+ containerPort: 8100
+ volumeMounts:
+ - name: config-truststore
+ mountPath: /opt/app/datafile/config/truststore.jks
+ subPath: truststore.jks
+ - name: config-cm-contr
+ mountPath: /opt/app/datafile/config/application.yaml
+ subPath: application.yaml
+#DFC_SHARED_DIR_START
+ - name: shared-vol
+ mountPath: /tmp/onap_datafile
+#DFC_SHARED_DIR_STOP
+
+
diff --git a/pm-file-flow-demo/kube-proj/kube-gen.yaml b/pm-file-flow-demo/kube-proj/kube-gen.yaml
new file mode 100644
index 0000000..270fd0b
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/kube-gen.yaml
@@ -0,0 +1,250 @@
+# NodePorts
+# 31750 kubernetes dashboard
+# 31760 ves collector
+# 31761 ves collector https
+# 31764 ics
+# 31765 ics https
+# 31766 message-router
+# 31767 kowl
+# 31768 minio
+# 31770-79 dfc
+# 31785 message-router https
+# 31795 kafka http
+# 31796 kafka http2
+
+## Kafka-producer - xml to json
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: kpm
+ namespace: nonrtric
+ labels:
+ run: kpm
+ prodtest: kpm
+spec:
+ clusterIP: None # Headless service
+ selector:
+ run: kpm
+
+---
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: kpm
+ namespace: nonrtric
+ labels:
+ run: kpm
+ prodtest: kpm
+spec:
+ replicas: 1
+ serviceName: kpm
+ selector:
+ matchLabels:
+ run: kpm
+ template:
+ metadata:
+ labels:
+ run: kpm
+ prodtest: kpm
+ spec:
+ initContainers:
+ - name: init
+ image: alpine:latest
+ imagePullPolicy: IfNotPresent
+ command: ["ash","-c"]
+ args: ["echo "]
+ containers:
+ - name: kpm
+ image: kafka-pm-producer:latest
+ imagePullPolicy: Never
+ ports:
+ - name: http
+ containerPort: 80
+ env:
+ - name: E1
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: KP
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: FILES_VOLUME
+ value:
+ - name: KAFKA_SERVER
+ value: kafka-1.onap:9092
+ - name: ICS
+ value: informationservice.nonrtric:8083
+ - name: SELF
+ value: "$(E1).kpm.nonrtric:80"
+ - name: FILESTORE_USER
+ value: admin
+ - name: FILESTORE_PWD
+ value: adminadmin
+ - name: FILESTORE_SERVER
+ value: minio.nonrtric:9000
+ volumeMounts:
+ - mountPath: /application_configuration.json
+ subPath: application_configuration.json
+ name: kpm-conf
+ volumes:
+ - configMap:
+ defaultMode: 420
+ name: kpm-cm
+ name: kpm-conf
+
+---
+
+## Kafka-producer - json to json
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: kp
+ namespace: nonrtric
+ labels:
+ run: kp
+ prodtest: kp
+spec:
+ clusterIP: None # Headless service
+ selector:
+ run: kp
+
+---
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: kp
+ namespace: nonrtric
+ labels:
+ run: kp
+ prodtest: kp
+spec:
+ replicas: 1
+ serviceName: kp
+ selector:
+ matchLabels:
+ run: kp
+ template:
+ metadata:
+ labels:
+ run: kp
+ prodtest: kp
+ spec:
+ containers:
+ - name: kp
+ image: kafka-pm-producer:latest
+ imagePullPolicy: Never
+ ports:
+ - name: http
+ containerPort: 80
+ env:
+ - name: E1
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: KP
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: FILES_VOLUME
+ value:
+ - name: KAFKA_SERVER
+ value: kafka-1.onap:9092
+ - name: ICS
+ value: informationservice.nonrtric:8083
+ - name: SELF
+ value: "$(E1).kp.nonrtric:80"
+ - name: FILESTORE_USER
+ value: admin
+ - name: FILESTORE_PWD
+ value: adminadmin
+ - name: FILESTORE_SERVER
+ value: minio.nonrtric:9000
+ volumeMounts:
+ - mountPath: /application_configuration.json
+ subPath: application_configuration.json
+ name: kp-conf
+ volumes:
+ - configMap:
+ defaultMode: 420
+ name: kp-cm
+ name: kp-conf
+
+---
+
+## Dmaap adapter - json to json
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: kpadp
+ namespace: nonrtric
+ labels:
+ run: kpadp
+ prodtest: kpadp
+spec:
+ clusterIP: None # Headless service
+ selector:
+ run: kpadp
+
+---
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: kpadp
+ namespace: nonrtric
+ labels:
+ run: kpadp
+ prodtest: kpadp
+spec:
+ replicas: 1
+ serviceName: kpadp
+ selector:
+ matchLabels:
+ run: kpadp
+ template:
+ metadata:
+ labels:
+ run: kpadp
+ prodtest: kpadp
+ spec:
+ initContainers:
+ # Copy unique application.yaml to each replica
+ - name: init
+ image: alpine:latest
+ imagePullPolicy: IfNotPresent
+ command: ["ash","-c"]
+ args: ["cp /config-host/application-${HOSTNAME##*-}.yaml /opt/app/dmaap-adapter-service/config/application.yaml"]
+ volumeMounts:
+ - name: config-cm
+ mountPath: /config-host
+ - name: config-cm-contr
+ mountPath: /opt/app/dmaap-adapter-service/config
+ containers:
+ - name: kpadp
+ image: nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-plt-dmaapadapter:1.2.0
+ imagePullPolicy: Never
+ ports:
+ - name: http
+ containerPort: 8084
+ volumeMounts:
+ - mountPath: /opt/app/dmaap-adapter-service/data/application_configuration.json
+ subPath: application_configuration.json
+ name: kpadp-cm-data
+ - mountPath: /opt/app/dmaap-adapter-service/config/application.yaml
+ subPath: application.yaml
+ name: config-cm-contr
+ volumes:
+ - name: kpadp-cm-data
+ configMap:
+ name: kpadp-data
+ - name: config-cm-contr
+ emptyDir: {}
+ - name: config-cm
+ configMap:
+ name: kpadp-cm
diff --git a/pm-file-flow-demo/kube-proj/kube-minio-gen.yaml b/pm-file-flow-demo/kube-proj/kube-minio-gen.yaml
new file mode 100644
index 0000000..621e27c
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/kube-minio-gen.yaml
@@ -0,0 +1,101 @@
+
+
+# Minio
+
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: minio
+ namespace: nonrtric
+ labels:
+ run: minio
+ prodtest: minio
+spec:
+ clusterIP: None
+ selector:
+ run: minio
+
+---
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: minio-ext
+ namespace: nonrtric
+ labels:
+ prodtest: minio
+spec:
+ type: NodePort
+ selector:
+ statefulset.kubernetes.io/pod-name: minio-0
+ ports:
+ - protocol: TCP
+ port: 9001
+ targetPort: 9001
+ nodePort: 31768
+
+---
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: minio
+ namespace: nonrtric
+ labels:
+ run: minio
+ prodtest: minio
+spec:
+ serviceName: minio
+ replicas: 1
+ selector:
+ matchLabels:
+ run: minio
+ template:
+ metadata:
+ labels:
+ run: minio
+ prodtest: minio
+ spec:
+ initContainers:
+ - name: init
+ image: alpine:latest
+ imagePullPolicy: IfNotPresent
+ command: ["ash","-c"]
+ args: ["IDX=${HOSTNAME##*-} && mkdir -p /data/ && rm -rf /data//*"]
+ volumeMounts:
+ - mountPath: /data
+ name: data-vol
+ containers:
+ - name: minio
+ image: minio/minio:latest
+ imagePullPolicy: IfNotPresent
+ args:
+ - server
+ - "--console-address"
+ - ":9001"
+ - /data/0/
+ #
+ #
+ #
+ #
+ #
+ #
+ #
+ #
+ #
+ #
+ env:
+ - name: MINIO_ROOT_USER
+ value: admin
+ - name: MINIO_ROOT_PASSWORD
+ value: adminadmin
+ volumeMounts:
+ - mountPath: /data
+ name: data-vol
+ volumes:
+ #MINIO_EMPTY_DIR_START
+ - name: data-vol
+ emptyDir: {}
+ #MINIO_EMPTY_DIR_STOP
+
diff --git a/pm-file-flow-demo/kube-proj/kube-minio.yaml b/pm-file-flow-demo/kube-proj/kube-minio.yaml
new file mode 100644
index 0000000..6cea998
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/kube-minio.yaml
@@ -0,0 +1,107 @@
+
+
+# Minio
+
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: minio
+ namespace: nonrtric
+ labels:
+ run: minio
+ prodtest: minio
+spec:
+ clusterIP: None
+ selector:
+ run: minio
+
+---
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: minio-ext
+ namespace: nonrtric
+ labels:
+ prodtest: minio
+spec:
+ type: NodePort
+ selector:
+ statefulset.kubernetes.io/pod-name: minio-0
+ ports:
+ - protocol: TCP
+ port: 9001
+ targetPort: 9001
+ nodePort: 31768
+
+---
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: minio
+ namespace: nonrtric
+ labels:
+ run: minio
+ prodtest: minio
+spec:
+ serviceName: minio
+ replicas: $NUM_MINIO
+ selector:
+ matchLabels:
+ run: minio
+ template:
+ metadata:
+ labels:
+ run: minio
+ prodtest: minio
+ spec:
+ initContainers:
+ - name: init
+ image: alpine:latest
+ imagePullPolicy: IfNotPresent
+ command: ["ash","-c"]
+ args: ["IDX=${HOSTNAME##*-} && mkdir -p /data/$IDX && rm -rf /data/$IDX/*"]
+ volumeMounts:
+ - mountPath: /data
+ name: data-vol
+ containers:
+ - name: minio
+ image: minio/minio:latest
+ imagePullPolicy: IfNotPresent
+ args:
+ - server
+ - "--console-address"
+ - ":9001"
+ - $MINIO_SERVER_CONF
+ # $MINIO_SERVER_0
+ # $MINIO_SERVER_1
+ # $MINIO_SERVER_2
+ # $MINIO_SERVER_3
+ # $MINIO_SERVER_4
+ # $MINIO_SERVER_5
+ # $MINIO_SERVER_6
+ # $MINIO_SERVER_7
+ # $MINIO_SERVER_8
+ # $MINIO_SERVER_9
+ env:
+ - name: MINIO_ROOT_USER
+ value: admin
+ - name: MINIO_ROOT_PASSWORD
+ value: adminadmin
+ volumeMounts:
+ - mountPath: /data
+ name: data-vol
+ volumes:
+ #MINIO_EMPTY_DIR_START
+ - name: data-vol
+ emptyDir: {}
+ #MINIO_EMPTY_DIR_STOP
+ #MINIO_HOSTPATH_DIR_START
+ - name: data-vol
+ hostPath:
+ path: $MINIO_MNT/minio
+ type: DirectoryOrCreate
+ #MINIO_HOSTPATH_DIR_STOP
+
diff --git a/pm-file-flow-demo/kube-proj/kube-plt-gen.yaml b/pm-file-flow-demo/kube-proj/kube-plt-gen.yaml
new file mode 100644
index 0000000..273f3e3
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/kube-plt-gen.yaml
@@ -0,0 +1,587 @@
+## Status callback server
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: callback
+ namespace: nonrtric
+ labels:
+ run: callback
+ prodtest: callback
+spec:
+ selector:
+ run: callback
+ ports:
+ - port: 80
+ name: http
+
+---
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: callback
+ namespace: nonrtric
+ labels:
+ prodtest: callback
+spec:
+ containers:
+ - name: callback
+ image: kennethreitz/httpbin
+ imagePullPolicy: IfNotPresent
+ ports:
+ - port: 80
+ name: http
+ restartPolicy: Always
+
+
+## Kafka client
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: client
+ namespace: nonrtric
+ labels:
+ run: client
+ prodtest: client
+spec:
+ clusterIP: None
+ selector:
+ run: client
+
+---
+
+apiVersion: v1
+kind: Pod
+metadata:
+ name: client
+ namespace: nonrtric
+ labels:
+ prodtest: client
+spec:
+ containers:
+ - name: client
+ image: confluentinc/cp-kafka:6.2.1
+ command: ['sh', '-c', 'while [ true ];do sleep 60;done']
+ imagePullPolicy: IfNotPresent
+ restartPolicy: Always
+
+---
+
+## https server sts
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: pm-https-server
+ namespace: ran
+ labels:
+ run: pm-https-server
+ prodtest: pm-https-server
+spec:
+ clusterIP: None
+ selector:
+ run: pm-https-server
+
+---
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: pm-https-server
+ namespace: ran
+ labels:
+ run: pm-https-server
+ prodtest: pm-https-server
+spec:
+ replicas: 10
+ serviceName: pm-https-server
+ selector:
+ matchLabels:
+ run: pm-https-server
+ template:
+ metadata:
+ labels:
+ run: pm-https-server
+ prodtest: pm-https-server
+ spec:
+ volumes:
+ - name: tmp-vol
+ configMap:
+ name: pm-https-server-cm
+ - name: cert-vol
+ emptyDir: {}
+ - name: ne-files-vol
+ configMap:
+ name: ne-files
+ initContainers:
+ - name: init
+ image: alpine:latest
+ imagePullPolicy: IfNotPresent
+ command: ["ash","-c"]
+ args: ["cp /tmp/certs/copy-certs.sh /tmp && cd /tmp && chmod u+x copy-certs.sh && ./copy-certs.sh"]
+ volumeMounts:
+ - name: tmp-vol
+ mountPath: /tmp/certs
+ - name: cert-vol
+ mountPath: /certs
+ securityContext:
+ runAsUser: 0
+ containers:
+ - name: pm-https-server
+ image: pm-https-server:latest
+ imagePullPolicy: Never
+ ports:
+ - name: http
+ containerPort: 80
+ - name: https
+ containerPort: 443
+ env:
+ - name: ALWAYS_RETURN
+ value: /ne-files/pm.xml.gz
+ volumeMounts:
+ - name: cert-vol
+ mountPath: /certs
+ - name: tmp-vol
+ mountPath: /tmp/certs
+ - name: ne-files-vol
+ mountPath: /ne-files
+
+---
+
+# VES collector
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: ves-collector
+ namespace: onap
+ labels:
+ run: ves-collector
+ prodtest: ves-collector
+spec:
+ type: NodePort
+ ports:
+ - port: 8080
+ targetPort: 8080
+ name: http
+ nodePort: 31760
+ - port: 8443
+ name: https
+ nodePort: 31761
+ selector:
+ run: ves-collector
+
+---
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: ves-collector
+ namespace: onap
+ labels:
+ run: ves-collector
+ prodtest: ves-collector
+spec:
+ selector:
+ matchLabels:
+ run: ves-collector
+ template:
+ metadata:
+ labels:
+ run: ves-collector
+ prodtest: ves-collector
+ spec:
+ volumes:
+ - name: conf-vol1
+ configMap:
+ name: ves-collector-collector.properties
+ - name: conf-vol2
+ configMap:
+ name: ves-collector-ves-dmaap-config.json
+ containers:
+ - name: ves-collector
+ image: nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:1.11.0
+ imagePullPolicy: IfNotPresent
+ env:
+ - name: DMAAPHOST
+ value: message-router.onap
+ ports:
+ - name: http
+ containerPort: 8080
+ - name: https
+ containerPort: 8443
+ volumeMounts:
+ - name: conf-vol1
+ mountPath: /opt/app/VESCollector/etc/collector.properties
+ subPath: collector.properties
+ - name: conf-vol2
+ mountPath: /opt/app/VESCollector/etc/ves-dmaap-config.json
+ subPath: ves-dmaap-config.json
+
+
+---
+
+## ICS
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: informationservice
+ namespace: nonrtric
+ labels:
+ run: informationservice
+ prodtest: informationservice
+spec:
+ type: NodePort
+ ports:
+ - port: 8083
+ targetPort: 8083
+ protocol: TCP
+ name: http
+ nodePort: 31764
+ - port: 8434
+ targetPort: 8434
+ protocol: TCP
+ name: https
+ nodePort: 31765
+ selector:
+ run: informationservice
+
+---
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: informationservice
+ namespace: nonrtric
+ labels:
+ run: informationservice
+ prodtest: informationservice
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ run: informationservice
+ template:
+ metadata:
+ labels:
+ run: informationservice
+ prodtest: informationservice
+ spec:
+ containers:
+ - name: informationservice
+ image: nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-plt-informationcoordinatorservice:1.4.0
+ imagePullPolicy: Never
+ ports:
+ - name: http
+ containerPort: 8083
+ - name: https
+ containerPort: 8434
+ volumeMounts:
+ - mountPath: /opt/app/information-coordinator-service/config/application.yaml
+ subPath: application.yaml
+ name: ics-conf-name
+ volumes:
+ - configMap:
+ defaultMode: 420
+ name: informationservice-cm
+ name: ics-conf-name
+
+---
+
+## KAFKA and DMAAP MR
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: zookeeper
+ namespace: onap
+ labels:
+ run: zookeeper
+ prodtest: zookeeper
+spec:
+ type: ClusterIP
+ ports:
+ - port: 32181
+ targetPort: 32181
+ protocol: TCP
+ name: http
+ selector:
+ run: zookeeper
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: kafka-1
+ namespace: onap
+ labels:
+ run: kafka-1
+ prodtest: kafka
+spec:
+ type: NodePort
+ ports:
+ - port: 9092
+ targetPort: 9092
+ protocol: TCP
+ name: http
+ nodePort: 31795
+ - port: 29092
+ targetPort: 29092
+ protocol: TCP
+ name: http2
+ nodePort: 31796
+ # - port: 30099
+ # targetPort: 30099
+ # protocol: TCP
+ # name: http-external
+ # nodePort:
+ selector:
+ run: kafka-1
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: message-router
+ namespace: onap
+ labels:
+ run: message-router
+ prodtest: message-router
+spec:
+ type: NodePort
+ ports:
+ - port: 3904
+ targetPort: 3904
+ protocol: TCP
+ name: http
+ nodePort: 31766
+ - port: 3905
+ targetPort: 3905
+ protocol: TCP
+ name: https
+ nodePort: 31785
+ selector:
+ run: message-router
+
+---
+
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: zookeeper
+ namespace: onap
+ labels:
+ run: zookeeper
+ prodtest: zookeeper
+spec:
+ selector:
+ matchLabels:
+ run: zookeeper
+ template:
+ metadata:
+ labels:
+ run: zookeeper
+ prodtest: zookeeper
+ spec:
+ containers:
+ - name: zookeeper
+ image: confluentinc/cp-zookeeper:6.2.1
+ imagePullPolicy: IfNotPresent
+ ports:
+ - name: http
+ containerPort: 32181
+ env:
+ - name: ZOOKEEPER_TICK_TIME
+ value: '2000'
+ - name: ZOOKEEPER_CLIENT_PORT
+ value: '32181'
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: kafka-1
+ namespace: onap
+ labels:
+ run: kafka-1
+ prodtest: kafka
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ run: kafka-1
+ template:
+ metadata:
+ labels:
+ run: kafka-1
+ prodtest: kafka
+ spec:
+ containers:
+ - name: kafka-1
+ image: confluentinc/cp-kafka:6.2.1
+ imagePullPolicy: IfNotPresent
+ ports:
+ - name: http
+ containerPort: 9092
+ ports:
+ - name: http2
+ containerPort: 29092
+ env:
+ - name: KAFKA_BROKER_ID
+ value: '1'
+ - name: KAFKA_ZOOKEEPER_CONNECT
+ value: 'zookeeper:32181'
+ - name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
+ value: 'INTERNAL_PLAINTEXT:PLAINTEXT,EXTERNAL_PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT'
+ - name: KAFKA_ADVERTISED_LISTENERS
+ value: 'INTERNAL_PLAINTEXT://kafka-1.onap:9092,PLAINTEXT_HOST://localhost:29092'
+ - name: KAFKA_LISTENERS
+ value: 'INTERNAL_PLAINTEXT://0.0.0.0:9092,PLAINTEXT_HOST://0.0.0.0:29092'
+ - name: KAFKA_INTER_BROKER_LISTENER_NAME
+ value: INTERNAL_PLAINTEXT
+
+ - name: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
+ value: '1'
+ - name: KAFKA_TRANSACTION_STATE_LOG_MIN_ISR
+ value: '1'
+ - name: KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR
+ value: '1'
+ - name: KAFKA_NUM_PARTITIONS
+ value: '10'
+
+
+
+ # volumeMounts:
+ # - mountPath: /etc/kafka/secrets/jaas/zk_client_jaas.conf
+ # subPath: zk_client_jaas.conf
+ # name: dmaapmr-zk-client-jaas
+ initContainers:
+ - name: init
+ image: alpine
+ imagePullPolicy: IfNotPresent
+ command: ['sh', '-c', 'until nslookup zookeeper.onap.svc.cluster.local; do echo waiting for zookeeper; sleep 2; done;']
+ # volumes:
+ # - configMap:
+ # defaultMode: 420
+ # name: dmaapmr-zk-client-jaas.conf
+ # name: dmaapmr-zk-client-jaas
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: message-router
+ namespace: onap
+ labels:
+ run: message-router
+ prodtest: message-router
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ run: message-router
+ template:
+ metadata:
+ labels:
+ run: message-router
+ prodtest: message-router
+ spec:
+ containers:
+ - name: message-router
+ image: nexus3.onap.org:10002/onap/dmaap/dmaap-mr:1.3.0
+ imagePullPolicy: IfNotPresent
+ ports:
+ - name: http
+ containerPort: 3904
+ - name: https
+ containerPort: 3905
+ env:
+ - name: enableCadi
+ value: 'false'
+ volumeMounts:
+ - mountPath: /appl/dmaapMR1/bundleconfig/etc/appprops/MsgRtrApi.properties
+ subPath: MsgRtrApi.properties
+ name: dmaapmr-msg-rtr-api
+ - mountPath: /appl/dmaapMR1/etc/cadi.properties
+ subPath: cadi.properties
+ name: dmaapmr-cadi
+ initContainers:
+ - name: init
+ image: alpine:latest
+ imagePullPolicy: IfNotPresent
+ command: ['sh', '-c', 'until nslookup kafka-1.onap.svc.cluster.local; do echo waiting for kafka-1; sleep 2; done;']
+ volumes:
+ - configMap:
+ defaultMode: 420
+ name: dmaapmr-msgrtrapi.properties
+ name: dmaapmr-msg-rtr-api
+ - configMap:
+ defaultMode: 420
+ name: dmaapmr-cadi.properties
+ name: dmaapmr-cadi
+
+---
+
+## Kowl - kafka obs
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: kowl
+ namespace: onap
+ labels:
+ run: kowl
+ prodtest: kowl
+spec:
+ type: NodePort
+ selector:
+ run: kowl
+ ports:
+ - port: 8080
+ targetPort: 8080
+ protocol: TCP
+ name: http
+ nodePort: 31767
+
+---
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: kowl
+ namespace: onap
+ labels:
+ prodtest: kowl
+spec:
+ selector:
+ matchLabels:
+ run: kowl
+ template:
+ metadata:
+ labels:
+ run: kowl
+ prodtest: kowl
+ spec:
+ volumes:
+ - name: config-vol
+ configMap:
+ name: kowl-config-cm
+ containers:
+ - name: kowl
+ image: quay.io/cloudhut/kowl
+ imagePullPolicy: IfNotPresent
+ command: ["./kowl", "--config.filepath=/etc/kowl/config.yaml"]
+ volumeMounts:
+ - name: config-vol
+ mountPath: /etc/kowl/config.yaml
+ subPath: config.yaml
+ ports:
+ - name: http
+ containerPort: 8080
+ restartPolicy: Always
+
+---
+
+
+
+
diff --git a/pm-file-flow-demo/kube-proj/kube-plt.yaml b/pm-file-flow-demo/kube-proj/kube-plt.yaml
new file mode 100644
index 0000000..d34facf
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/kube-plt.yaml
@@ -0,0 +1,587 @@
+## Status callback server
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: callback
+ namespace: nonrtric
+ labels:
+ run: callback
+ prodtest: callback
+spec:
+ selector:
+ run: callback
+ ports:
+ - port: 80
+ name: http
+
+---
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: callback
+ namespace: nonrtric
+ labels:
+ prodtest: callback
+spec:
+ containers:
+ - name: callback
+ image: kennethreitz/httpbin
+ imagePullPolicy: IfNotPresent
+ ports:
+ - port: 80
+ name: http
+ restartPolicy: Always
+
+
+## Kafka client
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: client
+ namespace: nonrtric
+ labels:
+ run: client
+ prodtest: client
+spec:
+ clusterIP: None
+ selector:
+ run: client
+
+---
+
+apiVersion: v1
+kind: Pod
+metadata:
+ name: client
+ namespace: nonrtric
+ labels:
+ prodtest: client
+spec:
+ containers:
+ - name: client
+ image: confluentinc/cp-kafka:6.2.1
+ command: ['sh', '-c', 'while [ true ];do sleep 60;done']
+ imagePullPolicy: IfNotPresent
+ restartPolicy: Always
+
+---
+
+## https server sts
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: pm-https-server
+ namespace: ran
+ labels:
+ run: pm-https-server
+ prodtest: pm-https-server
+spec:
+ clusterIP: None
+ selector:
+ run: pm-https-server
+
+---
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: pm-https-server
+ namespace: ran
+ labels:
+ run: pm-https-server
+ prodtest: pm-https-server
+spec:
+ replicas: $NUM_HTTP
+ serviceName: pm-https-server
+ selector:
+ matchLabels:
+ run: pm-https-server
+ template:
+ metadata:
+ labels:
+ run: pm-https-server
+ prodtest: pm-https-server
+ spec:
+ volumes:
+ - name: tmp-vol
+ configMap:
+ name: pm-https-server-cm
+ - name: cert-vol
+ emptyDir: {}
+ - name: ne-files-vol
+ configMap:
+ name: ne-files
+ initContainers:
+ - name: init
+ image: alpine:latest
+ imagePullPolicy: IfNotPresent
+ command: ["ash","-c"]
+ args: ["cp /tmp/certs/copy-certs.sh /tmp && cd /tmp && chmod u+x copy-certs.sh && ./copy-certs.sh"]
+ volumeMounts:
+ - name: tmp-vol
+ mountPath: /tmp/certs
+ - name: cert-vol
+ mountPath: /certs
+ securityContext:
+ runAsUser: 0
+ containers:
+ - name: pm-https-server
+ image: $PM_HTTPSSERVER_IMAGE
+ imagePullPolicy: $LOCAL_IMAGE_PULL_POLICY
+ ports:
+ - name: http
+ containerPort: 80
+ - name: https
+ containerPort: 443
+ env:
+ - name: ALWAYS_RETURN
+ value: /ne-files/pm.xml.gz
+ volumeMounts:
+ - name: cert-vol
+ mountPath: /certs
+ - name: tmp-vol
+ mountPath: /tmp/certs
+ - name: ne-files-vol
+ mountPath: /ne-files
+
+---
+
+# VES collector
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: ves-collector
+ namespace: onap
+ labels:
+ run: ves-collector
+ prodtest: ves-collector
+spec:
+ type: NodePort
+ ports:
+ - port: 8080
+ targetPort: 8080
+ name: http
+ nodePort: 31760
+ - port: 8443
+ name: https
+ nodePort: 31761
+ selector:
+ run: ves-collector
+
+---
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: ves-collector
+ namespace: onap
+ labels:
+ run: ves-collector
+ prodtest: ves-collector
+spec:
+ selector:
+ matchLabels:
+ run: ves-collector
+ template:
+ metadata:
+ labels:
+ run: ves-collector
+ prodtest: ves-collector
+ spec:
+ volumes:
+ - name: conf-vol1
+ configMap:
+ name: ves-collector-collector.properties
+ - name: conf-vol2
+ configMap:
+ name: ves-collector-ves-dmaap-config.json
+ containers:
+ - name: ves-collector
+ image: $VES_COLLECTOR_IMAGE
+ imagePullPolicy: IfNotPresent
+ env:
+ - name: DMAAPHOST
+ value: message-router.onap
+ ports:
+ - name: http
+ containerPort: 8080
+ - name: https
+ containerPort: 8443
+ volumeMounts:
+ - name: conf-vol1
+ mountPath: /opt/app/VESCollector/etc/collector.properties
+ subPath: collector.properties
+ - name: conf-vol2
+ mountPath: /opt/app/VESCollector/etc/ves-dmaap-config.json
+ subPath: ves-dmaap-config.json
+
+
+---
+
+## ICS
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: informationservice
+ namespace: nonrtric
+ labels:
+ run: informationservice
+ prodtest: informationservice
+spec:
+ type: NodePort
+ ports:
+ - port: 8083
+ targetPort: 8083
+ protocol: TCP
+ name: http
+ nodePort: 31764
+ - port: 8434
+ targetPort: 8434
+ protocol: TCP
+ name: https
+ nodePort: 31765
+ selector:
+ run: informationservice
+
+---
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: informationservice
+ namespace: nonrtric
+ labels:
+ run: informationservice
+ prodtest: informationservice
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ run: informationservice
+ template:
+ metadata:
+ labels:
+ run: informationservice
+ prodtest: informationservice
+ spec:
+ containers:
+ - name: informationservice
+ image: nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-plt-informationcoordinatorservice:1.4.0
+ imagePullPolicy: $LOCAL_IMAGE_PULL_POLICY
+ ports:
+ - name: http
+ containerPort: 8083
+ - name: https
+ containerPort: 8434
+ volumeMounts:
+ - mountPath: /opt/app/information-coordinator-service/config/application.yaml
+ subPath: application.yaml
+ name: ics-conf-name
+ volumes:
+ - configMap:
+ defaultMode: 420
+ name: informationservice-cm
+ name: ics-conf-name
+
+---
+
+## KAFKA and DMAAP MR
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: zookeeper
+ namespace: onap
+ labels:
+ run: zookeeper
+ prodtest: zookeeper
+spec:
+ type: ClusterIP
+ ports:
+ - port: 32181
+ targetPort: 32181
+ protocol: TCP
+ name: http
+ selector:
+ run: zookeeper
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: kafka-1
+ namespace: onap
+ labels:
+ run: kafka-1
+ prodtest: kafka
+spec:
+ type: NodePort
+ ports:
+ - port: 9092
+ targetPort: 9092
+ protocol: TCP
+ name: http
+ nodePort: 31795
+ - port: 29092
+ targetPort: 29092
+ protocol: TCP
+ name: http2
+ nodePort: 31796
+ # - port: 30099
+ # targetPort: 30099
+ # protocol: TCP
+ # name: http-external
+ # nodePort:
+ selector:
+ run: kafka-1
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: message-router
+ namespace: onap
+ labels:
+ run: message-router
+ prodtest: message-router
+spec:
+ type: NodePort
+ ports:
+ - port: 3904
+ targetPort: 3904
+ protocol: TCP
+ name: http
+ nodePort: 31766
+ - port: 3905
+ targetPort: 3905
+ protocol: TCP
+ name: https
+ nodePort: 31785
+ selector:
+ run: message-router
+
+---
+
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: zookeeper
+ namespace: onap
+ labels:
+ run: zookeeper
+ prodtest: zookeeper
+spec:
+ selector:
+ matchLabels:
+ run: zookeeper
+ template:
+ metadata:
+ labels:
+ run: zookeeper
+ prodtest: zookeeper
+ spec:
+ containers:
+ - name: zookeeper
+ image: confluentinc/cp-zookeeper:6.2.1
+ imagePullPolicy: IfNotPresent
+ ports:
+ - name: http
+ containerPort: 32181
+ env:
+ - name: ZOOKEEPER_TICK_TIME
+ value: '2000'
+ - name: ZOOKEEPER_CLIENT_PORT
+ value: '32181'
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: kafka-1
+ namespace: onap
+ labels:
+ run: kafka-1
+ prodtest: kafka
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ run: kafka-1
+ template:
+ metadata:
+ labels:
+ run: kafka-1
+ prodtest: kafka
+ spec:
+ containers:
+ - name: kafka-1
+ image: confluentinc/cp-kafka:6.2.1
+ imagePullPolicy: IfNotPresent
+ ports:
+ - name: http
+ containerPort: 9092
+ ports:
+ - name: http2
+ containerPort: 29092
+ env:
+ - name: KAFKA_BROKER_ID
+ value: '1'
+ - name: KAFKA_ZOOKEEPER_CONNECT
+ value: 'zookeeper:32181'
+ - name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
+ value: 'INTERNAL_PLAINTEXT:PLAINTEXT,EXTERNAL_PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT'
+ - name: KAFKA_ADVERTISED_LISTENERS
+ value: 'INTERNAL_PLAINTEXT://kafka-1.onap:9092,PLAINTEXT_HOST://localhost:29092'
+ - name: KAFKA_LISTENERS
+ value: 'INTERNAL_PLAINTEXT://0.0.0.0:9092,PLAINTEXT_HOST://0.0.0.0:29092'
+ - name: KAFKA_INTER_BROKER_LISTENER_NAME
+ value: INTERNAL_PLAINTEXT
+
+ - name: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
+ value: '1'
+ - name: KAFKA_TRANSACTION_STATE_LOG_MIN_ISR
+ value: '1'
+ - name: KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR
+ value: '1'
+ - name: KAFKA_NUM_PARTITIONS
+ value: '${KAFKA_NUM_PARTITIONS}'
+
+
+
+ # volumeMounts:
+ # - mountPath: /etc/kafka/secrets/jaas/zk_client_jaas.conf
+ # subPath: zk_client_jaas.conf
+ # name: dmaapmr-zk-client-jaas
+ initContainers:
+ - name: init
+ image: alpine
+ imagePullPolicy: IfNotPresent
+ command: ['sh', '-c', 'until nslookup zookeeper.onap.svc.cluster.local; do echo waiting for zookeeper; sleep 2; done;']
+ # volumes:
+ # - configMap:
+ # defaultMode: 420
+ # name: dmaapmr-zk-client-jaas.conf
+ # name: dmaapmr-zk-client-jaas
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: message-router
+ namespace: onap
+ labels:
+ run: message-router
+ prodtest: message-router
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ run: message-router
+ template:
+ metadata:
+ labels:
+ run: message-router
+ prodtest: message-router
+ spec:
+ containers:
+ - name: message-router
+ image: nexus3.onap.org:10002/onap/dmaap/dmaap-mr:1.3.0
+ imagePullPolicy: IfNotPresent
+ ports:
+ - name: http
+ containerPort: 3904
+ - name: https
+ containerPort: 3905
+ env:
+ - name: enableCadi
+ value: 'false'
+ volumeMounts:
+ - mountPath: /appl/dmaapMR1/bundleconfig/etc/appprops/MsgRtrApi.properties
+ subPath: MsgRtrApi.properties
+ name: dmaapmr-msg-rtr-api
+ - mountPath: /appl/dmaapMR1/etc/cadi.properties
+ subPath: cadi.properties
+ name: dmaapmr-cadi
+ initContainers:
+ - name: init
+ image: alpine:latest
+ imagePullPolicy: IfNotPresent
+ command: ['sh', '-c', 'until nslookup kafka-1.onap.svc.cluster.local; do echo waiting for kafka-1; sleep 2; done;']
+ volumes:
+ - configMap:
+ defaultMode: 420
+ name: dmaapmr-msgrtrapi.properties
+ name: dmaapmr-msg-rtr-api
+ - configMap:
+ defaultMode: 420
+ name: dmaapmr-cadi.properties
+ name: dmaapmr-cadi
+
+---
+
+## Kowl - kafka obs
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: kowl
+ namespace: onap
+ labels:
+ run: kowl
+ prodtest: kowl
+spec:
+ type: NodePort
+ selector:
+ run: kowl
+ ports:
+ - port: 8080
+ targetPort: 8080
+ protocol: TCP
+ name: http
+ nodePort: 31767
+
+---
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: kowl
+ namespace: onap
+ labels:
+ prodtest: kowl
+spec:
+ selector:
+ matchLabels:
+ run: kowl
+ template:
+ metadata:
+ labels:
+ run: kowl
+ prodtest: kowl
+ spec:
+ volumes:
+ - name: config-vol
+ configMap:
+ name: kowl-config-cm
+ containers:
+ - name: kowl
+ image: quay.io/cloudhut/kowl
+ imagePullPolicy: IfNotPresent
+ command: ["./kowl", "--config.filepath=/etc/kowl/config.yaml"]
+ volumeMounts:
+ - name: config-vol
+ mountPath: /etc/kowl/config.yaml
+ subPath: config.yaml
+ ports:
+ - name: http
+ containerPort: 8080
+ restartPolicy: Always
+
+---
+
+
+
+
diff --git a/pm-file-flow-demo/kube-proj/kube-rapps.yaml b/pm-file-flow-demo/kube-proj/kube-rapps.yaml
new file mode 100644
index 0000000..5e37e44
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/kube-rapps.yaml
@@ -0,0 +1,66 @@
+
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: rapp
+ namespace: rapps
+ labels:
+ run: kpm
+ prodtest: rapp
+spec:
+ clusterIP: None # Headless service
+ selector:
+ run: rapp
+
+---
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: rapp
+ namespace: rapps
+ labels:
+ run: rapp
+ prodtest: rapp
+spec:
+ replicas: $NUM_RAPP
+ serviceName: rapp
+ selector:
+ matchLabels:
+ run: rapp
+ template:
+ metadata:
+ labels:
+ run: rapp
+ prodtest: rapp
+ spec:
+ initContainers:
+ - name: init
+ image: alpine:latest
+ imagePullPolicy: IfNotPresent
+ command: ["ash","-c"]
+ args: ["echo $HOSTNAME"]
+ containers:
+ - name: rapp
+ image: $RAPP_IMAGE
+ imagePullPolicy: $LOCAL_IMAGE_PULL_POLICY
+ ports:
+ - name: http
+ containerPort: 80
+ env:
+ - name: E1
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: KP
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: KAFKA_SERVER
+ value: kafka-1.onap:9092
+ - name: ICS
+ value: informationservice.nonrtric:8083
+ - name: SELF
+ value: "$(E1).rapp.rapps:80"
+
diff --git a/pm-file-flow-demo/kube-proj/kube-setup.sh b/pm-file-flow-demo/kube-proj/kube-setup.sh
new file mode 100755
index 0000000..de37a6b
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/kube-setup.sh
@@ -0,0 +1,458 @@
+#!/bin/bash
+
+print_usage() {
+ #echo "Usage: kube-setup.sh [Always]"
+ echo "Usage: kube-setup.sh -k 1 -f file|minio -nm <num-minio-servers> -ms HOSTPATH|EMPTYDIR -ipp Always|IfNotPresent|Never -repo local|<external-image-repo"
+ exit 1
+}
+
+if [ $# -ne 12 ]; then
+ print_usage
+fi
+
+NUM_KAFKA=
+NRT_STORAGE=
+LOCAL_IMAGE_PULL_POLICY=
+MINIO_STORAGE=
+NUM_MINIO=
+EXT_IMAGE_REPO=
+
+while [ $# -gt 0 ]; do
+ case $1 in
+ -k)
+ shift
+ if [ $1 -lt 1 ] || [ $1 -gt 1 ]; then
+ print_usage
+ fi
+ export NUM_KAFKA=$1
+ echo "Setting $1 kafka broker(s)"
+ shift
+ ;;
+ -f)
+ shift
+ if [ $1 == "file" ]; then
+ echo "Setting raw file volume storage"
+ elif [ $1 == "minio" ]; then
+ echo "Setting minio object storage"
+ else
+ print_usage
+ fi
+ export NRT_STORAGE=$1
+ shift
+ ;;
+ -ipp)
+ shift
+ if [ $1 == "Always" ]; then
+ echo "Setting pull policy 'Always' for locally built images pull from external repo"
+ elif [ $1 == "IfNotPresent" ]; then
+ echo "Setting pull policy 'IfNotPresent' for locally built images pull from external repo"
+ echo " Multinode cluster only: This may not work if image is not present in the node image repos"
+ elif [ $1 == "Never" ]; then
+ echo "Setting pull policy 'Never' for locally built images pull from local repo"
+ echo " Only works for local kubernetes like docker desktop etc"
+ else
+ print_usage
+ fi
+ export LOCAL_IMAGE_PULL_POLICY=$1
+ shift
+ ;;
+ -ms)
+ shift
+ if [ $1 == "HOSTPATH" ]; then
+ echo "Setting minio hostpath storage "
+ elif [ $1 == "EMPTYDIR" ]; then
+ echo "Setting minio emptydir storage"
+ else
+ print_usage
+ fi
+ export MINIO_STORAGE=$1
+ shift
+ ;;
+ -nm)
+ shift
+ # Min 1, Max 10
+ echo "Setting $1 minio servers"
+ export NUM_MINIO=$1
+ shift
+ ;;
+ -repo)
+ shift
+ if [ $1 == "local" ]; then
+ echo "Setting local repo for kubernetes (for docker desktop etc)"
+ export EXT_IMAGE_REPO=""
+ else
+ echo "Setting $1 as external image repo (for remote cluster and/or multinode kubernetes)"
+ export EXT_IMAGE_REPO=$1"/"
+ fi
+ shift
+ ;;
+ *)
+ print_usage
+ esac
+done
+
+if [[ -z "$NUM_KAFKA" ]] || [[ -z "$NRT_STORAGE" ]] || [[ -z "$LOCAL_IMAGE_PULL_POLICY" ]] || [[ -z "$MINIO_STORAGE" ]] ; then
+ print_usage
+fi
+
+if [[ -z "$NUM_MINIO" ]] ; then
+ print_usage
+fi
+# EXT_IMAGE_REPO May be empty
+
+if [ "$KHOST" == "" ]; then
+ echo "Env var KHOST not set, assuming nodeports are available on localhost"
+ export KHOST=localhost
+else
+ echo "Env var KHOST set to $KHOST, assuming nodeports are available on this IP"
+fi
+
+if [ "$KUBECONFIG" == "" ]; then
+ echo "Env var KUBECONFIG not set, using current settings for kubectl"
+else
+ echo "Env var KUBECONFIG set to $KUBECONFIG"
+fi
+
+
+# Dir mounted to all kubernetes nodes
+HOST_MNT_PATH="/dockerdata-nfs"
+
+echo "Manually clean shared dir - $HOST_MNT_PATH - (for raw file storage and/or minio storage) on host"
+read -p "Enter when done"
+
+check_error() {
+ if [ $1 -ne 0 ]; then
+ echo "Failed $2"
+ echo "Exiting..."
+ exit 1
+ fi
+}
+
+create_ics_job() {
+ JOB=$(<.job.json)
+ echo $JOB
+ retcode=1
+ echo "Creating job-$1"'-'"$2"
+ while [ $retcode -ne 0 ]; do
+ STAT=$(curl -s -X PUT -w '%{http_code}' -H accept:application/json -H Content-Type:application/json http://$KHOST:$(kube_get_nodeport informationservice nonrtric http)/data-consumer/v1/info-jobs/job-$1"-"$2 --data-binary @.job.json)
+ retcode=$?
+ echo "curl return code: $retcode"
+ if [ $retcode -eq 0 ]; then
+ status=${STAT:${#STAT}-3}
+ echo "http status code: "$status
+ if [ "$status" == "200" ]; then
+ echo "Job created ok"
+ elif [ "$status" == "201" ]; then
+ echo "Job created ok"
+ else
+ retcode=1
+ fi
+ fi
+ sleep 1
+ done
+}
+
+wait_for_server_ok() {
+ echo "Wating for server ok from: $1 - $2"
+ retcode=1
+ while [ $retcode -ne 0 ]; do
+ STAT=$(curl -s -w '%{http_code}' $1)
+ retcode=$?
+ echo "curl return code: $retcode"
+ if [ $retcode -eq 0 ]; then
+ status=${STAT:${#STAT}-3}
+ echo "http status code: "$status
+ if [ "$status" == "200" ]; then
+ echo "Response ok"
+ elif [ "$status" == "201" ]; then
+ echo "Response ok"
+ else
+ echo "Retrying..."
+ retcode=1
+ fi
+ else
+ echo "Retrying..."
+ fi
+ sleep 1
+ done
+}
+
+. scripts/kube_get_nodeport.sh
+
+
+kubectl apply -f kube0.yaml
+
+export PM_HTTPSSERVER_IMAGE=$EXT_IMAGE_REPO"pm-https-server:latest"
+export NUM_HTTP=10
+
+export VES_COLLECTOR_IMAGE=nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:1.11.0
+
+# | onap in name removed due to docker hub limitations
+if [ -z "$EXT_IMAGE_REPO" ]; then
+ export DFC_IMAGE="onap/org.onap.dcaegen2.collectors.datafile.datafile-app-server:2.5.14"
+else
+ export DFC_IMAGE=$EXT_IMAGE_REPO"org.onap.dcaegen2.collectors.datafile.datafile-app-server:2.5.14"
+fi
+
+export NUM_DFC=1 #Max 10
+export DFC_MNT="$HOST_MNT_PATH/shared-vol"
+export DFC_MINIO="http://minio.nonrtric:9000"
+if [ $NRT_STORAGE == "file" ]; then
+ export DFC_MINIO=
+fi
+
+export KPX_IMAGE=$EXT_IMAGE_REPO"kafka-pm-producer:latest"
+export NUM_KPM=1 # Max == Number of kafka partions
+
+export NUM_KP=1 # Max == Number of kafka partions
+
+export KPADP_IMAGE="nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-plt-dmaapadapter:1.2.0"
+export NUM_KPADP=1 #Max 10
+
+export KPX_MNT="\"\""
+export KPX_CNTR_VOL=
+if [ $NRT_STORAGE == "file" ]; then
+ export KPX_MNT="$HOST_MNT_PATH/shared-vol"
+ export KPX_CNTR_VOL="/pm-files"
+fi
+
+export KPX_MINIO="http://minio.nonrtric:9000"
+if [ $NRT_STORAGE == "file" ]; then
+ export KPX_MINIO=
+fi
+
+export KAFKA_NUM_PARTITIONS=10
+
+## This common dir/disk must be mounted and shared by all worker nodes. Only needed if hostpath is configured for minio further down
+export MINIO_MNT="$HOST_MNT_PATH"
+#export NUM_MINIO=1 # Min 1, Max 10
+
+./config/https/certs/gen-certs.sh $NUM_HTTP
+check_error $?
+
+cwd=$PWD
+echo "Updating dfc truststore"
+cd $cwd/config/dfc
+cp ../dfc-common/template-truststore.jks truststore.jks
+check_error $?
+
+echo " Adding https ca cert to dfc truststore"
+cat <<__EOF__ | keytool -importcert -alias pm-https -file $cwd/config/https/certs/httpsca.crt -keystore truststore.jks -storetype JKS -storepass $(< ../dfc-common/truststore.pass)
+yes
+__EOF__
+cd $cwd
+
+#arg: <cm-name> <ns> <file> <label>
+create_config_map_from_file() {
+ kubectl create cm $1 -n $2 --from-file=$3 --dry-run=client -o yaml | kubectl apply -f -
+ check_error $?
+ kubectl label cm $1 -n $2 --overwrite prodtest=$4
+ check_error $?
+}
+create_config_map_from_file pm-https-server-cm ran config/https/certs pm-https-server
+
+create_config_map_from_file ne-files ran ../docker-proj/pm-files/pm.xml.gz pm-https-server
+
+create_config_map_from_file ves-collector-ves-dmaap-config.json onap config/ves-collector/ves-dmaap-config.json ves-collector
+
+create_config_map_from_file ves-collector-collector.properties onap config/ves-collector/collector.properties ves-collector
+
+create_config_map_from_file informationservice-cm nonrtric config/ics/application.yaml informationservice
+
+create_config_map_from_file dmaapmr-msgrtrapi.properties onap config/dmaapmr/mr/MsgRtrApi.properties message-router
+
+create_config_map_from_file dmaapmr-cadi.properties onap config/dmaapmr/mr/cadi.properties message-router
+
+create_config_map_from_file kowl-config-cm onap config/kowl/config.yaml kowl
+
+create_config_map_from_file dfc-cm-truststore.jks onap config/dfc/truststore.jks dfc
+
+for (( i=0; i<10; i++ )); do
+ export DFC_IDX=$i
+ envsubst < config/dfc/application-template.yaml > config/dfc/application-$i.yaml
+done
+
+create_config_map_from_file dfc-cm onap config/dfc dfc
+
+create_config_map_from_file dfc-cm-truststore.jks onap config/dfc/truststore.jks dfc
+
+if [ $NRT_STORAGE == "file" ]; then
+ cp config/kpm/application_configuration-file.json config/kpm/application_configuration.json
+ #create_config_map_from_file kpm-cm nonrtric config/kpm/application_configuration.json kpm
+else
+ cp config/kpm/application_configuration-minio.json config/kpm/application_configuration.json
+fi
+create_config_map_from_file kpm-cm nonrtric config/kpm/application_configuration.json kpm
+
+if [ $NRT_STORAGE == "file" ]; then
+ cp config/kp/application_configuration-file.json config/kp/application_configuration.json
+ #create_config_map_from_file kp-cm nonrtric config/kp/application_configuration.json kp
+else
+ cp config/kp/application_configuration-minio.json config/kp/application_configuration.json
+fi
+create_config_map_from_file kp-cm nonrtric config/kp/application_configuration.json kp
+
+
+if [ $NRT_STORAGE == "file" ]; then
+ cp config/kpadp/application_configuration-file.json config/kpadp/application_configuration.json
+ #create_config_map_from_file kpadp-data nonrtric config/kpadp/application_configuration.json kpadp
+else
+ cp config/kpadp/application_configuration-minio.json config/kpadp/application_configuration.json
+fi
+create_config_map_from_file kpadp-data nonrtric config/kpadp/application_configuration.json kpadp
+
+for (( i=0; i<10; i++ )); do
+ export KPADP_IDX=$i
+ if [ $NRT_STORAGE == "file" ]; then
+ envsubst < config/kpadp/application-template-file.yaml > config/kpadp/application-$i.yaml
+ else
+ envsubst < config/kpadp/application-template-minio.yaml > config/kpadp/application-$i.yaml
+ fi
+done
+
+create_config_map_from_file kpadp-cm nonrtric config/kpadp kpadp
+
+# for (( i=0; i<10; i++ )); do
+# if [ $i -lt $NUM_MINIO ]; then
+# #Format content according to yaml item
+# if [ $NUM_MINIO -eq 1 ]; then
+# export "MINIO_SERVER_$i"="- /data/$i/"
+# else
+# export "MINIO_SERVER_$i"="- http://minio-$i.minio.nonrtric.svc.cluster.local/data/$i/"
+# fi
+# else
+# export "MINIO_SERVER_$i"=""
+# fi
+# done
+if [ $NUM_MINIO -eq 1 ]; then
+ export MINIO_SERVER_CONF="/data/0/"
+else
+ export MINIO_SERVER_CONF="http://minio-{0...$((NUM_MINIO-1))}.minio.nonrtric.svc.cluster.local/data/{0...$((NUM_MINIO-1))}/"
+fi
+
+
+envsubst < kube-plt.yaml > kube-plt-gen.yaml
+check_error $?
+
+kubectl apply -f kube-plt-gen.yaml
+check_error $?
+
+if [ $NRT_STORAGE == "minio" ]; then
+ if [ $MINIO_STORAGE == "EMPTYDIR" ]; then
+ cat kube-minio.yaml | sed '/#MINIO_HOSTPATH_DIR_START/,/#MINIO_HOSTPATH_DIR_STOP/d' > kube-minio.yaml.tmp
+ else
+ cat kube-minio.yaml | sed '/#MINIO_EMPTY_DIR_START/,/#MINIO_EMPTY_DIR_STOP/d' > kube-minio.yaml.tmp
+ fi
+
+ envsubst < kube-minio.yaml.tmp > kube-minio-gen.yaml
+ check_error $?
+
+ kubectl apply -f kube-minio-gen.yaml
+ check_error $?
+fi
+
+wait_for_server_ok http://$KHOST:$(kube_get_nodeport informationservice nonrtric http)/status "ics"
+wait_for_server_ok http://$KHOST:$(kube_get_nodeport message-router onap http)/topics "mr topics"
+
+export TOPICS="file-ready collected-file json-file-ready json-file-ready-kp json-file-ready-kpadp"
+echo "Creating topics: $TOPICS, may take a while ..."
+for t in $TOPICS; do
+ retcode=1
+ rt=43200000
+ echo "Creating topic $t with retention $(($rt/1000)) seconds"
+ while [ $retcode -ne 0 ]; do
+ status=$(kubectl exec client -n nonrtric -- bash -c 'kafka-topics --create --topic '$t' --config retention.ms='$rt' --bootstrap-server kafka-1.onap:9092')
+ retcode=$?
+ if [ $retcode -eq 0 ]; then
+ echo "Topic $t created"
+ elif [[ "$status" == *"already exists."* ]]; then
+ echo "Topic $t already exists"
+ retcode=0
+ fi
+ if [ $retcode -ne 0 ]; then
+ sleep 1
+ fi
+ done
+done
+
+if [ $NRT_STORAGE == "minio" ]; then
+ read -p "Check that minio server(s) is/are up"
+fi
+
+if [ $NRT_STORAGE != "file" ]; then
+ # Remove volume mount for shared volume
+ cat kube-dfc.yaml | sed '/#DFC_SHARED_DIR_START/,/#DFC_SHARED_DIR_STOP/d' > kube-dfc.yaml.tmp
+ check_error $?
+ envsubst < kube-dfc.yaml.tmp > kube-dfc-gen.yaml
+ check_error $?
+else
+ envsubst < kube-dfc.yaml > kube-dfc-gen.yaml
+ check_error $?
+fi
+
+kubectl apply -f kube-dfc-gen.yaml
+check_error $?
+
+if [ $NRT_STORAGE != "file" ]; then
+ # Remove volume mount for shared volume
+ cat kube.yaml | sed '/#KPX_SHARED_DIR_START/,/#KPX_SHARED_DIR_STOP/d' > kube.yaml.tmp
+ check_error $?
+ envsubst < kube.yaml.tmp > kube-gen.yaml
+ check_error $?
+else
+ envsubst < kube.yaml > kube-gen.yaml
+ check_error $?
+fi
+
+kubectl apply -f kube-gen.yaml
+check_error $?
+
+# if [ $NRT_STORAGE == "file" ]; then
+# JOB='{"info_type_id": "xml-file-data", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {
+# "kafkaOutputTopic":"json-file-ready","filterType":"pmdata","filter":{"inputCompression":"xml.gz", "outputCompression":"none"}
+# }}'
+# else
+# JOB='{"info_type_id": "xml-file-data-to-filestore", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {
+# "kafkaOutputTopic":"json-file-ready","filestore-output-bucket": "pm-files-json", "filterType":"pmdata","filter":{"inputCompression":"xml.gz", "outputCompression":"none"}
+# }}'
+# fi
+# echo $JOB > .job.json
+# create_ics_job xml 0
+
+
+if [ $NRT_STORAGE == "file" ]; then
+ # Store in file system
+ JOB='{"info_type_id": "json-file-data", "job_owner": "console","status_notification_uri": "http://callback.nonrtric:80/post","job_definition": {
+ "kafkaOutputTopic":"rapp-topic-1","filterType":"pmdata","filter":{"measTypes":["pmCounterNumber101"]}
+ }}'
+ echo $JOB > .job.json
+fi
+
+if [ $NRT_STORAGE == "minio" ]; then
+ #Store in filestore
+ JOB='{"info_type_id": "json-file-data-from-filestore", "job_owner": "console","status_notification_uri": "http://callback.nonrtric:80/post","job_definition": {
+ "kafkaOutputTopic":"rapp-topic-1","filterType":"pmdata","filter":{"measTypes":["pmCounterNumber101"]}
+ }}'
+ echo $JOB > .job.json
+fi
+# if [ $NRT_STORAGE == "file" ]; then
+# JOB='{"info_type_id": "json-file-data", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {
+# "kafkaOutputTopic":"rapp-topic-1","filterType":"pmdata","filter":{"measTypes":["pmCounterNumber101"], "inputCompression":"none", "outputCompression":"none"}
+# }}'
+# else
+# JOB='{"info_type_id": "json-file-data-from-filestore", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {
+# "kafkaOutputTopic":"rapp-topic-1","filterType":"pmdata","filter":{"measTypes":["pmCounterNumber101"], "inputCompression":"none", "outputCompression":"none"}
+# }}'
+# fi
+echo $JOB > .job.json
+create_ics_job kp-json 0
+
+# JOB='{"info_type_id": "PmData", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {
+# "kafkaOutputTopic":"rapp-topic-2","filterType":"pmdata","filter":{"measTypes":["pmCounterNumber101"]}
+# }}'
+# echo $JOB > .job.json
+JOB='{"info_type_id": "PmData", "job_owner": "console","status_notification_uri": "http://callback.nonrtric:80/post","job_definition": {
+"kafkaOutputTopic":"rapp-topic-2","filterType":"pmdata","filter":{"measTypes":["pmCounterNumber101"]}
+}}'
+echo $JOB > .job.json
+create_ics_job kpadp-json 0
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/kube-tear-down.sh b/pm-file-flow-demo/kube-proj/kube-tear-down.sh
new file mode 100755
index 0000000..0a5f0c0
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/kube-tear-down.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+if [ "$KUBECONFIG" == "" ]; then
+ echo "Env var KUBECONFIG not set, using current settings for kubectl"
+else
+ echo "Env var KUBECONFIG set to $KUBECONFIG"
+fi
+
+kubectl delete -f kube-gen.yaml
+
+kubectl delete -f kube-plt-gen.yaml
+
+kubectl delete -f kube-dfc-gen.yaml
+
+kubectl delete -f kube-minio-gen.yaml
+
+kubectl delete cm -A -l prodtest
+
+kubectl delete pods -n nonrtric -l dmaap_test
diff --git a/pm-file-flow-demo/kube-proj/kube.yaml b/pm-file-flow-demo/kube-proj/kube.yaml
new file mode 100644
index 0000000..2422ffd
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/kube.yaml
@@ -0,0 +1,280 @@
+# NodePorts
+# 31750 kubernetes dashboard
+# 31760 ves collector
+# 31761 ves collector https
+# 31764 ics
+# 31765 ics https
+# 31766 message-router
+# 31767 kowl
+# 31768 minio
+# 31770-79 dfc
+# 31785 message-router https
+# 31795 kafka http
+# 31796 kafka http2
+
+## Kafka-producer - xml to json
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: kpm
+ namespace: nonrtric
+ labels:
+ run: kpm
+ prodtest: kpm
+spec:
+ clusterIP: None # Headless service
+ selector:
+ run: kpm
+
+---
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: kpm
+ namespace: nonrtric
+ labels:
+ run: kpm
+ prodtest: kpm
+spec:
+ replicas: $NUM_KPM
+ serviceName: kpm
+ selector:
+ matchLabels:
+ run: kpm
+ template:
+ metadata:
+ labels:
+ run: kpm
+ prodtest: kpm
+ spec:
+ initContainers:
+ - name: init
+ image: alpine:latest
+ imagePullPolicy: IfNotPresent
+ command: ["ash","-c"]
+ args: ["echo $HOSTNAME"]
+ containers:
+ - name: kpm
+ image: $KPX_IMAGE
+ imagePullPolicy: $LOCAL_IMAGE_PULL_POLICY
+ ports:
+ - name: http
+ containerPort: 80
+ env:
+ - name: E1
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: KP
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: FILES_VOLUME
+ value: $KPX_CNTR_VOL
+ - name: KAFKA_SERVER
+ value: kafka-1.onap:9092
+ - name: ICS
+ value: informationservice.nonrtric:8083
+ - name: SELF
+ value: "$(E1).kpm.nonrtric:80"
+ - name: FILESTORE_USER
+ value: admin
+ - name: FILESTORE_PWD
+ value: adminadmin
+ - name: FILESTORE_SERVER
+ value: minio.nonrtric:9000
+ volumeMounts:
+ - mountPath: /application_configuration.json
+ subPath: application_configuration.json
+ name: kpm-conf
+#KPX_SHARED_DIR_START
+ - name: shared-vol
+ mountPath: $KPX_CNTR_VOL
+#KPX_SHARED_DIR_STOP
+ volumes:
+ - configMap:
+ defaultMode: 420
+ name: kpm-cm
+ name: kpm-conf
+#KPX_SHARED_DIR_START
+ - name: shared-vol
+ hostPath:
+ path: $KPX_MNT
+ type: DirectoryOrCreate
+#KPX_SHARED_DIR_STOP
+
+---
+
+## Kafka-producer - json to json
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: kp
+ namespace: nonrtric
+ labels:
+ run: kp
+ prodtest: kp
+spec:
+ clusterIP: None # Headless service
+ selector:
+ run: kp
+
+---
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: kp
+ namespace: nonrtric
+ labels:
+ run: kp
+ prodtest: kp
+spec:
+ replicas: $NUM_KP
+ serviceName: kp
+ selector:
+ matchLabels:
+ run: kp
+ template:
+ metadata:
+ labels:
+ run: kp
+ prodtest: kp
+ spec:
+ containers:
+ - name: kp
+ image: $KPX_IMAGE
+ imagePullPolicy: $LOCAL_IMAGE_PULL_POLICY
+ ports:
+ - name: http
+ containerPort: 80
+ env:
+ - name: E1
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: KP
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: FILES_VOLUME
+ value: $KPX_CNTR_VOL
+ - name: KAFKA_SERVER
+ value: kafka-1.onap:9092
+ - name: ICS
+ value: informationservice.nonrtric:8083
+ - name: SELF
+ value: "$(E1).kp.nonrtric:80"
+ - name: FILESTORE_USER
+ value: admin
+ - name: FILESTORE_PWD
+ value: adminadmin
+ - name: FILESTORE_SERVER
+ value: minio.nonrtric:9000
+ volumeMounts:
+ - mountPath: /application_configuration.json
+ subPath: application_configuration.json
+ name: kp-conf
+#KPX_SHARED_DIR_START
+ - name: shared-vol
+ mountPath: $KPX_CNTR_VOL
+#KPX_SHARED_DIR_STOP
+ volumes:
+ - configMap:
+ defaultMode: 420
+ name: kp-cm
+ name: kp-conf
+#KPX_SHARED_DIR_START
+ - name: shared-vol
+ hostPath:
+ path: $KPX_MNT
+ type: DirectoryOrCreate
+#KPX_SHARED_DIR_STOP
+
+---
+
+## Dmaap adapter - json to json
+
+apiVersion: v1
+kind: Service
+metadata:
+ name: kpadp
+ namespace: nonrtric
+ labels:
+ run: kpadp
+ prodtest: kpadp
+spec:
+ clusterIP: None # Headless service
+ selector:
+ run: kpadp
+
+---
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: kpadp
+ namespace: nonrtric
+ labels:
+ run: kpadp
+ prodtest: kpadp
+spec:
+ replicas: $NUM_KPADP
+ serviceName: kpadp
+ selector:
+ matchLabels:
+ run: kpadp
+ template:
+ metadata:
+ labels:
+ run: kpadp
+ prodtest: kpadp
+ spec:
+ initContainers:
+ # Copy unique application.yaml to each replica
+ - name: init
+ image: alpine:latest
+ imagePullPolicy: IfNotPresent
+ command: ["ash","-c"]
+ args: ["cp /config-host/application-${HOSTNAME##*-}.yaml /opt/app/dmaap-adapter-service/config/application.yaml"]
+ volumeMounts:
+ - name: config-cm
+ mountPath: /config-host
+ - name: config-cm-contr
+ mountPath: /opt/app/dmaap-adapter-service/config
+ containers:
+ - name: kpadp
+ image: $KPADP_IMAGE
+ imagePullPolicy: $LOCAL_IMAGE_PULL_POLICY
+ ports:
+ - name: http
+ containerPort: 8084
+ volumeMounts:
+ - mountPath: /opt/app/dmaap-adapter-service/data/application_configuration.json
+ subPath: application_configuration.json
+ name: kpadp-cm-data
+ - mountPath: /opt/app/dmaap-adapter-service/config/application.yaml
+ subPath: application.yaml
+ name: config-cm-contr
+#KPX_SHARED_DIR_START
+ - name: shared-vol
+ mountPath: $KPX_CNTR_VOL
+#KPX_SHARED_DIR_STOP
+ volumes:
+ - name: kpadp-cm-data
+ configMap:
+ name: kpadp-data
+ - name: config-cm-contr
+ emptyDir: {}
+ - name: config-cm
+ configMap:
+ name: kpadp-cm
+#KPX_SHARED_DIR_START
+ - name: shared-vol
+ hostPath:
+ path: $KPX_MNT
+ type: DirectoryOrCreate
+#KPX_SHARED_DIR_STOP
diff --git a/pm-file-flow-demo/kube-proj/kube0.yaml b/pm-file-flow-demo/kube-proj/kube0.yaml
new file mode 100644
index 0000000..1e043d2
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/kube0.yaml
@@ -0,0 +1,34 @@
+
+kind: Namespace
+apiVersion: v1
+metadata:
+ name: ran
+ labels:
+ prodtest: ns-ran
+
+---
+
+kind: Namespace
+apiVersion: v1
+metadata:
+ name: onap
+ labels:
+ prodtest: ns-onap
+---
+
+kind: Namespace
+apiVersion: v1
+metadata:
+ name: nonrtric
+ labels:
+ prodtest: ns-nonrtric
+
+---
+
+kind: Namespace
+apiVersion: v1
+metadata:
+ name: rapps
+ labels:
+ prodtest: ns-rapps
+
diff --git a/pm-file-flow-demo/kube-proj/ne-files/dummy.txt b/pm-file-flow-demo/kube-proj/ne-files/dummy.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/ne-files/dummy.txt
diff --git a/pm-file-flow-demo/kube-proj/prepare.sh b/pm-file-flow-demo/kube-proj/prepare.sh
new file mode 100755
index 0000000..4f88342
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/prepare.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# Push local images to repo availble to external kube cluster
+
+if [ "$1" == "bm" ]; the
+ REPO="bjornmagnussonest"
+elif [ ! -z "$1" ]; then
+ REPO=$1
+else
+ echo "Usage: ./prepare.sh <repo-name>"
+ exit 1
+fi
+
+DFC_IM="onap/org.onap.dcaegen2.collectors.datafile.datafile-app-server:2.5.14"
+# Note, 'onap' is removed due to docker hub limitations
+export DFC_IMAGE=/$REPO/org.onap.dcaegen2.collectors.datafile.datafile-app-server:2.5.14
+docker tag $DFC_IM $DFC_IMAGE
+docker push $DFC_IMAGE
diff --git a/pm-file-flow-demo/kube-proj/scripts/kafka-client-send-file-ready.sh b/pm-file-flow-demo/kube-proj/scripts/kafka-client-send-file-ready.sh
new file mode 100755
index 0000000..8e17ae1
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/scripts/kafka-client-send-file-ready.sh
@@ -0,0 +1,178 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+SD=$(dirname -- "$0")
+echo "script-home: "$SD
+cd $SD
+CWD=$PWD
+
+NODE_COUNT=$1
+EVT_COUNT=$2
+NODE_NAME_BASE=$3
+FILE_EXT=$4
+TYPE=$5
+SRV_COUNT=$6
+HIST=$7
+
+FTPES_PORT=2021
+SFTP_PORT=2022
+HTTPS_PORT=443
+
+print_usage() {
+ echo "Usage: kafka-client-send-file-ready.sh <node-count> <num-of-events> <node-name-base> <file-extension> sftp|ftpes|https <num-servers> [hist]"
+ exit 1
+}
+echo $@
+if [ $# -lt 6 ] && [ $# -gt 7 ]; then
+ print_usage
+fi
+
+if [ $TYPE == "sftp" ]; then
+ echo "sftp servers not yet supported"
+elif [ $TYPE == "ftpes" ]; then
+ echo "ftpes servers not yet supported"
+elif [ $TYPE == "https" ]; then
+ :
+else
+ print_usage
+fi
+HIST_LEN=0
+if [ ! -z "$HIST" ]; then
+ if [ $HIST != "hist" ]; then
+ print_usage
+ fi
+ HIST_LEN=96
+fi
+
+BEGINTIME=1665146700
+CURTIME=$BEGINTIME
+
+BATCHSIZE=1000
+
+CNTR=0
+TCNTR=0
+
+for (( i=0; i<$EVT_COUNT; i++)); do
+
+ if [ $CNTR -eq 0 ]; then
+ rm .out.json
+ touch .out.json
+ fi
+
+ if [ "$HIST" == "" ]; then
+ echo "EVENT NO: $i for $NODE_COUNT NODES - 1 FILE PER EVENT"
+ else
+ echo "EVENT NO: $i for $NODE_COUNT NODES - $HIST_LEN FILES PER EVENT"
+ fi
+
+ ST=$(date -d @$CURTIME +'%Y%m%d.%H%M')
+ let CURTIME=CURTIME+900
+ ET=$(date -d @$CURTIME +'%H%M')
+
+ for (( j=0; j<$NODE_COUNT; j++)); do
+
+ if [ "$HIST" == "" ]; then
+ NO="$NODE_NAME_BASE-$j"
+
+ #FN="A20000626.2315+0200-2330+0200_$NO-$i.$FILE_EXT"
+ FN="A$ST+0200-$ET+0200_$NO-$i.$FILE_EXT"
+ let SRV_ID=$j%$SRV_COUNT
+ let SRV_ID=SRV_ID+1
+ echo "NODE "$NO
+ echo "FILENAME "$FN
+
+
+ if [ $TYPE == "sftp" ]; then
+ SRV="ftp-sftp-$SRV_ID"
+ echo "FTP SERVER "$SRV
+ URL="sftp://onap:pano@$SRV:$SFTP_PORT/$FN"
+ elif [ $TYPE == "ftpes" ]; then
+ SRV="ftp-ftpes-$SRV_ID"
+ echo "FTP SERVER "$SRV
+ URL="ftpes://onap:pano@$SRV:$FTPES_PORT/$FN"
+ elif [ $TYPE == "https" ]; then
+ SRV="pm-https-server-$SRV_ID.pm-https-server.ran"
+ echo "HTTP SERVER "$SRV
+ URL="https://$SRV:$HTTPS_PORT/files/$FN"
+ fi
+ EVT='{"event":{"commonEventHeader":{"sequence":0,"eventName":"Noti_RnNode-Ericsson_FileReady","sourceName":"'$NO'","lastEpochMicrosec":151983,"startEpochMicrosec":15198378,"timeZoneOffset":"UTC+05:00","changeIdentifier":"PM_MEAS_FILES"},"notificationFields":{"notificationFieldsVersion":"notificationFieldsVersion","changeType":"FileReady","changeIdentifier":"PM_MEAS_FILES","arrayOfNamedHashMap":[{"name":"'$FN'","hashMap":{"fileFormatType":"org.3GPP.32.435#measCollec","location":"'$URL'","fileFormatVersion":"V10","compression":"gzip"}}]}}}'
+ echo $EVT >> .out.json
+ else
+ NO="$NODE_NAME_BASE-$j"
+
+ let SRV_ID=$j%$SRV_COUNT
+ let SRV_ID=SRV_ID+1
+ echo "NODE "$NO
+
+ EVT_FRAG=""
+ for(( k=95; k>=0; k-- )); do
+
+ let FID=$i-k
+ CURTIME=$(($BEGINTIME+$FID*900))
+ ST=$(date -d @$CURTIME +'%Y%m%d.%H%M')
+ let CURTIME=CURTIME+900
+ ET=$(date -d @$CURTIME +'%H%M')
+ if [ $FID -lt 0 ]; then
+ FN="NONEXISTING_$NO-$FID.$FILE_EXT"
+ else
+ #FN="A20000626.2315+0200-2330+0200_$NO-$FID.$FILE_EXT"
+ FN="A$ST+0200-$ET+0200_$NO-$FID.$FILE_EXT"
+ fi
+ echo "FILENAME "$FN
+ if [ $TYPE == "sftp" ]; then
+ SRV="ftp-sftp-$SRV_ID"
+ #echo "FTP SERVER "$SRV
+ URL="sftp://onap:pano@$SRV:$SFTP_PORT/$FN"
+ elif [ $TYPE == "ftpes" ]; then
+ SRV="ftp-ftpes-$SRV_ID"
+ #echo "FTP SERVER "$SRV
+ URL="ftpes://onap:pano@$SRV:$FTPES_PORT/$FN"
+ elif [ $TYPE == "https" ]; then
+ SRV="pm-https-server-$SRV_ID.pm-https-server.ran"
+ #echo "HTTP SERVER "$SRV
+ URL="https://$SRV:$HTTPS_PORT/files/$FN"
+ fi
+ if [ "$EVT_FRAG" != "" ]; then
+ EVT_FRAG=$EVT_FRAG","
+ fi
+ EVT_FRAG=$EVT_FRAG'{"name":"'$FN'","hashMap":{"fileFormatType":"org.3GPP.32.435#measCollec","location":"'$URL'","fileFormatVersion":"V10","compression":"gzip"}}'
+ done
+
+ EVT='{"event":{"commonEventHeader":{"sequence":0,"eventName":"Noti_RnNode-Ericsson_FileReady","sourceName":"'$NO'","lastEpochMicrosec":151983,"startEpochMicrosec":15198378,"timeZoneOffset":"UTC+05:00","changeIdentifier":"PM_MEAS_FILES"},"notificationFields":{"notificationFieldsVersion":"notificationFieldsVersion","changeType":"FileReady","changeIdentifier":"PM_MEAS_FILES","arrayOfNamedHashMap":['$EVT_FRAG']}}}'
+ echo $EVT >> .out.json
+
+ fi
+
+ let CNTR=CNTR+1
+ let TCNTR=TCNTR+1
+ if [ $CNTR -ge $BATCHSIZE ]; then
+ echo "Pushing batch of $CNTR events"
+ cat .out.json | kafka-console-producer --topic file-ready --broker-list kafka-1.onap:9092
+ rm .out.json
+ touch .out.json
+ CNTR=0
+ fi
+ done
+done
+if [ $CNTR -ne 0 ]; then
+ echo "Pushing batch of $CNTR events"
+ cat .out.json | kafka-console-producer --topic file-ready --broker-list kafka-1.onap:9092
+fi
+
+echo "Pushed $TCNTR events"
diff --git a/pm-file-flow-demo/kube-proj/scripts/kube_get_nodeport.sh b/pm-file-flow-demo/kube-proj/scripts/kube_get_nodeport.sh
new file mode 100755
index 0000000..5b9e1a3
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/scripts/kube_get_nodeport.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+# args: <service-name> <ns> <port-name>
+kube_get_nodeport() {
+ if [ $# -ne 3 ]; then
+ echo"kube_get_nodeport need 3 args, <service-name> <ns> <port-name>" $@
+ exit 1
+ fi
+
+ for timeout in {1..60}; do
+ port=$(kubectl get svc $1 -n $2 -o jsonpath='{...ports[?(@.name=="'$3'")].nodePort}')
+ if [ $? -eq 0 ]; then
+ if [ ! -z "$port" ]; then
+ echo $port
+ return 0
+ fi
+ fi
+ sleep 0.5
+ done
+ echo "0"
+ return 1
+}
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/scripts/list-topics.sh b/pm-file-flow-demo/kube-proj/scripts/list-topics.sh
new file mode 100755
index 0000000..e45e00d
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/scripts/list-topics.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+if [ "$KUBECONFIG" == "" ]; then
+ echo "Env var KUBECONFIG not set, using current settings for kubectl"
+else
+ echo "Env var KUBECONFIG set to $KUBECONFIG"
+fi
+
+kubectl exec -it client -n nonrtric -- \
+ bash -c 'kafka-topics --list --bootstrap-server kafka-1.onap:9092'
diff --git a/pm-file-flow-demo/kube-proj/scripts/local-populate-ne-files.sh b/pm-file-flow-demo/kube-proj/scripts/local-populate-ne-files.sh
new file mode 100755
index 0000000..e02ecbf
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/scripts/local-populate-ne-files.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+SD=$(dirname -- "$0")
+cd $SD
+
+NODE_COUNT=$1
+FILE_COUNT=$2
+NODE_NAME_BASE=$3
+FILE_EXT=$4
+NUM_SRV=$5
+
+print_usage() {
+ echo "Usage: local-populate-ne-files.sh <node-count> <file-count> <node-name-base> <file-extension> <num-servers"
+ exit 1
+}
+if [ $# -ne 5 ]; then
+ print_usage
+fi
+
+CNT=0
+for (( i=0; i<$NODE_COUNT; i++ )); do
+ for (( j=0; j<$FILE_COUNT; j++ )); do
+ ERR=$(ln -s pm.$FILE_EXT A20000626.2315+0200-2330+0200_$NODE_NAME_BASE-$i-$j.$FILE_EXT 2>&1)
+ if [ $? -ne 0 ]; then
+ if [[ "$ERR" != *"File exists"* ]]; then
+ echo "Cannot create symbolic link in $DIR, err: $ERR"
+ echo "Exiting..."
+ exit 1
+ fi
+ fi
+ let CNT=CNT+1
+ done
+done
+echo " Created $CNT symlinks to pm.$FILE_EXT"
+
+
+# echo "Creating files for download"
+# cd $CWD
+# DIR="../ne-files"
+# if [ ! -d "$DIR" ]; then
+# echo "Dir $DIR for ne-files not foud"
+# exit 1
+# fi
+# create_files
+
+# echo "DONE"
+
diff --git a/pm-file-flow-demo/kube-proj/scripts/populate-ne-files.sh b/pm-file-flow-demo/kube-proj/scripts/populate-ne-files.sh
new file mode 100755
index 0000000..1125578
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/scripts/populate-ne-files.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+SD=$(dirname -- "$0")
+echo "script-home: "$SD
+cd $SD
+CWD=$PWD
+
+NODE_COUNT=$1
+FILE_COUNT=$2
+NODE_NAME_BASE=$3
+FILE_EXT=$4
+NUM_SRV=$5
+
+print_usage() {
+ echo "Usage: populate-ne-files.sh <node-count> <file-count> <node-name-base> <file-extension> <num-servers"
+ exit 1
+}
+if [ $# -ne 5 ]; then
+ print_usage
+fi
+
+if [ "$KUBECONFIG" == "" ]; then
+ echo "Env var KUBECONFIG not set, using current settings for kubectl"
+else
+ echo "Env var KUBECONFIG set to $KUBECONFIG"
+fi
+
+for (( i=0; i<$NUM_SRV; i++ )); do
+ echo "Populating server: pm-https-server-$i"
+ kubectl exec -n ran pm-https-server-$i -c pm-https-server -- mkdir -p /files
+ kubectl cp ../../docker-proj/pm-files/pm.xml.gz ran/pm-https-server-$i:/files/pm.xml.gz -c pm-https-server
+ kubectl cp local-populate-ne-files.sh ran/pm-https-server-$i:/files/local-populate-ne-files.sh -c pm-https-server
+ kubectl exec -n ran pm-https-server-$i -c pm-https-server -- /files/local-populate-ne-files.sh $1 $2 $3 $4 $5
+done
+
+echo "DONE"
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/scripts/push-to-file-ready-topic.sh b/pm-file-flow-demo/kube-proj/scripts/push-to-file-ready-topic.sh
new file mode 100755
index 0000000..108fac0
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/scripts/push-to-file-ready-topic.sh
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+SD=$(dirname -- "$0")
+echo "${0##*/} script-home: "$SD
+cd $SD
+CWD=$PWD
+
+
+NODE_COUNT=$1
+EVT_COUNT=$2
+NODE_NAME_BASE=$3
+FILE_EXT=$4
+TYPE=$5
+SRV_COUNT=$6
+HIST=$7
+
+print_usage() {
+ echo "Usage: push-to-file-ready-topic.sh <node-count> <num-of-events> <node-name-base> <file-extension> sftp|ftpes|https <num-servers> [hist]"
+ exit 1
+}
+if [ $# -lt 6 ] || [ $# -gt 7 ]; then
+ print_usage
+fi
+
+if [ $TYPE == "sftp" ]; then
+ echo "sftp servers not yet supported"
+elif [ $TYPE == "ftpes" ]; then
+ echo "ftpes servers not yet supported"
+elif [ $TYPE == "https" ]; then
+ :
+else
+ print_usage
+fi
+
+if [ ! -z "$HIST" ]; then
+ if [ $HIST != "hist" ]; then
+ print_usage
+ fi
+fi
+
+if [ "$KUBECONFIG" == "" ]; then
+ echo "Env var KUBECONFIG not set, using current settings for kubectl"
+else
+ echo "Env var KUBECONFIG set to $KUBECONFIG"
+fi
+
+chmod +x kafka-client-send-file-ready.sh
+kubectl cp kafka-client-send-file-ready.sh nonrtric/client:/home/appuser
+
+kubectl exec client -n nonrtric -- bash -c './kafka-client-send-file-ready.sh '$NODE_COUNT' '$EVT_COUNT' '$NODE_NAME_BASE' '$FILE_EXT' '$TYPE' '$SRV_COUNT' '$HIST
+
+echo done
+
diff --git a/pm-file-flow-demo/kube-proj/scripts/push-to-ves-collector.sh b/pm-file-flow-demo/kube-proj/scripts/push-to-ves-collector.sh
new file mode 100755
index 0000000..a2c5427
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/scripts/push-to-ves-collector.sh
@@ -0,0 +1,210 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+SD=$(dirname -- "$0")
+echo "script-home: "$SD
+cd $SD
+CWD=$PWD
+
+. kube_get_nodeport.sh
+
+NODE_COUNT=$1
+EVT_COUNT=$2
+NODE_NAME_BASE=$3
+FILE_EXT=$4
+TYPE=$5
+SRV_COUNT=$6
+HIST=$7
+
+FTPES_PORT=2021
+SFTP_PORT=2022
+HTTPS_PORT=443
+
+print_usage() {
+ echo "Usage: push-to-ves-collector.sh <node-count> <num-of-events> <node-name-base> <file-extension> sftp|ftpes|https <num-servers> [hist]"
+ exit 1
+}
+echo $@
+if [ $# -lt 6 ] || [ $# -gt 7 ]; then
+ print_usage
+fi
+
+if [ $TYPE == "sftp" ]; then
+ echo "sftp servers not yet supported"
+elif [ $TYPE == "ftpes" ]; then
+ echo "ftpes servers not yet supported"
+elif [ $TYPE == "https" ]; then
+ :
+else
+ print_usage
+fi
+HIST_LEN=0
+if [ ! -z "$HIST" ]; then
+ if [ $HIST != "hist" ]; then
+ print_usage
+ fi
+ HIST_LEN=96
+fi
+
+if [ "$KHOST" == "" ]; then
+ echo "Env var KHOST not set, assuming nodeports are available on localhost"
+ export KHOST=localhost
+else
+ echo "Env var KHOST set to $KHOST, assuming nodeports are available on this IP"
+fi
+
+BEGINTIME=1665146700
+CURTIME=$BEGINTIME
+
+BATCHSIZE=5
+
+CNTR=0
+TCNTR=0
+
+for (( i=0; i<$EVT_COUNT; i++)); do
+
+ if [ "$HIST" == "" ]; then
+ echo "EVENT BATCH: $i of $EVT_COUNT events for $NODE_COUNT NODES - 1 FILE PER EVENT"
+ else
+ echo "EVENT BATCH: $i of $EVT_COUNT events for $NODE_COUNT NODES - $HIST_LEN FILES PER EVENT"
+ fi
+
+ arch="$(uname -s)"
+ if [[ $arch == "Darwin"* ]]; then
+ ST=$(date -r $CURTIME +'%Y%m%d.%H%M')
+ let CURTIME=CURTIME+900
+ ET=$(date -r $CURTIME +'%H%M')
+ else
+ ST=$(date -d @$CURTIME +'%Y%m%d.%H%M')
+ let CURTIME=CURTIME+900
+ ET=$(date -d @$CURTIME +'%H%M')
+ fi
+
+ for (( j=0; j<$NODE_COUNT; j++)); do
+
+ if [ "$HIST" == "" ]; then
+ NO="$NODE_NAME_BASE-$j"
+ #FN="A20000626.2315+0200-2330+0200_$NO-$i.$FILE_EXT"
+ FN="A$ST+0200-$ET+0200_$NO-$i.$FILE_EXT"
+ let SRV_ID=$j%$SRV_COUNT
+ let SRV_ID=SRV_ID+1
+ #echo "NODE "$NO
+ echo "FILENAME "$FN
+ if [ $TYPE == "sftp" ]; then
+ SRV="ftp-sftp-$SRV_ID"
+ echo "FTP SERVER "$SRV
+ URL="sftp://onap:pano@$SRV:$SFTP_PORT/$FN"
+ elif [ $TYPE == "ftpes" ]; then
+ SRV="ftp-ftpes-$SRV_ID"
+ echo "FTP SERVER "$SRV
+ URL="ftpes://onap:pano@$SRV:$FTPES_PORT/$FN"
+ elif [ $TYPE == "https" ]; then
+ SRV="pm-https-server-$SRV_ID.pm-https-server.ran"
+ #echo "HTTP SERVER "$SRV
+ URL="https://$SRV:$HTTPS_PORT/files/$FN"
+ fi
+ EVT='{"commonEventHeader":{"startEpochMicrosec":15198378,"eventId":"FileReady_1797490e-10ae-4d48-9ea7-3d7d790b25e1","timeZoneOffset":"UTC+05.30","internalHeaderFields":{"collectorTimeStamp":"Wed,0907202211:56:02GMT"},"priority":"Normal","version":"4.0.1","reportingEntityName":"'$NO'","sequence":0,"domain":"notification","lastEpochMicrosec":151983,"eventName":"Notification_gnb-Ericsson_FileReady","vesEventListenerVersion":"7.0.1","sourceName":"'$NO'"},"notificationFields":{"notificationFieldsVersion":"2.0","changeType":"FileReady","changeIdentifier":"PM_MEAS_FILES","arrayOfNamedHashMap":[{"name":"'$FN'","hashMap":{"location":"'$URL'","fileFormatType":"org.3GPP.32.435#measCollec","fileFormatVersion":"V10","compression":"gzip"}}]}}'
+ if [ $CNTR -eq 0 ]; then
+ rm .out.json
+ touch .out.json
+ echo '{"eventList": [' > .out.json
+ else
+ echo "," >> .out.json
+ fi
+ echo "$EVT" >> .out.json
+ else
+ NO="$NODE_NAME_BASE-$j"
+
+ let SRV_ID=$j%$SRV_COUNT
+ let SRV_ID=SRV_ID+1
+ #echo "NODE "$NO
+
+ EVT_FRAG=""
+ for(( k=95; k>=0; k-- )); do
+ let FID=$i-k
+ #FN="A20000626.2315+0200-2330+0200_$NO-$FID.$FILE_EXT"
+ CURTIME=$(($BEGINTIME+$FID*900))
+ if [[ $arch == "Darwin"* ]]; then
+ ST=$(date -r $CURTIME +'%Y%m%d.%H%M')
+ let CURTIME=CURTIME+900
+ ET=$(date -r $CURTIME +'%H%M')
+ else
+ ST=$(date -d @$CURTIME +'%Y%m%d.%H%M')
+ let CURTIME=CURTIME+900
+ ET=$(date -d @$CURTIME +'%H%M')
+ fi
+ if [ $FID -lt 0 ]; then
+ FN="NONEXISTING_$NO-$FID.$FILE_EXT"
+ else
+ #FN="A20000626.2315+0200-2330+0200_$NO-$FID.$FILE_EXT"
+ FN="A$ST+0200-$ET+0200_$NO-$FID.$FILE_EXT"
+ fi
+ echo "FILENAME "$FN
+ if [ $TYPE == "sftp" ]; then
+ SRV="ftp-sftp-$SRV_ID"
+ #echo "FTP SERVER "$SRV
+ URL="sftp://onap:pano@$SRV:$SFTP_PORT/$FN"
+ elif [ $TYPE == "ftpes" ]; then
+ SRV="ftp-ftpes-$SRV_ID"
+ #echo "FTP SERVER "$SRV
+ URL="ftpes://onap:pano@$SRV:$FTPES_PORT/$FN"
+ elif [ $TYPE == "https" ]; then
+ SRV="pm-https-server-$SRV_ID"
+ #echo "HTTP SERVER "$SRV
+ URL="https://$SRV:$HTTPS_PORT/files/$FN"
+ fi
+ if [ "$EVT_FRAG" != "" ]; then
+ EVT_FRAG=$EVT_FRAG","
+ fi
+ EVT_FRAG=$EVT_FRAG'{"name":"'$FN'","hashMap":{"location":"'$URL'","fileFormatType":"org.3GPP.32.435#measCollec","fileFormatVersion":"V10","compression":"gzip"}}'
+ done
+ EVT='{"commonEventHeader":{"startEpochMicrosec":15198378,"eventId":"FileReady_1797490e-10ae-4d48-9ea7-3d7d790b25e1","timeZoneOffset":"UTC+05.30","internalHeaderFields":{"collectorTimeStamp":"Wed,0907202211:56:02GMT"},"priority":"Normal","version":"4.0.1","reportingEntityName":"'$NO'","sequence":0,"domain":"notification","lastEpochMicrosec":151983,"eventName":"Notification_gnb-Ericsson_FileReady","vesEventListenerVersion":"7.0.1","sourceName":"'$NO'"},"notificationFields":{"notificationFieldsVersion":"2.0","changeType":"FileReady","changeIdentifier":"PM_MEAS_FILES","arrayOfNamedHashMap":['$EVT_FRAG']}}'
+ if [ $CNTR -eq 0 ]; then
+ rm .out.json
+ touch .out.json
+ echo '{"eventList": [' > .out.json
+ else
+ echo "," >> .out.json
+ fi
+ echo $EVT >> .out.json
+ fi
+
+ let CNTR=CNTR+1
+ let TCNTR=TCNTR+1
+ if [ $CNTR -ge $BATCHSIZE ]; then
+ echo "Pushing batch of $CNTR events"
+ echo ']}' >> .out.json
+ RES=$(curl -s -X POST $KHOST:$(kube_get_nodeport ves-collector onap http)/eventListener/v7/eventBatch --header 'Content-Type: application/json' --data-binary @.out.json)
+ echo $RES
+ rm .out.json
+ touch .out.json
+ CNTR=0
+ fi
+
+ done
+done
+
+if [ $CNTR -ne 0 ]; then
+ echo "Pushing batch of $CNTR events"
+ echo ']}' >> .out.json
+ RES=$(curl -s -X POST $KHOST:$(kube_get_nodeport ves-collector onap http)/eventListener/v7/eventBatch --header 'Content-Type: application/json' --data-binary @.out.json)
+ echo $RES
+fi
+
+echo "Pushed $TCNTR events"
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/scripts/read-from-topic.sh b/pm-file-flow-demo/kube-proj/scripts/read-from-topic.sh
new file mode 100755
index 0000000..b55d93b
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/scripts/read-from-topic.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+print_usage() {
+ echo "Usage: read-from-topic.sh <topic-name> [timeout-milliseconds]"
+ exit 1
+}
+
+if [ "$KUBECONFIG" == "" ]; then
+ echo "Env var KUBECONFIG not set, using current settings for kubectl"
+else
+ echo "Env var KUBECONFIG set to $KUBECONFIG"
+fi
+
+TOPIC=$1
+TO=15000
+if [ $# -eq 1 ]; then
+ :
+elif [ $# -eq 2 ]; then
+ TO=$2
+else
+ print_usage
+fi
+
+echo "Reading msgs on topic $TOPIC from beginning, $TO ms timeout"
+
+kubectl exec -it client -n nonrtric -- \
+ bash -c 'kafka-console-consumer --timeout-ms '$TO' --topic '$TOPIC' --from-beginning --bootstrap-server kafka-1.onap:9092'
+
+echo "Read msgs on topic $TOPIC from beginning, $TO ms timeout"
\ No newline at end of file
diff --git a/pm-file-flow-demo/kube-proj/x-jobs.sh b/pm-file-flow-demo/kube-proj/x-jobs.sh
new file mode 100755
index 0000000..84acf60
--- /dev/null
+++ b/pm-file-flow-demo/kube-proj/x-jobs.sh
@@ -0,0 +1,173 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+# Script to set a series of topics and jobs/rapps to simulate a set of "real rapps" reciving filtered PM json
+
+if [ "$KUBECONFIG" == "" ]; then
+ echo "Env var KUBECONFIG not set, using current settings for kubectl"
+else
+ echo "Env var KUBECONFIG set to $KUBECONFIG"
+fi
+
+if [ "$KHOST" == "" ]; then
+ echo "Env var KHOST not set, assuming nodeports are available on localhost"
+ export KHOST=localhost
+else
+ echo "Env var KHOST set to $KHOST, assuming nodeports are available on this IP"
+fi
+
+. scripts/kube_get_nodeport.sh
+ICS_PORT=$(kube_get_nodeport informationservice nonrtric http)
+
+print_args() {
+ echo "args: file|minio topics|no-topics jobs|rapps|none [<num-jobs>]"
+ exit 1
+}
+
+eval_cmd() {
+ RESP=$@
+ status=${RESP:${#RESP}-3}
+ if [ "$status" == "200" ]; then
+ echo " Job created ok"
+ elif [ "$status" == "201" ]; then
+ echo " Job created ok"
+ else
+ echo $@
+ echo "FAILED"
+ exit 1
+ fi
+}
+
+
+if [ "$1" == "file" ]; then
+ :
+elif [ "$1" == "minio" ]; then
+ :
+else
+ print_args
+fi
+
+if [ "$2" == "topics" ]; then
+ :
+elif [ "$2" == "no-topics" ]; then
+ :
+else
+ print_args
+fi
+
+if [ "$3" == "jobs" ]; then
+ :
+elif [ "$3" == "rapps" ]; then
+ :
+elif [ "$3" == "none" ]; then
+ :
+else
+ print_args
+fi
+
+NUM=$4
+if [ -z "$NUM" ]; then
+ print_args
+fi
+
+if [ "$2" == "topics" ]; then
+ echo "Creating $NUM topics"
+fi
+if [ "$3" == "jobs" ]; then
+ echo "Creating $NUM jobs in kafka-producer and $NUM jobs in dmaap-adapter"
+fi
+if [ "$3" == "rapps" ]; then
+ echo "Creating $NUM rapps with individual jobs in kafka-producer and $NUM rapps with individual jobs in dmaap-adapter"
+fi
+
+ID=0
+while [ $ID -lt $NUM ]; do
+
+ if [ "$2" == "topics" ]; then
+ echo " Creating topic: xa-topic-$ID"
+ kubectl exec -it client -n nonrtric -- bash -c 'kafka-topics --if-not-exists --create --topic xa-topic-'$ID' --bootstrap-server kafka-1.onap:9092'
+ if [ $? -ne 0 ]; then
+ echo "FAILED"
+ exit 1
+ fi
+ echo " Topic ok"
+ fi
+
+ if [ "$3" == "jobs" ]; then
+ JOB='{"info_type_id": "PmData", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {"kafkaOutputTopic":"xa-topic-'$ID'","filterType":"pmdata","filter":{"measTypes":["pmCounterNumber101"]}}}'
+ echo " Creating job: xa-$ID"
+ CMD=$(curl -s -w '%{http_code}' $KHOST:$ICS_PORT/data-consumer/v1/info-jobs/xa-$ID -X PUT -H 'Content-Type: application/json' --data-binary "$JOB")
+ eval_cmd "$CMD"
+ echo " Job ok"
+ fi
+
+ if [ "$3" == "rapps" ]; then
+ ##docker run -d -l "dmaap_test=yes" --name pm-rapp-kpadp-$ID --network nonrtric-docker-net -e RAPPID=$ID -e KAFKA_SERVER=kafka-1:29092 -e TOPIC=xp-topic-98 -e ICS=ics:$ICS_PORT -e JOBTYPE=PmData pm-rapp:latest
+ kubectl run pm-rapp-kpadp-$ID -n nonrtric --env "RAPPID=$ID" --env "KAFKA_SERVER=kafka-1.onap:9092" --env "TOPIC=xa-topic-$ID" --env "ICS=informationservice.nonrtric:8083" --env "JOBTYPE=PmData" --image bjornmagnussonest/pm-rapp:latest
+ kubectl label pods pm-rapp-kpadp-$ID -n nonrtric dmaap_test=yes
+ if [ $? -ne 0 ]; then
+ echo "FAILED"
+ exit 1
+ fi
+ echo " Rapp ok"
+ fi
+
+ if [ "$2" == "topics" ]; then
+ echo " Creating topic: xp-topic-$ID"
+ kubectl exec -it client -n nonrtric -- bash -c 'kafka-topics --if-not-exists --create --topic xp-topic-'$ID' --bootstrap-server kafka-1.onap:9092'
+ if [ $? -ne 0 ]; then
+ echo "FAILED"
+ exit 1
+ fi
+ echo " Topic ok"
+ fi
+
+ if [ "$3" == "jobs" ]; then
+ if [ $1 == "file" ]; then
+ JOB='{"info_type_id": "json-file-data", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {"kafkaOutputTopic":"xp-topic-'$ID'","filterType":"pmdata","filter":{"measTypes":["pmCounterNumber101"]}}}'
+ else
+ JOB='{"info_type_id": "json-file-data-from-filestore", "job_owner": "console","status_notification_uri": "http://callback:80/post","job_definition": {"kafkaOutputTopic":"xp-topic-'$ID'","filterType":"pmdata","filter":{"measTypes":["pmCounterNumber101"]}}}'
+ fi
+ echo " Creating job: xp-$ID"
+ CMD=$(curl -s -w '%{http_code}' $KHOST:$ICS_PORT/data-consumer/v1/info-jobs/xp-$ID -X PUT -H 'Content-Type: application/json' --data-binary "$JOB")
+ eval_cmd "$CMD"
+ echo " Job ok"
+ fi
+
+ if [ "$3" == "rapps" ]; then
+ if [ $1 == "file" ]; then
+ kubectl run pm-rapp-kp-$ID -n nonrtric --env "RAPPID=$ID" --env "KAFKA_SERVER=kafka-1.onap:9092" --env "TOPIC=xp-topic-$ID" --env "ICS=informationservice.nonrtric:8083" --env "JOBTYPE=json-file-data" --image bjornmagnussonest/pm-rapp:latest
+ kubectl label pods pm-rapp-kp-$ID -n nonrtric dmaap_test=yes
+ #docker run -d -l "dmaap_test=yes" --name pm-rapp-kp-$ID --network nonrtric-docker-net -e RAPPID=$ID -e KAFKA_SERVER=kafka-1:29092 -e TOPIC=xp-topic-98 -e ICS=ics:$ICS_PORT -e JOBTYPE=json-file-data pm-rapp:latest
+ else
+ kubectl run pm-rapp-kp-$ID -n nonrtric --env "RAPPID=$ID" --env "KAFKA_SERVER=kafka-1.onap:9092" --env "TOPIC=xp-topic-$ID" --env "ICS=informationservice.nonrtric:8083" --env "JOBTYPE=json-file-data-from-filestore" --image bjornmagnussonest/pm-rapp:latest
+ kubectl label pods pm-rapp-kp-$ID -n nonrtric dmaap_test=yes
+ #docker run -d -l "dmaap_test=yes" --name pm-rapp-kp-$ID --network nonrtric-docker-net -e RAPPID=$ID -e KAFKA_SERVER=kafka-1:29092 -e TOPIC=xp-topic-98 -e ICS=ics:$ICS_PORT -e JOBTYPE=json-file-data-from-filestore pm-rapp:latest
+ fi
+ if [ $? -ne 0 ]; then
+ echo "FAILED"
+ exit 1
+ fi
+ echo " Rapp ok"
+ fi
+ let ID=ID+1
+
+done
+
+echo "DONE"
\ No newline at end of file
diff --git a/pm-file-flow-demo/rapp/Dockerfile b/pm-file-flow-demo/rapp/Dockerfile
new file mode 100644
index 0000000..d525831
--- /dev/null
+++ b/pm-file-flow-demo/rapp/Dockerfile
@@ -0,0 +1,35 @@
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+FROM golang:1.19-bullseye AS build
+WORKDIR /app
+COPY go.mod .
+COPY go.sum .
+RUN go mod download
+COPY main.go .
+RUN go build -o /pm-rapp
+
+#Replaced distroless image with ubuntu for debug purposes
+#FROM gcr.io/distroless/base-debian11
+FROM ubuntu
+WORKDIR /
+## Copy from "build" stage
+COPY --from=build /pm-rapp .
+
+##Uncomment this when using distroless image
+#USER nonroot:nonroot
+ENTRYPOINT ["/pm-rapp"]
diff --git a/pm-file-flow-demo/rapp/build.sh b/pm-file-flow-demo/rapp/build.sh
new file mode 100755
index 0000000..7871dea
--- /dev/null
+++ b/pm-file-flow-demo/rapp/build.sh
@@ -0,0 +1,81 @@
+#!/bin/bash
+
+# ============LICENSE_START===============================================
+# Copyright (C) 2022 Nordix Foundation. All rights reserved.
+# ========================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=================================================
+#
+
+#Build image from Dockerfile with/without custom image tag
+#Optionally push to external docker hub repo
+
+print_usage() {
+ echo "Usage: build.sh no-push|bm|<docker-hub-repo-name> [<image-tag>]"
+ exit 1
+}
+
+if [ $# -ne 1 ] && [ $# -ne 2 ]; then
+ print_usage
+fi
+
+IMAGE_NAME="pm-rapp"
+IMAGE_TAG="latest"
+REPO=""
+if [ $1 == "no-push" ]; then
+ echo "Only local image build"
+elif [ $1 == "bm" ]; then
+ REPO="bjornmagnussonest"
+ echo "Attempt to push built image to: "$REPO
+else
+ REPO=$1
+ echo "Attempt to push built image to: "$REPO
+fi
+
+if [ "$2" != "" ]; then
+ IMAGE_TAG=$2
+fi
+ echo "Setting image tag to: "$IMAGE_TAG
+
+IMAGE=$IMAGE_NAME:$IMAGE_TAG
+echo "Building image $IMAGE"
+docker build -t $IMAGE_NAME:$IMAGE_TAG .
+if [ $? -ne 0 ]; then
+ echo "BUILD FAILED"
+ exit 1
+fi
+echo "BUILD OK"
+
+if [ "$REPO" != "" ]; then
+ echo "Tagging image"
+ NEW_IMAGE=$REPO/$IMAGE_NAME:$IMAGE_TAG
+ docker tag $IMAGE $NEW_IMAGE
+ if [ $? -ne 0 ]; then
+ echo "RE-TAGGING FAILED"
+ exit 1
+ fi
+ echo "RE-TAG OK"
+
+ echo "Pushing image $NEW_IMAGE"
+ docker push $NEW_IMAGE
+ if [ $? -ne 0 ]; then
+ echo "PUSHED FAILED"
+ echo " Perhaps not logged into docker-hub repo $REPO?"
+ exit 1
+ fi
+ IMAGE=$NEW_IMAGE
+ echo "PUSH OK"
+fi
+
+echo "IMAGE OK: $IMAGE"
+echo "DONE"
diff --git a/pm-file-flow-demo/rapp/go.mod b/pm-file-flow-demo/rapp/go.mod
new file mode 100644
index 0000000..3eae716
--- /dev/null
+++ b/pm-file-flow-demo/rapp/go.mod
@@ -0,0 +1,15 @@
+module main
+
+go 1.19
+
+require (
+ github.com/confluentinc/confluent-kafka-go v1.9.2
+ github.com/json-iterator/go v1.1.11
+ github.com/sirupsen/logrus v1.9.0
+)
+
+require (
+ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+ github.com/modern-go/reflect2 v1.0.1 // indirect
+ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
+)
diff --git a/pm-file-flow-demo/rapp/go.sum b/pm-file-flow-demo/rapp/go.sum
new file mode 100644
index 0000000..d774ccb
--- /dev/null
+++ b/pm-file-flow-demo/rapp/go.sum
@@ -0,0 +1,222 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/actgardner/gogen-avro/v10 v10.1.0/go.mod h1:o+ybmVjEa27AAr35FRqU98DJu1fXES56uXniYFv4yDA=
+github.com/actgardner/gogen-avro/v10 v10.2.1/go.mod h1:QUhjeHPchheYmMDni/Nx7VB0RsT/ee8YIgGY/xpEQgQ=
+github.com/actgardner/gogen-avro/v9 v9.1.0/go.mod h1:nyTj6wPqDJoxM3qdnjcLv+EnMDSDFqE0qDpva2QRmKc=
+github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
+github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
+github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
+github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/confluentinc/confluent-kafka-go v1.9.2 h1:gV/GxhMBUb03tFWkN+7kdhg+zf+QUM+wVkI9zwh770Q=
+github.com/confluentinc/confluent-kafka-go v1.9.2/go.mod h1:ptXNqsuDfYbAE/LBW6pnwWZElUoWxHoV8E43DCrliyo=
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/frankban/quicktest v1.2.2/go.mod h1:Qh/WofXFeiAFII1aEBu529AtJo6Zg2VHscnEsbBnJ20=
+github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o=
+github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y=
+github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.2.1-0.20190312032427-6f77996f0c42/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/pprof v0.0.0-20211008130755-947d60d73cc0/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
+github.com/hamba/avro v1.5.6/go.mod h1:3vNT0RLXXpFm2Tb/5KC71ZRJlOroggq1Rcitb6k4Fr8=
+github.com/heetch/avro v0.3.1/go.mod h1:4xn38Oz/+hiEUTpbVfGVLfvOg0yKLlRP7Q9+gJJILgA=
+github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA=
+github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w=
+github.com/invopop/jsonschema v0.4.0/go.mod h1:O9uiLokuu0+MGFlyiaqtWxwqJm41/+8Nj0lD7A36YH0=
+github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI=
+github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI=
+github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ=
+github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E=
+github.com/jhump/protoreflect v1.12.0/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI=
+github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ=
+github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/juju/qthttptest v0.1.1/go.mod h1:aTlAv8TYaflIiTDIQYzxnl1QdPjAg8Q8qJMErpKy6A4=
+github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/linkedin/goavro v2.1.0+incompatible/go.mod h1:bBCwI2eGYpUI/4820s67MElg9tdeLbINjLjiM2xZFYM=
+github.com/linkedin/goavro/v2 v2.10.0/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA=
+github.com/linkedin/goavro/v2 v2.10.1/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA=
+github.com/linkedin/goavro/v2 v2.11.1/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/nrwiersma/avro-benchmarks v0.0.0-20210913175520-21aec48c8f76/go.mod h1:iKyFMidsk/sVYONJRE372sJuX/QTRPacU7imPqqsu7g=
+github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/rogpeppe/clock v0.0.0-20190514195947-2896927a307a/go.mod h1:4r5QyqhjIWCcK8DO4KMclc5Iknq5qVBAlbYYzAbUScQ=
+github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
+github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
+github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
+github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0=
+github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
+github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.3.1-0.20190311161405-34c6fa2dc709/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200505041828-1ed23360d12c/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
+google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
+google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+gopkg.in/avro.v0 v0.0.0-20171217001914-a730b5802183/go.mod h1:FvqrFXt+jCsyQibeRv4xxEJBL5iG2DDW5aeJwzDiq4A=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/errgo.v1 v1.0.0/go.mod h1:CxwszS/Xz1C49Ucd2i6Zil5UToP1EmyrFhKaMVbg1mk=
+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/httprequest.v1 v1.2.1/go.mod h1:x2Otw96yda5+8+6ZeWwHIJTFkEHWP/qP8pJOzqEtWPM=
+gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
+gopkg.in/retry.v1 v1.0.3/go.mod h1:FJkXmWiMaAo7xB+xhvDF59zhfjDWyzmyAxiT4dB688g=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/pm-file-flow-demo/rapp/main.go b/pm-file-flow-demo/rapp/main.go
new file mode 100644
index 0000000..99d742a
--- /dev/null
+++ b/pm-file-flow-demo/rapp/main.go
@@ -0,0 +1,180 @@
+// ============LICENSE_START===============================================
+// Copyright (C) 2022 Nordix Foundation. All rights reserved.
+// ========================================================================
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// ============LICENSE_END=================================================
+//
+
+package main
+
+import (
+ "bytes"
+ "encoding/json"
+ "fmt"
+ "net/http"
+ "os"
+ "runtime"
+ "time"
+
+ "github.com/confluentinc/confluent-kafka-go/kafka"
+ log "github.com/sirupsen/logrus"
+)
+
+var rapp_id = os.Getenv("RAPPID")
+
+var bootstrapserver = os.Getenv("KAFKA_SERVER")
+
+var topic = os.Getenv("TOPIC")
+
+var ics_server = os.Getenv("ICS")
+
+var job_type = os.Getenv("JOBTYPE")
+
+var gid string = "pm-rapp-" + job_type + "-" + rapp_id
+var cid = gid
+
+// == Main ==//
+func main() {
+
+ log.SetLevel(log.InfoLevel)
+
+ log.Info("Server starting...")
+
+ if rapp_id == "" {
+ log.Error("Env RAPPID not set")
+ os.Exit(1)
+ }
+
+ if bootstrapserver == "" {
+ log.Error("Env KAFKA_SERVER not set")
+ os.Exit(1)
+ }
+
+ if topic == "" {
+ log.Error("Env TOPIC not set")
+ os.Exit(1)
+ }
+
+ if ics_server == "" {
+ log.Error("Env ICS not set")
+ os.Exit(1)
+ }
+
+ if job_type == "" {
+ log.Error("Env JOBTYPE not set")
+ os.Exit(1)
+ }
+
+ jobid := "rapp-job-" + job_type + "-" + rapp_id
+
+ json_str := ""
+ switch job_type {
+ case "PmData":
+ json_str = "{\"info_type_id\": \"PmData\", \"job_owner\": \"console\",\"status_notification_uri\": \"http://callback:80/post\",\"job_definition\": {\"kafkaOutputTopic\":\"" + topic + "\",\"filterType\":\"pmdata\",\"filter\":{\"measTypes\":[\"pmCounterNumber101\"]}}}"
+ case "json-file-data":
+ json_str = "{\"info_type_id\": \"json-file-data\", \"job_owner\": \"console\",\"status_notification_uri\": \"http://callback:80/post\",\"job_definition\": {\"kafkaOutputTopic\":\"" + topic + "\",\"filterType\":\"pmdata\",\"filter\":{\"measTypes\":[\"pmCounterNumber101\"]}}}"
+ case "json-file-data-from-filestore":
+ json_str = "{\"info_type_id\": \"json-file-data-from-filestore\", \"job_owner\": \"console\",\"status_notification_uri\": \"http://callback:80/post\",\"job_definition\": {\"kafkaOutputTopic\":\"" + topic + "\",\"filterType\":\"pmdata\",\"filter\":{\"measTypes\":[\"pmCounterNumber101\"]}}}"
+ default:
+ log.Error("Unknown job type: ", job_type)
+ os.Exit(1)
+ }
+
+ ok := false
+ for !ok {
+ ok = send_http_request([]byte(json_str), http.MethodPut, "http://"+ics_server+"/data-consumer/v1/info-jobs/"+jobid)
+ if !ok {
+ log.Info("Failed to register job: ", jobid, " - retrying")
+ time.Sleep(time.Second)
+ }
+ }
+
+ go read_kafka_messages()
+
+ //Wait until all go routines has exited
+ runtime.Goexit()
+
+ log.Warn("main routine exit")
+ log.Warn("server is stopping...")
+}
+
+func send_http_request(json []byte, method string, url string) bool {
+
+ client := &http.Client{}
+
+ var req *http.Request
+ var err error
+ req, err = http.NewRequest(method, url, bytes.NewBuffer(json))
+ if err != nil {
+ log.Error("Cannot create http request method: ", method, " url: ", url)
+ return false
+ }
+ req.Header.Set("Content-Type", "application/json; charset=utf-8")
+
+ resp, err2 := client.Do(req)
+ if err2 != nil {
+ log.Error("Cannot send http request, method: ", method, "url: ", url)
+ } else {
+ if resp.StatusCode == 200 || resp.StatusCode == 201 {
+ return true
+ }
+ }
+ return false
+
+}
+
+func read_kafka_messages() {
+ var c *kafka.Consumer = nil
+ log.Info("Creating kafka consumer ")
+ var err error
+ for c == nil {
+ c, err = kafka.NewConsumer(&kafka.ConfigMap{
+ "bootstrap.servers": bootstrapserver,
+ "group.id": gid,
+ "client.id": cid,
+ "auto.offset.reset": "latest",
+ })
+ if err != nil {
+ log.Warning("Cannot create kafka consumer - retyring")
+ }
+ }
+
+ log.Info("Creating kafka consumer - ok")
+ log.Info("Start subscribing to topic: ", topic)
+ topic_ok := false
+ for !topic_ok {
+ err = c.SubscribeTopics([]string{topic}, nil)
+ if err != nil {
+ log.Info("Topic reader cannot start subscribing on topic: ", topic, " - retrying -- error details: ", err)
+ } else {
+ log.Info("Topic reader subscribing on topic: ", topic)
+ topic_ok = true
+ }
+ }
+
+ maxDur := 1 * time.Second
+ for {
+ msg, err := c.ReadMessage(maxDur)
+ if err == nil {
+ buf := &bytes.Buffer{}
+ if err := json.Indent(buf, msg.Value, "", " "); err != nil {
+ log.Warning("Received msg not json?")
+ } else {
+ fmt.Println(buf.String())
+ }
+ c.Commit()
+ } else {
+ log.Debug(" Nothing to consume on topic: ", topic, ", reason: ", err)
+ }
+ }
+}