* ===================================================================
* Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
* ===================================================================
+ * Modifications Copyright (c) 2020 IBM
+ * ===================================================================
*
* Unless otherwise specified, all software contained herein is licensed
* under the Apache License, Version 2.0 (the "License");
import org.onap.portalapp.portal.logging.aop.EPEELFLoggerAdvice;
import org.onap.portalapp.portal.logging.logic.EPLogUtil;
import org.onap.portalapp.portal.service.AppsCacheService;
-import org.onap.portalapp.portal.service.ConsulHealthService;
+import org.onap.portalapp.portal.service.WidgetMService;
import org.onap.portalapp.portal.transport.Analytics;
import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
import org.onap.portalapp.portal.utils.EcompPortalUtils;
import org.springframework.util.concurrent.SuccessCallback;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@EPAuditLog
@NoArgsConstructor
public class WebAnalyticsExtAppController extends EPRestrictedRESTfulBaseController {
- private ConsulHealthService consulHealthService;
+ public static final String FEED_ML = "feed.ml";
+ private WidgetMService widgetMService;
private AppsCacheService appCacheService;
private static final String MACHINE_LEARNING_SERVICE_CTX = "/ml_api";
private static final String REGISTER_ACTION = MACHINE_LEARNING_SERVICE_CTX + "/" + "registerAction";
- private static final String CONSUL_ML_SERVICE_ID = "machine-learning";
private static final String APP_KEY = "uebkey";
+ private static final String ERROR_MSG = " Error retrieving Application to capture app name for analytics; Proceeding with empty app name";
private final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(WebAnalyticsExtAppController.class);
private final AsyncRestTemplate restTemplate = new AsyncRestTemplate();
private final SuccessCallback<ResponseEntity<String>> successCallback = arg -> logger.info(EELFLoggerDelegate.debugLogger, arg.getBody());
private final FailureCallback failureCallback = arg -> logger.error(EELFLoggerDelegate.errorLogger, "storeAuxAnalytics failed", arg);
@Autowired
- public WebAnalyticsExtAppController(AppsCacheService appCacheService, ConsulHealthService consulHealthService) {
+ public WebAnalyticsExtAppController(AppsCacheService appCacheService, WidgetMService consulHealthService) {
this.appCacheService = appCacheService;
- this.consulHealthService = consulHealthService;
+ this.widgetMService = consulHealthService;
}
/**
* @return String
*/
@ApiOperation(value = "Gets javascript with functions that support gathering and reporting web analytics.", response = String.class)
- @RequestMapping(value = { "/analytics" }, method = RequestMethod.GET, produces = "application/javascript")
+ @GetMapping(value = { "/analytics" }, produces = "application/javascript")
public String getAnalyticsScript(HttpServletRequest request) {
String responseText = "";
EPApp app = null;
try {
app = getApp(request);
} catch (Exception e) {
- logger.error(EELFLoggerDelegate.errorLogger,
- " Error retrieving Application to capture app name for analytics; Proceeding with empty app name");
+ logger.error(EELFLoggerDelegate.errorLogger,
+ ERROR_MSG, e);
}
if (app != null) {
String restEndPoint = app.getAppRestEndpoint();
- if(restEndPoint.contains("/api")) {
- version = restEndPoint.substring(restEndPoint.indexOf("/api")+4);
+ if(restEndPoint.indexOf("/api")!=-1) {
+ version = restEndPoint.substring(restEndPoint.indexOf("api"));
}
}
String endPoint = "/storeAnalytics";
* Analytics
* @return PortalAPIResponse
*/
- @RequestMapping(value = { "/storeAnalytics" }, method = RequestMethod.POST, produces = "application/json")
+ @PostMapping(value = { "/storeAnalytics" }, produces = "application/json")
@ResponseBody
@ApiOperation(value = "Accepts data from partner applications with web analytics data.", response = PortalAPIResponse.class)
public PortalAPIResponse storeAnalyticsScript(HttpServletRequest request, @RequestBody Analytics analyticsMap) {
appName = getAppName(request, appName);
} catch (Exception e) {
logger.error(EELFLoggerDelegate.errorLogger,
- " Error retrieving Application to capture app name for analytics; Proceeding with empty app name");
+ ERROR_MSG, e);
}
try {
- storeAuxAnalytics(analyticsMap, appName);
+ if(SystemProperties.containsProperty(FEED_ML) &&
+ SystemProperties.getProperty(FEED_ML).equals("true")) {
+ storeAuxAnalytics(analyticsMap, appName);
+ }
+
} catch (Exception e) {
logger.error(EELFLoggerDelegate.errorLogger,
- " Error retrieving Application to capture app name for analytics; Proceeding with empty app name");
+ ERROR_MSG, e);
}
MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
return appRecord;
}
- private void storeAuxAnalytics(Analytics analyticsMap, String appName) {
+ protected void storeAuxAnalytics(Analytics analyticsMap, String appName) {
logger.info(EELFLoggerDelegate.debugLogger,
" Registering an action for recommendation: AppName/Function/UserId " + appName + "/"
+ analyticsMap.getFunction() + "/" + analyticsMap.getUserid());
+
Map<String, String> requestMapping = new HashMap<>();
requestMapping.put("id", analyticsMap.getUserid());
requestMapping.put("action", appName + "|" + analyticsMap.getFunction());
-
+
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
// send it!
ListenableFuture<ResponseEntity<String>> out = restTemplate.exchange(
- EcompPortalUtils.widgetMsProtocol() + "://"
- + consulHealthService.getServiceLocation(CONSUL_ML_SERVICE_ID,
- SystemProperties.getProperty("microservices.m-learn.local.port"))
+ EcompPortalUtils.widgetMLProtocol() + "://"
+ + widgetMService.getMLServiceLocation()
+ REGISTER_ACTION,
HttpMethod.POST, entity, String.class);
out.addCallback(successCallback, failureCallback);
}
-}
+}
\ No newline at end of file