Commit 6e239f3c authored by Nikolaos Kyriakoulis's avatar Nikolaos Kyriakoulis
Browse files

Created metrics endpoints for general TMF-related information

parent c6a2420c
Loading
Loading
Loading
Loading
Loading
+48 −0
Original line number Diff line number Diff line
package org.etsi.osl.tmf.metrics.api;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.RequestParam;

import java.util.Map;

@Tag(name = "GeneralMetricsApi")
public interface GeneralMetricsApi {

    Logger log = LoggerFactory.getLogger(GeneralMetricsApi.class);

    @Operation(summary = "Get total number of registered individuals", operationId = "getRegisteredIndividuals")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "Success"),
            @ApiResponse(responseCode = "400", description = "Bad Request"),
            @ApiResponse(responseCode = "500", description = "Internal Server Error")
    })
    @RequestMapping(value = "/tmf-api/metrics/registeredIndividuals", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
    ResponseEntity<Map<String, Integer>> getRegisteredIndividuals();

    @Operation(summary = "Get total number of published service specifications", operationId = "getPublishedServiceSpecifications")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "Success"),
            @ApiResponse(responseCode = "400", description = "Bad Request"),
            @ApiResponse(responseCode = "500", description = "Internal Server Error")
    })
    @RequestMapping(value = "/tmf-api/metrics/publishedServiceSpecifications", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
    ResponseEntity<Map<String, Integer>> getPublishedServiceSpecifications();

    @Operation(summary = "Get total number of registered resource specifications", operationId = "getRegisteredResourceSpecifications")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "Success"),
            @ApiResponse(responseCode = "400", description = "Bad Request"),
            @ApiResponse(responseCode = "500", description = "Internal Server Error")
    })
    @RequestMapping(value = "/tmf-api/metrics/registeredResourceSpecifications", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
    ResponseEntity<Map<String, Integer>> getRegisteredResourceSpecifications();
}
+64 −0
Original line number Diff line number Diff line
package org.etsi.osl.tmf.metrics.api;

import org.etsi.osl.tmf.metrics.reposervices.GeneralMetricsRepoService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;

import java.util.HashMap;
import java.util.Map;

@Controller
public class GerenalMetricsApiController implements GeneralMetricsApi {

    private static final Logger log = LoggerFactory.getLogger(GerenalMetricsApiController.class);

    private final GeneralMetricsRepoService generalMetricsRepoService;

    @Autowired
    public GerenalMetricsApiController(GeneralMetricsRepoService generalMetricsRepoService) {
        this.generalMetricsRepoService = generalMetricsRepoService;
    }

    @Override
    public ResponseEntity<Map<String, Integer>> getRegisteredIndividuals() {
        try {
            int totalIndividuals = generalMetricsRepoService.countRegisteredIndividuals();
            Map<String, Integer> response = new HashMap<>();
            response.put("registeredIndividuals", totalIndividuals);
            return new ResponseEntity<>(response, HttpStatus.OK);
        } catch (Exception e) {
            log.error("Couldn't retrieve total registered individuals. ", e);
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    @Override
    public ResponseEntity<Map<String, Integer>> getPublishedServiceSpecifications() {
        try {
            int totalSpecifications = generalMetricsRepoService.countPublishedServiceSpecifications();
            Map<String, Integer> response = new HashMap<>();
            response.put("publishedServiceSpecifications", totalSpecifications);
            return new ResponseEntity<>(response, HttpStatus.OK);
        } catch (Exception e) {
            log.error("Couldn't retrieve total published service specifications. ", e);
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    @Override
    public ResponseEntity<Map<String, Integer>> getRegisteredResourceSpecifications() {
        try {
            int totalResourceSpecifications = generalMetricsRepoService.countRegisteredResourceSpecifications();
            Map<String, Integer> response = new HashMap<>();
            response.put("registeredResourceSpecifications", totalResourceSpecifications);
            return new ResponseEntity<>(response, HttpStatus.OK);
        } catch (Exception e) {
            log.error("Couldn't retrieve total registered resource specifications. ", e);
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
}
+41 −0
Original line number Diff line number Diff line
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.ServiceCategory;
import org.etsi.osl.tmf.scm633.repo.CategoriesRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class GeneralMetricsRepoService {

    @Autowired
    IndividualRepository individualRepository;

    @Autowired
    ResourceSpecificationRepository resourceSpecificationRepository;

    @Autowired
    CategoriesRepository categoriesRepository;

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

    public int countPublishedServiceSpecifications() {
        List<ServiceCategory> serviceCategories = categoriesRepository.findByOrderByName();
        int count = 0;

        for (ServiceCategory serviceCategory : serviceCategories) {
            count += serviceCategory.getServiceCandidateObj().size() + serviceCategory.getServiceCandidateRefs().size();
        }
        return count;
    }

    public int countRegisteredResourceSpecifications() {
        return resourceSpecificationRepository.countLogical() + resourceSpecificationRepository.countPhysical();
    }
}
+7 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ package org.etsi.osl.tmf.pm632.repo;
import java.util.List;
import java.util.Optional;
import org.etsi.osl.tmf.pm632.model.Individual;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;
@@ -40,4 +41,10 @@ public interface IndividualRepository extends CrudRepository<Individual, Long>,

	Optional<Individual> findByPreferredGivenName(String username);

	//Methods for metrics

	@Query("SELECT COUNT(ind) FROM Individual ind")
	int countAll();


}
+8 −0
Original line number Diff line number Diff line
@@ -52,4 +52,12 @@ public interface ResourceSpecificationRepository extends CrudRepository<Resource
	@Query("SELECT sc FROM PhysicalRspec sc")
	List<PhysicalResourceSpecification> findAllPhysical();

	// Methods for metrics

	@Query("SELECT COUNT(sc) FROM LogicalRspec sc")
	int countLogical();

	@Query("SELECT COUNT(sc) FROM PhysicalRspec sc")
	int countPhysical();

}
Loading