Update on Health-api 34/97534/8
authorShaaban Ebrahim <shaaban.eltanany.ext@orange.com>
Thu, 24 Oct 2019 10:37:21 +0000 (12:37 +0200)
committerShaaban Ebrahim <shaaban.eltanany.ext@orange.com>
Wed, 6 Nov 2019 10:45:51 +0000 (12:45 +0200)
-add Combined health check
-add combined metrics check

Issue-ID: CCSDK-1669
Signed-off-by: Shaaban Ebrahim <shaaban.eltanany.ext@orange.com>
Change-Id: Idb3c7f67b3f22bd6069f75c193ae458c346fb2ac

51 files changed:
ms/blueprintsprocessor/application/pom.xml
ms/blueprintsprocessor/application/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/actuator/indicator/BluePrintCustomIndicator.kt [new file with mode: 0644]
ms/blueprintsprocessor/application/src/main/resources/application.properties
ms/blueprintsprocessor/application/src/test/resources/application-test.properties
ms/blueprintsprocessor/application/src/test/resources/application.properties
ms/blueprintsprocessor/modules/inbounds/health-api-common/.gitignore [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/pom.xml [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/configuration/BasicAuthRestClientServiceConfiguration.kt [moved from ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/configuration/BasicAuthRestClientServiceConfiguration.kt with 84% similarity]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/configuration/HealthCheckProperties.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/configuration/SecurityEncryptionConfiguration.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ActuatorCheckResponse.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ActuatorEndpointType.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ApplicationHealth.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthApiResponse.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckStatus.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/Metrics.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/MetricsInfo.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/MetricsResponse.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ServiceEndpoint.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ServiceName.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ServicesCheckResponse.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/WebClientEnpointResponse.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/EndPointExecution.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/health/AbstractHealthCheck.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/health/BluePrintProcessorHealthCheck.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/health/SDCListenerHealthCheck.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/HealthCheckServiceTest.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/SecurityConfigurationTest.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/test/resources/application-test.properties [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/test/resources/logback.xml [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api-common/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/.gitignore [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/pom.xml
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/controller/CombinedHealth.kt [moved from ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/controller/HealthCheckController.kt with 72% similarity]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/controller/CombinedMetrics.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthApiResponse.kt [deleted file]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckResponse.kt [deleted file]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckStatus.kt [deleted file]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ServiceEndpoint.kt [deleted file]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/CombinedHealthService.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/CombinedMetricsService.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/HealthCheckService.kt [deleted file]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/utils/ObjectMappingUtils.kt [new file with mode: 0644]
ms/blueprintsprocessor/modules/inbounds/health-api/src/main/resources/application.properties
ms/blueprintsprocessor/modules/inbounds/health-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/HealthCheckApplicationTests.kt
ms/blueprintsprocessor/modules/inbounds/health-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/HealthCheckServiceTest.java [deleted file]
ms/blueprintsprocessor/modules/inbounds/health-api/src/test/resources/application-test.properties
ms/blueprintsprocessor/modules/inbounds/health-api/src/test/resources/logback.xml
ms/blueprintsprocessor/modules/inbounds/pom.xml
ms/sdclistener/application/pom.xml
ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/actuator/indicator/SDCListenerCustomIndicator.java [new file with mode: 0644]

index 0ee6ac3..dc0e49f 100755 (executable)
             <groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
             <artifactId>configs-api</artifactId>
         </dependency>
-        <!--
-        <dependency>
+      <dependency>
             <groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
             <artifactId>health-api</artifactId>
+            <version>0.7.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
+            <artifactId>health-api-common</artifactId>
+            <version>0.7.0-SNAPSHOT</version>
         </dependency>
-        -->
 
         <!-- Functions -->
         <dependency>
             <groupId>ch.qos.logback</groupId>
             <artifactId>logback-classic</artifactId>
         </dependency>
+
     </dependencies>
 
     <build>
diff --git a/ms/blueprintsprocessor/application/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/actuator/indicator/BluePrintCustomIndicator.kt b/ms/blueprintsprocessor/application/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/actuator/indicator/BluePrintCustomIndicator.kt
new file mode 100644 (file)
index 0000000..66a19b2
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.actuator.indicator
+
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthApiResponse
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthCheckStatus
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service.health.BluePrintProcessorHealthCheck
+import org.springframework.boot.actuate.health.AbstractHealthIndicator
+import org.springframework.boot.actuate.health.Health
+import org.springframework.stereotype.Component
+
+/**
+ * Health Indicator for BluePrintProcessor.
+ * @author Shaaban Ebrahim
+ * @version 1.0
+ */
+@Component
+open class BluePrintCustomIndicator(private val bluePrintProcessorHealthCheck: BluePrintProcessorHealthCheck)
+    : AbstractHealthIndicator() {
+
+    @Throws(Exception::class)
+    override fun doHealthCheck(builder: Health.Builder) {
+        var result: HealthApiResponse? = bluePrintProcessorHealthCheck!!.retrieveEndpointExecutionStatus()
+        if (result?.status == HealthCheckStatus.UP) {
+            builder.up()
+        } else {
+            builder.down()
+        }
+        builder.withDetail("Services", result?.checks)
+    }
+
+
+}
index b8f0d23..6708dcf 100755 (executable)
@@ -107,4 +107,25 @@ blueprintsprocessor.messageconsumer.self-service-api.pollMillSec=1000
 blueprintsprocessor.messageproducer.self-service-api.type=kafka-basic-auth
 blueprintsprocessor.messageproducer.self-service-api.bootstrapServers=127.0.0.1:9092
 blueprintsprocessor.messageproducer.self-service-api.clientId=default-client-id
-blueprintsprocessor.messageproducer.self-service-api.topic=producer.t
\ No newline at end of file
+blueprintsprocessor.messageproducer.self-service-api.topic=producer.t
+
+
+blueprintprocessor.remoteScriptCommand.enabled=true
+
+#Encrypted username and password for health check service
+endpoints.user.name=eHbVUbJAj4AG2522cSbrOQ==
+endpoints.user.password=eHbVUbJAj4AG2522cSbrOQ==
+
+#BaseUrls for health check blueprint processor services
+blueprintprocessor.healthcheck.baseUrl=http://localhost:8080/
+blueprintprocessor.healthcheck.mapping-service-name-with-service-link=[Execution service,/api/v1/execution-service/health-check],[Resources service,/api/v1/resources/health-check],[Template service,/api/v1/template/health-check]
+
+#BaseUrls for health check Cds Listener services
+cdslistener.healthcheck.baseUrl=http://cds-sdc-listener:8080/
+cdslistener.healthcheck.mapping-service-name-with-service-link=[SDC Listener service,/api/v1/sdclistener/healthcheck]
+
+#Actuator properties
+management.endpoints.web.exposure.include=*
+management.endpoint.health.show-details=always
+
+
index 0f34574..1d2565b 100644 (file)
@@ -48,3 +48,17 @@ blueprintsprocessor.cliExecutor.enabled=true
 blueprintsprocessor.netconfExecutor.enabled=true
 
 blueprintsprocessor.restconfEnabled=true
+
+
+#Encrypted username and password for health check service
+endpoints.user.name=eHbVUbJAj4AG2522cSbrOQ==
+endpoints.user.password=eHbVUbJAj4AG2522cSbrOQ==
+
+#BaseUrls for health check blueprint processor services
+blueprintprocessor.healthcheck.baseUrl=http://localhost:8080/
+blueprintprocessor.healthcheck.mapping-service-name-with-service-link=[Execution service,/api/v1/execution-service/health-check],[Resources service,/api/v1/resources/health-check],[Template service,/api/v1/template/health-check]
+
+#BaseUrls for health check Cds Listener services
+cdslistener.healthcheck.baseUrl=http://cds-sdc-listener:8080/
+cdslistener.healthcheck.mapping-service-name-with-service-link=[SDC Listener service,/api/v1/sdclistener/healthcheck]
+
index 92d54f6..ea14c49 100644 (file)
@@ -79,5 +79,5 @@ blueprintsprocessor.messageclient.self-service-api.clientId=default-client-id
 blueprintsprocessor.messageclient.self-service-api.kafkaEnable=false
 
 
-endpoints.user.name=ccsdkapps
-endpoints.user.password=ccsdkapps
+endpoints.user.name=eHbVUbJAj4AG2522cSbrOQ==
+endpoints.user.password=eHbVUbJAj4AG2522cSbrOQ==
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/.gitignore b/ms/blueprintsprocessor/modules/inbounds/health-api-common/.gitignore
new file mode 100644 (file)
index 0000000..a2a3040
--- /dev/null
@@ -0,0 +1,31 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**
+!**/src/test/**
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+
+### VS Code ###
+.vscode/
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/pom.xml b/ms/blueprintsprocessor/modules/inbounds/health-api-common/pom.xml
new file mode 100644 (file)
index 0000000..2bd6782
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~  Copyright © 2019-2020 Orange.
+
+  ~
+  ~  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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
+        <artifactId>inbounds</artifactId>
+        <version>0.7.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>health-api-common</artifactId>
+    <packaging>jar</packaging>
+
+    <name>Blueprints Processor Health API common </name>
+    <description>checking system check health endpoints</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
+            <artifactId>rest-lib</artifactId>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-logging</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+    </dependencies>
+</project>
@@ -25,7 +25,7 @@ import org.springframework.context.annotation.PropertySource
 
 @Configuration
 @PropertySource("classpath:application.properties")
-open class BasicAuthRestClientServiceConfiguration {
+open class BasicAuthRestClientServiceConfiguration(private val securityConfiguration: SecurityEncryptionConfiguration) {
 
     @Value("\${endpoints.user.name}")
     private val username: String? = null
@@ -36,8 +36,8 @@ open class BasicAuthRestClientServiceConfiguration {
     @Bean
     open fun getBasicAuthRestClientProperties(): BasicAuthRestClientProperties {
         val basicAuthRestClientProperties = BasicAuthRestClientProperties()
-        basicAuthRestClientProperties.username = username.toString()
-        basicAuthRestClientProperties.password = password.toString()
+        basicAuthRestClientProperties.username = securityConfiguration.decrypt(username!!)!!
+        basicAuthRestClientProperties.password = securityConfiguration.decrypt(password!!)!!
         return basicAuthRestClientProperties
     }
 
@@ -46,5 +46,4 @@ open class BasicAuthRestClientServiceConfiguration {
         return BasicAuthRestClientService(getBasicAuthRestClientProperties())
     }
 
-
 }
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/configuration/HealthCheckProperties.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/configuration/HealthCheckProperties.kt
new file mode 100644 (file)
index 0000000..c63952d
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.configuration
+
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.ServiceEndpoint
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.ServiceName
+import org.springframework.beans.factory.annotation.Value
+import org.springframework.context.annotation.Configuration
+import org.springframework.context.annotation.PropertySource
+
+@Configuration
+@PropertySource("classpath:application.properties")
+open class HealthCheckProperties {
+
+    @Value("\${blueprintprocessor.healthcheck.baseUrl}")
+    private val bluePrintProcessorBaseURL: String? = null
+
+    @Value("#{'\${blueprintprocessor.healthcheck.mapping-service-name-with-service-link}'.split(']')}")
+    private val blueprintprocessorServiceMapping: List<String>? = null
+
+    @Value("\${cdslistener.healthcheck.baseUrl}")
+    private val cdsListenerBaseURL: String? = null
+
+    @Value("#{'\${cdslistener.healthcheck.mapping-service-name-with-service-link}'.split(']')}")
+    private val cdsListenerServiceMapping: List<String>? = null
+
+    open fun getBluePrintBaseURL(): String? {
+        return bluePrintProcessorBaseURL
+    }
+
+    open fun getCDSListenerBaseURL(): String? {
+        return cdsListenerBaseURL
+    }
+
+    open fun getBluePrintServiceInformation(): List<ServiceEndpoint> {
+        val serviceName = ServiceName.BLUEPRINT
+        return getListOfServiceEndPoints(blueprintprocessorServiceMapping, serviceName)
+    }
+
+    open fun getCDSListenerServiceInformation(): List<ServiceEndpoint> {
+        val serviceName = ServiceName.BLUEPRINT
+        return getListOfServiceEndPoints(cdsListenerServiceMapping, serviceName)
+
+    }
+
+    private fun getListOfServiceEndPoints(serviceMapping: List<String>?, serviceName: ServiceName): MutableList<ServiceEndpoint> {
+        val serviceEndpoints = mutableListOf<ServiceEndpoint>()
+        if (serviceMapping != null) {
+            for (element in serviceMapping) {
+                fillListOfService(serviceName, element, serviceEndpoints)
+            }
+        }
+        return serviceEndpoints
+    }
+
+    private fun fillListOfService(serviceName: ServiceName , element: String, listOfCDSListenerServiceEndpoint: MutableList<ServiceEndpoint>) {
+        val serviceEndpointInfo = element.split(",/")
+        val serviceEndpoint = getServiceEndpoint(serviceEndpointInfo)
+        if (serviceName.equals(ServiceName.CDSLISTENER))
+            serviceEndpoint.serviceLink = cdsListenerBaseURL + serviceEndpoint.serviceLink
+        else if (serviceName.equals(ServiceName.BLUEPRINT))
+            serviceEndpoint.serviceLink = bluePrintProcessorBaseURL + serviceEndpoint.serviceLink
+        listOfCDSListenerServiceEndpoint.add(serviceEndpoint)
+    }
+
+
+    private fun getServiceEndpoint(serviceEndpointInfo: List<String>): ServiceEndpoint {
+        return ServiceEndpoint(removeSpecialCharacter(serviceEndpointInfo.get(0))
+                , removeSpecialCharacter(serviceEndpointInfo.get(1))
+        )
+    }
+
+    private fun removeSpecialCharacter(value:String):String{
+        return value.replaceFirst(",[","")
+                .replace("[","")
+                .replace("]","")
+    }
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/configuration/SecurityEncryptionConfiguration.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/configuration/SecurityEncryptionConfiguration.kt
new file mode 100644 (file)
index 0000000..9402120
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.configuration
+
+
+import org.apache.commons.net.util.Base64
+import org.springframework.stereotype.Component
+import org.springframework.stereotype.Service
+import javax.crypto.Cipher
+import javax.crypto.spec.IvParameterSpec
+import javax.crypto.spec.SecretKeySpec
+
+
+@Component
+class SecurityEncryptionConfiguration {
+    private val key = "aesEncryptionKey"
+    private val initVector = "encryptionIntVec"
+
+    fun encrypt(value: String): String? {
+        try {
+            val (iv, skeySpec, cipher) = initChiper()
+            cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv)
+            val encrypted = cipher.doFinal(value.toByteArray())
+            return Base64.encodeBase64String(encrypted)
+        } catch (ex: Exception) {
+            ex.printStackTrace()
+        }
+        return String()
+    }
+
+    open fun decrypt(encrypted: String): String? {
+        try {
+            val (iv, skeySpec, cipher) = initChiper()
+            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv)
+            val original = cipher.doFinal(Base64.decodeBase64(encrypted))
+            return String(original)
+        } catch (ex: Exception) {
+            ex.printStackTrace()
+        }
+        return String()
+    }
+
+    private fun initChiper(): Triple<IvParameterSpec, SecretKeySpec, Cipher> {
+        val iv = IvParameterSpec(initVector.toByteArray(charset("UTF-8")))
+        val secretKeySpec = SecretKeySpec(key.toByteArray(charset("UTF-8")), "AES")
+        val cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING")
+        return Triple(iv, secretKeySpec, cipher)
+    }
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ActuatorCheckResponse.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ActuatorCheckResponse.kt
new file mode 100644 (file)
index 0000000..1b82083
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain
+
+data class ActuatorCheckResponse(val serviceName: String, val details: Any)
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ActuatorEndpointType.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ActuatorEndpointType.kt
new file mode 100644 (file)
index 0000000..ee186b1
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain
+
+enum class ActuatorEndpointType {
+    METRICS(), LOGGERS(), MAPPING()
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ApplicationHealth.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ApplicationHealth.kt
new file mode 100644 (file)
index 0000000..f66e877
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain
+
+import org.springframework.boot.actuate.health.Status
+
+data class ApplicationHealth(val status: Status?, val details: Map<String, Any>?) {
+    constructor() : this(null, HashMap())
+}
+
+
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthApiResponse.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthApiResponse.kt
new file mode 100644 (file)
index 0000000..61d8120
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain
+
+
+data class HealthApiResponse(val status: HealthCheckStatus, val checks: List<ServicesCheckResponse>
+)
+
+
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckStatus.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckStatus.kt
new file mode 100644 (file)
index 0000000..b60669d
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain
+
+enum class HealthCheckStatus {
+    UP,
+    DOWN
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/Metrics.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/Metrics.kt
new file mode 100644 (file)
index 0000000..d9f1c79
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain
+
+
+data class Metrics(val names: ArrayList<Any>?) {
+    constructor() : this(ArrayList())
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/MetricsInfo.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/MetricsInfo.kt
new file mode 100644 (file)
index 0000000..0c27798
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain
+
+data class MetricsInfo(val health: List<ActuatorCheckResponse>)
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/MetricsResponse.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/MetricsResponse.kt
new file mode 100644 (file)
index 0000000..b3796c9
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain
+
+data class MetricsResponse(val maps: HashMap<String, String>) {
+
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ServiceEndpoint.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ServiceEndpoint.kt
new file mode 100644 (file)
index 0000000..ce95a5c
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain
+
+
+data class ServiceEndpoint(val serviceName: String, var serviceLink: String)
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ServiceName.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ServiceName.kt
new file mode 100644 (file)
index 0000000..1a78a5d
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain
+
+enum class ServiceName(s: String) {
+    BLUEPRINT("Blue Print service"),CDSLISTENER("CDS Listener service")
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ServicesCheckResponse.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ServicesCheckResponse.kt
new file mode 100644 (file)
index 0000000..391d7f3
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain
+
+
+data class ServicesCheckResponse(val name: String, val status: HealthCheckStatus)
+
+
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/WebClientEnpointResponse.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/WebClientEnpointResponse.kt
new file mode 100644 (file)
index 0000000..03e864a
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain
+
+import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BlueprintWebClientService
+
+data class WebClientEnpointResponse (val response:BlueprintWebClientService.WebClientResponse<String>?) {
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/EndPointExecution.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/EndPointExecution.kt
new file mode 100644 (file)
index 0000000..72fa6c8
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service
+
+
+import com.fasterxml.jackson.databind.ObjectMapper
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.ApplicationHealth
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.ServiceEndpoint
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.WebClientEnpointResponse
+import org.onap.ccsdk.cds.blueprintsprocessor.rest.BasicAuthRestClientProperties
+import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BasicAuthRestClientService
+import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BlueprintWebClientService
+import org.slf4j.LoggerFactory
+import org.springframework.http.HttpMethod
+import org.springframework.stereotype.Service
+
+/**
+ * Service for executing services endpoint with rest-lib project .
+ *
+ * @author Shaaban Ebrahim
+ * @version 1.0
+ */
+@Service
+open class EndPointExecution(private val basicAuthRestClientService: BasicAuthRestClientService
+                             , private val restClientProperties: BasicAuthRestClientProperties) {
+
+    private var logger = LoggerFactory.getLogger(EndPointExecution::class.java)
+
+    open fun retrieveWebClientResponse(serviceEndpoint: ServiceEndpoint): WebClientEnpointResponse? {
+        try {
+            addClientPropertiesConfiguration(serviceEndpoint)
+            val result = basicAuthRestClientService.exchangeResource(HttpMethod.GET.name, "", "")
+            if (result.status == 200)
+                return WebClientEnpointResponse(result)
+
+        } catch (e: Exception) {
+            logger.error("service name ${serviceEndpoint.serviceName} is down ${e.message}")
+        }
+        return WebClientEnpointResponse(BlueprintWebClientService.WebClientResponse(500,""))
+    }
+
+    private fun addClientPropertiesConfiguration(serviceEndpoint: ServiceEndpoint) {
+        restClientProperties.url = serviceEndpoint.serviceLink
+    }
+
+
+    open fun getHealthFromWebClientEnpointResponse(webClientEnpointResponse: WebClientEnpointResponse): ApplicationHealth? {
+        return mappingMetricsToDTO(webClientEnpointResponse?.response?.body.toString())
+
+    }
+
+    private fun mappingMetricsToDTO(body: String): ApplicationHealth {
+        return ObjectMapper().readValue(body, ApplicationHealth::class.java)
+    }
+}
+
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/health/AbstractHealthCheck.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/health/AbstractHealthCheck.kt
new file mode 100644 (file)
index 0000000..f793754
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service.health
+
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.*
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service.EndPointExecution
+import org.slf4j.LoggerFactory
+
+/**
+ *Abstract class to execute provided Service Endpoint from class that extends it
+ * by implementing setupServiceEndpoint method
+ *
+ * @author Shaaban Ebrahim
+ * @version 1.0
+ */
+abstract class AbstractHealthCheck (private val  endPointExecution: EndPointExecution) {
+
+    private var logger = LoggerFactory.getLogger(BluePrintProcessorHealthCheck::class.java)
+
+    private fun retrieveSystemStatus(list: List<ServiceEndpoint>): HealthApiResponse {
+        val healthApiResponse: HealthApiResponse
+        val listOfResponse = mutableListOf<ServicesCheckResponse>()
+        var systemStatus: HealthCheckStatus = HealthCheckStatus.UP
+
+        for (serviceEndpoint in list) {
+            val serviceStatus: HealthCheckStatus = retrieveServiceStatus(serviceEndpoint)
+            if (serviceStatus.equals(HealthCheckStatus.DOWN))
+                systemStatus = HealthCheckStatus.DOWN
+
+            listOfResponse.add(ServicesCheckResponse(serviceEndpoint.serviceName, serviceStatus))
+        }
+        healthApiResponse = HealthApiResponse(systemStatus, listOfResponse)
+        return healthApiResponse
+
+    }
+
+
+    private fun retrieveServiceStatus(serviceEndpoint: ServiceEndpoint): HealthCheckStatus {
+        var serviceStatus: HealthCheckStatus = HealthCheckStatus.UP
+        try {
+            val result: WebClientEnpointResponse? = endPointExecution?.retrieveWebClientResponse(serviceEndpoint)
+            if (result == null || result.response?.status != 200) {
+                serviceStatus = HealthCheckStatus.DOWN
+            }
+        } catch (e: Exception) {
+            logger.error("service name ${serviceEndpoint.serviceName} is down ${e.message}")
+            serviceStatus = HealthCheckStatus.DOWN
+
+        }
+        return serviceStatus
+    }
+
+
+    open fun retrieveEndpointExecutionStatus(): HealthApiResponse {
+        return retrieveSystemStatus(setupServiceEndpoint())
+    }
+
+    abstract fun setupServiceEndpoint(): List<ServiceEndpoint>
+
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/health/BluePrintProcessorHealthCheck.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/health/BluePrintProcessorHealthCheck.kt
new file mode 100644 (file)
index 0000000..d661b32
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service.health
+
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.configuration.HealthCheckProperties
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.ServiceEndpoint
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service.EndPointExecution
+import org.springframework.stereotype.Service
+
+/**
+ * Service for checking health for other CDS services .
+ *
+ * @author Shaaban Ebrahim
+ * @version 1.0
+ */
+@Service
+open class BluePrintProcessorHealthCheck(private val endPointExecution: EndPointExecution
+                                         , private val healthCheckProperties: HealthCheckProperties)
+    : AbstractHealthCheck(endPointExecution) {
+
+    override fun setupServiceEndpoint(): List<ServiceEndpoint> {
+        return healthCheckProperties.getBluePrintServiceInformation()
+    }
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/health/SDCListenerHealthCheck.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/health/SDCListenerHealthCheck.kt
new file mode 100644 (file)
index 0000000..0a7c5e0
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service.health
+
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.configuration.HealthCheckProperties
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthApiResponse
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthCheckStatus
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.ServiceEndpoint
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.ServicesCheckResponse
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service.EndPointExecution
+import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BlueprintWebClientService
+import org.slf4j.LoggerFactory
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
+
+/**
+ * Service for checking health for other CDS listener services .
+ *
+ * @author Shaaban Ebrahim
+ * @version 1.0
+ */
+@Service
+open class SDCListenerHealthCheck (private val endPointExecution: EndPointExecution
+                                   ,private val healthCheckProperties: HealthCheckProperties)
+    : AbstractHealthCheck(endPointExecution) {
+
+    override fun setupServiceEndpoint(): List<ServiceEndpoint> {
+        return healthCheckProperties.getCDSListenerServiceInformation()
+    }
+
+
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/HealthCheckServiceTest.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/HealthCheckServiceTest.kt
new file mode 100644 (file)
index 0000000..c4a8d12
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi
+
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotNull
+import org.mockito.ArgumentMatchers.any
+import org.mockito.ArgumentMatchers.eq
+import org.mockito.Mockito.anyString
+import org.mockito.Mockito.mock
+
+import java.util.Arrays
+import org.junit.Assert
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers
+import org.mockito.InjectMocks
+import org.mockito.Mock
+import org.mockito.Mockito
+import org.mockito.junit.MockitoJUnitRunner
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.configuration.HealthCheckProperties
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthApiResponse
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthCheckStatus
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.ServiceEndpoint
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service.EndPointExecution
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service.health.BluePrintProcessorHealthCheck
+import org.onap.ccsdk.cds.blueprintsprocessor.rest.BasicAuthRestClientProperties
+import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BasicAuthRestClientService
+import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BlueprintWebClientService
+import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BlueprintWebClientService.WebClientResponse
+import org.springframework.http.HttpMethod
+
+@RunWith(MockitoJUnitRunner::class)
+class HealthCheckServiceTest {
+
+    @Mock
+    private val basicAuthRestClientService: BasicAuthRestClientService? = null
+
+    @Mock
+    private val restClientProperties: BasicAuthRestClientProperties? = null
+
+    @Mock
+    private val healthCheckProperties: HealthCheckProperties? = null
+
+    @InjectMocks
+    private var endPointExecution: EndPointExecution? = null
+
+    private var bluePrintProcessorHealthCheck: BluePrintProcessorHealthCheck? = null
+
+
+    @Before
+    fun setup() {
+        endPointExecution = Mockito.spy(endPointExecution!!)
+        Mockito.`when`(healthCheckProperties!!.getBluePrintServiceInformation()).thenReturn(Arrays.asList(
+                ServiceEndpoint("Execution service ", "http://cds-blueprints-processor-http:8080/api/v1/execution-service/health-check"),
+                ServiceEndpoint("Resources service", "http://cds-blueprints-processor-http:8080/api/v1/resources/health-check"), ServiceEndpoint("Template service", "http://cds-blueprints-processor-http:8080/api/v1/template/health-check")
+        ))
+
+        bluePrintProcessorHealthCheck = BluePrintProcessorHealthCheck(endPointExecution!!, healthCheckProperties)
+    }
+
+  @Test
+    fun testSystemIsCompletelyDown() {
+
+        Mockito.`when`(basicAuthRestClientService!!.exchangeResource(
+                        anyString(),
+                        anyString(),
+                        anyString())).thenThrow(RuntimeException())
+        val healthApiResponse = bluePrintProcessorHealthCheck!!.retrieveEndpointExecutionStatus()
+        assertNotNull(healthApiResponse)
+        Assert.assertEquals(HealthCheckStatus.DOWN, healthApiResponse.status)
+        healthApiResponse.checks.forEach { serviceEndpoint ->
+            assertNotNull(serviceEndpoint)
+            assertEquals(HealthCheckStatus.DOWN, serviceEndpoint.status)
+
+        }
+
+    }
+
+    @Test
+    fun testSystemIsUPAndRunning() {
+
+        Mockito.`when`(basicAuthRestClientService!!
+        .exchangeResource(
+                        anyString(),
+                        anyString(),
+                        anyString())).thenReturn(BlueprintWebClientService.WebClientResponse(200, "Success"))
+        val healthApiResponse = bluePrintProcessorHealthCheck!!.retrieveEndpointExecutionStatus()
+        assertNotNull(healthApiResponse)
+        assertEquals(HealthCheckStatus.UP, healthApiResponse.status)
+        healthApiResponse.checks.forEach { serviceEndpoint ->
+            assertNotNull(serviceEndpoint)
+            assertEquals(HealthCheckStatus.UP, serviceEndpoint.status)
+
+        }
+
+    }
+
+    @Test
+    fun testServiceIsNotFound() {
+        Mockito.`when`(basicAuthRestClientService!!.exchangeResource(
+                        anyString(),
+                        anyString(),
+                        anyString())).thenReturn(BlueprintWebClientService.WebClientResponse(404, "failure"))
+        val healthApiResponse = bluePrintProcessorHealthCheck!!.retrieveEndpointExecutionStatus()
+        assertNotNull(healthApiResponse)
+        assertEquals(HealthCheckStatus.DOWN, healthApiResponse.status)
+        healthApiResponse.checks.forEach { serviceEndpoint ->
+            assertNotNull(serviceEndpoint)
+            assertEquals(HealthCheckStatus.DOWN, serviceEndpoint.status)
+
+        }
+
+    }
+
+
+    @Test
+    fun testServiceInternalServerError() {
+        Mockito.`when`(basicAuthRestClientService!!.exchangeResource(
+                        anyString(),
+                        anyString(),
+                       anyString()))
+                .thenReturn(BlueprintWebClientService.WebClientResponse(500, "failure"))
+        val healthApiResponse = bluePrintProcessorHealthCheck!!.retrieveEndpointExecutionStatus()
+        assertNotNull(healthApiResponse)
+        assertEquals(HealthCheckStatus.DOWN, healthApiResponse.status)
+        healthApiResponse.checks.forEach { serviceEndpoint ->
+            assertNotNull(serviceEndpoint)
+            assertEquals(HealthCheckStatus.DOWN, serviceEndpoint.status)
+
+        }
+
+    }
+
+    @Test
+    fun testServiceIsRedirected() {
+        Mockito.`when`(basicAuthRestClientService!!.
+                exchangeResource(
+                        anyString(),
+                        anyString(),
+                       anyString()))
+                .thenReturn(BlueprintWebClientService.WebClientResponse(300, "failure"))
+        val healthApiResponse = bluePrintProcessorHealthCheck!!.retrieveEndpointExecutionStatus()
+        assertNotNull(healthApiResponse)
+        assertEquals(HealthCheckStatus.DOWN, healthApiResponse.status)
+        healthApiResponse.checks.forEach { serviceEndpoint ->
+            assertNotNull(serviceEndpoint)
+            assertEquals(HealthCheckStatus.DOWN, serviceEndpoint.status)
+
+        }
+    }
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/SecurityConfigurationTest.kt b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/SecurityConfigurationTest.kt
new file mode 100644 (file)
index 0000000..e1f7abd
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi
+
+import org.junit.Assert
+import org.junit.Test
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.configuration.SecurityEncryptionConfiguration
+
+
+class SecurityConfigurationTest {
+
+    @Test
+    fun testEncryption() {
+        val passWord = "ccsdkapps"
+        val securityConfiguration = SecurityEncryptionConfiguration()
+        val encryptedValue = securityConfiguration.encrypt(passWord)
+        println(encryptedValue)
+        Assert.assertEquals(passWord, securityConfiguration.decrypt(encryptedValue!!))
+    }
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/test/resources/application-test.properties b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/test/resources/application-test.properties
new file mode 100644 (file)
index 0000000..edf5760
--- /dev/null
@@ -0,0 +1,29 @@
+#
+# Copyright © 2019-2020 Orange.
+# 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 Licens
+blueprintsprocessor.db.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
+blueprintsprocessor.db.username=sa
+blueprintsprocessor.db.password=
+blueprintsprocessor.db.driverClassName=org.h2.Driver
+blueprintsprocessor.db.hibernateHbm2ddlAuto=create-drop
+blueprintsprocessor.db.hibernateDDLAuto=update
+blueprintsprocessor.db.hibernateNamingStrategy=org.hibernate.cfg.ImprovedNamingStrategy
+blueprintsprocessor.db.hibernateDialect=org.hibernate.dialect.H2Dialect
+# Controller Blueprints Core Configuration
+blueprintsprocessor.blueprintDeployPath=./target/blueprints/deploy
+blueprintsprocessor.blueprintWorkingPath=./target/blueprints/work
+blueprintsprocessor.blueprintArchivePath=./target/blueprints/archive
+# Python executor
+blueprints.processor.functions.python.executor.executionPath=./../../../../components/scripts/python/ccsdk_blueprints
+blueprints.processor.functions.python.executor.modulePaths=./../../../../components/scripts/python/ccsdk_blueprints
+server.socket=localhost:8080
+endpoints.user.name=eHbVUbJAj4AG2522cSbrOQ==
+endpoints.user.password=eHbVUbJAj4AG2522cSbrOQ==
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/test/resources/logback.xml b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/test/resources/logback.xml
new file mode 100644 (file)
index 0000000..0656cad
--- /dev/null
@@ -0,0 +1,35 @@
+<!--
+  /*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+  -->
+<configuration>
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <!-- encoders are assigned the type
+             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
+        <encoder>
+            <pattern>%d{HH:mm:ss.SSS} %-5level %logger{100} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <logger name="org.springframework" level="warn"/>
+    <logger name="org.hibernate" level="info"/>
+    <logger name="org.onap.ccsdk.cds.blueprintsprocessor" level="info"/>
+
+    <root level="info">
+        <appender-ref ref="STDOUT"/>
+    </root>
+
+</configuration>
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/ms/blueprintsprocessor/modules/inbounds/health-api-common/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644 (file)
index 0000000..1f0955d
--- /dev/null
@@ -0,0 +1 @@
+mock-maker-inline
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/.gitignore b/ms/blueprintsprocessor/modules/inbounds/health-api/.gitignore
new file mode 100644 (file)
index 0000000..a2a3040
--- /dev/null
@@ -0,0 +1,31 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**
+!**/src/test/**
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+
+### VS Code ###
+.vscode/
index 01903a4..2635cfb 100644 (file)
     <description>checking system check health endpoints</description>
 
     <dependencies>
+
         <dependency>
             <groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
-            <artifactId>rest-lib</artifactId>
+            <artifactId>health-api-common</artifactId>
+            <version>0.7.0-SNAPSHOT</version>
         </dependency>
     </dependencies>
 </project>
@@ -18,9 +18,8 @@ package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.controller
 
 import io.swagger.annotations.Api
 import io.swagger.annotations.ApiOperation
-import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthApiResponse
-import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service.HealthCheckService
-import org.springframework.beans.factory.annotation.Autowired
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.ApplicationHealth
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service.CombinedHealthService
 import org.springframework.http.MediaType
 import org.springframework.http.ResponseEntity
 import org.springframework.web.bind.annotation.RequestMapping
@@ -28,21 +27,26 @@ import org.springframework.web.bind.annotation.RequestMethod
 import org.springframework.web.bind.annotation.ResponseBody
 import org.springframework.web.bind.annotation.RestController
 
+/**
+ * Exposes API for checking health for other services .
+ *
+ * @author Shaaban Ebrahim
+ * @version 1.0
+ */
 @RestController
-@RequestMapping("/api/v1/health")
-@Api(value = "/api/v1/health",
+@RequestMapping("/api/v1/combinedHealth")
+@Api(value = "/api/v1/combinedHealth",
         description = "gather all HealthCheckResponses for HealthChecks known to the runtime")
-open class HealthCheckController {
-
-    @Autowired
-    lateinit var healthApiService: HealthCheckService
+open class CombinedHealth(private val combinedHealthService: CombinedHealthService) {
 
     @RequestMapping(path = [""],
             method = [RequestMethod.GET],
             produces = [MediaType.APPLICATION_JSON_VALUE])
     @ResponseBody
     @ApiOperation(value = "Health Check", hidden = true)
-    fun getSystemHealthCheckResponse(): ResponseEntity<HealthApiResponse> {
-        return ResponseEntity.ok().body(healthApiService.retrieveSystemStatus())
+    fun getSystemHealthCheckResponse(): ResponseEntity<List<ApplicationHealth?>> {
+        return ResponseEntity.ok().body(combinedHealthService.getCombinedHealthCheck())
+
     }
 }
+
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/controller/CombinedMetrics.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/controller/CombinedMetrics.kt
new file mode 100644 (file)
index 0000000..785def5
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.controller
+
+import io.swagger.annotations.Api
+import io.swagger.annotations.ApiOperation
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.MetricsInfo
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service.CombinedMetricsService
+import org.springframework.http.MediaType
+import org.springframework.http.ResponseEntity
+import org.springframework.web.bind.annotation.RequestMapping
+import org.springframework.web.bind.annotation.RequestMethod
+import org.springframework.web.bind.annotation.ResponseBody
+import org.springframework.web.bind.annotation.RestController
+
+/**
+ * Exposes API for checking Metrics of BluePrint processor and CDSListener.
+ *
+ * @author Shaaban Ebrahim
+ * @version 1.0
+ */
+@RestController
+@RequestMapping("/api/v1/combinedMetrics")
+@Api(value = "/api/v1/combinedMetrics",
+        description = "gather all Metrics info from BluePrint and CDSListener")
+open class CombinedMetrics(private val combinedMetricsService: CombinedMetricsService) {
+
+    @RequestMapping(path = [""],
+            method = [RequestMethod.GET],
+            produces = [MediaType.APPLICATION_JSON_VALUE])
+    @ResponseBody
+    @ApiOperation(value = " Metrics Check", hidden = true)
+    fun getMetricsHealthCheckResponse(): ResponseEntity<MetricsInfo?> {
+        return ResponseEntity.ok().body(combinedMetricsService.metricsInfo)
+
+    }
+
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthApiResponse.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthApiResponse.kt
deleted file mode 100644 (file)
index 4dac178..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain
-
-
-data class HealthApiResponse(val status: HealthCheckStatus, val checks:List<HealthCheckResponse>)
-
-
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckResponse.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckResponse.kt
deleted file mode 100644 (file)
index acac867..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain
-
-
-data class HealthCheckResponse(val name: String, val status: HealthCheckStatus)
-
-
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckStatus.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/HealthCheckStatus.kt
deleted file mode 100644 (file)
index a891a40..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain
-
-enum class HealthCheckStatus {
-    UP,
-    DOWN
-}
\ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ServiceEndpoint.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/domain/ServiceEndpoint.kt
deleted file mode 100644 (file)
index 8fbc33b..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain
-
-
-
-data class ServiceEndpoint(val serviceName: String, val serviceLink: String)
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/CombinedHealthService.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/CombinedHealthService.kt
new file mode 100644 (file)
index 0000000..786048c
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service
+
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.configuration.HealthCheckProperties
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.ApplicationHealth
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.ServiceEndpoint
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.WebClientEnpointResponse
+import org.springframework.boot.actuate.health.Status
+import org.springframework.stereotype.Service
+
+
+/**
+ *Service for combined health (BluePrintProcessor and CDSListener)
+ *
+ * @author Shaaban Ebrahim
+ * @version 1.0
+ */
+@Service
+open class CombinedHealthService(private val endPointExecution: EndPointExecution
+                                 , private val healthCheckProperties: HealthCheckProperties) {
+
+    private fun setupServiceEndpoint(): List<ServiceEndpoint> {
+        return listOf(
+                ServiceEndpoint("BluePrintProcessor Health Check ", healthCheckProperties.getBluePrintBaseURL() + "actuator/health")
+                , ServiceEndpoint("CDSListener Health Check", healthCheckProperties.getCDSListenerBaseURL() + "actuator/health")
+        )
+    }
+
+    open fun getCombinedHealthCheck(): List<ApplicationHealth?> {
+        val listOfResponse = ArrayList<ApplicationHealth?>()
+        for (serviceEndpoint in setupServiceEndpoint().parallelStream()) {
+            val result: WebClientEnpointResponse? = endPointExecution?.retrieveWebClientResponse(serviceEndpoint)
+            if (result?.response != null &&
+                    result.response!!.status?.equals(200)!!) {
+                listOfResponse.add(endPointExecution?.getHealthFromWebClientEnpointResponse(result))
+            } else {
+                listOfResponse.add(ApplicationHealth(Status.DOWN,
+                        hashMapOf(serviceEndpoint.serviceLink to serviceEndpoint.serviceLink)))
+            }
+        }
+        return listOfResponse
+    }
+
+}
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/CombinedMetricsService.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/CombinedMetricsService.kt
new file mode 100644 (file)
index 0000000..a23c992
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service
+
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.configuration.HealthCheckProperties
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.*
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.utils.ObjectMappingUtils
+import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BlueprintWebClientService
+import org.springframework.stereotype.Service
+
+/**
+ *Service for combined Metrics for CDS Listener and BluePrintProcessor
+ *
+ * @author Shaaban Ebrahim
+ * @version 1.0
+ */
+@Service
+open class CombinedMetricsService(private val endPointExecution: EndPointExecution
+                                  , private val healthCheckProperties: HealthCheckProperties
+                                  , private val objectMappingUtils: ObjectMappingUtils<Metrics>) {
+
+    private fun setupServiceEndpoint(): List<ServiceEndpoint> {
+        return listOf(
+                ServiceEndpoint("BluePrintProcessor metrics", healthCheckProperties.getBluePrintBaseURL() + "/actuator/metrics")
+                , ServiceEndpoint("CDS Listener metrics", healthCheckProperties.getCDSListenerBaseURL() + "/actuator/metrics")
+        )
+    }
+
+    open val metricsInfo: MetricsInfo
+        get() {
+            val containerHealthChecks = mutableListOf<ActuatorCheckResponse>()
+            for (serviceEndpoint in setupServiceEndpoint().parallelStream()) {
+                val webClientResponse = endPointExecution?.retrieveWebClientResponse(serviceEndpoint)
+                var actuatorsHealthResponse: ActuatorCheckResponse? = null
+                actuatorsHealthResponse = if (webClientResponse?.response != null &&
+                        webClientResponse.response!!.status?.equals(200)!!) {
+                    var body = gettingCustomizedBody(serviceEndpoint, webClientResponse.response!!)
+                    ActuatorCheckResponse(serviceEndpoint.serviceName, body)
+                } else {
+                    ActuatorCheckResponse(serviceEndpoint.serviceName, HealthCheckStatus.DOWN)
+                }
+                containerHealthChecks.add(actuatorsHealthResponse)
+            }
+            return MetricsInfo(containerHealthChecks)
+        }
+
+    private fun gettingCustomizedBody(serviceEndpoint: ServiceEndpoint?, webClientResponse: BlueprintWebClientService.WebClientResponse<String>): Any {
+        var body: Any
+        val metrics: Metrics = objectMappingUtils.getObjectFromBody(webClientResponse.body, Metrics::class.java)
+        val mapOfMetricsInfo = HashMap<String, String>()
+        for (name in metrics.names!!) {
+            mapOfMetricsInfo.put(name.toString(), serviceEndpoint?.serviceLink + "/" + name)
+        }
+        body = MetricsResponse(mapOfMetricsInfo)
+
+        return body
+    }
+}
+
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/HealthCheckService.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/service/HealthCheckService.kt
deleted file mode 100644 (file)
index 09fdb67..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright © 2019-2020 Orange.
- *
- * 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.
- */
-
-package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service
-
-import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthApiResponse
-import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthCheckResponse
-import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthCheckStatus
-import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.ServiceEndpoint
-import org.onap.ccsdk.cds.blueprintsprocessor.rest.BasicAuthRestClientProperties
-import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BasicAuthRestClientService
-import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BlueprintWebClientService
-import org.slf4j.LoggerFactory
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.http.HttpMethod
-import org.springframework.stereotype.Service
-
-
-@Service
-class HealthCheckService {
-
-    private var logger = LoggerFactory.getLogger(HealthCheckService::class.java)
-
-    @Autowired
-    lateinit var basicAuthRestClientService: BasicAuthRestClientService
-
-    @Autowired
-    lateinit var restClientProperties: BasicAuthRestClientProperties
-
-
-    open fun setupServiceEndpoint(): List<ServiceEndpoint> {
-        return listOf(ServiceEndpoint("Execution service", "http://cds-blueprints-processor-http:8080/api/v1/execution-service/health-check"),
-                ServiceEndpoint("Template service", "http://cds-blueprints-processor-http:8080/api/v1/template/health-check"),
-                ServiceEndpoint("Resources service", "http://cds-blueprints-processor-http:8080/api/v1/resources/health-check"),
-                ServiceEndpoint("SDC Listener service", "http://cds-sdc-listener:8080/api/v1/sdclistener/health-check")
-        )
-    }
-
-    fun retrieveSystemStatus(): HealthApiResponse {
-        logger.info("Retrieve System Status")
-        var healthApiResponse: HealthApiResponse
-        val listOfResponse = mutableListOf<HealthCheckResponse>()
-        var systemStatus: HealthCheckStatus = HealthCheckStatus.UP
-
-        for (serviceEndpoint in setupServiceEndpoint().parallelStream()) {
-            var serviceStatus: HealthCheckStatus = retrieveServiceStatus(serviceEndpoint)
-            if (serviceStatus.equals(HealthCheckStatus.DOWN))
-                systemStatus = HealthCheckStatus.DOWN
-
-            listOfResponse.add(HealthCheckResponse(serviceEndpoint.serviceName, serviceStatus))
-        }
-        healthApiResponse = HealthApiResponse(systemStatus, listOfResponse)
-        return healthApiResponse
-    }
-
-    private fun retrieveServiceStatus(serviceEndpoint: ServiceEndpoint): HealthCheckStatus {
-        var serviceStatus: HealthCheckStatus = HealthCheckStatus.UP
-        try {
-            addClientPropertiesConfiguration(serviceEndpoint)
-            val result: BlueprintWebClientService.WebClientResponse<String> = basicAuthRestClientService.exchangeResource(HttpMethod.GET.name, "", "")
-            if (result == null || result.status != 200) {
-                serviceStatus = HealthCheckStatus.DOWN
-
-            }
-        } catch (e: Exception) {
-            logger.error("service is down" + e)
-            serviceStatus = HealthCheckStatus.DOWN
-
-        }
-        return serviceStatus
-    }
-
-    private fun addClientPropertiesConfiguration(serviceEndpoint: ServiceEndpoint) {
-        restClientProperties.url = serviceEndpoint.serviceLink
-    }
-
-
-}
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/utils/ObjectMappingUtils.kt b/ms/blueprintsprocessor/modules/inbounds/health-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/utils/ObjectMappingUtils.kt
new file mode 100644 (file)
index 0000000..9964c45
--- /dev/null
@@ -0,0 +1,13 @@
+package org.onap.ccsdk.cds.blueprintsprocessor.healthapi.utils
+
+import com.fasterxml.jackson.databind.ObjectMapper
+import org.springframework.stereotype.Service
+
+@Service
+class ObjectMappingUtils<T> {
+
+    @Throws(java.io.IOException::class)
+    open fun getObjectFromBody(body: String, mappingClass: Class<T>): T {
+        return ObjectMapper().readValue(body, mappingClass) as T
+    }
+}
index aca95b4..de4b8f8 100644 (file)
@@ -13,6 +13,5 @@
 #  See the License for the specific language governing permissions and
 #  limitations under the License.
 #
-
-endpoints.user.name=ccsdkapps
-endpoints.user.password=ccsdkapps
+#endpoints.user.name=eHbVUbJAj4AG2522cSbrOQ==
+#endpoints.user.password=eHbVUbJAj4AG2522cSbrOQ==
index cd02b65..b1d629d 100644 (file)
@@ -20,7 +20,9 @@ package org.onap.ccsdk.cds.blueprintsprocessor.healthapi
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.onap.ccsdk.cds.blueprintsprocessor.core.BluePrintCoreConfiguration
+import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.ComponentScriptExecutor
 import org.onap.ccsdk.cds.controllerblueprints.core.interfaces.BluePrintCatalogService
+import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintRuntimeService
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.boot.autoconfigure.security.SecurityProperties
 import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest
@@ -30,25 +32,36 @@ import org.springframework.test.context.TestPropertySource
 import org.springframework.test.context.junit4.SpringRunner
 import org.springframework.test.web.reactive.server.WebTestClient
 
-
+/**
+ *Unit tests for making sure that two endpoints is up and running
+ *
+ * @author Shaaban Ebrahim
+ * @version 1.0
+ */
 @RunWith(SpringRunner::class)
 @WebFluxTest
-@ContextConfiguration(classes = [BluePrintCoreConfiguration::class,
-    BluePrintCatalogService::class, SecurityProperties::class])
+@ContextConfiguration(classes = [BluePrintRuntimeService::class, BluePrintCoreConfiguration::class,
+    BluePrintCatalogService::class, SecurityProperties::class, ComponentScriptExecutor::class])
 @ComponentScan(basePackages = ["org.onap.ccsdk.cds.blueprintsprocessor", "org.onap.ccsdk.cds.controllerblueprints"])
 @TestPropertySource(locations = ["classpath:application-test.properties"])
 class HealthCheckApplicationTests {
 
-
     @Autowired
     lateinit var webTestClient: WebTestClient
 
     @Test
     fun testHealthApiUp() {
-        val result = webTestClient.get().uri("/api/v1/health")
+        webTestClient.get().uri("/api/v1/combinedHealth")
+                .exchange()
+                .expectStatus().is2xxSuccessful
+
+    }
+
+    @Test
+    fun testMetricsApiUp() {
+        webTestClient.get().uri("/api/v1/combinedMetrics")
                 .exchange()
                 .expectStatus().is2xxSuccessful
-        println(result)
     }
 
 
diff --git a/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/HealthCheckServiceTest.java b/ms/blueprintsprocessor/modules/inbounds/health-api/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/healthapi/HealthCheckServiceTest.java
deleted file mode 100644 (file)
index 128c80a..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright © 2019-2020 Orange.
- *
- * 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.
- */
-
-package org.onap.ccsdk.cds.blueprintsprocessor.healthapi;
-
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.junit.MockitoJUnitRunner;
-import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthApiResponse;
-import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthCheckStatus;
-import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service.HealthCheckService;
-import org.onap.ccsdk.cds.blueprintsprocessor.rest.BasicAuthRestClientProperties;
-import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BasicAuthRestClientService;
-import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BlueprintWebClientService.WebClientResponse;
-import org.springframework.http.HttpMethod;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.anyString;
-
-@RunWith(MockitoJUnitRunner.class)
-public class HealthCheckServiceTest {
-
-  @Mock
-  private BasicAuthRestClientService basicAuthRestClientService;
-
-  @Mock
-  private BasicAuthRestClientProperties restClientProperties;
-
-  @InjectMocks
-  private HealthCheckService healthCheckService = new HealthCheckService();
-
-  @Before
-  public void setup() {
-  }
-
-  @Test
-  public void testSystemIsCompletelyDown() {
-
-    Mockito.when(basicAuthRestClientService.exchangeResource(anyString(), anyString(), anyString())).
-            thenThrow(new RuntimeException());
-    HealthApiResponse healthApiResponse = healthCheckService.retrieveSystemStatus();
-    assertNotNull(healthApiResponse);
-    Assert.assertEquals(healthApiResponse.getStatus(), HealthCheckStatus.DOWN);
-    healthApiResponse.getChecks().stream().forEach(serviceEndpoint -> {
-      assertNotNull(serviceEndpoint);
-      assertEquals(serviceEndpoint.getStatus(), HealthCheckStatus.DOWN);
-
-    });
-
-  }
-
-
-  @Test
-  public void testSystemIsUPAndRunning() {
-
-    Mockito.when(basicAuthRestClientService.exchangeResource(eq(HttpMethod.GET.name()), anyString(), anyString())).
-            thenReturn(new WebClientResponse<>(200, "Success"));
-    HealthApiResponse healthApiResponse = healthCheckService.retrieveSystemStatus();
-    assertNotNull(healthApiResponse);
-    assertEquals(healthApiResponse.getStatus(), HealthCheckStatus.UP);
-    healthApiResponse.getChecks().stream().forEach(serviceEndpoint -> {
-      assertNotNull(serviceEndpoint);
-      assertEquals(serviceEndpoint.getStatus(), HealthCheckStatus.UP);
-
-    });
-
-  }
-
-  @Test
-  public void testServiceIsNotFound() {
-    Mockito.when(basicAuthRestClientService.exchangeResource(eq(HttpMethod.GET.name()), any(), anyString())).
-            thenReturn(new WebClientResponse<>(404, "failure"));
-    HealthApiResponse healthApiResponse = healthCheckService.retrieveSystemStatus();
-    assertNotNull(healthApiResponse);
-    assertEquals(healthApiResponse.getStatus(), HealthCheckStatus.DOWN);
-    healthApiResponse.getChecks().stream().forEach(serviceEndpoint -> {
-      assertNotNull(serviceEndpoint);
-      assertEquals(serviceEndpoint.getStatus(), HealthCheckStatus.DOWN);
-
-    });
-
-  }
-
-
-  @Test
-  public void testServiceInternalServerError() {
-    Mockito.when(basicAuthRestClientService.exchangeResource(eq(HttpMethod.GET.name()), any(), anyString()))
-            .thenReturn(new WebClientResponse<>(500, "failure"));
-    HealthApiResponse healthApiResponse = healthCheckService.retrieveSystemStatus();
-    assertNotNull(healthApiResponse);
-    assertEquals(healthApiResponse.getStatus(), HealthCheckStatus.DOWN);
-    healthApiResponse.getChecks().stream().forEach(serviceEndpoint -> {
-      assertNotNull(serviceEndpoint);
-      assertEquals(serviceEndpoint.getStatus(), HealthCheckStatus.DOWN);
-
-    });
-
-  }
-
-  @Test
-  public void testServiceIsRedirected() {
-    Mockito.when(basicAuthRestClientService.exchangeResource(eq(HttpMethod.GET.name()), any(), anyString()))
-            .thenReturn(new WebClientResponse<>(300, "failure"));
-    HealthApiResponse healthApiResponse = healthCheckService.retrieveSystemStatus();
-    assertNotNull(healthApiResponse);
-    assertEquals(healthApiResponse.getStatus(), HealthCheckStatus.DOWN);
-    healthApiResponse.getChecks().stream().forEach(serviceEndpoint -> {
-      assertNotNull(serviceEndpoint);
-      assertEquals(serviceEndpoint.getStatus(), HealthCheckStatus.DOWN);
-
-    });
-
-  }
-
-}
index c9a5700..8eb6db3 100644 (file)
@@ -1,16 +1,14 @@
-#  Copyright © 2019 Bell Canada.
 #
-#  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.
+# Copyright © 2019-2020 Orange.
+# 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.
 
 blueprintsprocessor.db.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
 blueprintsprocessor.db.username=sa
@@ -24,8 +22,9 @@ blueprintsprocessor.db.hibernateDialect=org.hibernate.dialect.H2Dialect
 blueprintsprocessor.blueprintDeployPath=./target/blueprints/deploy
 blueprintsprocessor.blueprintWorkingPath=./target/blueprints/work
 blueprintsprocessor.blueprintArchivePath=./target/blueprints/archive
-
 # Python executor
 blueprints.processor.functions.python.executor.executionPath=./../../../../components/scripts/python/ccsdk_blueprints
 blueprints.processor.functions.python.executor.modulePaths=./../../../../components/scripts/python/ccsdk_blueprints
 server.socket=localhost:8080
+endpoints.user.name=eHbVUbJAj4AG2522cSbrOQ==
+endpoints.user.password=eHbVUbJAj4AG2522cSbrOQ==
index c97e1cd..11582a3 100644 (file)
@@ -1,23 +1,23 @@
 <!--
-  ~ Copyright © 2019 Bell Canada
-  ~
-  ~ 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.
+  /*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
   -->
 
 <configuration>
     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-        <!-- encoders are assigned the type
-             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
         <encoder>
             <pattern>%d{HH:mm:ss.SSS} %-5level %logger{100} - %msg%n</pattern>
         </encoder>
index 81ffea1..6dc39a7 100644 (file)
@@ -35,7 +35,8 @@
         <module>designer-api</module>
         <module>resource-api</module>
         <module>selfservice-api</module>
-        <!--<module>health-api</module>-->
+        <module>health-api</module>
+        <module>health-api-common</module>
     </modules>
 
     <dependencies>
             <groupId>org.onap.ccsdk.cds.blueprintsprocessor.functions</groupId>
             <artifactId>resource-resolution</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-actuator</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-starter-logging</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
+
 
         <!-- Test Dependencies -->
         <dependency>
index 2e6c183..5f35957 100644 (file)
             <scope>test</scope>
         </dependency>
 
+
+
+        <dependency>
+            <groupId>org.onap.ccsdk.cds.blueprintsprocessor</groupId>
+            <artifactId>health-api-common</artifactId>
+            <version>0.7.0-SNAPSHOT</version>
+        </dependency>
+
         <!-- SDC Distribution client dependency -->
         <dependency>
             <groupId>org.onap.sdc.sdc-distribution-client</groupId>
diff --git a/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/actuator/indicator/SDCListenerCustomIndicator.java b/ms/sdclistener/application/src/main/java/org/onap/ccsdk/cds/sdclistener/actuator/indicator/SDCListenerCustomIndicator.java
new file mode 100644 (file)
index 0000000..11fd2c2
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright © 2019-2020 Orange.
+ *
+ * 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.
+ */
+
+package org.onap.ccsdk.cds.sdclistener.actuator.indicator;
+
+
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthApiResponse;
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.domain.HealthCheckStatus;
+import org.onap.ccsdk.cds.blueprintsprocessor.healthapi.service.health.SDCListenerHealthCheck;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.actuate.health.AbstractHealthIndicator;
+import org.springframework.boot.actuate.health.Health.Builder;
+import org.springframework.stereotype.Component;
+/**
+ * Health Indicator for SDCListener.
+ * @author Shaaban Ebrahim
+ * @version 1.0
+ */
+@Component
+public class SDCListenerCustomIndicator extends AbstractHealthIndicator {
+
+  @Autowired
+  private SDCListenerHealthCheck sDCListenerHealthCheck;
+
+  @Override
+  protected void doHealthCheck(Builder builder) {
+    HealthApiResponse healthAPIResponse = sDCListenerHealthCheck.retrieveEndpointExecutionStatus();
+    if (healthAPIResponse.getStatus() == HealthCheckStatus.UP) {
+      builder.up();
+    } else {
+      builder.down();
+    }
+    builder.withDetail("Services", healthAPIResponse.getChecks());
+  }
+}