diff options
author | 2024-12-11 14:58:25 +0000 | |
---|---|---|
committer | 2025-01-07 12:02:29 +0000 | |
commit | 0d61c432b2604f0459dea95bbd328c279b04fbef (patch) | |
tree | 3cd35b93ed02048699006082ad1086c986c0990f /cps-application | |
parent | ffac9f27f7183d8e80aa74a7b113f68dcadb3f87 (diff) |
Add gauge metric for NCMP "cmhandle states"
Issue-ID: CPS-2456
Change-Id: I1aebcc68dfdc9c48c230c74376742d67b05c0615
Signed-off-by: emaclee <lee.anjella.macabuhay@est.tech>
Diffstat (limited to 'cps-application')
3 files changed, 112 insertions, 9 deletions
diff --git a/cps-application/src/main/java/org/onap/cps/config/MicroMeterConfig.java b/cps-application/src/main/java/org/onap/cps/config/MicroMeterConfig.java index 22194f3ad8..39ed6ef5a7 100644 --- a/cps-application/src/main/java/org/onap/cps/config/MicroMeterConfig.java +++ b/cps-application/src/main/java/org/onap/cps/config/MicroMeterConfig.java @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2023 Nordix Foundation. + * Copyright (C) 2023-2025 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,17 +20,100 @@ package org.onap.cps.config; +import com.hazelcast.map.IMap; import io.micrometer.core.aop.TimedAspect; +import io.micrometer.core.instrument.Gauge; import io.micrometer.core.instrument.MeterRegistry; +import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration +@RequiredArgsConstructor public class MicroMeterConfig { + private static final String TAG = "state"; + private static final String CMHANDLE_STATE_GAUGE = "cmHandlesByState"; + final IMap<String, Integer> cmHandlesByState; + + @Bean + public TimedAspect timedAspect(final MeterRegistry meterRegistry) { + return new TimedAspect(meterRegistry); + } + + /** + * Register gauge metric for cm handles with state 'advised'. + * + * @param meterRegistry meter registry + * @return cm handle state gauge + */ + @Bean + public Gauge advisedCmHandles(final MeterRegistry meterRegistry) { + return Gauge.builder(CMHANDLE_STATE_GAUGE, cmHandlesByState, + value -> cmHandlesByState.get("advisedCmHandlesCount")) + .tag(TAG, "ADVISED") + .description("Current number of cmhandles in advised state") + .register(meterRegistry); + } + + /** + * Register gauge metric for cm handles with state 'ready'. + * + * @param meterRegistry meter registry + * @return cm handle state gauge + */ + @Bean + public Gauge readyCmHandles(final MeterRegistry meterRegistry) { + return Gauge.builder(CMHANDLE_STATE_GAUGE, cmHandlesByState, + value -> cmHandlesByState.get("readyCmHandlesCount")) + .tag(TAG, "READY") + .description("Current number of cmhandles in ready state") + .register(meterRegistry); + } + + /** + * Register gauge metric for cm handles with state 'locked'. + * + * @param meterRegistry meter registry + * @return cm handle state gauge + */ + @Bean + public Gauge lockedCmHandles(final MeterRegistry meterRegistry) { + return Gauge.builder(CMHANDLE_STATE_GAUGE, cmHandlesByState, + value -> cmHandlesByState.get("lockedCmHandlesCount")) + .tag(TAG, "LOCKED") + .description("Current number of cmhandles in locked state") + .register(meterRegistry); + } + + /** + * Register gauge metric for cm handles with state 'deleting'. + * + * @param meterRegistry meter registry + * @return cm handle state gauge + */ + @Bean + public Gauge deletingCmHandles(final MeterRegistry meterRegistry) { + return Gauge.builder(CMHANDLE_STATE_GAUGE, cmHandlesByState, + value -> cmHandlesByState.get("deletingCmHandlesCount")) + .tag(TAG, "DELETING") + .description("Current number of cmhandles in deleting state") + .register(meterRegistry); + } + + /** + * Register gauge metric for cm handles with state 'deleted'. + * + * @param meterRegistry meter registry + * @return cm handle state gauge + */ @Bean - public TimedAspect timedAspect(final MeterRegistry registry) { - return new TimedAspect(registry); + public Gauge deletedCmHandles(final MeterRegistry meterRegistry) { + return Gauge.builder(CMHANDLE_STATE_GAUGE, cmHandlesByState, + value -> cmHandlesByState.get("deletedCmHandlesCount")) + .tag(TAG, "DELETED") + .description("Current number of cmhandles in deleted state") + .register(meterRegistry); } } diff --git a/cps-application/src/main/resources/application.yml b/cps-application/src/main/resources/application.yml index d7e39f7fae..573db1fb10 100644 --- a/cps-application/src/main/resources/application.yml +++ b/cps-application/src/main/resources/application.yml @@ -1,8 +1,8 @@ # ============LICENSE_START======================================================= # Copyright (C) 2021 Pantheon.tech # Modifications Copyright (C) 2021-2022 Bell Canada -# Modifications Copyright (C) 2021-2024 Nordix Foundation # Modifications Copyright (C) 2024 TechMahindra Ltd +# Modifications Copyright (C) 2021-2025 Nordix Foundation # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -172,7 +172,7 @@ management: endpoints: web: exposure: - include: info,health,loggers,prometheus + include: info,health,loggers,prometheus,metrics endpoint: health: show-details: always diff --git a/cps-application/src/test/groovy/org/onap/cps/config/MicroMeterConfigSpec.groovy b/cps-application/src/test/groovy/org/onap/cps/config/MicroMeterConfigSpec.groovy index 61bc2cf027..67ca64624a 100644 --- a/cps-application/src/test/groovy/org/onap/cps/config/MicroMeterConfigSpec.groovy +++ b/cps-application/src/test/groovy/org/onap/cps/config/MicroMeterConfigSpec.groovy @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2023 Nordix Foundation. + * Copyright (C) 2023-2025 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,16 +20,36 @@ package org.onap.cps.config +import com.hazelcast.map.IMap import io.micrometer.core.instrument.simple.SimpleMeterRegistry import spock.lang.Specification class MicroMeterConfigSpec extends Specification { - def objectUnderTest = new MicroMeterConfig() + def cmHandlesByState = Mock(IMap) + def objectUnderTest = new MicroMeterConfig(cmHandlesByState) + def simpleMeterRegistry = new SimpleMeterRegistry() - def 'Creating a tined aspect.'() { + def 'Creating a timed aspect.'() { expect: ' a timed aspect can be created' - assert objectUnderTest.timedAspect(new SimpleMeterRegistry()) != null + assert objectUnderTest.timedAspect(simpleMeterRegistry) != null + } + + def 'Creating gauges for cm handle states.'() { + given: 'cache returns value for each state' + cmHandlesByState.get(_) >> 1 + when: 'gauges for each state are created' + objectUnderTest.advisedCmHandles(simpleMeterRegistry) + objectUnderTest.readyCmHandles(simpleMeterRegistry) + objectUnderTest.lockedCmHandles(simpleMeterRegistry) + objectUnderTest.deletingCmHandles(simpleMeterRegistry) + objectUnderTest.deletedCmHandles(simpleMeterRegistry) + then: 'each state has the correct value when queried' + def states = ["ADVISED", "READY", "LOCKED", "DELETING", "DELETED"] + states.each { state -> + def gaugeValue = simpleMeterRegistry.get("cmHandlesByState").tag("state",state).gauge().value() + assert gaugeValue == 1 + } } } |