From fdd14ecf4856426b95499d8a523dbb0b640e9768 Mon Sep 17 00:00:00 2001 From: rajendrajaiswal Date: Mon, 18 Feb 2019 17:20:26 +0000 Subject: [PATCH] Documentation for 3GPP PM Mapper Change-Id: Ifbc4928630a329eed019c1c79f129234dfa1fdd3 Issue-ID: DCAEGEN2-567 Signed-off-by: Rajendra Jaiswal --- docs/sections/apis/pmmapper.rst | 56 ++++++++ docs/sections/images/pm-mapper.png | Bin 0 -> 42451 bytes docs/sections/images/pmmapper-flow.png | Bin 0 -> 25402 bytes docs/sections/offeredapis.rst | 1 + docs/sections/services/pm-mapper/architecture.rst | 29 ++++ docs/sections/services/pm-mapper/configuration.rst | 7 + docs/sections/services/pm-mapper/delivery.rst | 12 ++ docs/sections/services/pm-mapper/index.rst | 18 +++ docs/sections/services/pm-mapper/installation.rst | 7 + docs/sections/services/pm-mapper/logging.rst | 7 + .../services/pm-mapper/troubleshooting.rst | 159 +++++++++++++++++++++ docs/sections/services/serviceindex.rst | 1 + 12 files changed, 297 insertions(+) create mode 100644 docs/sections/apis/pmmapper.rst create mode 100644 docs/sections/images/pm-mapper.png create mode 100644 docs/sections/images/pmmapper-flow.png create mode 100644 docs/sections/services/pm-mapper/architecture.rst create mode 100644 docs/sections/services/pm-mapper/configuration.rst create mode 100644 docs/sections/services/pm-mapper/delivery.rst create mode 100644 docs/sections/services/pm-mapper/index.rst create mode 100644 docs/sections/services/pm-mapper/installation.rst create mode 100644 docs/sections/services/pm-mapper/logging.rst create mode 100644 docs/sections/services/pm-mapper/troubleshooting.rst diff --git a/docs/sections/apis/pmmapper.rst b/docs/sections/apis/pmmapper.rst new file mode 100644 index 00000000..1e9333a8 --- /dev/null +++ b/docs/sections/apis/pmmapper.rst @@ -0,0 +1,56 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 +======================== +3GPP PM Mapper +======================== + +.. contents:: + :depth: 3 +.. + +Overview +======== + +Component description can be found under `3GPP PM Mapper`_. + +.. _3GPP PM Mapper: ../../sections/services/pm-mapper/index.html + + +Paths +===== + +PUT ``/delivery`` +--------------------------------------------------- + +Description +~~~~~~~~~~~ +Publish the PM Measurment file to PM Mapper. + + +Responses +~~~~~~~~~ + ++-----------+---------------------+ +| HTTP Code | Description | ++===========+=====================+ +| **200** | successful response | ++-----------+---------------------+ + + +GET ``/healthcheck`` +-------------------- + + + +Description +~~~~~~~~~~~ +This is the health check endpoint. If this returns a 200, the server is alive. If anything other than a 200, either dead, or no connection to pm mapper. + +Responses +~~~~~~~~~ + ++-----------+---------------------+ +| HTTP Code | Description | ++===========+=====================+ +| **200** | successful response | ++-----------+---------------------+ diff --git a/docs/sections/images/pm-mapper.png b/docs/sections/images/pm-mapper.png new file mode 100644 index 0000000000000000000000000000000000000000..3dae954912c611ca7284db3b29e7ec56191c6326 GIT binary patch literal 42451 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 Y=~E}i-12Vpfb)+zXkePx# literal 0 HcmV?d00001 diff --git a/docs/sections/images/pmmapper-flow.png b/docs/sections/images/pmmapper-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..6b9a830eee5faac997b2f6ee5c063d41423312b4 GIT binary patch literal 25402 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%0AEbWCxEvmYNi(yx(JZkrNT703wi@bRit=!+Tf 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 v5-N%dS*oOjVZC>OJtUkG624ph&*!}Ca1y! \ No newline at end of file diff --git a/docs/sections/services/pm-mapper/delivery.rst b/docs/sections/services/pm-mapper/delivery.rst new file mode 100644 index 00000000..0a03237a --- /dev/null +++ b/docs/sections/services/pm-mapper/delivery.rst @@ -0,0 +1,12 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + +Delivery +======== + +Docker Container +---------------- + +**PM Mapper** is delivered as a docker image that can be downloaded from ONAP docker registry: + + ``docker run -d --name pmmapper -e CONFIG_BINDING_SERVICE_SERVICE_HOST= -e CONFIG_BINDING_SERVICE_SERVICE_PORT= -e HOSTNAME= nexus3.onap.org:10001/onap/org.onap.dcaegen2.services.pm-mapper:1.0-SNAPSHOT`` diff --git a/docs/sections/services/pm-mapper/index.rst b/docs/sections/services/pm-mapper/index.rst new file mode 100644 index 00000000..8a53753d --- /dev/null +++ b/docs/sections/services/pm-mapper/index.rst @@ -0,0 +1,18 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + + +3GPP PM Mapper Service +============================= + +.. Add or remove sections below as appropriate for the platform component. + +.. toctree:: + :maxdepth: 1 + + ./architecture.rst + ./delivery.rst + ./logging.rst + ./installation.rst + ./configuration.rst + ./troubleshooting.rst diff --git a/docs/sections/services/pm-mapper/installation.rst b/docs/sections/services/pm-mapper/installation.rst new file mode 100644 index 00000000..5672e4de --- /dev/null +++ b/docs/sections/services/pm-mapper/installation.rst @@ -0,0 +1,7 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + +Installation +============ + +< To - Do > diff --git a/docs/sections/services/pm-mapper/logging.rst b/docs/sections/services/pm-mapper/logging.rst new file mode 100644 index 00000000..cc56f416 --- /dev/null +++ b/docs/sections/services/pm-mapper/logging.rst @@ -0,0 +1,7 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + +Logging +======= + +The log file is located under /var/log/ONAP/dcaegen2/services/pm-mapper/pm-mapper_output.log. diff --git a/docs/sections/services/pm-mapper/troubleshooting.rst b/docs/sections/services/pm-mapper/troubleshooting.rst new file mode 100644 index 00000000..ed0b398f --- /dev/null +++ b/docs/sections/services/pm-mapper/troubleshooting.rst @@ -0,0 +1,159 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + +.. _troubleshooting: + +Troubleshooting +=============== + +**NOTE** + +According to **ONAP** logging policy, **PM Mapper** logs contain all required markers as well as service and client specific Mapped Diagnostic Context (later referred as MDC) + +Default console log pattern: + +:: + + | %date{"yyyy-MM-dd'T'HH:mm:ss.SSSXXX", UTC}\t| %thread\t| %highlight(%-5level)\t| %msg\t| %marker\t| %rootException\t| %mdc\t| %thread + +A sample, fully qualified message implementing this pattern: + +:: + + | 2018-12-18T13:12:44.369Z | p.dcae | DEBUG | Client connection request received | ENTRY | | RequestID=d7762b18-854c-4b8c-84aa-95762c6f8e62, InstanceID=9b9799ca-33a5-4f61-ba33-5c7bf7e72d07, InvocationID=b13d34ba-e1cd-4816-acda-706415308107, PartnerName=C=PL, ST=DL, L=Wroclaw, O=Nokia, OU=MANO, CN=dcaegen2-hvves-client, StatusCode=INPROGRESS, ClientIPAddress=192.168.0.9, ServerFQDN=a4ca8f96c7e5 | reactor-tcp-nio-2 + + +For simplicity, all log messages in this section are shortened to contain only: + * logger name + * log level + * message + +Error and warning logs contain also: + * exception message + * stack trace + +**Do not rely on exact log messages or their presence, as they are often subject to change.** + +Configuration errors +-------------------- + +**Config binding service not responding** + +:: + + + 2019-02-19T17:25:17.499Z main INFO org.onap.dcaegen2.services.pmmapper.config.ConfigHandler Fetching pm-mapper configuration from Configbinding Service ENTRY + 2019-02-19T17:25:17.502Z main INFO org.onap.dcaegen2.services.pmmapper.utils.RequestSender ee5ff670-accd-4c30-8689-0a1d12491b51 INVOKE [ SYNCHRONOUS ] + 2019-02-19T17:25:17.509Z main INFO org.onap.dcaegen2.services.pmmapper.utils.RequestSender Sending:\n{X-ONAP-PartnerName=[pm-mapper], X-ONAP-InvocationID=[ee5ff670-accd-4c30-8689-0a1d12491b51], X-ONAP-RequestID=[2778e346-590a-4ade-8f45-358d1adf048b]} + 2019-02-19T17:25:18.515Z main INFO org.onap.dcaegen2.services.pmmapper.utils.RequestSender Sending:\n{X-ONAP-PartnerName=[pm-mapper], X-ONAP-InvocationID=[ee5ff670-accd-4c30-8689-0a1d12491b51], X-ONAP-RequestID=[2778e346-590a-4ade-8f45-358d1adf048b]} + 2019-02-19T17:25:19.516Z main INFO org.onap.dcaegen2.services.pmmapper.utils.RequestSender Sending:\n{X-ONAP-PartnerName=[pm-mapper], X-ONAP-InvocationID=[ee5ff670-accd-4c30-8689-0a1d12491b51], X-ONAP-RequestID=[2778e346-590a-4ade-8f45-358d1adf048b]} + 2019-02-19T17:25:20.518Z main INFO org.onap.dcaegen2.services.pmmapper.utils.RequestSender Sending:\n{X-ONAP-PartnerName=[pm-mapper], X-ONAP-InvocationID=[ee5ff670-accd-4c30-8689-0a1d12491b51], X-ONAP-RequestID=[2778e346-590a-4ade-8f45-358d1adf048b]} + 2019-02-19T17:25:21.519Z main INFO org.onap.dcaegen2.services.pmmapper.utils.RequestSender Sending:\n{X-ONAP-PartnerName=[pm-mapper], X-ONAP-InvocationID=[ee5ff670-accd-4c30-8689-0a1d12491b51], X-ONAP-RequestID=[2778e346-590a-4ade-8f45-358d1adf048b]} + 2019-02-19T17:25:21.520Z main INFO org.onap.dcaegen2.services.pmmapper.config.ConfigHandler Received pm-mapper configuration from ConfigBinding Service:\n EXIT + Exception in thread "main" org.onap.dcaegen2.services.pmmapper.exceptions.CBSServerError: Error connecting to Configbinding Service: + at org.onap.dcaegen2.services.pmmapper.config.ConfigHandler.getMapperConfig(ConfigHandler.java:78) + at org.onap.dcaegen2.services.pmmapper.App.main(App.java:58) + caused by: java.net.ConnectException: Connection refused (Connection refused) + at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) + at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) + at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) + at java.lang.reflect.Constructor.newInstance(Constructor.java:423) + at sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1944) + at sun.net.www.protocol.http.HttpURLConnection$10.run(HttpURLConnection.java:1939) + at java.security.AccessController.doPrivileged(Native Method) + at sun.net.www.protocol.http.HttpURLConnection.getChainedException(HttpURLConnection.java:1938) + at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1508) + at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492) + at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) + at java.net.HttpURLConnection.getResponseMessage(HttpURLConnection.java:546) + at org.onap.dcaegen2.services.pmmapper.utils.RequestSender.send(RequestSender.java:80) + at org.onap.dcaegen2.services.pmmapper.config.ConfigHandler.getMapperConfig(ConfigHandler.java:76) + ... 1 more + Caused by: java.net.ConnectException: Connection refused (Connection refused) + at java.net.PlainSocketImpl.socketConnect(Native Method) + at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) + at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) + at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) + at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) + at java.net.Socket.connect(Socket.java:589) + t java.net.Socket.connect(Socket.java:538) + at sun.net.NetworkClient.doConnect(NetworkClient.java:180) + at sun.net.www.http.HttpClient.openServer(HttpClient.java:463) + at sun.net.www.http.HttpClient.openServer(HttpClient.java:558) + at sun.net.www.http.HttpClient.(HttpClient.java:242) + at sun.net.www.http.HttpClient.New(HttpClient.java:339) + at sun.net.www.http.HttpClient.New(HttpClient.java:357) + at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1220) + at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156) + at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050) + at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:984) + at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564) + at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492) + at org.onap.dcaegen2.services.pmmapper.utils.RequestSender.send(RequestSender.java:66) + + +Make sure Config Binding Service is up and running and the **ip + port** combination is correct. + +==== + +**Missing configuration on Consul** + +:: + + + 2019-02-19T17:36:32.664Z main INFO org.onap.dcaegen2.services.pmmapper.config.ConfigHandler Fetching pm-mapper configuration from Configbinding Service ENTRY + 2019-02-19T17:36:32.666Z main INFO org.onap.dcaegen2.services.pmmapper.utils.RequestSender 9fa1b84f-05ce-4e27-bba9-4ea477c1baa7 INVOKE [ SYNCHRONOUS ] + 2019-02-19T17:36:32.671Z main INFO org.onap.dcaegen2.services.pmmapper.utils.RequestSender Sending:\n{X-ONAP-PartnerName=[pm-mapper], X-ONAP-InvocationID=[9fa1b84f-05ce-4e27-bba9-4ea477c1baa7], X-ONAP-RequestID=[6e861d17-3f4b-4a2e-9ea8-a31bb9dbb7e8]} + 2019-02-19T17:36:32.696Z main INFO org.onap.dcaegen2.services.pmmapper.utils.RequestSender Received:\n{"pm-mapper-filter": "{ \"filters\":[]}", "3GPP.schema.file": "{\"3GPP_Schema\":\"./etc/3GPP_relaxed_schema.xsd\"}", "streams_subscribes": {"dmaap_subscriber": {"type": "data_router", "aaf_username": null, "aaf_password": null, "dmaap_infooooo": {"location": "csit-pmmapper", "delivery_url": "3gpppmmapper", "username": "username", "password": "password", "subscriber_id": "subsriber_id"}}}, "streams_publishes": {"pm_mapper_handle_out": {"type": "message_router", "aaf_password": null, "dmaap_info": {"topic_url": "https://message-router:3904/events/org.onap.dmaap.onapCSIT.pm_mapper", "client_role": "org.onap.dmaap.client.pub", "location": "csit-pmmapper", "client_id": null}, "aaf_username": null}}, "buscontroller_feed_subscription_endpoint": "http://dmaap-bc:8080/webapi/dr_subs", "services_calls": {}} + 2019-02-19T17:36:32.696Z main INFO org.onap.dcaegen2.services.pmmapper.config.ConfigHandler Received pm-mapper configuration from ConfigBinding Service:\n{"pm-mapper-filter": "{ \"filters\":[]}", "3GPP.schema.file": "{\"3GPP_Schema\":\"./etc/3GPP_relaxed_schema.xsd\"}", "streams_subscribes": {"dmaap_subscriber": {"type": "data_router", "aaf_username": null, "aaf_password": null, "dmaap_infooooo": {"location": "csit-pmmapper", "delivery_url": "3gpppmmapper", "username": "username", "password": "password", "subscriber_id": "subsriber_id"}}}, "streams_publishes": {"pm_mapper_handle_out": {"type": "message_router", "aaf_password": null, "dmaap_info": {"topic_url": "https://message-router:3904/events/org.onap.dmaap.onapCSIT.pm_mapper", "client_role": "org.onap.dmaap.client.pub", "location": "csit-pmmapper", "client_id": null}, "aaf_username": null}}, "buscontroller_feed_subscription_endpoint": "http://dmaap-bc:8080/webapi/dr_subs", "services_calls": {}} EXIT + Exception in thread "main" org.onap.dcaegen2.services.pmmapper.exceptions.MapperConfigException: Error parsing mapper configuration: + {}{"pm-mapper-filter": "{ \"filters\":[]}", "3GPP.schema.file": "{\"3GPP_Schema\":\"./etc/3GPP_relaxed_schema.xsd\"}", "streams_subscribes": {"dmaap_subscriber": {"type": "data_router", "aaf_username": null, "aaf_password": null, "dmaap_infooooo": {"location": "csit-pmmapper", "delivery_url": "3gpppmmapper", "username": "username", "password": "password", "subscriber_id": "subsriber_id"}}}, "streams_publishes": {"pm_mapper_handle_out": {"type": "message_router", "aaf_password": null, "dmaap_info": {"topic_url": "https://message-router:3904/events/org.onap.dmaap.onapCSIT.pm_mapper", "client_role": "org.onap.dmaap.client.pub", "location": "csit-pmmapper", "client_id": null}, "aaf_username": null}}, "buscontroller_feed_subscription_endpoint": "http://dmaap-bc:8080/webapi/dr_subs", "services_calls": {}} + at org.onap.dcaegen2.services.pmmapper.config.ConfigHandler.convertMapperConfigToObject(ConfigHandler.java:94) + at org.onap.dcaegen2.services.pmmapper.config.ConfigHandler.getMapperConfig(ConfigHandler.java:83) + at org.onap.dcaegen2.services.pmmapper.App.main(App.java:58) + Caused by: com.google.gson.JsonParseException: Failed to check fields. + at org.onap.dcaegen2.services.pmmapper.utils.RequiredFieldDeserializer.deserialize(RequiredFieldDeserializer.java:49) + at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:69) + at com.google.gson.Gson.fromJson(Gson.java:927) + at com.google.gson.Gson.fromJson(Gson.java:892) + at com.google.gson.Gson.fromJson(Gson.java:841) + at com.google.gson.Gson.fromJson(Gson.java:813) + at org.onap.dcaegen2.services.pmmapper.config.ConfigHandler.convertMapperConfigToObject(ConfigHandler.java:92) + ... 2 more + Caused by: com.google.gson.JsonParseException: Field: 'busControllerFeedId', is required but not found. + at org.onap.dcaegen2.services.pmmapper.utils.RequiredFieldDeserializer.deserialize(RequiredFieldDeserializer.java:46) + + + +**PM Mapper** logs this information when connected to Consul, but cannot find a valid JSON configuration. + +==== + +**Unable to Subscriber to Data Router Feed** + +:: + + 2019-02-11T16:44:37.012Z main DEBUG org.onap.dcaegen2.services.pmmapper.config.ConfigHandler Mapper configuration:\nMapperConfig(messageRouterTopicName=unauthenticated.PM_VES_OUTPUT, busControllerConfig=BusControllerConfig(dcaeLocation=dcaeLocation, deliveryURL=deliveryURL, feedId=2, lastMod=lastMod, username=username, password=password, dataRouterSubscribeEndpoint=null), streamsSubscribes=MapperConfig.StreamsSubscribes(dmaapSubscriber=MapperConfig.DmaapSubscriber(dmaapInfo=MapperConfig.DmaapInfo(location=location, username=username, password=password, deliveryUrl=delivery_url, subscriberId=subsriber_id)))) + 2019-02-11T16:44:37.013Z main INFO org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber Starting subscription to DataRouter ENTRY + 2019-02-11T16:44:37.013Z main INFO org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber e04d9fb4-5bc3-405b-89ea-6b824de8f137 INVOKE [ SYNCHRONOUS ] + 2019-02-11T16:44:37.061Z main INFO org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber Request to bus controller executed with Response Code: '404' and Response Event: 'Not Found'. + 2019-02-11T16:44:39.062Z main INFO org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber d4982d98-574d-42e4-9922-640610ffa34d INVOKE [ SYNCHRONOUS ] + 2019-02-11T16:44:39.071Z main INFO org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber Request to bus controller executed with Response Code: '404' and Response Event: 'Not Found'. + 2019-02-11T16:44:43.079Z main INFO org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber 05c73228-d04c-47c2-b897-8e936de5c8fd INVOKE [ SYNCHRONOUS ] + 2019-02-11T16:44:43.089Z main INFO org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber Request to bus controller executed with Response Code: '404' and Response Event: 'Not Found'. + 2019-02-11T16:44:51.129Z main INFO org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber c898b5c7-a347-496a-af3b-aeac661d4f1b INVOKE [ SYNCHRONOUS ] + 2019-02-11T16:44:51.138Z main INFO org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber Request to bus controller executed with Response Code: '404' and Response Event: 'Not Found'. + 2019-02-11T16:45:07.220Z main INFO org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber b190fbc1-ab91-44da-b393-727810925374 INVOKE [ SYNCHRONOUS ] + 2019-02-11T16:45:07.234Z main INFO org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber Request to bus controller executed with Response Code: '404' and Response Event: 'Not Found'. + 2019-02-11T16:45:07.235Z main INFO org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber EXIT + Exception in thread "main" org.onap.dcaegen2.services.pmmapper.exceptions.TooManyTriesException: Failed to subscribe within appropriate amount of attempts + at org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber.subscribe(DataRouterSubscriber.java:152) + at org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber.subscribe(DataRouterSubscriber.java:150) + at org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber.subscribe(DataRouterSubscriber.java:150) + at org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber.subscribe(DataRouterSubscriber.java:150) + at org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber.subscribe(DataRouterSubscriber.java:150) + at org.onap.dcaegen2.services.pmmapper.datarouter.DataRouterSubscriber.start(DataRouterSubscriber.java:97) + at org.onap.dcaegen2.services.pmmapper.App.main(App.java:53) + +This log is printed when pm mapper couldn't subscribe to the data router. + diff --git a/docs/sections/services/serviceindex.rst b/docs/sections/services/serviceindex.rst index 9589a6ae..7c87f5c4 100644 --- a/docs/sections/services/serviceindex.rst +++ b/docs/sections/services/serviceindex.rst @@ -17,3 +17,4 @@ Service components under DCAE ./prh/index.rst ./dfc/index.rst ./heartbeat-ms/index.rst + ./pm-mapper/index.rst \ No newline at end of file -- 2.16.6