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

Merge branch '12-create-metrics-endpoints-for-nfv-related-information' into 'develop'

Created metrics endpoints for NFV-related information

See merge request !12
parents cdbf8788 9015e68d
Loading
Loading
Loading
Loading
Loading
+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")));
    }