fix-sonar-complaints
[portal/ric-dashboard.git] / dashboard / webapp-backend / src / main / java / org / oransc / ric / portal / dashboard / controller / AdminController.java
index ce52f7a..9e49226 100644 (file)
  */
 package org.oransc.ric.portal.dashboard.controller;
 
+import java.io.IOException;
 import java.lang.invoke.MethodHandles;
 import java.util.List;
 
-import javax.servlet.http.HttpServletResponse;
-
 import org.onap.portalsdk.core.restful.domain.EcompUser;
+import org.oransc.ric.portal.dashboard.AppStatsManager;
 import org.oransc.ric.portal.dashboard.DashboardApplication;
 import org.oransc.ric.portal.dashboard.DashboardConstants;
 import org.oransc.ric.portal.dashboard.DashboardUserManager;
-import org.oransc.ric.portal.dashboard.model.ErrorTransport;
+import org.oransc.ric.portal.dashboard.exception.StatsManagerException;
+import org.oransc.ric.portal.dashboard.model.AppStats;
 import org.oransc.ric.portal.dashboard.model.IDashboardResponse;
 import org.oransc.ric.portal.dashboard.model.RicRegion;
 import org.oransc.ric.portal.dashboard.model.RicRegionList;
 import org.oransc.ric.portal.dashboard.model.RicRegionTransport;
+import org.oransc.ric.portal.dashboard.model.StatsDetailsTransport;
 import org.oransc.ric.portal.dashboard.model.SuccessTransport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.security.access.annotation.Secured;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import io.swagger.annotations.ApiOperation;
@@ -63,16 +70,14 @@ public class AdminController {
        public static final String USER_METHOD = "user";
        public static final String VERSION_METHOD = DashboardConstants.VERSION_METHOD;
        public static final String XAPPMETRICS_METHOD = "metrics";
-
-       @Value("${metrics.url.ac}")
-       private String acAppMetricsUrl;
-
-       @Value("${metrics.url.mc}")
-       private String mcAppMetricsUrl;
+       public static final String STATAPPMETRIC_METHOD = "appmetric";
 
        @Autowired
        private DashboardUserManager dashboardUserManager;
 
+       @Autowired
+       private AppStatsManager appStatsManager;
+
        @Autowired
        private RicRegionList instanceConfig;
 
@@ -111,22 +116,53 @@ public class AdminController {
                return instanceConfig.getSimpleInstances();
        }
 
-       @ApiOperation(value = "Gets the kibana metrics URL for the specified app.", response = SuccessTransport.class)
-       @GetMapping(XAPPMETRICS_METHOD)
+       @ApiOperation(value = "Gets all xApp statistics reporting details.", response = StatsDetailsTransport.class, responseContainer = "List")
+       @GetMapping(DashboardConstants.RIC_INSTANCE_KEY + "/{" + DashboardConstants.RIC_INSTANCE_KEY + "}/"
+                       + STATAPPMETRIC_METHOD)
        @Secured({ DashboardConstants.ROLE_ADMIN, DashboardConstants.ROLE_STANDARD })
-       public IDashboardResponse getAppMetricsUrl(@RequestParam String app, HttpServletResponse response) {
-               String metricsUrl = null;
-               if (DashboardConstants.APP_NAME_AC.equals(app))
-                       metricsUrl = acAppMetricsUrl;
-               else if (DashboardConstants.APP_NAME_MC.equals(app))
-                       metricsUrl = mcAppMetricsUrl;
-               logger.debug("getAppMetricsUrl: app {} metricsurl {}", app, metricsUrl);
-               if (metricsUrl != null)
-                       return new SuccessTransport(200, metricsUrl);
-               else {
-                       response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
-                       return new ErrorTransport(400, "Client provided app name is invalid as: " + app);
-               }
+       public List<AppStats> getStats(@PathVariable(DashboardConstants.RIC_INSTANCE_KEY) String instanceKey) {
+               logger.debug("getStats for instance {}", instanceKey);
+               return appStatsManager.getStatsByInstance(instanceKey);
        }
 
-}
+       @ApiOperation(value = "Gets a xApp's metrics status by Id.", response = StatsDetailsTransport.class, responseContainer = "List")
+       @GetMapping(DashboardConstants.RIC_INSTANCE_KEY + "/{" + DashboardConstants.RIC_INSTANCE_KEY + "}/"
+                       + STATAPPMETRIC_METHOD + "/" + DashboardConstants.APP_ID + "/{" + DashboardConstants.APP_ID + "}")
+       @Secured({ DashboardConstants.ROLE_ADMIN, DashboardConstants.ROLE_STANDARD })
+       public AppStats getStatsById(@PathVariable(DashboardConstants.RIC_INSTANCE_KEY) String instanceKey,
+                       @PathVariable(DashboardConstants.APP_ID) int appId) {
+               logger.debug("getStatsById for instance {} by app id {}", instanceKey, appId);
+               return appStatsManager.getStatsById(instanceKey, appId);
+       }
+
+       @ApiOperation(value = "Creates xApp metrics status.")
+       @PostMapping(DashboardConstants.RIC_INSTANCE_KEY + "/{" + DashboardConstants.RIC_INSTANCE_KEY + "}/"
+                       + STATAPPMETRIC_METHOD)
+       @Secured({ DashboardConstants.ROLE_ADMIN })
+       public IDashboardResponse createStats(@PathVariable(DashboardConstants.RIC_INSTANCE_KEY) String instanceKey,
+                       @Validated @RequestBody StatsDetailsTransport statsSetupRequest) throws StatsManagerException, IOException {
+               logger.debug("createStats with instance {} request {}", instanceKey, statsSetupRequest);
+               return appStatsManager.createStats(instanceKey, statsSetupRequest);
+       }
+
+       @ApiOperation(value = "Updates xApp metrics status.")
+       @PutMapping(DashboardConstants.RIC_INSTANCE_KEY + "/{" + DashboardConstants.RIC_INSTANCE_KEY + "}/"
+                       + STATAPPMETRIC_METHOD)
+       @Secured({ DashboardConstants.ROLE_ADMIN })
+       public void updateStats(@PathVariable(DashboardConstants.RIC_INSTANCE_KEY) String instanceKey,
+                       @Validated @RequestBody StatsDetailsTransport statsSetupRequest) throws StatsManagerException, IOException {
+               logger.debug("updateStats for instance {} request {}", instanceKey, statsSetupRequest);
+               appStatsManager.updateStats(instanceKey, statsSetupRequest);
+       }
+
+       @ApiOperation(value = "Deletes xApp metric status.")
+       @DeleteMapping(DashboardConstants.RIC_INSTANCE_KEY + "/{" + DashboardConstants.RIC_INSTANCE_KEY + "}/"
+                       + STATAPPMETRIC_METHOD + "/" + DashboardConstants.APP_ID + "/{" + DashboardConstants.APP_ID + "}")
+       @Secured({ DashboardConstants.ROLE_ADMIN })
+       public ResponseEntity<String> deleteStats(@PathVariable(DashboardConstants.RIC_INSTANCE_KEY) String instanceKey,
+                       @PathVariable(DashboardConstants.APP_ID) int appId) throws StatsManagerException, IOException {
+               logger.debug("deleteStats instance {} request {}", instanceKey, appId);
+               appStatsManager.deleteStats(instanceKey, appId);
+               return ResponseEntity.ok(null);
+       }
+}
\ No newline at end of file