Commit 6e9dd2cb authored by Kostis Trantzas's avatar Kostis Trantzas
Browse files

Merge branch...

Merge branch '73-fix-incorrect-counting-of-published-service-specifications-in-metrics-api' into 'develop'

Fixed incorrect counting of published service specifications and added 15-minute caching for that count.

See merge request !70
parents 9757982f eb79639e
Loading
Loading
Loading
Loading
Loading
+21 −8
Original line number Diff line number Diff line
@@ -2,12 +2,14 @@ package org.etsi.osl.tmf.metrics.reposervices;

import org.etsi.osl.tmf.pm632.repo.IndividualRepository;
import org.etsi.osl.tmf.rcm634.repo.ResourceSpecificationRepository;
import org.etsi.osl.tmf.scm633.model.ServiceCandidate;
import org.etsi.osl.tmf.scm633.model.ServiceCategory;
import org.etsi.osl.tmf.scm633.repo.CandidateRepository;
import org.etsi.osl.tmf.scm633.repo.CategoriesRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.Duration;
import java.time.OffsetDateTime;
import java.util.List;

@Service
@@ -25,22 +27,33 @@ public class GeneralMetricsRepoService {
    @Autowired
    CandidateRepository candidateRepository;

    // Cached values for performance optimization
    private static Integer cachedPublishedServiceSpecCount = null;
    private static OffsetDateTime lastRetrieved = null;
    private static final Duration CACHE_DURATION = Duration.ofMinutes(15);

    public int countRegisteredIndividuals() {
        return individualRepository.countAll();
    }

    public int countPublishedServiceSpecifications() {
        OffsetDateTime now = OffsetDateTime.now();

        if (cachedPublishedServiceSpecCount == null || lastRetrieved == null ||
                Duration.between(lastRetrieved, now).compareTo(CACHE_DURATION) > 0) {

        List<ServiceCandidate> serviceCandidates = candidateRepository.findAll();
            int count = 0;
            List<ServiceCategory> serviceCategories = categoriesRepository.findByOrderByName();

        for (ServiceCandidate serviceCandidate : serviceCandidates) {
            System.out.println("ServiceCandidate Category: " + serviceCandidate.getCategoryObj());
            if (serviceCandidate.getCategory() != null) {
                count += 1;
            for (ServiceCategory serviceCategory : serviceCategories) {
                count += serviceCategory.getServiceCandidateObj().size()
                        + serviceCategory.getServiceCandidateRefs().size();
            }

            cachedPublishedServiceSpecCount = count;
            lastRetrieved = now;
        }
        return count;
        return cachedPublishedServiceSpecCount;
    }

    public int countRegisteredResourceSpecifications() {
+8 −6
Original line number Diff line number Diff line
@@ -5,8 +5,9 @@ import org.etsi.osl.tmf.OpenAPISpringBoot;
import org.etsi.osl.tmf.pm632.model.IndividualCreate;
import org.etsi.osl.tmf.pm632.reposervices.IndividualRepoService;
import org.etsi.osl.tmf.rcm634.reposervices.ResourceSpecificationRepoService;
import org.etsi.osl.tmf.scm633.model.ServiceCandidate;
import org.etsi.osl.tmf.scm633.model.ServiceCategory;
import org.etsi.osl.tmf.scm633.reposervices.CandidateRepoService;
import org.etsi.osl.tmf.scm633.reposervices.CategoryRepoService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -58,6 +59,9 @@ public class GeneralMetricsApiControllerTest {
    @Autowired
    CandidateRepoService candidateRepoService;

    @Autowired
    CategoryRepoService categoryRepoService;


    @Before
    public void setup() throws Exception {
@@ -96,13 +100,11 @@ public class GeneralMetricsApiControllerTest {

        int totalSpecs = JsonPath.read(response, "$.publishedServiceSpecifications");

        List<ServiceCandidate> serviceCandidates = candidateRepoService.findAll();
        List<ServiceCategory> serviceCategories = categoryRepoService.findAll();
        int count = 0;

        for (ServiceCandidate serviceCandidate : serviceCandidates) {
            if (serviceCandidate.getCategory() != null) {
                count += 1;
            }
        for (ServiceCategory serviceCategory : serviceCategories) {
            count += serviceCategory.getServiceCandidateObj().size() + serviceCategory.getServiceCandidateRefs().size();
        }

        assertThat(totalSpecs).isEqualTo(count);