Loading src/main/java/org/etsi/osl/tmf/configuration/SwaggerDocumentationConfig.java +34 −1 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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() Loading src/main/java/org/etsi/osl/tmf/metrics/api/MetricsApi.java 0 → 100644 +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(); } src/main/java/org/etsi/osl/tmf/metrics/api/MetricsApiController.java 0 → 100644 +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); } } } src/main/java/org/etsi/osl/tmf/metrics/reposervices/MetricsRepoService.java 0 → 100644 +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(); } } src/main/java/org/etsi/osl/tmf/pm632/repo/IndividualRepository.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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
src/main/java/org/etsi/osl/tmf/configuration/SwaggerDocumentationConfig.java +34 −1 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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() Loading
src/main/java/org/etsi/osl/tmf/metrics/api/MetricsApi.java 0 → 100644 +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(); }
src/main/java/org/etsi/osl/tmf/metrics/api/MetricsApiController.java 0 → 100644 +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); } } }
src/main/java/org/etsi/osl/tmf/metrics/reposervices/MetricsRepoService.java 0 → 100644 +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(); } }
src/main/java/org/etsi/osl/tmf/pm632/repo/IndividualRepository.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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(); }