Loading Dockerfile +2 −2 Original line number Diff line number Diff line Loading @@ -2,6 +2,6 @@ FROM ibm-semeru-runtimes:open-17.0.7_7-jdk MAINTAINER openslice.io RUN mkdir /opt/shareclasses RUN mkdir -p /opt/openslice/lib/ COPY target/org.etsi.osl.portal.api-1.0.1.jar /opt/openslice/lib/ CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses","-jar", "/opt/openslice/lib/org.etsi.osl.portal.api-1.0.1.jar"] COPY target/org.etsi.osl.portal.api-1.1.0.jar /opt/openslice/lib/ CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses","-jar", "/opt/openslice/lib/org.etsi.osl.portal.api-1.1.0.jar"] EXPOSE 13000 No newline at end of file pom.xml +1 −1 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ <parent> <groupId>org.etsi.osl</groupId> <artifactId>org.etsi.osl.main</artifactId> <version>2024Q4</version> <version>2025Q2</version> <relativePath>../org.etsi.osl.main</relativePath> </parent> Loading src/main/java/portal/api/metrics/MetricsApi.java 0 → 100644 +48 −0 Original line number Diff line number Diff line 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(); } src/main/java/portal/api/metrics/MetricsApiController.java 0 → 100644 +68 −0 Original line number Diff line number Diff line 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); } } } src/main/java/portal/api/swagger2/SwaggerConfig.java +29 −4 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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"))); } Loading Loading
Dockerfile +2 −2 Original line number Diff line number Diff line Loading @@ -2,6 +2,6 @@ FROM ibm-semeru-runtimes:open-17.0.7_7-jdk MAINTAINER openslice.io RUN mkdir /opt/shareclasses RUN mkdir -p /opt/openslice/lib/ COPY target/org.etsi.osl.portal.api-1.0.1.jar /opt/openslice/lib/ CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses","-jar", "/opt/openslice/lib/org.etsi.osl.portal.api-1.0.1.jar"] COPY target/org.etsi.osl.portal.api-1.1.0.jar /opt/openslice/lib/ CMD ["java", "-Xshareclasses:cacheDir=/opt/shareclasses","-jar", "/opt/openslice/lib/org.etsi.osl.portal.api-1.1.0.jar"] EXPOSE 13000 No newline at end of file
pom.xml +1 −1 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ <parent> <groupId>org.etsi.osl</groupId> <artifactId>org.etsi.osl.main</artifactId> <version>2024Q4</version> <version>2025Q2</version> <relativePath>../org.etsi.osl.main</relativePath> </parent> Loading
src/main/java/portal/api/metrics/MetricsApi.java 0 → 100644 +48 −0 Original line number Diff line number Diff line 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(); }
src/main/java/portal/api/metrics/MetricsApiController.java 0 → 100644 +68 −0 Original line number Diff line number Diff line 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); } } }
src/main/java/portal/api/swagger2/SwaggerConfig.java +29 −4 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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"))); } Loading