Commit eb79639e authored by Nikolaos Kyriakoulis's avatar Nikolaos Kyriakoulis Committed by Kostis Trantzas
Browse files

Fixed incorrect counting of published service specifications and added...

Fixed incorrect counting of published service specifications and added 15-minute caching for that count.
parent c362dae5
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);