Commit ffdb9458 authored by Kostis Trantzas's avatar Kostis Trantzas
Browse files

Merge branch '68-create-metrics-endpoints-for-general-tmf-related-information' into 'develop'

Created metrics endpoints for general TMF-related information

See merge request !66
parents 176d8cfb a62e051d
Loading
Loading
Loading
Loading
Loading
+34 −1
Original line number Diff line number Diff line
@@ -830,7 +830,7 @@ public GroupedOpenApi pim637() {
		 SpringDocUtils.getConfig().replaceWithClass(java.time.OffsetDateTime.class, java.util.Date.class);
		 
	    return GroupedOpenApi.builder()
	    		.group("OpensliceLCMRulesspecificationAPI")
	    		.group("OpenSliceLCMRulesspecificationAPI")
	    		.addOpenApiCustomizer( this.lcmOpenAPI() )
	    		.packagesToScan("org.etsi.osl.tmf.lcm.api")
	    		.build();
@@ -949,6 +949,39 @@ public GroupedOpenApi pim637() {
  }


  	/**
	 * Metrics
	 * @return
	 */
	@Bean
	public OpenApiCustomizer metricsOpenAPI() {
		return openApi -> openApi
				.specVersion( SpecVersion.V30 ).addSecurityItem(new SecurityRequirement().addList("security_auth")) 
				.info(new Info().title("OpenSlice Metrics API")
						.description("OpenAPI environment for OpenSlice Metrics")
						.version("4.0.0")
						.license(new License()
								.name("Apache 2.0")
								.url("https://osl.etsi.org")))
				.externalDocs(new ExternalDocumentation()
						.description("OpenSlice Metrics")
						.url("https://osl.etsi.org"));	             
	  }

    @Bean
    public GroupedOpenApi metrics(){

	  	SpringDocUtils.getConfig().replaceWithClass(java.time.LocalDate.class, java.sql.Date.class);
	  	SpringDocUtils.getConfig().replaceWithClass(java.time.OffsetDateTime.class, java.util.Date.class);
        return GroupedOpenApi.builder()
        		.group("OpenSliceMetricsAPI")
        		.addOpenApiCustomizer( this.metricsOpenAPI() )
        		.packagesToScan("org.etsi.osl.tmf.metrics.api")
        		.build();

    }
	
	
//	@Bean
//    public SecurityConfiguration security() {
//        return SecurityConfigurationBuilder.builder()
+49 −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 org.etsi.osl.tmf.metrics.PublishedServiceSpecifications;
import org.etsi.osl.tmf.metrics.RegisteredIndividuals;
import org.etsi.osl.tmf.metrics.RegisteredResourceSpecifications;
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 java.util.Map;

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

    Logger log = LoggerFactory.getLogger(MetricsApi.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 = "/metrics/registeredIndividuals", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
    ResponseEntity<RegisteredIndividuals> 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 = "/metrics/publishedServiceSpecifications", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
    ResponseEntity<PublishedServiceSpecifications> 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 = "/metrics/registeredResourceSpecifications", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
    ResponseEntity<RegisteredResourceSpecifications> getRegisteredResourceSpecifications();
}
+64 −0
Original line number Diff line number Diff line
package org.etsi.osl.tmf.metrics.api;

import org.etsi.osl.tmf.metrics.PublishedServiceSpecifications;
import org.etsi.osl.tmf.metrics.RegisteredIndividuals;
import org.etsi.osl.tmf.metrics.RegisteredResourceSpecifications;
import org.etsi.osl.tmf.metrics.reposervices.MetricsRepoService;
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 MetricsApiController implements MetricsApi {

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

    private final MetricsRepoService generalMetricsRepoService;

    @Autowired
    public MetricsApiController(MetricsRepoService generalMetricsRepoService) {
        this.generalMetricsRepoService = generalMetricsRepoService;
    }

    @Override
    public ResponseEntity<RegisteredIndividuals> getRegisteredIndividuals() {
        try {
            int totalIndividuals = generalMetricsRepoService.countRegisteredIndividuals();
            RegisteredIndividuals response = new 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<PublishedServiceSpecifications> getPublishedServiceSpecifications() {
        try {
            int totalSpecifications = generalMetricsRepoService.countPublishedServiceSpecifications();
            PublishedServiceSpecifications response = new 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<RegisteredResourceSpecifications> getRegisteredResourceSpecifications() {
        try {
            int totalResourceSpecifications = generalMetricsRepoService.countRegisteredResourceSpecifications();
            RegisteredResourceSpecifications response = new 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);
        }
    }
}
+49 −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.ServiceCandidate;
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.util.List;

@Service
public class MetricsRepoService {

    @Autowired
    IndividualRepository individualRepository;

    @Autowired
    ResourceSpecificationRepository resourceSpecificationRepository;

    @Autowired
    CategoriesRepository categoriesRepository;

    @Autowired
    CandidateRepository candidateRepository;

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

    public int countPublishedServiceSpecifications() {

        List<ServiceCandidate> serviceCandidates = candidateRepository.findAll();
        int count = 0;

        for (ServiceCandidate serviceCandidate : serviceCandidates) {
            System.out.println("ServiceCandidate Category: " + serviceCandidate.getCategoryObj());
            if (serviceCandidate.getCategory() != null) {
                count += 1;
            }
        }
        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();


}
Loading