Commit 2be1e3b9 authored by Kostis Trantzas's avatar Kostis Trantzas
Browse files

Merge branch 'develop' into 'main'

Merging "develop" to "main" branch

See merge request !14
parents 2f149388 636e9c84
Loading
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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>

+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();
}
+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);
        }
    }
}
+29 −4
Original line number Diff line number Diff line
@@ -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")));
    }