diff --git a/src/main/java/portal/api/metrics/MetricsApi.java b/src/main/java/portal/api/metrics/MetricsApi.java new file mode 100644 index 0000000000000000000000000000000000000000..9a40578d9e6fd8c29e4ab27a0c470ffafb7656ce --- /dev/null +++ b/src/main/java/portal/api/metrics/MetricsApi.java @@ -0,0 +1,48 @@ +package portal.api.metrics; + +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.model.nfv.metrics.RegisteredManoProviders; +import org.etsi.osl.model.nfv.metrics.RegisteredNSDs; +import org.etsi.osl.model.nfv.metrics.RegisteredVNFs; +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; + + +@Tag(name = "NFV Metrics Api") +public interface MetricsApi { + + Logger log = LoggerFactory.getLogger(MetricsApi.class); + + @Operation(summary = "Get total number of registered NSDs", operationId = "getRegisteredNsds") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Success"), + @ApiResponse(responseCode = "400", description = "Bad Request"), + @ApiResponse(responseCode = "500", description = "Internal Server Error") + }) + @RequestMapping(value = "/metrics/registeredNsds", method = RequestMethod.GET, produces = "application/json;charset=utf-8") + ResponseEntity<RegisteredNSDs> getRegisteredNsds(); + + @Operation(summary = "Get total number of registered VNFs", operationId = "getRegisteredVnfs") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Success"), + @ApiResponse(responseCode = "400", description = "Bad Request"), + @ApiResponse(responseCode = "500", description = "Internal Server Error") + }) + @RequestMapping(value = "/metrics/registeredVnfs", method = RequestMethod.GET, produces = "application/json;charset=utf-8") + ResponseEntity<RegisteredVNFs> getRegisteredVnfs(); + + @Operation(summary = "Get total number of registered Mano Providers", operationId = "getRegisteredManoProviders") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Success"), + @ApiResponse(responseCode = "400", description = "Bad Request"), + @ApiResponse(responseCode = "500", description = "Internal Server Error") + }) + @RequestMapping(value = "/metrics/registeredManoProviders", method = RequestMethod.GET, produces = "application/json;charset=utf-8") + ResponseEntity<RegisteredManoProviders> getRegisteredManoProviders(); +} diff --git a/src/main/java/portal/api/metrics/MetricsApiController.java b/src/main/java/portal/api/metrics/MetricsApiController.java new file mode 100644 index 0000000000000000000000000000000000000000..834b8a7b531be152fc1a8a995001b3d814c4eb67 --- /dev/null +++ b/src/main/java/portal/api/metrics/MetricsApiController.java @@ -0,0 +1,68 @@ +package portal.api.metrics; + +import org.etsi.osl.model.nfv.metrics.RegisteredManoProviders; +import org.etsi.osl.model.nfv.metrics.RegisteredNSDs; +import org.etsi.osl.model.nfv.metrics.RegisteredVNFs; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import portal.api.service.ManoProviderService; +import portal.api.service.NSDService; +import portal.api.service.VxFService; + + +@Controller +public class MetricsApiController implements MetricsApi { + + private static final Logger log = LoggerFactory.getLogger(MetricsApiController.class); + + private final NSDService nsdService; + + private final VxFService vxfService; + + private final ManoProviderService manoProviderService; + + public MetricsApiController(NSDService nsdService, VxFService vxfService, ManoProviderService manoProviderService) { + this.nsdService = nsdService; + this.vxfService = vxfService; + this.manoProviderService = manoProviderService; + } + + @Override + public ResponseEntity<RegisteredNSDs> getRegisteredNsds() { + try { + int totalNSDs = nsdService.getExperiments().size(); + RegisteredNSDs response = new RegisteredNSDs(totalNSDs); + return new ResponseEntity<>(response, HttpStatus.OK); + } catch (Exception e) { + log.error("Couldn't retrieve total registered NSDs. ", e); + return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @Override + public ResponseEntity<RegisteredVNFs> getRegisteredVnfs() { + try { + int totalVNFs = vxfService.getVxFs().size(); + RegisteredVNFs response = new RegisteredVNFs(totalVNFs); + return new ResponseEntity<>(response, HttpStatus.OK); + } catch (Exception e) { + log.error("Couldn't retrieve total registered VNFs. ", e); + return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @Override + public ResponseEntity<RegisteredManoProviders> getRegisteredManoProviders() { + try { + int totalManoProviders = manoProviderService.getMANOproviders().size(); + RegisteredManoProviders response = new RegisteredManoProviders(totalManoProviders); + return new ResponseEntity<>(response, HttpStatus.OK); + } catch (Exception e) { + log.error("Couldn't retrieve total registered MANO Providers. ", e); + return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); + } + } +} diff --git a/src/main/java/portal/api/swagger2/SwaggerConfig.java b/src/main/java/portal/api/swagger2/SwaggerConfig.java index c49190fcc26e923fbad7bcec6576cebaa349bc72..db9a0b930b6e45da4a08ef81ecab5f3905bd8333 100644 --- a/src/main/java/portal/api/swagger2/SwaggerConfig.java +++ b/src/main/java/portal/api/swagger2/SwaggerConfig.java @@ -57,7 +57,7 @@ public class SwaggerConfig { 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("nfv-portal.api.controller-v1.0.0") + .group("nfv-portal.api.controller") .addOpenApiCustomizer( this.apiInfoPortalAPI() ) .packagesToScan("portal.api.controller") .build(); @@ -69,11 +69,36 @@ public class SwaggerConfig { return openApi -> openApi .specVersion( SpecVersion.V30 ).addSecurityItem(new SecurityRequirement().addList("security_auth")) - .info(new Info().title("NFV portal API") - .description("## NFV portal API") + .info(new Info().title("NFV Portal API") + .description("## An API to manage NFV Artifacts") .version("1.0.0") - .license(new License().name("Apache 2.0").url("http://openslice.io"))); + .license(new License().name("Apache 2.0").url("https://osl.etsi.org"))); + } + + @Bean + public GroupedOpenApi nfvportalmetrics(){ + + 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("nfv-portal.api.metrics") + .addOpenApiCustomizer( this.nfvPortalAPImetrics() ) + .packagesToScan("portal.api.metrics") + .build(); + + } + + OpenApiCustomizer nfvPortalAPImetrics() { + + + return openApi -> openApi + .specVersion( SpecVersion.V30 ).addSecurityItem(new SecurityRequirement().addList("security_auth")) + .info(new Info().title("NFV Portal metrics API") + .description("## An API to retrieve metrics about NFV Portal") + + .version("1.0.0") + .license(new License().name("Apache 2.0").url("https://osl.etsi.org"))); }