aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsuresh.charan <suresh.charan@amdocs.com>2021-12-15 05:23:01 -0500
committersuresh.charan <suresh.charan@amdocs.com>2021-12-15 05:23:01 -0500
commit6c006a13328f6eb388d6cbd0ac3323f3462b3343 (patch)
tree37047bb16fb26cd7e7001f72ddfcfffa7f3b4a31
parent0f940df172f04ad5261b2443b296b3ab58faf02c (diff)
[AAI] Expose relevant key metrics for monitoring via prometheus
The Key metrics are available via endpoints: /actuator/prometheus /actuator/info /actuator/health Issue-ID: AAI-3415 Signed-off-by: Suresh Charan <suresh.charan@amdocs.com> Change-Id: I5760095973c7f3d58a3770e221dee1c3ca9d5370
-rwxr-xr-xpom.xml36
-rw-r--r--src/main/resources/application.properties8
-rw-r--r--src/test/java/org/onap/aai/MetricsConfigurationTest.java136
-rw-r--r--src/test/resources/application-test.properties6
4 files changed, 186 insertions, 0 deletions
diff --git a/pom.xml b/pom.xml
index 6ae2a5f..1a716e4 100755
--- a/pom.xml
+++ b/pom.xml
@@ -102,6 +102,13 @@
<schema.version.list>v10,v11,v12,v13,v14,v15,v16,v17,v18,v19,v20,v21,v22,v23,v24</schema.version.list>
<schema.uri.base.path>/aai</schema.uri.base.path>
<!-- End of Default ONAP Schema Properties -->
+
+ <!-- Start of graphadmin metric collection Properties -->
+ <micrometer.core.version>1.8.1</micrometer.core.version>
+ <micrometer.registry.prometheus.version>1.8.1</micrometer.registry.prometheus.version>
+ <micrometer.jersey2.version>1.8.1</micrometer.jersey2.version>
+ <spring.boot.starter.actuator.version>2.1.12.RELEASE</spring.boot.starter.actuator.version>
+ <!-- End of graphadmin metric collection Properties -->
</properties>
<profiles>
@@ -336,6 +343,24 @@
</profiles>
<dependencies>
+ <!-- Start of graphadmin metric collection dependencies -->
+ <dependency>
+ <groupId>io.micrometer</groupId>
+ <artifactId>micrometer-core</artifactId>
+ <version>${micrometer.core.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.micrometer</groupId>
+ <artifactId>micrometer-registry-prometheus</artifactId>
+ <version>${micrometer.registry.prometheus.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.micrometer</groupId>
+ <artifactId>micrometer-jersey2</artifactId>
+ <version>${micrometer.jersey2.version}</version>
+ </dependency>
+ <!-- End of graphadmin metric collection dependencies -->
+
<dependency>
<groupId>javax.jms</groupId>
<artifactId>javax.jms-api</artifactId>
@@ -571,6 +596,17 @@
</exclusions>
</dependency>
<dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-actuator</artifactId>
+ <version>${spring.boot.starter.actuator.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-tomcat</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 48c6de5..89f8bf7 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -86,3 +86,11 @@ aperture.service.ssl.trust-store=${server.local.startpath}etc/auth/aai_keystore
aperture.service.ssl.key-store-password=password(OBF:1vn21ugu1saj1v9i1v941sar1ugw1vo0)
aperture.service.ssl.trust-store-password=password(OBF:1vn21ugu1saj1v9i1v941sar1ugw1vo0)
aperture.service.timeout-in-milliseconds=300000
+
+#To Expose the Prometheus scraping endpoint
+management.server.port=8448
+#To Enable Actuator Endpoint, you can override this to True in OOM charts
+management.endpoints.enabled-by-default=false
+#To Enable Actuator Endpoint, you can override this in OOM Charts
+#management.endpoints.web.exposure.include=info, health, loggers, prometheus
+management.metrics.web.server.auto-time-requests=false
diff --git a/src/test/java/org/onap/aai/MetricsConfigurationTest.java b/src/test/java/org/onap/aai/MetricsConfigurationTest.java
new file mode 100644
index 0000000..d0c0ce4
--- /dev/null
+++ b/src/test/java/org/onap/aai/MetricsConfigurationTest.java
@@ -0,0 +1,136 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.aai;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+
+import java.io.UnsupportedEncodingException;
+import java.util.Base64;
+import java.util.Collections;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.onap.aai.config.SpringContextAware;
+import org.onap.aai.exceptions.AAIException;
+import org.onap.aai.restclient.PropertyPasswordConfiguration;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.actuate.autoconfigure.web.server.LocalManagementPort;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
+import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.context.annotation.Import;
+import org.springframework.http.*;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.rules.SpringClassRule;
+import org.springframework.test.context.junit4.rules.SpringMethodRule;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * Test management endpoints against configuration resource.
+ */
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
+ classes = {SpringContextAware.class, GraphAdminApp.class})
+@ContextConfiguration(initializers = PropertyPasswordConfiguration.class, classes = {SpringContextAware.class})
+@Import(GraphAdminTestConfiguration.class)
+@TestPropertySource(locations = "classpath:application-test.properties")
+public class MetricsConfigurationTest {
+
+ @ClassRule
+ public static final SpringClassRule springClassRule = new SpringClassRule();
+
+ @Rule
+ public final SpringMethodRule springMethodRule = new SpringMethodRule();
+
+ @Autowired
+ RestTemplate restTemplate;
+
+ @LocalServerPort
+ int randomPort;
+
+ @LocalManagementPort
+ private long localManagementPort;
+
+ private HttpEntity<String> httpEntity;
+ private HttpEntity<String> httpEntityPut;
+ private HttpEntity<String> httpEntityPatch;
+ private String baseUrl;
+ private String actuatorUrl;
+ private HttpHeaders headers;
+
+ @BeforeClass
+ public static void setupConfig() throws AAIException {
+ System.setProperty("AJSC_HOME", "./");
+ System.setProperty("BUNDLECONFIG_DIR", "src/main/resources/");
+ }
+
+ @Before
+ public void setup() throws UnsupportedEncodingException {
+
+ headers = new HttpHeaders();
+
+ headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ headers.add("Real-Time", "true");
+ headers.add("X-FromAppId", "JUNIT");
+ headers.add("X-TransactionId", "JUNIT");
+
+ String authorization = Base64.getEncoder().encodeToString("AAI:AAI".getBytes("UTF-8"));
+ headers.add("Authorization", "Basic " + authorization);
+
+ httpEntity = new HttpEntity<String>(headers);
+ baseUrl = "http://localhost:" + randomPort;
+ actuatorUrl = "http://localhost:" + localManagementPort;
+ }
+
+
+ @Test
+ public void testManagementEndpointConfiguration() {
+ ResponseEntity responseEntity = null;
+ String responseBody = null;
+
+ //set Accept as text/plain in order to get access of endpoint "/actuator/prometheus"
+ headers.set("Accept", "text/plain");
+ httpEntity = new HttpEntity<String>(headers);
+ responseEntity =
+ restTemplate.exchange(actuatorUrl + "/actuator/prometheus", HttpMethod.GET, httpEntity, String.class);
+ responseBody = (String) responseEntity.getBody();
+ assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
+
+ //Set Accept as MediaType.APPLICATION_JSON in order to get access of endpoint "/actuator/info" and "/actuator/health"
+ headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
+ httpEntity = new HttpEntity<String>(headers);
+ responseEntity =
+ restTemplate.exchange(actuatorUrl + "/actuator/info", HttpMethod.GET, httpEntity, String.class);
+ responseBody = (String) responseEntity.getBody();
+ assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
+
+ responseEntity =
+ restTemplate.exchange(actuatorUrl + "/actuator/health", HttpMethod.GET, httpEntity, String.class);
+ responseBody = (String) responseEntity.getBody();
+ assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
+ assertTrue(responseBody.contains("UP"));
+ }
+}
diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties
index d245a53..5ac9491 100644
--- a/src/test/resources/application-test.properties
+++ b/src/test/resources/application-test.properties
@@ -73,3 +73,9 @@ schema.service.versions.endpoint=versions
# Location of the cadi properties file should be specified here
aaf.cadi.file=${server.local.startpath}/cadi.properties
+
+#To expose the Prometheus scraping endpoint in unit test
+management.server.port=0
+management.endpoints.enabled-by-default=true
+management.endpoints.web.exposure.include=info, health, loggers, prometheus
+management.metrics.web.server.auto-time-requests=false