diff --git a/.gitignore b/.gitignore index 4deb269..7cb5fd5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,11 @@ -/target/ +**/target/** +**/.idea/** +**/*.iml *.idea* *.iml .project .settings/org.eclipse.m2e.core.prefs -RUNNING_PID \ No newline at end of file +RUNNING_PID +*.class +*.gif +*.html diff --git a/app/Filters.java b/app/Filters.java deleted file mode 100644 index 0d7a496..0000000 --- a/app/Filters.java +++ /dev/null @@ -1,23 +0,0 @@ -/** - * - * @author Rhea Fernandes - */ -import filters.HealthCheckFilter; -import play.api.mvc.EssentialFilter; -import play.http.HttpFilters; -import javax.inject.Inject; - -public class Filters implements HttpFilters { - - private HealthCheckFilter healthCheckFilter; - - @Inject - public Filters(HealthCheckFilter healthCheckFilter) { - this.healthCheckFilter= healthCheckFilter; - } - - @Override - public EssentialFilter[] filters() { - return new EssentialFilter[] {(EssentialFilter) this.healthCheckFilter }; - } -} \ No newline at end of file diff --git a/app/Global.java b/app/Global.java deleted file mode 100644 index 0f2a098..0000000 --- a/app/Global.java +++ /dev/null @@ -1,103 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import commons.AppConfig; -import commons.dto.ExecutionContext; -import commons.dto.HeaderParam; -import commons.dto.Response; -import managers.HealthCheckManager; -import org.apache.commons.lang3.StringUtils; -import play.Application; -import play.GlobalSettings; -import play.Logger; -import play.Logger.ALogger; -import play.core.j.JavaResultExtractor; -import play.libs.F.Promise; -import play.mvc.Action; -import play.mvc.Http.Context; -import play.mvc.Http.Request; -import play.mvc.Result; -import telemetry.TelemetryAccessEventUtil; -import telemetry.TelemetryGenerator; - -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; - -public class Global extends GlobalSettings { - - private static final ALogger accessLogger = Logger.of("accesslog"); - private static ObjectMapper mapper = new ObjectMapper(); - - public void onStart(Application app) { - System.setProperty("es.set.netty.runtime.available.processors", "false"); - TelemetryGenerator.setComponent("dialcode-service"); - new HealthCheckManager().getAllServiceHealth(); - } - - @SuppressWarnings("rawtypes") - public Action onRequest(Request request, Method actionMethod) { - long startTime = System.currentTimeMillis(); - return new Action.Simple() { - public Promise call(Context ctx) throws Throwable { - Promise call = delegate.call(ctx); - call.onRedeem((r) -> { - try { - String path = request.uri(); - if (!path.contains("/health")) { - JsonNode requestData = request.body().asJson(); - commons.dto.Request req = mapper.convertValue(requestData, - commons.dto.Request.class); - - byte[] body = JavaResultExtractor.getBody(r, 0l); - Response responseObj = mapper.readValue(body, Response.class); - - Map data = new HashMap(); - data.put("StartTime", startTime); - data.put("Request", req); - data.put("Response", responseObj); - data.put("RemoteAddress", request.remoteAddress()); - data.put("ContentLength", body.length); - data.put("Status", r.status()); - data.put("Protocol", request.secure() ? "HTTPS" : "HTTP"); - data.put("Method", request.method()); - data.put("X-Session-ID", request.getHeader("X-Session-ID")); - String consumerId = request.getHeader("X-Consumer-ID"); - data.put("X-Consumer-ID", consumerId); - String deviceId=request.getHeader("X-Device-ID"); - data.put("X-Device-ID", deviceId); - if(StringUtils.isNotBlank(deviceId)) - ExecutionContext.getCurrent().getGlobalContext().put(HeaderParam.DEVICE_ID.name(), - deviceId); - data.put("X-Authenticated-Userid", request.getHeader("X-Authenticated-Userid")); - if (StringUtils.isNotBlank(consumerId)) - ExecutionContext.getCurrent().getGlobalContext().put(HeaderParam.CONSUMER_ID.name(), - consumerId); - data.put("env", "dialcode"); - data.put("path", path); - String channelId = request.getHeader("X-Channel-ID"); - if (StringUtils.isNotBlank(channelId)) - ExecutionContext.getCurrent().getGlobalContext().put(HeaderParam.CHANNEL_ID.name(), - channelId); - else - ExecutionContext.getCurrent().getGlobalContext().put(HeaderParam.CHANNEL_ID.name(), - AppConfig.config.getString("channel.default")); - - String appId = request.getHeader("X-App-ID"); - if(StringUtils.isNotBlank(appId)){ - ExecutionContext.getCurrent().getGlobalContext().put(HeaderParam.APP_ID.name(), - channelId); - } - data.put(HeaderParam.APP_ID.name(), appId); - TelemetryAccessEventUtil.writeTelemetryEventLog(data); - accessLogger.info(request.remoteAddress() + " " + request.host() + " " + request.method() - + " " + request.uri() + " " + r.status() + " " + body.length); - } - } catch (Exception e) { - accessLogger.error(e.getMessage()); - } - }); - return call; - } - }; - } -} diff --git a/app/controllers/BaseController.java b/app/controllers/BaseController.java deleted file mode 100644 index 007df5c..0000000 --- a/app/controllers/BaseController.java +++ /dev/null @@ -1,159 +0,0 @@ -package controllers; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import commons.AppConfig; -import commons.DialCodeErrorCodes; -import commons.dto.HeaderParam; -import commons.dto.Request; -import commons.dto.Response; -import commons.dto.ResponseParams; -import commons.exception.*; -import org.apache.commons.lang3.StringUtils; -import play.libs.F.Promise; -import play.libs.Json; -import play.mvc.Controller; -import play.mvc.Http; -import play.mvc.Result; -import play.mvc.Results; -import telemetry.TelemetryParams; - -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.UUID; - -public class BaseController extends Controller { - private static ObjectMapper mapper = new ObjectMapper(); - - protected Request getRequest() { - JsonNode requestData = request().body().asJson(); - Request req = mapper.convertValue(requestData, Request.class); - setHeaderContext(request(),req); - return req; - } - - - protected Promise getResponseEntity(Response response, String apiId, String msgId) { - int statusCode = response.getResponseCode().code(); - setResponseEnvelope(response, apiId, msgId); - return Promise.pure(Results.status(statusCode ,Json.toJson(response)).as("application/json")); - } - - protected Promise getExceptionResponseEntity(Exception e, String apiId, String msgId) { - int statusCode = getStatus(e); - Response response = getErrorResponse(e); - setResponseEnvelope(response, apiId, msgId); - return Promise.pure(Results.status(statusCode ,Json.toJson(response)).as("application/json")); - } - - public Result getServiceUnavailableResponseEntity(Exception e, String apiId, String msgId) { - int statusCode = getStatus(e); - Response response = getErrorResponse(e); - setResponseEnvelope(response, apiId, msgId); - return Results.status(statusCode ,Json.toJson(response)).as("application/json"); - } - - - private void setResponseEnvelope(Response response, String apiId, String msgId) { - if (null != response) { - response.setId(apiId); - response.setVer(getAPIVersion()); - response.setTs(getResponseTimestamp()); - ResponseParams params = response.getParams(); - if (null == params) - params = new ResponseParams(); - if (StringUtils.isNotBlank(msgId)) - params.setMsgid(msgId); - params.setResmsgid(getUUID()); - if (StringUtils.equalsIgnoreCase(ResponseParams.StatusType.successful.name(), params.getStatus())) { - params.setErr(null); - params.setErrmsg(null); - } - response.setParams(params); - } - } - - protected String getAPIVersion() { - return "3.0"; - } - - private String getResponseTimestamp() { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'XXX"); - return sdf.format(new Date()); - } - - private String getUUID() { - UUID uid = UUID.randomUUID(); - return uid.toString(); - } - - private Response getErrorResponse(Exception e) { - Response response = new Response(); - ResponseParams resStatus = new ResponseParams(); - String message = e.getMessage(); - resStatus.setErrmsg(message); - resStatus.setStatus(ResponseParams.StatusType.failed.name()); - if (e instanceof MiddlewareException) { - MiddlewareException me = (MiddlewareException) e; - resStatus.setErr(me.getErrCode()); - response.setResponseCode(me.getResponseCode()); - } else { - resStatus.setErr(DialCodeErrorCodes.SYSTEM_ERROR); - response.setResponseCode(ResponseCode.SERVER_ERROR); - } - response.setParams(resStatus); - return response; - } - - private int getStatus(Exception e) { - if (e instanceof ClientException) { - return Results.badRequest().status(); - } else if (e instanceof ResourceNotFoundException) { - return Results.notFound().status(); - }else if (e instanceof ServiceUnavailableException){ - return Results.status(ResponseCode.SERVICE_UNAVAILABLE.code()).status(); - } - return Results.internalServerError().status(); - } - - /** - * - * @param httpRequest - * @param dialRequest - */ - protected void setHeaderContext(Http.Request httpRequest, Request dialRequest) { - String sessionId = httpRequest.getHeader("X-Session-ID"); - String consumerId = httpRequest.getHeader("X-Consumer-ID"); - String deviceId = httpRequest.getHeader("X-Device-ID"); - String authUserId = httpRequest.getHeader("X-Authenticated-Userid"); - String channelId = httpRequest.getHeader("X-Channel-ID"); - String appId = httpRequest.getHeader("X-App-Id"); - - if (StringUtils.isNotBlank(sessionId)) - dialRequest.getContext().put("SESSION_ID", sessionId); - if (StringUtils.isNotBlank(consumerId)) - dialRequest.getContext().put(HeaderParam.CONSUMER_ID.name(), consumerId); - if (StringUtils.isNotBlank(deviceId)) - dialRequest.getContext().put(HeaderParam.DEVICE_ID.name(), deviceId); - if (StringUtils.isNotBlank(authUserId)) - dialRequest.getContext().put(HeaderParam.CONSUMER_ID.name(), authUserId); - if (StringUtils.isNotBlank(channelId)) - dialRequest.getContext().put(HeaderParam.CHANNEL_ID.name(), channelId); - else - dialRequest.getContext().put(HeaderParam.CHANNEL_ID.name(), AppConfig.config.getString("channel.default")); - if (StringUtils.isNotBlank(appId)) - dialRequest.getContext().put(HeaderParam.APP_ID.name(), appId); - - dialRequest.getContext().put(TelemetryParams.ENV.name(), "dialcode"); - - if (null != dialRequest.getContext().get(HeaderParam.CONSUMER_ID.name())) { - dialRequest.put(TelemetryParams.ACTOR.name(), dialRequest.getContext().get(HeaderParam.CONSUMER_ID.name())); - } else if (null != dialRequest && null != dialRequest.getParams().getCid()) { - dialRequest.put(TelemetryParams.ACTOR.name(), dialRequest.getParams().getCid()); - } else { - dialRequest.put(TelemetryParams.ACTOR.name(), "learning.platform"); - } - - } - -} diff --git a/app/controllers/dialcode/DialcodeV3Controller.java b/app/controllers/dialcode/DialcodeV3Controller.java deleted file mode 100644 index c6ef166..0000000 --- a/app/controllers/dialcode/DialcodeV3Controller.java +++ /dev/null @@ -1,194 +0,0 @@ -package controllers.dialcode; - -import commons.dto.Request; -import commons.dto.Response; -import controllers.BaseController; -import managers.DialcodeManager; -import play.libs.F.Promise; -import play.mvc.Result; -import telemetry.TelemetryManager; -import utils.DialCodeEnum; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -public class DialcodeV3Controller extends BaseController { - - private DialcodeManager dialCodeManager = new DialcodeManager(); - - public Promise generateDialCode() { - String apiId = "sunbird.dialcode.generate"; - String channelId = request().getHeader("X-Channel-ID"); - Request request = getRequest(); - try { - Map map = (Map) request.get(DialCodeEnum.dialcodes.name()); - Response response = dialCodeManager.generateDialCode(map, channelId); - return getResponseEntity(response, apiId, null); - } catch (Exception e) { - TelemetryManager.error("Exception Occured while generating Dial Code : "+ e.getMessage(), e); - return getExceptionResponseEntity(e, apiId, null); - } - } - - public Promise readDialCode(String dialCodeId) { - String apiId = "sunbird.dialcode.read"; - try { - Response response = dialCodeManager.readDialCode(dialCodeId); - return getResponseEntity(response, apiId, null); - } catch (Exception e) { - TelemetryManager.error("Exception Occured while reading Dial Code details : "+ e.getMessage(), e); - return getExceptionResponseEntity(e, apiId, null); - } - } - - public Promise updateDialCode(String dialCodeId) { - String apiId = "sunbird.dialcode.update"; - String channelId = request().getHeader("X-Channel-ID"); - Request request = getRequest(); - try { - Map map = (Map) request.get(DialCodeEnum.dialcode.name()); - Response response = dialCodeManager.updateDialCode(dialCodeId, channelId, map); - return getResponseEntity(response, apiId, null); - } catch (Exception e) { - TelemetryManager.error("Exception Occured while updating Dial Code : "+ e.getMessage(), e); - return getExceptionResponseEntity(e, apiId, null); - } - } - - public Promise listDialCode() { - String apiId = "sunbird.dialcode.list"; - Request request = getRequest(); - try { - Map requestMap = (Map) request.get(DialCodeEnum.search.name()); - Response response = dialCodeManager.listDialCode(request.getContext(), requestMap); - return getResponseEntity(response, apiId, null); - } catch (Exception e) { - TelemetryManager.error("Exception Occured while Performing List Operation for Dial Codes : "+ e.getMessage(), e); - return getExceptionResponseEntity(e, apiId, null); - } - } - - public Promise searchDialCode() { - String apiId = "sunbird.dialcode.search"; - Request request = getRequest(); - try { - Map map = (Map) request.get(DialCodeEnum.search.name()); - List fieldsList = new ArrayList(); - if(request.get(DialCodeEnum.fields.name()) != null) { - try { - fieldsList = (List) request.get(DialCodeEnum.fields.name()); - } catch (ClassCastException ce) { - fieldsList.add(request.get(DialCodeEnum.fields.name()).toString()); - } - fieldsList.add("identifier"); - } - Response response = dialCodeManager.searchDialCode(request.getContext(), map, fieldsList); - return getResponseEntity(response, apiId, null); - } catch (Exception e) { - TelemetryManager - .error("Exception Occured while Performing Search Operation for Dial Codes : " + e.getMessage(), e); - return getExceptionResponseEntity(e, apiId, null); - } - } - - /** - * @return - */ - public Promise syncDialCode() { - String apiId = "sunbird.dialcode.sync"; - String channelId = request().getHeader("X-Channel-ID"); - String[] ids = request().queryString().get("identifier"); - List identifiers = Optional.ofNullable(Arrays.asList(ids)).orElse(new ArrayList<>()); - Request request = getRequest(); - try { - Map map = (Map) request.get("sync"); - Response response = dialCodeManager.syncDialCode(channelId, map, identifiers); - return getResponseEntity(response, apiId, null); - } catch (Exception e) { - TelemetryManager - .error("Exception Occured while Performing Sync Operation for Dial Codes : " + e.getMessage(), e); - return getExceptionResponseEntity(e, apiId, null); - } - } - - /** - * @param dialCodeId - * @return - */ - public Promise publishDialCode(String dialCodeId) { - String apiId = "sunbird.dialcode.publish"; - String channelId = request().getHeader("X-Channel-ID"); - try { - Response response = dialCodeManager.publishDialCode(dialCodeId, channelId); - return getResponseEntity(response, apiId, null); - } catch (Exception e) { - TelemetryManager.error("Exception Occured while Performing Publish Operation on Dial Code : "+ e.getMessage(), - e); - return getExceptionResponseEntity(e, apiId, null); - } - } - - /** - * Create Publisher. - * - * @return - */ - - public Promise createPublisher() { - - String apiId = "sunbird.publisher.create"; - String channelId = request().getHeader("X-Channel-ID"); - Request request = getRequest(); - try { - Map map = (Map) request.get(DialCodeEnum.publisher.name()); - Response response = dialCodeManager.createPublisher(map, channelId); - return getResponseEntity(response, apiId, null); - } catch (Exception e) { - TelemetryManager.error("Exception Occured while creating Publisher : " + e.getMessage(), e); - return getExceptionResponseEntity(e, apiId, null); - } - } - - /** - * Read Publisher Details - * - * @param publisherId - * - * @return - */ - public Promise readPublisher(String publisherId) { - String apiId = "sunbird.publisher.info"; - try { - Response response = dialCodeManager.readPublisher(publisherId); - return getResponseEntity(response, apiId, null); - } catch (Exception e) { - TelemetryManager.error("Exception Occured while reading Publisher details : " + e.getMessage(), e); - return getExceptionResponseEntity(e, apiId, null); - } - } - - /** - * Update Publisher Details - * - * @param publisherId - * @return - */ - public Promise updatePublisher(String publisherId) { - String apiId = "sunbird.publisher.update"; - String channelId = request().getHeader("X-Channel-ID"); - Request request = getRequest(); - try { - Map map = (Map) request.get("publisher"); - Response response = dialCodeManager.updatePublisher(publisherId, channelId, map); - return getResponseEntity(response, apiId, null); - } catch (Exception e) { - TelemetryManager.error("Exception Occured while updating Publisher : " + e.getMessage(), e); - return getExceptionResponseEntity(e, apiId, null); - } - } - - -} diff --git a/app/controllers/dialcode/DialcodeV4Controller.java b/app/controllers/dialcode/DialcodeV4Controller.java deleted file mode 100644 index 28c7f59..0000000 --- a/app/controllers/dialcode/DialcodeV4Controller.java +++ /dev/null @@ -1,54 +0,0 @@ -package controllers.dialcode; - -import commons.dto.Request; -import commons.dto.Response; -import controllers.BaseController; -import managers.DialcodeManager; -import play.libs.F.Promise; -import play.mvc.Result; -import telemetry.TelemetryManager; -import utils.DialCodeEnum; - -import java.util.*; - -public class DialcodeV4Controller extends BaseController { - - private DialcodeManager dialCodeManager = new DialcodeManager(); - - public Promise readDialCode(String dialCodeId) { - String apiId = "sunbird.dialcode.read"; - try { - Response response = dialCodeManager.readDialCodeV4(dialCodeId); - return getResponseEntity(response, apiId, null); - } catch (Exception e) { - TelemetryManager.error("Exception Occurred while reading Dial Code details : "+ e.getMessage(), e); - return getExceptionResponseEntity(e, apiId, null); - } - } - - public Promise updateDialCode(String dialCodeId) { - String apiId = "sunbird.dialcode.update"; - String channelId = request().getHeader("X-Channel-ID"); - Request request = getRequest(); - try { - Map map = (Map) request.get(DialCodeEnum.dialcode.name()); - Response response = dialCodeManager.updateDialCodeV4(dialCodeId, channelId, map); - return getResponseEntity(response, apiId, null); - } catch (Exception e) { - TelemetryManager.error("Exception Occurred while updating Dial Code : "+ e.getMessage(), e); - return getExceptionResponseEntity(e, apiId, null); - } - } - - public Promise readQRCodesBatchInfo(String processId) { - String apiId = "sunbird.dialcode.batch.read"; - try { - Response response = dialCodeManager.readQRCodesBatchInfo(processId); - return getResponseEntity(response, apiId, null); - } catch (Exception e) { - TelemetryManager.error("Exception Occurred while reading QR ZIP path : "+ e.getMessage(), e); - return getExceptionResponseEntity(e, apiId, null); - } - } - -} diff --git a/app/controllers/health/HealthCheckController.java b/app/controllers/health/HealthCheckController.java deleted file mode 100644 index aa37eb3..0000000 --- a/app/controllers/health/HealthCheckController.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * - * @author Rhea Fernandes - */ -package controllers.health; - -import commons.dto.Response; -import controllers.BaseController; -import managers.HealthCheckManager; -import play.libs.F.Promise; -import play.mvc.Result; -import telemetry.TelemetryManager; - -public class HealthCheckController extends BaseController { - private HealthCheckManager healthCheckManager = new HealthCheckManager(); - private String apiId = "sunbird.dialcode.health"; - - public Promise checkSystemHealth(){ - try { - Response response= healthCheckManager.getAllServiceHealth(); - return getResponseEntity(response, apiId, null); - }catch (Exception e){ - e.printStackTrace(); - TelemetryManager.error("System is Unhealthy, Restart needed",e); - return getExceptionResponseEntity(e, apiId, null); - } - } - - public Promise checkServiceHealth() { - Response response = healthCheckManager.getServiceHealth(); - return getResponseEntity(response, apiId, null); - } - -} diff --git a/app/filters/HealthCheckFilter.scala b/app/filters/HealthCheckFilter.scala deleted file mode 100644 index 05d61d0..0000000 --- a/app/filters/HealthCheckFilter.scala +++ /dev/null @@ -1,34 +0,0 @@ -/** - * - * @author Rhea Fernandes - */ -package filters; - -import commons.DialCodeErrorMessage -import commons.exception.{ResponseCode, ServiceUnavailableException} -import controllers.BaseController -import play.api.mvc._ - -import scala.concurrent.Future -import play.api.libs.concurrent.Execution.Implicits.defaultContext -import play.core.j.JavaHelpers - -class HealthCheckFilter extends Filter { - val baseController :BaseController = new BaseController(); - def apply(nextFilter: RequestHeader => Future[Result]) - (requestHeader: RequestHeader): Future[Result] = { - if (!requestHeader.path.contains("/health")) { - if (!managers.HealthCheckManager.health) { - val jContext = JavaHelpers.createJavaContext(requestHeader) - val jResult:play.mvc.Result =baseController.getServiceUnavailableResponseEntity(new ServiceUnavailableException(ResponseCode.SERVICE_UNAVAILABLE.code().toString,DialCodeErrorMessage.ERR_SERVICE_UNAVAILABLE),"sunbird.dialcode.exception",null) - Future{ - JavaHelpers.createResult(jContext,jResult); - } - } else { - nextFilter(requestHeader) - } - } else { - nextFilter(requestHeader) - } - } -} diff --git a/build/Dockerfile b/build/Dockerfile index 382c606..3f80a05 100644 --- a/build/Dockerfile +++ b/build/Dockerfile @@ -1,14 +1,13 @@ FROM --platform=linux/x86_64 eclipse-temurin:11.0.20.1_1-jdk-focal RUN apt-get update \ - && apt-get install unzip \ - && apt-get install curl \ + && apt-get install -y unzip curl \ && adduser --uid 1001 --home /home/sunbird/ --disabled-login sunbird \ && mkdir -p /home/sunbird \ && chown -R sunbird:sunbird /home/sunbird RUN chown -R sunbird:sunbird /home/sunbird USER sunbird -COPY ./target/sunbird-dial-service-1.0-SNAPSHOT-dist.zip /home/sunbird/ -RUN unzip /home/sunbird/sunbird-dial-service-1.0-SNAPSHOT-dist.zip -d /home/sunbird/ -RUN rm /home/sunbird/sunbird-dial-service-1.0-SNAPSHOT-dist.zip +COPY ./dial-service/target/dial-service-1.0-SNAPSHOT-dist.zip /home/sunbird/ +RUN unzip /home/sunbird/dial-service-1.0-SNAPSHOT-dist.zip -d /home/sunbird/ +RUN rm /home/sunbird/dial-service-1.0-SNAPSHOT-dist.zip WORKDIR /home/sunbird/ -CMD java -XX:+PrintFlagsFinal $JAVA_OPTIONS -cp '/home/sunbird/sunbird-dial-service-1.0-SNAPSHOT/lib/*' -Dconfig.file=/home/sunbird/sunbird-dial-service-1.0-SNAPSHOT/config/application.conf -Dlogger.file=/home/sunbird/sunbird-dial-service-1.0-SNAPSHOT/config/logback.xml play.core.server.ProdServerStart /home/sunbird/sunbird-dial-service-1.0-SNAPSHOT \ No newline at end of file +CMD java -XX:+PrintFlagsFinal $JAVA_OPTIONS -cp '/home/sunbird/dial-service-1.0-SNAPSHOT/lib/*' -Dconfig.file=/home/sunbird/dial-service-1.0-SNAPSHOT/config/application.conf -Dlogger.file=/home/sunbird/dial-service-1.0-SNAPSHOT/config/logback.xml play.core.server.ProdServerStart /home/sunbird/dial-service-1.0-SNAPSHOT \ No newline at end of file diff --git a/conf/logback.xml b/conf/logback.xml deleted file mode 100644 index 73529d6..0000000 --- a/conf/logback.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - %d %msg%n - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/conf/routes b/conf/routes deleted file mode 100644 index 1bc28e8..0000000 --- a/conf/routes +++ /dev/null @@ -1,18 +0,0 @@ -# Routes -# This file defines all application routes (Higher priority routes first) -# ~~~~ -GET /health @controllers.health.HealthCheckController.checkSystemHealth() -GET /service/health @controllers.health.HealthCheckController.checkServiceHealth() -POST /dialcode/v3/generate @controllers.dialcode.DialcodeV3Controller.generateDialCode() -GET /dialcode/v3/read/:id @controllers.dialcode.DialcodeV3Controller.readDialCode(id: String) -PATCH /dialcode/v3/update/:id @controllers.dialcode.DialcodeV3Controller.updateDialCode(id: String) -POST /dialcode/v3/list @controllers.dialcode.DialcodeV3Controller.listDialCode() -POST /dialcode/v3/search @controllers.dialcode.DialcodeV3Controller.searchDialCode() -POST /dialcode/v3/sync @controllers.dialcode.DialcodeV3Controller.syncDialCode() -POST /dialcode/v3/publish/:id @controllers.dialcode.DialcodeV3Controller.publishDialCode(id: String) -POST /dialcode/v3/publisher/create @controllers.dialcode.DialcodeV3Controller.createPublisher() -GET /dialcode/v3/publisher/read/:id @controllers.dialcode.DialcodeV3Controller.readPublisher(id: String) -PATCH /dialcode/v3/publisher/update/:id @controllers.dialcode.DialcodeV3Controller.updatePublisher(id: String) -PATCH /dialcode/v4/update/:id @controllers.dialcode.DialcodeV4Controller.updateDialCode(id: String) -GET /dialcode/v4/read/:id @controllers.dialcode.DialcodeV4Controller.readDialCode(id: String) -GET /dialcode/v4/batch/read/:processid @controllers.dialcode.DialcodeV4Controller.readQRCodesBatchInfo(processid: String) \ No newline at end of file diff --git a/dial-actors/pom.xml b/dial-actors/pom.xml new file mode 100644 index 0000000..e80e772 --- /dev/null +++ b/dial-actors/pom.xml @@ -0,0 +1,129 @@ + + + + org.sunbird + sunbird-dial-service + 1.0-SNAPSHOT + + 4.0.0 + dial-actors + + + 2.7.2 + 2.5.22 + 2.12 + + + + + org.sunbird + dial-core + 1.0-SNAPSHOT + + + org.scala-lang + scala-library + ${scala.version} + + + commons-io + commons-io + 2.6 + + + javax.inject + javax.inject + 1 + + + junit + junit + 3.8.1 + test + + + com.google.guava + guava + 22.0 + + + org.scalatest + scalatest_${scala.maj.version} + 3.1.2 + test + + + com.typesafe.akka + akka-testkit_2.12 + ${typesafe.akka.version} + test + + + + + src/main/scala + src/test/scala + + + net.alchim31.maven + scala-maven-plugin + 4.4.0 + + ${scala.version} + false + + + + scala-compile-first + process-resources + + add-source + compile + + + + scala-test-compile + process-test-resources + + testCompile + + + + + + org.scalatest + scalatest-maven-plugin + 2.0.0 + + + test + test + + test + + + + + + org.scoverage + scoverage-maven-plugin + ${scoverage.plugin.version} + + ${scala.version} + true + true + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + \ No newline at end of file diff --git a/dial-actors/src/main/scala/org/sunbird/actors/DialCodeActor.scala b/dial-actors/src/main/scala/org/sunbird/actors/DialCodeActor.scala new file mode 100644 index 0000000..6b79c2f --- /dev/null +++ b/dial-actors/src/main/scala/org/sunbird/actors/DialCodeActor.scala @@ -0,0 +1,182 @@ +package org.sunbird.actors + +import org.apache.commons.lang3.StringUtils + +import java.util +import javax.inject.Inject +import org.sunbird.actor.core.BaseActor +import org.sunbird.commons.dto.{Request, Response, ResponseHandler} +import org.sunbird.commons.exception.{ClientException, ResponseCode} +import org.sunbird.utils.Constants +import org.sunbird.managers.DialcodeManager + +import scala.concurrent.{ExecutionContext, Future} + +class DialCodeActor @Inject() extends BaseActor { + + implicit val ec: ExecutionContext = getContext().dispatcher + + override def onReceive(request: Request): Future[Response] = { + request.getOperation match { + case Constants.GENERATE_DIALCODE => generateDialCode(request) + case Constants.READ_DIALCODE => readDialCode(request) + case Constants.UPDATE_DIALCODE => updateDialCode(request) + case Constants.LIST_DIALCODE => listDialCode(request) + case Constants.SEARCH_DIALCODE => searchDialCode(request) + case Constants.PUBLISH_DIALCODE => publishDialCode(request) + case Constants.CREATE_PUBLISHER => createPublisher(request) + case Constants.READ_PUBLISHER => readPublisher(request) + case Constants.UPDATE_PUBLISHER => updatePublisher(request) + case Constants.READ_DIALCODE_V4 => readDialCodeV4(request) + case Constants.UPDATE_DIALCODE_V4 => updateDialCodeV4(request) + case Constants.READ_QR_CODES_BATCH_INFO => readQRCodesBatchInfo(request) + case _ => ERROR(request.getOperation) + } + } + private val dialManager = new DialcodeManager + + @throws[Exception] + private def generateDialCode(request: Request): Future[Response] = { + val response = dialManager.generateDialCode(request.getRequest, request.getRequest.getOrDefault(Constants.CHANNEL_ID, "").asInstanceOf[String]) + if (ResponseHandler.checkError(response)) { + throw new ClientException(response.getParams.getErr, response.getParams.getErrmsg) + } + else { + Future { ResponseHandler.OK().putAll(response.getResult) } + } + } + + @throws[Exception] + private def readDialCode(request: Request): Future[Response] = { + val response = dialManager.readDialCode(request.getRequest.getOrDefault(Constants.IDENTIFIER, "").asInstanceOf[String]) + if (ResponseHandler.checkError(response)) { + throw new ClientException(response.getParams.getErr, response.getParams.getErrmsg) + } + else { + Future { ResponseHandler.OK().putAll(response.getResult) } + } + } + @throws[Exception] + private def updateDialCode(request: Request): Future[Response] = { + val response = dialManager.updateDialCode(request.getRequest.getOrDefault(Constants.IDENTIFIER, "").asInstanceOf[String], + request.getRequest.getOrDefault(Constants.CHANNEL_ID, "").asInstanceOf[String], request.getRequest) + if (ResponseHandler.checkError(response)) { + throw new ClientException(response.getParams.getErr, response.getParams.getErrmsg) + } + else { + Future { ResponseHandler.OK().putAll(response.getResult) } + } + } + + @throws[Exception] + private def listDialCode(request: Request): Future[Response] = { + val response = dialManager.listDialCode(request.getRequest, request.getRequest.getOrDefault("search", new java.util.HashMap()).asInstanceOf[util.Map[String, AnyRef]]) + if (ResponseHandler.checkError(response)) { + throw new ClientException(response.getParams.getErr, response.getParams.getErrmsg) + } + else { + Future { ResponseHandler.OK().putAll(response.getResult) } + } + } + + @throws[Exception] + private def searchDialCode(request: Request): Future[Response] = { + var fieldsList = new util.ArrayList[String]().asInstanceOf[util.List[String]] + if(request.getRequest.get("fields") != null){ + try { + fieldsList = request.getRequest.get("fields").asInstanceOf[util.List[String]] + } + catch { + case _: ClassCastException => fieldsList.add(request.getRequest.get("fields").asInstanceOf[String]) + } + fieldsList.add("identifier") + } + val response = dialManager.searchDialCode(request.getRequest, request.getRequest.getOrDefault("search", new java.util.HashMap()).asInstanceOf[util.Map[String, AnyRef]], fieldsList) + if (ResponseHandler.checkError(response)) { + throw new ClientException(response.getParams.getErr, response.getParams.getErrmsg) + } + else { + Future { ResponseHandler.OK().putAll(response.getResult) } + } + } + @throws[Exception] + private def publishDialCode(request: Request): Future[Response] = { + val response = dialManager.publishDialCode(request.getRequest.getOrDefault(Constants.IDENTIFIER, "").asInstanceOf[String], + request.getRequest.getOrDefault(Constants.CHANNEL_ID, "").asInstanceOf[String]) + if (ResponseHandler.checkError(response)) { + throw new ClientException(response.getParams.getErr, response.getParams.getErrmsg) + } + else { + Future { ResponseHandler.OK().putAll(response.getResult) } + } + } + + @throws[Exception] + private def createPublisher(request: Request): Future[Response] = { + val response = dialManager.createPublisher(request.getRequest, request.getRequest.getOrDefault(Constants.CHANNEL_ID, "").asInstanceOf[String]) + if (ResponseHandler.checkError(response)) { + throw new ClientException(response.getParams.getErr, response.getParams.getErrmsg) + } + else Future { + ResponseHandler.OK().putAll(response.getResult) + + } + } + + @throws[Exception] + private def readPublisher(request: Request): Future[Response] = { + val response = dialManager.readPublisher(request.getRequest.getOrDefault(Constants.IDENTIFIER, "").asInstanceOf[String]) + if (ResponseHandler.checkError(response)) { + throw new ClientException(response.getParams.getErr, response.getParams.getErrmsg) + } + else { + Future { ResponseHandler.OK().putAll(response.getResult) } + } + } + + @throws[Exception] + private def updatePublisher(request: Request): Future[Response] = { + val response = dialManager.updatePublisher(request.getRequest.getOrDefault(Constants.IDENTIFIER, "").asInstanceOf[String], + request.getRequest.getOrDefault(Constants.CHANNEL_ID, "").asInstanceOf[String], request.getRequest.getOrDefault(Constants.PUBLISHER, "").asInstanceOf[util.Map[String, AnyRef]] ) + if (ResponseHandler.checkError(response)) { + throw new ClientException(response.getParams.getErr, response.getParams.getErrmsg) + } + else { + Future { ResponseHandler.OK().putAll(response.getResult) } + } + } + + @throws[Exception] + private def readDialCodeV4(request: Request): Future[Response] = { + val response = dialManager.readDialCodeV4(request.getRequest.getOrDefault(Constants.IDENTIFIER, "").asInstanceOf[String]) + if (ResponseHandler.checkError(response)) { + throw new ClientException(response.getParams.getErr, response.getParams.getErrmsg) + } + else { + Future { ResponseHandler.OK().putAll(response.getResult) } + } + } + + @throws[Exception] + private def updateDialCodeV4(request: Request): Future[Response] = { + val response = dialManager.updateDialCodeV4(request.getRequest.getOrDefault(Constants.IDENTIFIER, "").asInstanceOf[String], + request.getRequest.getOrDefault(Constants.CHANNEL_ID, "").asInstanceOf[String], request.getRequest) + if (ResponseHandler.checkError(response)) { + throw new ClientException(response.getParams.getErr, response.getParams.getErrmsg) + } + else { + Future { ResponseHandler.OK().putAll(response.getResult) } + } + } + + @throws[Exception] + private def readQRCodesBatchInfo(request: Request): Future[Response] = { + val response = dialManager.readQRCodesBatchInfo(request.getRequest.getOrDefault(Constants.PROCESS_ID, "").asInstanceOf[String]) + if (ResponseHandler.checkError(response)) { + throw new ClientException(response.getParams.getErr, response.getParams.getErrmsg) + } + else { + Future { ResponseHandler.OK().putAll(response.getResult) } + } + } +} \ No newline at end of file diff --git a/dial-actors/src/main/scala/org/sunbird/actors/HealthActor.scala b/dial-actors/src/main/scala/org/sunbird/actors/HealthActor.scala new file mode 100644 index 0000000..940929e --- /dev/null +++ b/dial-actors/src/main/scala/org/sunbird/actors/HealthActor.scala @@ -0,0 +1,20 @@ +package org.sunbird.actors + +import javax.inject.{Inject, Named} +import scala.concurrent.{ExecutionContext, Future} +import org.sunbird.actor.core.BaseActor +import org.sunbird.commons.dto.{Request, Response} +import org.sunbird.managers.HealthCheckManager + +@Named("healthActor") +class HealthActor @Inject() extends BaseActor { + + implicit val ec: ExecutionContext = getContext().dispatcher + + @throws[Throwable] + override def onReceive(request: Request): Future[Response] = { + Future { + new HealthCheckManager().getAllServiceHealth + } + } +} diff --git a/dial-core/pom.xml b/dial-core/pom.xml new file mode 100644 index 0000000..155d2e5 --- /dev/null +++ b/dial-core/pom.xml @@ -0,0 +1,271 @@ + + + 4.0.0 + + org.sunbird + sunbird-dial-service + 1.0-SNAPSHOT + + + dial-core + + + 2.7.2 + 1.0.0-rc5 + 2.5.22 + 2.12.11 + 2.12 + 2.13.5 + UTF-8 + 1.4.1 + 1.0.0 + + + + + typesafe-releases-plugins + https://repo.typesafe.com/typesafe/releases/ + + false + + + + + + + com.typesafe + config + 1.3.0 + + + ch.qos.logback + logback-classic + 1.3.12 + + + ch.qos.logback + logback-core + 1.3.12 + + + org.scalaz.stream + scalaz-stream_${scala.maj.version} + 0.8.6a + + + org.reflections + reflections + 0.9.11 + + + com.typesafe.play + play-specs2_${scala.maj.version} + ${play2.version} + + + com.fasterxml.jackson.core + jackson-databind + + + io.netty + netty-transport-native-epoll + + + test + + + org.scala-lang + scala-library + ${scala.version} + + + com.typesafe.akka + akka-actor_${scala.maj.version} + ${typesafe.akka.version} + + + + org.apache.httpcomponents + httpclient + 4.5.1 + + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + com.typesafe.akka + akka-slf4j_${scala.maj.version} + ${typesafe.akka.version} + + + + com.google.guava + guava + 22.0 + + + com.datastax.cassandra + cassandra-driver-core + 3.7.0 + + + com.google.guava + guava + + + io.netty + netty-codec + + + + + io.netty + netty-codec + 4.1.68.Final + + + org.cassandraunit + cassandra-unit + 3.11.2.0 + test + + + com.google.guava + guava + + + + + com.datastax.cassandra + cassandra-driver-mapping + 3.7.0 + + + redis.clients + jedis + 2.6.2 + + + org.elasticsearch.client + elasticsearch-rest-high-level-client + + + com.fasterxml.jackson.dataformat + jackson-dataformat-cbor + + + 7.17.13 + + + com.fasterxml.jackson.dataformat + jackson-dataformat-cbor + ${jackson.version} + + + com.google.code.gson + gson + 2.8.9 + + + commons-collections + commons-collections + 3.2.2 + compile + + + com.github.danielwegener + logback-kafka-appender + + + org.xerial.snappy + snappy-java + + + 0.2.0-RC2 + + + org.apache.kafka + kafka-clients + + + org.xerial.snappy + snappy-java + + + 1.1.0 + + + org.xerial.snappy + snappy-java + 1.1.10.4 + + + + org.glassfish + jakarta.json + 2.0.1 + + + com.apicatalog + titanium-json-ld + 1.2.0 + + + commons-io + commons-io + 2.6 + + + org.leadpony.justify + justify + 3.1.0 + + + org.apache.commons + commons-lang3 + 3.3.2 + + + + + src/main/java + src/test/java + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 11 + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M4 + + + **/*Spec.java + **/*Test.java + + + + + + + \ No newline at end of file diff --git a/dial-core/src/main/java/org/sunbird/actor/core/BaseActor.java b/dial-core/src/main/java/org/sunbird/actor/core/BaseActor.java new file mode 100644 index 0000000..a3d42ed --- /dev/null +++ b/dial-core/src/main/java/org/sunbird/actor/core/BaseActor.java @@ -0,0 +1,99 @@ +package org.sunbird.actor.core; + +import akka.actor.AbstractActor; +import akka.actor.ActorRef; +import akka.dispatch.Futures; +import akka.dispatch.Recover; +import akka.pattern.Patterns; +import org.sunbird.commons.dto.Request; +import org.sunbird.commons.dto.Response; +import org.sunbird.commons.dto.ResponseParams; +import org.sunbird.commons.exception.ClientException; +import org.sunbird.commons.exception.MiddlewareException; +import org.sunbird.commons.exception.ResourceNotFoundException; +import org.sunbird.commons.exception.ResponseCode; +import org.sunbird.commons.exception.ServerException; +import scala.Function1; +import scala.concurrent.Future; + +import java.util.Arrays; +import java.util.List; + +public abstract class BaseActor extends AbstractActor { + public List preSignedObjTypes = Arrays.asList("assets", "artifact", "hierarchy"); + + public abstract Future onReceive(Request request) throws Throwable; + + private Future internalOnReceive(Request request) { + try { + return onReceive(request).recoverWith(new Recover>() { + @Override + public Future recover(Throwable failure) { + return ERROR(request.getOperation(), failure); + } + }, getContext().dispatcher()); + } catch (Throwable e) { + return ERROR(request.getOperation(), e); + } + } + + @Override + public Receive createReceive() { + return receiveBuilder().match(Request.class, message -> { + Patterns.pipe(internalOnReceive(message), getContext().dispatcher()).to(sender()); + }).build(); + } + + protected Future ERROR(String operation, Throwable exception) { + return Futures.successful(getErrorResponse(exception)); + } + + public Future ERROR(String operation) { + Response response = getErrorResponse(new ClientException(ResponseCode.CLIENT_ERROR.name(), "Invalid operation provided in request to process: " + operation)); + return Futures.successful(response); + } + + private Response getErrorResponse(Throwable e) { + Response response = new Response(); + ResponseParams params = new ResponseParams(); + params.setStatus(ResponseParams.StatusType.failed.name()); + if (e instanceof MiddlewareException) { + MiddlewareException mwException = (MiddlewareException) e; + params.setErr(mwException.getErrCode()); + response.put("messages", mwException.getMessages()); + } else { + e.printStackTrace(); + params.setErr("ERR_SYSTEM_EXCEPTION"); + } + System.out.println("Exception occurred - class :" + e.getClass().getName() + " with message :" + e.getMessage()); + params.setErrmsg(setErrMessage(e)); + response.setParams(params); + setResponseCode(response, e); + return response; + } + + private String setErrMessage(Throwable e) { + if (e instanceof MiddlewareException) { + return e.getMessage(); + } else { + return "Something went wrong in server while processing the request"; + } + } + + private void setResponseCode(Response res, Throwable e) { + if (e instanceof ClientException) { + res.setResponseCode(ResponseCode.CLIENT_ERROR); + } else if (e instanceof ServerException) { + res.setResponseCode(ResponseCode.SERVER_ERROR); + } else if (e instanceof ResourceNotFoundException) { + res.setResponseCode(ResponseCode.RESOURCE_NOT_FOUND); + } else { + res.setResponseCode(ResponseCode.SERVER_ERROR); + } + } + + public void OK(Response response, ActorRef actor) { + sender().tell(response, actor); + } + +} diff --git a/app/commons/AppConfig.java b/dial-core/src/main/java/org/sunbird/commons/AppConfig.java similarity index 97% rename from app/commons/AppConfig.java rename to dial-core/src/main/java/org/sunbird/commons/AppConfig.java index 7b23604..1fa4647 100644 --- a/app/commons/AppConfig.java +++ b/dial-core/src/main/java/org/sunbird/commons/AppConfig.java @@ -1,4 +1,4 @@ -package commons; +package org.sunbird.commons; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; diff --git a/app/commons/CustomProblemHandler.java b/dial-core/src/main/java/org/sunbird/commons/CustomProblemHandler.java similarity index 99% rename from app/commons/CustomProblemHandler.java rename to dial-core/src/main/java/org/sunbird/commons/CustomProblemHandler.java index 6111aac..39c04bc 100644 --- a/app/commons/CustomProblemHandler.java +++ b/dial-core/src/main/java/org/sunbird/commons/CustomProblemHandler.java @@ -1,4 +1,4 @@ -package commons; +package org.sunbird.commons; import org.apache.commons.lang3.StringUtils; import org.leadpony.justify.api.Problem; diff --git a/app/commons/DialCodeErrorCodes.java b/dial-core/src/main/java/org/sunbird/commons/DialCodeErrorCodes.java similarity index 98% rename from app/commons/DialCodeErrorCodes.java rename to dial-core/src/main/java/org/sunbird/commons/DialCodeErrorCodes.java index a80e5b9..e6f4861 100644 --- a/app/commons/DialCodeErrorCodes.java +++ b/dial-core/src/main/java/org/sunbird/commons/DialCodeErrorCodes.java @@ -1,7 +1,7 @@ /** * */ -package commons; +package org.sunbird.commons; /** * DialCodeErrorCodes will hold all Error Codes Used in DIAL Code CRUD Operation diff --git a/app/commons/DialCodeErrorMessage.java b/dial-core/src/main/java/org/sunbird/commons/DialCodeErrorMessage.java similarity index 98% rename from app/commons/DialCodeErrorMessage.java rename to dial-core/src/main/java/org/sunbird/commons/DialCodeErrorMessage.java index 48a17b7..e14af37 100644 --- a/app/commons/DialCodeErrorMessage.java +++ b/dial-core/src/main/java/org/sunbird/commons/DialCodeErrorMessage.java @@ -1,7 +1,7 @@ /** * */ -package commons; +package org.sunbird.commons; /** * @author gauraw diff --git a/app/commons/JedisFactory.java b/dial-core/src/main/java/org/sunbird/commons/JedisFactory.java similarity index 92% rename from app/commons/JedisFactory.java rename to dial-core/src/main/java/org/sunbird/commons/JedisFactory.java index aa81439..67bb547 100644 --- a/app/commons/JedisFactory.java +++ b/dial-core/src/main/java/org/sunbird/commons/JedisFactory.java @@ -1,10 +1,10 @@ -package commons; +package org.sunbird.commons; -import commons.exception.ServerException; +import org.sunbird.commons.exception.ServerException; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; -import utils.DialCodeEnum; +import org.sunbird.utils.DialCodeEnum; public class JedisFactory { diff --git a/app/commons/JsonUtils.java b/dial-core/src/main/java/org/sunbird/commons/JsonUtils.java similarity index 98% rename from app/commons/JsonUtils.java rename to dial-core/src/main/java/org/sunbird/commons/JsonUtils.java index 9561330..8517ab5 100644 --- a/app/commons/JsonUtils.java +++ b/dial-core/src/main/java/org/sunbird/commons/JsonUtils.java @@ -1,4 +1,4 @@ -package commons; +package org.sunbird.commons; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationFeature; diff --git a/app/commons/SchemaCacheLoader.java b/dial-core/src/main/java/org/sunbird/commons/SchemaCacheLoader.java similarity index 98% rename from app/commons/SchemaCacheLoader.java rename to dial-core/src/main/java/org/sunbird/commons/SchemaCacheLoader.java index bb3628f..bf0950a 100644 --- a/app/commons/SchemaCacheLoader.java +++ b/dial-core/src/main/java/org/sunbird/commons/SchemaCacheLoader.java @@ -1,4 +1,4 @@ -package commons; +package org.sunbird.commons; import java.io.File; import java.net.URL; diff --git a/app/commons/dto/ExecutionContext.java b/dial-core/src/main/java/org/sunbird/commons/dto/ExecutionContext.java similarity index 99% rename from app/commons/dto/ExecutionContext.java rename to dial-core/src/main/java/org/sunbird/commons/dto/ExecutionContext.java index 321f7e0..970c706 100644 --- a/app/commons/dto/ExecutionContext.java +++ b/dial-core/src/main/java/org/sunbird/commons/dto/ExecutionContext.java @@ -1,4 +1,4 @@ -package commons.dto; +package org.sunbird.commons.dto; import java.util.HashMap; import java.util.Map; diff --git a/app/commons/dto/HeaderParam.java b/dial-core/src/main/java/org/sunbird/commons/dto/HeaderParam.java similarity index 95% rename from app/commons/dto/HeaderParam.java rename to dial-core/src/main/java/org/sunbird/commons/dto/HeaderParam.java index 8f8d60b..d2f1b87 100644 --- a/app/commons/dto/HeaderParam.java +++ b/dial-core/src/main/java/org/sunbird/commons/dto/HeaderParam.java @@ -6,7 +6,7 @@ * by trade secret or copyright law. Any unauthorized use of this code without prior approval * from Canopus Consulting is prohibited. */ -package commons.dto; +package org.sunbird.commons.dto; /** * The keys of the Execution Context Values. diff --git a/app/commons/dto/Property.java b/dial-core/src/main/java/org/sunbird/commons/dto/Property.java similarity index 97% rename from app/commons/dto/Property.java rename to dial-core/src/main/java/org/sunbird/commons/dto/Property.java index 2689e79..c83d49b 100644 --- a/app/commons/dto/Property.java +++ b/dial-core/src/main/java/org/sunbird/commons/dto/Property.java @@ -1,4 +1,4 @@ -package commons.dto; +package org.sunbird.commons.dto; import java.io.Serializable; import java.util.Date; diff --git a/app/commons/dto/Request.java b/dial-core/src/main/java/org/sunbird/commons/dto/Request.java similarity index 89% rename from app/commons/dto/Request.java rename to dial-core/src/main/java/org/sunbird/commons/dto/Request.java index 7d7c790..e9b2317 100644 --- a/app/commons/dto/Request.java +++ b/dial-core/src/main/java/org/sunbird/commons/dto/Request.java @@ -1,4 +1,4 @@ -package commons.dto; +package org.sunbird.commons.dto; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import org.apache.commons.lang3.StringUtils; @@ -29,6 +29,7 @@ public class Request implements Serializable { private String managerName; private String operation; private String request_id; + private String objectType; { // Set the context here. @@ -66,7 +67,13 @@ public Request() { this.params.setMsgid(request_id); } - + public Request(Map context, Map request, String operation, String objectType) { + this.context = context; + this.request = request; + this.operation = operation; + this.objectType = objectType; + } + public Request(Request request) { this.params = request.getParams(); if (null == this.params) @@ -180,4 +187,7 @@ public void setParams(RequestParams params) { } + public void setObjectType(String objectType) { + this.objectType = objectType; + } } diff --git a/app/commons/dto/RequestParams.java b/dial-core/src/main/java/org/sunbird/commons/dto/RequestParams.java similarity index 96% rename from app/commons/dto/RequestParams.java rename to dial-core/src/main/java/org/sunbird/commons/dto/RequestParams.java index a77c911..7c0c993 100644 --- a/app/commons/dto/RequestParams.java +++ b/dial-core/src/main/java/org/sunbird/commons/dto/RequestParams.java @@ -1,4 +1,4 @@ -package commons.dto; +package org.sunbird.commons.dto; import java.io.Serializable; diff --git a/app/commons/dto/Response.java b/dial-core/src/main/java/org/sunbird/commons/dto/Response.java similarity index 83% rename from app/commons/dto/Response.java rename to dial-core/src/main/java/org/sunbird/commons/dto/Response.java index 354e85f..ac94519 100644 --- a/app/commons/dto/Response.java +++ b/dial-core/src/main/java/org/sunbird/commons/dto/Response.java @@ -1,6 +1,6 @@ -package commons.dto; +package org.sunbird.commons.dto; -import commons.exception.ResponseCode; +import org.sunbird.commons.exception.ResponseCode; import java.io.Serializable; import java.util.HashMap; @@ -61,6 +61,11 @@ public void put(String key, Object vo) { result.put(key, vo); } + public Response putAll(Map resultMap) { + result.putAll(resultMap); + return this; + } + public ResponseParams getParams() { return params; } diff --git a/dial-core/src/main/java/org/sunbird/commons/dto/ResponseHandler.java b/dial-core/src/main/java/org/sunbird/commons/dto/ResponseHandler.java new file mode 100644 index 0000000..208bb7d --- /dev/null +++ b/dial-core/src/main/java/org/sunbird/commons/dto/ResponseHandler.java @@ -0,0 +1,184 @@ +package org.sunbird.commons.dto; + +import org.apache.commons.lang3.StringUtils; +import org.sunbird.commons.exception.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class ResponseHandler { + + public static Response handleResponses(List responses) { + ResponseCode responseCode = getResponseCode(responses); + Response response; + if (StringUtils.equals(ResponseCode.OK.name(), responseCode.name())) + response = handleSuccessResponse(responseCode, responses); + else + response = handleErrorResponse(responseCode, responses); + return response; + } + + private static Response handleErrorResponse(ResponseCode priorityResponseCode, List responses) { + Response finalResponse = new Response(); + ResponseParams responseParams = new ResponseParams(); + responseParams.setStatus(ResponseParams.StatusType.failed.name()); + responseParams.setErr(priorityResponseCode.name()); + responseParams.setErrmsg(priorityResponseCode.name()); + finalResponse.setResponseCode(priorityResponseCode); + finalResponse.setParams(responseParams); + handleUnsuccessfulMessages(finalResponse, responses); + handleSuccessfulMessages(finalResponse, responses); + return finalResponse; + } + + + private static Response handleSuccessResponse(ResponseCode priorityResponseCode, List responses) { + Response finalResponse = new Response(); + ResponseParams responseParams = new ResponseParams(); + responseParams.setStatus(ResponseParams.StatusType.successful.name()); + finalResponse.setResponseCode(priorityResponseCode); + finalResponse.setParams(responseParams); + handleSuccessfulMessages(finalResponse, responses); + return finalResponse; + } + + private static ResponseCode getResponseCode(List responses) { + List responseCodes = responses.stream().map(response -> response.getResponseCode()).collect(Collectors.toList()); + if (responseCodes.contains(ResponseCode.SERVER_ERROR)) + return ResponseCode.SERVER_ERROR; + if (responseCodes.contains(ResponseCode.PARTIAL_SUCCESS)) + return ResponseCode.PARTIAL_SUCCESS; + if (responseCodes.contains(ResponseCode.CLIENT_ERROR)) + return ResponseCode.CLIENT_ERROR; + if (responseCodes.contains(ResponseCode.RESOURCE_NOT_FOUND)) + return ResponseCode.RESOURCE_NOT_FOUND; + return ResponseCode.OK; + } + + private static Response handleSuccessfulMessages(Response finalResponse, List responses) { + finalResponse.putAll(responses.stream() + .filter(response -> response.getResponseCode() == ResponseCode.OK) + .flatMap(response -> response.getResult().entrySet().stream()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, + (val1, val2) -> { + if (val1 instanceof List) { + return new ArrayList() {{ + addAll((List) val1); + add(val2); + }}; + } else + return (Arrays.asList(val1, val2)); + }))); + return finalResponse; + } + + private static Response handleUnsuccessfulMessages(Response finalResponse, List responses) { + finalResponse.putAll(responses.stream() + .filter(response -> response.getResponseCode() != ResponseCode.OK) + .collect(Collectors.toMap(response -> response.getResponseCode().name(), + response -> response.getParams().getErrmsg(), + (val1, val2) -> { + if (val1 instanceof List) { + return new ArrayList() {{ + addAll((List) val1); + add(val2); + }}; + } else + return (Arrays.asList(val1, val2)); + }))); + return finalResponse; + } + + public static Response OK() { + Response response = new Response(); + response.setParams(getSucessStatus()); + return response; + } + + private static ResponseParams getSucessStatus() { + ResponseParams params = new ResponseParams(); + params.setStatus(ResponseParams.StatusType.successful.name()); + return params; + } + + public static Response ERROR(ResponseCode responseCode, String errorCode, String errorMessage) { + Response response = new Response(); + response.setParams(getErrorStatus(errorCode, errorMessage)); + response.setResponseCode(responseCode); + return response; + } + + private static ResponseParams getErrorStatus(String errorCode, String errorMessage) { + ResponseParams params = new ResponseParams(); + params.setErr(errorCode); + params.setStatus(ResponseParams.StatusType.failed.name()); + params.setErrmsg(errorMessage); + return params; + } + + public static boolean checkError(Response response) { + ResponseParams params = response.getParams(); + if (null != params) { + if (StringUtils.equals(ResponseParams.StatusType.failed.name(), params.getStatus())) { + return true; + } + } + return false; + } + + public static String getErrorMessage(Response response) { + ResponseParams params = response.getParams(); + if (null != params) { + return params.getErrmsg(); + } + return null; + } + + public static Response getErrorResponse(Throwable e) { + Response response = new Response(); + ResponseParams params = new ResponseParams(); + params.setStatus(ResponseParams.StatusType.failed.name()); + if (e instanceof MiddlewareException) { + MiddlewareException mwException = (MiddlewareException) e; + params.setErr(mwException.getErrCode()); + response.put("messages", mwException.getMessages()); + } else { + e.printStackTrace(); + params.setErr("ERR_SYSTEM_EXCEPTION"); + } + System.out.println("Exception occurred - class :" + e.getClass().getName() + " with message :" + e.getMessage()); + params.setErrmsg(setErrMessage(e)); + response.setParams(params); + setResponseCode(response, e); + return response; + } + + public static Boolean isResponseNotFoundError(Response response) { + ResponseParams params = response.getParams(); + return (null != params && StringUtils.equals(ResponseParams.StatusType.failed.name(), params.getStatus()) + && StringUtils.equals(response.getResponseCode().name(),ResponseCode.RESOURCE_NOT_FOUND.name())); + } + + private static String setErrMessage(Throwable e) { + if (e instanceof MiddlewareException) { + return e.getMessage(); + } else { + return "Something went wrong in server while processing the request"; + } + } + + private static void setResponseCode(Response res, Throwable e) { + if (e instanceof ClientException) { + res.setResponseCode(ResponseCode.CLIENT_ERROR); + } else if (e instanceof ServerException) { + res.setResponseCode(ResponseCode.SERVER_ERROR); + } else if (e instanceof ResourceNotFoundException) { + res.setResponseCode(ResponseCode.RESOURCE_NOT_FOUND); + } else { + res.setResponseCode(ResponseCode.SERVER_ERROR); + } + } +} \ No newline at end of file diff --git a/app/commons/dto/ResponseParams.java b/dial-core/src/main/java/org/sunbird/commons/dto/ResponseParams.java similarity index 98% rename from app/commons/dto/ResponseParams.java rename to dial-core/src/main/java/org/sunbird/commons/dto/ResponseParams.java index c88492e..80742c2 100644 --- a/app/commons/dto/ResponseParams.java +++ b/dial-core/src/main/java/org/sunbird/commons/dto/ResponseParams.java @@ -1,4 +1,4 @@ -package commons.dto; +package org.sunbird.commons.dto; import java.io.Serializable; diff --git a/app/commons/exception/ClientException.java b/dial-core/src/main/java/org/sunbird/commons/exception/ClientException.java similarity index 94% rename from app/commons/exception/ClientException.java rename to dial-core/src/main/java/org/sunbird/commons/exception/ClientException.java index 7db3f55..a493316 100644 --- a/app/commons/exception/ClientException.java +++ b/dial-core/src/main/java/org/sunbird/commons/exception/ClientException.java @@ -1,4 +1,4 @@ -package commons.exception; +package org.sunbird.commons.exception; public class ClientException extends MiddlewareException { diff --git a/app/commons/exception/MiddlewareException.java b/dial-core/src/main/java/org/sunbird/commons/exception/MiddlewareException.java similarity index 87% rename from app/commons/exception/MiddlewareException.java rename to dial-core/src/main/java/org/sunbird/commons/exception/MiddlewareException.java index 55789f1..280c0fe 100644 --- a/app/commons/exception/MiddlewareException.java +++ b/dial-core/src/main/java/org/sunbird/commons/exception/MiddlewareException.java @@ -1,6 +1,7 @@ -package commons.exception; +package org.sunbird.commons.exception; import java.text.MessageFormat; +import java.util.List; /** * Base class for middleware exceptions. Provides the support for returning error @@ -17,7 +18,7 @@ public class MiddlewareException extends RuntimeException { */ private static final long serialVersionUID = -3866941321932941766L; private String errCode; - + private List messages; /** * Initializes the middleware exception with a given error code and message. * @param errCode Error code from the service @@ -29,7 +30,7 @@ public MiddlewareException(String errCode, String message) { } /** - * Initializes the middleware exception with a template message + * Initializes the middleware exception with a template message * @param errCode Error code from the service * @param message Error message, which conforms to the java.text.MessageFormat spec * @param params Parameters substituted in the message string @@ -39,6 +40,12 @@ public MiddlewareException(String errCode, String message, Object... params) { this.errCode = errCode; } + public MiddlewareException(String errCode, String commonMessage, List messages) { + super(commonMessage); + this.errCode = errCode; + this.messages = messages; + } + /** * Initializes the middleware exception with a template message * @param errCode Error code from the service @@ -68,11 +75,12 @@ public MiddlewareException(String errCode, String message, Throwable root, Objec public String getErrCode() { return errCode; } - public ResponseCode getResponseCode() { return ResponseCode.SERVER_ERROR; } - + public List getMessages() { + return messages; + } @Override public String toString() { StringBuilder builder = new StringBuilder(); diff --git a/app/commons/exception/ResourceNotFoundException.java b/dial-core/src/main/java/org/sunbird/commons/exception/ResourceNotFoundException.java similarity index 96% rename from app/commons/exception/ResourceNotFoundException.java rename to dial-core/src/main/java/org/sunbird/commons/exception/ResourceNotFoundException.java index 6cbdd14..cbfefa4 100644 --- a/app/commons/exception/ResourceNotFoundException.java +++ b/dial-core/src/main/java/org/sunbird/commons/exception/ResourceNotFoundException.java @@ -1,4 +1,4 @@ -package commons.exception; +package org.sunbird.commons.exception; public class ResourceNotFoundException extends MiddlewareException { diff --git a/app/commons/exception/ResponseCode.java b/dial-core/src/main/java/org/sunbird/commons/exception/ResponseCode.java similarity index 95% rename from app/commons/exception/ResponseCode.java rename to dial-core/src/main/java/org/sunbird/commons/exception/ResponseCode.java index bdc9caa..562e0b7 100644 --- a/app/commons/exception/ResponseCode.java +++ b/dial-core/src/main/java/org/sunbird/commons/exception/ResponseCode.java @@ -1,4 +1,4 @@ -package commons.exception; +package org.sunbird.commons.exception; public enum ResponseCode { diff --git a/app/commons/exception/ServerException.java b/dial-core/src/main/java/org/sunbird/commons/exception/ServerException.java similarity index 94% rename from app/commons/exception/ServerException.java rename to dial-core/src/main/java/org/sunbird/commons/exception/ServerException.java index 76c8665..4f8a27b 100644 --- a/app/commons/exception/ServerException.java +++ b/dial-core/src/main/java/org/sunbird/commons/exception/ServerException.java @@ -1,4 +1,4 @@ -package commons.exception; +package org.sunbird.commons.exception; public class ServerException extends MiddlewareException { diff --git a/app/commons/exception/ServiceUnavailableException.java b/dial-core/src/main/java/org/sunbird/commons/exception/ServiceUnavailableException.java similarity index 95% rename from app/commons/exception/ServiceUnavailableException.java rename to dial-core/src/main/java/org/sunbird/commons/exception/ServiceUnavailableException.java index ef1614e..bc2b1dc 100644 --- a/app/commons/exception/ServiceUnavailableException.java +++ b/dial-core/src/main/java/org/sunbird/commons/exception/ServiceUnavailableException.java @@ -2,7 +2,7 @@ * * @author Rhea Fernandes */ -package commons.exception; +package org.sunbird.commons.exception; public class ServiceUnavailableException extends MiddlewareException { private static final long serialVersionUID = 4443445476165211068L; diff --git a/app/dbstore/CassandraStore.java b/dial-core/src/main/java/org/sunbird/dbstore/CassandraStore.java similarity index 96% rename from app/dbstore/CassandraStore.java rename to dial-core/src/main/java/org/sunbird/dbstore/CassandraStore.java index 4e03f7a..408ab18 100644 --- a/app/dbstore/CassandraStore.java +++ b/dial-core/src/main/java/org/sunbird/dbstore/CassandraStore.java @@ -1,7 +1,7 @@ /** * */ -package dbstore; +package org.sunbird.dbstore; import com.datastax.driver.core.BoundStatement; import com.datastax.driver.core.PreparedStatement; @@ -14,17 +14,17 @@ import com.datastax.driver.core.querybuilder.Select; import com.datastax.driver.core.querybuilder.Select.Where; import com.fasterxml.jackson.databind.ObjectMapper; -import commons.AppConfig; -import commons.dto.ExecutionContext; -import commons.dto.HeaderParam; -import commons.exception.ServerException; +import org.sunbird.commons.AppConfig; +import org.sunbird.commons.dto.ExecutionContext; +import org.sunbird.commons.dto.HeaderParam; +import org.sunbird.commons.exception.ServerException; import org.apache.commons.lang3.StringUtils; -import telemetry.TelemetryManager; -import utils.CassandraConnector; -import utils.CassandraStoreParam; -import utils.Constants; -import utils.DateUtils; -import utils.KafkaUtils; +import org.sunbird.telemetry.TelemetryManager; +import org.sunbird.utils.CassandraConnector; +import org.sunbird.utils.CassandraStoreParam; +import org.sunbird.utils.Constants; +import org.sunbird.utils.DateUtils; +import org.sunbird.utils.KafkaUtils; import java.util.ArrayList; import java.util.Date; @@ -135,6 +135,7 @@ protected List read(String key, Object value) { ResultSet results = CassandraConnector.getSession().execute(selectQuery); return results.all(); } catch (Exception e) { + e.printStackTrace(); throw new ServerException(CassandraStoreParam.ERR_SERVER_ERROR.name(), "Error while fetching record for ID : " + value, e); } @@ -151,6 +152,7 @@ protected List readByUUID(String key, Object value) { ResultSet results = CassandraConnector.getSession().execute(selectQuery); return results.all(); } catch (Exception e) { + e.printStackTrace(); throw new ServerException(CassandraStoreParam.ERR_SERVER_ERROR.name(), "Error while fetching record for ID : " + value, e); } @@ -196,6 +198,7 @@ protected List getRecordsByProperties(Map propertyMap) { ResultSet results = CassandraConnector.getSession().execute(selectQuery.allowFiltering()); return results.all(); } catch (Exception e) { + e.printStackTrace(); throw new ServerException(CassandraStoreParam.ERR_SERVER_ERROR.name(), "Error while fetching records", e); } diff --git a/app/dbstore/DialCodeStore.java b/dial-core/src/main/java/org/sunbird/dbstore/DialCodeStore.java similarity index 92% rename from app/dbstore/DialCodeStore.java rename to dial-core/src/main/java/org/sunbird/dbstore/DialCodeStore.java index dc4e2a7..7615646 100644 --- a/app/dbstore/DialCodeStore.java +++ b/dial-core/src/main/java/org/sunbird/dbstore/DialCodeStore.java @@ -1,19 +1,19 @@ -package dbstore; +package org.sunbird.dbstore; import com.datastax.driver.core.Row; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import commons.AppConfig; -import commons.DialCodeErrorCodes; -import commons.DialCodeErrorMessage; -import commons.exception.ResourceNotFoundException; -import dto.DialCode; -import managers.HealthCheckManager; +import org.sunbird.commons.AppConfig; +import org.sunbird.commons.DialCodeErrorCodes; +import org.sunbird.commons.DialCodeErrorMessage; +import org.sunbird.commons.exception.ResourceNotFoundException; +import org.sunbird.dto.DialCode; +import org.sunbird.managers.HealthCheckManager; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import utils.CassandraStoreParam; -import utils.DateUtils; -import utils.DialCodeEnum; +import org.sunbird.utils.CassandraStoreParam; +import org.sunbird.utils.DateUtils; +import org.sunbird.utils.DialCodeEnum; import java.time.LocalDateTime; import java.util.HashMap; diff --git a/app/dbstore/PublisherStore.java b/dial-core/src/main/java/org/sunbird/dbstore/PublisherStore.java similarity index 92% rename from app/dbstore/PublisherStore.java rename to dial-core/src/main/java/org/sunbird/dbstore/PublisherStore.java index ba1678f..a7ed3fb 100644 --- a/app/dbstore/PublisherStore.java +++ b/dial-core/src/main/java/org/sunbird/dbstore/PublisherStore.java @@ -1,11 +1,11 @@ /** * */ -package dbstore; +package org.sunbird.dbstore; import com.datastax.driver.core.Row; -import commons.AppConfig; -import utils.DialCodeEnum; +import org.sunbird.commons.AppConfig; +import org.sunbird.utils.DialCodeEnum; import java.util.List; import java.util.Map; diff --git a/app/dbstore/QRCodesStore.java b/dial-core/src/main/java/org/sunbird/dbstore/QRCodesStore.java similarity index 89% rename from app/dbstore/QRCodesStore.java rename to dial-core/src/main/java/org/sunbird/dbstore/QRCodesStore.java index 788a905..23272c1 100644 --- a/app/dbstore/QRCodesStore.java +++ b/dial-core/src/main/java/org/sunbird/dbstore/QRCodesStore.java @@ -1,19 +1,19 @@ /** * */ -package dbstore; +package org.sunbird.dbstore; import com.datastax.driver.core.Row; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import commons.AppConfig; -import commons.DialCodeErrorCodes; -import commons.DialCodeErrorMessage; -import commons.exception.ResourceNotFoundException; -import dto.DialCode; -import dto.QRCodesBatch; +import org.sunbird.commons.AppConfig; +import org.sunbird.commons.DialCodeErrorCodes; +import org.sunbird.commons.DialCodeErrorMessage; +import org.sunbird.commons.exception.ResourceNotFoundException; +import org.sunbird.dto.DialCode; +import org.sunbird.dto.QRCodesBatch; import org.apache.commons.lang3.StringUtils; -import utils.DialCodeEnum; +import org.sunbird.utils.DialCodeEnum; import java.io.File; import java.util.List; diff --git a/app/dbstore/SystemConfigStore.java b/dial-core/src/main/java/org/sunbird/dbstore/SystemConfigStore.java similarity index 91% rename from app/dbstore/SystemConfigStore.java rename to dial-core/src/main/java/org/sunbird/dbstore/SystemConfigStore.java index 3eed011..c655ebc 100644 --- a/app/dbstore/SystemConfigStore.java +++ b/dial-core/src/main/java/org/sunbird/dbstore/SystemConfigStore.java @@ -1,11 +1,11 @@ /** * */ -package dbstore; +package org.sunbird.dbstore; import com.datastax.driver.core.Row; -import commons.AppConfig; -import utils.DialCodeEnum; +import org.sunbird.commons.AppConfig; +import org.sunbird.utils.DialCodeEnum; import java.util.HashMap; import java.util.List; diff --git a/app/dto/DialCode.java b/dial-core/src/main/java/org/sunbird/dto/DialCode.java similarity index 98% rename from app/dto/DialCode.java rename to dial-core/src/main/java/org/sunbird/dto/DialCode.java index c6e91db..d6fc3c6 100644 --- a/app/dto/DialCode.java +++ b/dial-core/src/main/java/org/sunbird/dto/DialCode.java @@ -1,4 +1,4 @@ -package dto; +package org.sunbird.dto; import java.io.Serializable; import java.util.Map; diff --git a/app/dto/Publisher.java b/dial-core/src/main/java/org/sunbird/dto/Publisher.java similarity index 98% rename from app/dto/Publisher.java rename to dial-core/src/main/java/org/sunbird/dto/Publisher.java index 9db6bc1..be1402e 100644 --- a/app/dto/Publisher.java +++ b/dial-core/src/main/java/org/sunbird/dto/Publisher.java @@ -1,7 +1,7 @@ /** * */ -package dto; +package org.sunbird.dto; import java.io.Serializable; diff --git a/app/dto/QRCodesBatch.java b/dial-core/src/main/java/org/sunbird/dto/QRCodesBatch.java similarity index 98% rename from app/dto/QRCodesBatch.java rename to dial-core/src/main/java/org/sunbird/dto/QRCodesBatch.java index 01bd2bc..c3efe9b 100644 --- a/app/dto/QRCodesBatch.java +++ b/dial-core/src/main/java/org/sunbird/dto/QRCodesBatch.java @@ -1,4 +1,4 @@ -package dto; +package org.sunbird.dto; import java.io.Serializable; import java.util.Date; diff --git a/app/dto/SearchDTO.java b/dial-core/src/main/java/org/sunbird/dto/SearchDTO.java similarity index 99% rename from app/dto/SearchDTO.java rename to dial-core/src/main/java/org/sunbird/dto/SearchDTO.java index 57acd8e..2f630a0 100644 --- a/app/dto/SearchDTO.java +++ b/dial-core/src/main/java/org/sunbird/dto/SearchDTO.java @@ -1,4 +1,4 @@ -package dto; +package org.sunbird.dto; import java.util.HashMap; import java.util.List; diff --git a/app/elasticsearch/ElasticSearchUtil.java b/dial-core/src/main/java/org/sunbird/elasticsearch/ElasticSearchUtil.java similarity index 98% rename from app/elasticsearch/ElasticSearchUtil.java rename to dial-core/src/main/java/org/sunbird/elasticsearch/ElasticSearchUtil.java index 44f2938..3bce8c7 100644 --- a/app/elasticsearch/ElasticSearchUtil.java +++ b/dial-core/src/main/java/org/sunbird/elasticsearch/ElasticSearchUtil.java @@ -1,13 +1,13 @@ /** * */ -package elasticsearch; +package org.sunbird.elasticsearch; import akka.dispatch.Futures; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import commons.AppConfig; -import commons.JsonUtils; +import org.sunbird.commons.AppConfig; +import org.sunbird.commons.JsonUtils; import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; @@ -44,8 +44,8 @@ import org.elasticsearch.search.builder.SearchSourceBuilder; import scala.concurrent.Future; import scala.concurrent.Promise; -import telemetry.TelemetryManager; -import utils.Constants; +import org.sunbird.telemetry.TelemetryManager; +import org.sunbird.utils.Constants; import java.io.IOException; import java.util.ArrayList; diff --git a/app/elasticsearch/SearchProcessor.java b/dial-core/src/main/java/org/sunbird/elasticsearch/SearchProcessor.java similarity index 99% rename from app/elasticsearch/SearchProcessor.java rename to dial-core/src/main/java/org/sunbird/elasticsearch/SearchProcessor.java index 7ec90f4..6001861 100644 --- a/app/elasticsearch/SearchProcessor.java +++ b/dial-core/src/main/java/org/sunbird/elasticsearch/SearchProcessor.java @@ -1,9 +1,9 @@ -package elasticsearch; +package org.sunbird.elasticsearch; import akka.dispatch.Mapper; import com.fasterxml.jackson.databind.ObjectMapper; -import commons.AppConfig; -import dto.SearchDTO; +import org.sunbird.commons.AppConfig; +import org.sunbird.dto.SearchDTO; import org.apache.commons.lang3.StringUtils; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.common.lucene.search.function.CombineFunction; @@ -25,8 +25,8 @@ import org.elasticsearch.search.sort.SortOrder; import scala.concurrent.ExecutionContext; import scala.concurrent.Future; -import telemetry.TelemetryManager; -import utils.Constants; +import org.sunbird.telemetry.TelemetryManager; +import org.sunbird.utils.Constants; import java.util.ArrayList; import java.util.Arrays; diff --git a/app/managers/BaseManager.java b/dial-core/src/main/java/org/sunbird/managers/BaseManager.java similarity index 93% rename from app/managers/BaseManager.java rename to dial-core/src/main/java/org/sunbird/managers/BaseManager.java index 386137c..d5a0068 100644 --- a/app/managers/BaseManager.java +++ b/dial-core/src/main/java/org/sunbird/managers/BaseManager.java @@ -1,12 +1,12 @@ -package managers; +package org.sunbird.managers; -import commons.dto.Property; -import commons.dto.Request; -import commons.dto.Response; -import commons.dto.ResponseParams; -import commons.exception.ResponseCode; +import org.sunbird.commons.dto.Property; +import org.sunbird.commons.dto.Request; +import org.sunbird.commons.dto.Response; +import org.sunbird.commons.dto.ResponseParams; +import org.sunbird.commons.exception.ResponseCode; import org.apache.commons.lang3.StringUtils; -import telemetry.TelemetryManager; +import org.sunbird.telemetry.TelemetryManager; import java.util.ArrayList; import java.util.Arrays; diff --git a/app/managers/DialcodeManager.java b/dial-core/src/main/java/org/sunbird/managers/DialcodeManager.java similarity index 97% rename from app/managers/DialcodeManager.java rename to dial-core/src/main/java/org/sunbird/managers/DialcodeManager.java index 434f19f..e865c0b 100644 --- a/app/managers/DialcodeManager.java +++ b/dial-core/src/main/java/org/sunbird/managers/DialcodeManager.java @@ -1,23 +1,23 @@ -package managers; +package org.sunbird.managers; import akka.util.Timeout; import com.datastax.driver.core.Row; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; -import commons.*; -import commons.dto.HeaderParam; -import commons.dto.Response; -import commons.exception.ClientException; -import commons.exception.ResponseCode; -import dbstore.DialCodeStore; -import dbstore.PublisherStore; -import dbstore.QRCodesStore; -import dto.DialCode; -import dto.Publisher; -import dto.QRCodesBatch; -import dto.SearchDTO; -import elasticsearch.ElasticSearchUtil; -import elasticsearch.SearchProcessor; +import org.sunbird.commons.*; +import org.sunbird.commons.dto.HeaderParam; +import org.sunbird.commons.dto.Response; +import org.sunbird.commons.exception.ClientException; +import org.sunbird.commons.exception.ResponseCode; +import org.sunbird.dbstore.DialCodeStore; +import org.sunbird.dbstore.PublisherStore; +import org.sunbird.dbstore.QRCodesStore; +import org.sunbird.dto.DialCode; +import org.sunbird.dto.Publisher; +import org.sunbird.dto.QRCodesBatch; +import org.sunbird.dto.SearchDTO; +import org.sunbird.elasticsearch.ElasticSearchUtil; +import org.sunbird.elasticsearch.SearchProcessor; import jakarta.json.JsonReader; import jakarta.json.JsonReaderFactory; import org.apache.commons.collections.CollectionUtils; @@ -28,11 +28,11 @@ import scala.concurrent.Await; import scala.concurrent.Future; import scala.concurrent.duration.Duration; -import telemetry.TelemetryManager; -import utils.Constants; -import utils.DateUtils; -import utils.DialCodeEnum; -import utils.DialCodeGenerator; +import org.sunbird.telemetry.TelemetryManager; +import org.sunbird.utils.Constants; +import org.sunbird.utils.DateUtils; +import org.sunbird.utils.DialCodeEnum; +import org.sunbird.utils.DialCodeGenerator; import java.io.*; import java.net.HttpURLConnection; diff --git a/app/managers/HealthCheckManager.java b/dial-core/src/main/java/org/sunbird/managers/HealthCheckManager.java similarity index 86% rename from app/managers/HealthCheckManager.java rename to dial-core/src/main/java/org/sunbird/managers/HealthCheckManager.java index 3f9f855..f80dba7 100644 --- a/app/managers/HealthCheckManager.java +++ b/dial-core/src/main/java/org/sunbird/managers/HealthCheckManager.java @@ -2,11 +2,11 @@ * * @author Rhea Fernandes */ -package managers; +package org.sunbird.managers; -import commons.dto.Response; -import commons.exception.ResponseCode; -import telemetry.TelemetryManager; +import org.sunbird.commons.dto.Response; +import org.sunbird.commons.exception.ResponseCode; +import org.sunbird.telemetry.TelemetryManager; import java.util.ArrayList; import java.util.HashMap; @@ -30,11 +30,11 @@ public Response getAllServiceHealth(){ if(!status){ overAllHealth=false; } - check = generateCheck("elasticsearch",check,status); - TelemetryManager.log("elasticsearch "+CONNECTION_SUCCESS); + check = generateCheck("org/sunbird/elasticsearch",check,status); + TelemetryManager.log("org/sunbird/elasticsearch " +CONNECTION_SUCCESS); }catch (Exception e){ - check = generateCheck("elasticsearch",check,status); - TelemetryManager.error("elasticsearch "+CONNECTION_FAIL,e); + check = generateCheck("org/sunbird/elasticsearch",check,status); + TelemetryManager.error("org/sunbird/elasticsearch " +CONNECTION_FAIL,e); } allChecks.add(check); diff --git a/app/managers/IHealthCheckManager.java b/dial-core/src/main/java/org/sunbird/managers/IHealthCheckManager.java similarity index 85% rename from app/managers/IHealthCheckManager.java rename to dial-core/src/main/java/org/sunbird/managers/IHealthCheckManager.java index 86bf6e8..44fb903 100644 --- a/app/managers/IHealthCheckManager.java +++ b/dial-core/src/main/java/org/sunbird/managers/IHealthCheckManager.java @@ -2,17 +2,17 @@ * * @author Rhea Fernandes */ -package managers; +package org.sunbird.managers; import com.datastax.driver.core.Session; -import commons.JedisFactory; -import commons.dto.Response; -import elasticsearch.ElasticSearchUtil; +import org.sunbird.commons.JedisFactory; +import org.sunbird.commons.dto.Response; +import org.sunbird.elasticsearch.ElasticSearchUtil; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import redis.clients.jedis.Jedis; -import utils.CassandraConnector; -import utils.Constants; +import org.sunbird.utils.CassandraConnector; +import org.sunbird.utils.Constants; public interface IHealthCheckManager { diff --git a/app/telemetry/Actor.java b/dial-core/src/main/java/org/sunbird/telemetry/Actor.java similarity index 94% rename from app/telemetry/Actor.java rename to dial-core/src/main/java/org/sunbird/telemetry/Actor.java index 9440531..9fad6c6 100644 --- a/app/telemetry/Actor.java +++ b/dial-core/src/main/java/org/sunbird/telemetry/Actor.java @@ -1,4 +1,4 @@ -package telemetry; +package org.sunbird.telemetry; /** * diff --git a/app/telemetry/Context.java b/dial-core/src/main/java/org/sunbird/telemetry/Context.java similarity index 97% rename from app/telemetry/Context.java rename to dial-core/src/main/java/org/sunbird/telemetry/Context.java index 6763f48..578bca4 100644 --- a/app/telemetry/Context.java +++ b/dial-core/src/main/java/org/sunbird/telemetry/Context.java @@ -1,7 +1,7 @@ /** * */ -package telemetry; +package org.sunbird.telemetry; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/app/telemetry/Level.java b/dial-core/src/main/java/org/sunbird/telemetry/Level.java similarity index 82% rename from app/telemetry/Level.java rename to dial-core/src/main/java/org/sunbird/telemetry/Level.java index 6ca430a..136b52c 100644 --- a/app/telemetry/Level.java +++ b/dial-core/src/main/java/org/sunbird/telemetry/Level.java @@ -1,4 +1,4 @@ -package telemetry; +package org.sunbird.telemetry; public enum Level { INFO, WARN, DEBUG, ERROR, TRACE, FATAL; diff --git a/app/telemetry/LogTelemetryEventUtil.java b/dial-core/src/main/java/org/sunbird/telemetry/LogTelemetryEventUtil.java similarity index 97% rename from app/telemetry/LogTelemetryEventUtil.java rename to dial-core/src/main/java/org/sunbird/telemetry/LogTelemetryEventUtil.java index 1069187..462b4a4 100644 --- a/app/telemetry/LogTelemetryEventUtil.java +++ b/dial-core/src/main/java/org/sunbird/telemetry/LogTelemetryEventUtil.java @@ -1,7 +1,7 @@ -package telemetry; +package org.sunbird.telemetry; import com.fasterxml.jackson.databind.ObjectMapper; -import commons.dto.Request; +import org.sunbird.commons.dto.Request; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/app/telemetry/Parent.java b/dial-core/src/main/java/org/sunbird/telemetry/Parent.java similarity index 93% rename from app/telemetry/Parent.java rename to dial-core/src/main/java/org/sunbird/telemetry/Parent.java index ff884c7..20059b1 100644 --- a/app/telemetry/Parent.java +++ b/dial-core/src/main/java/org/sunbird/telemetry/Parent.java @@ -1,7 +1,7 @@ /** * */ -package telemetry; +package org.sunbird.telemetry; /** * @author mahesh diff --git a/app/telemetry/Producer.java b/dial-core/src/main/java/org/sunbird/telemetry/Producer.java similarity index 96% rename from app/telemetry/Producer.java rename to dial-core/src/main/java/org/sunbird/telemetry/Producer.java index e79d33d..0b2e18e 100644 --- a/app/telemetry/Producer.java +++ b/dial-core/src/main/java/org/sunbird/telemetry/Producer.java @@ -1,4 +1,4 @@ -package telemetry; +package org.sunbird.telemetry; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/app/telemetry/Target.java b/dial-core/src/main/java/org/sunbird/telemetry/Target.java similarity index 98% rename from app/telemetry/Target.java rename to dial-core/src/main/java/org/sunbird/telemetry/Target.java index 756c1d3..b800654 100644 --- a/app/telemetry/Target.java +++ b/dial-core/src/main/java/org/sunbird/telemetry/Target.java @@ -1,4 +1,4 @@ -package telemetry; +package org.sunbird.telemetry; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/app/telemetry/Telemetry.java b/dial-core/src/main/java/org/sunbird/telemetry/Telemetry.java similarity index 99% rename from app/telemetry/Telemetry.java rename to dial-core/src/main/java/org/sunbird/telemetry/Telemetry.java index dc025bf..8b7dc21 100644 --- a/app/telemetry/Telemetry.java +++ b/dial-core/src/main/java/org/sunbird/telemetry/Telemetry.java @@ -1,4 +1,4 @@ -package telemetry; +package org.sunbird.telemetry; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/app/telemetry/TelemetryAccessEventUtil.java b/dial-core/src/main/java/org/sunbird/telemetry/TelemetryAccessEventUtil.java similarity index 86% rename from app/telemetry/TelemetryAccessEventUtil.java rename to dial-core/src/main/java/org/sunbird/telemetry/TelemetryAccessEventUtil.java index bee3d1c..7046b67 100644 --- a/app/telemetry/TelemetryAccessEventUtil.java +++ b/dial-core/src/main/java/org/sunbird/telemetry/TelemetryAccessEventUtil.java @@ -1,11 +1,11 @@ -package telemetry; +package org.sunbird.telemetry; import com.fasterxml.jackson.databind.ObjectMapper; -import commons.AppConfig; -import commons.dto.ExecutionContext; -import commons.dto.HeaderParam; -import commons.dto.Request; -import commons.dto.Response; +import org.sunbird.commons.AppConfig; +import org.sunbird.commons.dto.ExecutionContext; +import org.sunbird.commons.dto.HeaderParam; +import org.sunbird.commons.dto.Request; +import org.sunbird.commons.dto.Response; import org.apache.commons.lang3.StringUtils; import java.util.HashMap; @@ -22,10 +22,11 @@ public static void writeTelemetryEventLog(Map data) { Response response = (Response) data.get("Response"); Map params = new HashMap(); - params.put("rid", response.getId()); + if(null != response) + params.put("rid", response.getId()); params.put("uip", (String) data.get("RemoteAddress")); params.put("url", (String) data.get("path")); - params.put("size", (int) data.get("ContentLength")); + params.put("size", (long) data.get("ContentLength")); params.put("duration", timeDuration); params.put("status", (int) data.get("Status")); params.put("protocol", data.get("Protocol")); @@ -36,11 +37,11 @@ public static void writeTelemetryEventLog(Map data) { Map context = new HashMap(); Map fwApis = getFrameworkAPIs(); - if (fwApis.containsKey(response.getId())) + if (null!= response && fwApis.containsKey(response.getId())) context.put(TelemetryParams.ENV.name(), (String) fwApis.get(response.getId())); else context.put(TelemetryParams.ENV.name(), (String) data.get("env")); - ExecutionContext.getCurrent().getGlobalContext().put(TelemetryParams.ENV.name(), (String) data.get("env")); +// ExecutionContext.getCurrent().getGlobalContext().put(TelemetryParams.ENV.name(), (String) data.get("env")); context.put(TelemetryParams.CHANNEL.name(), (String) ExecutionContext.getCurrent().getGlobalContext().get(HeaderParam.CHANNEL_ID.name())); if (null != data.get("X-Session-ID")) { @@ -53,12 +54,12 @@ public static void writeTelemetryEventLog(Map data) { if (null != data.get("X-Consumer-ID")) { String consumerId = (String) data.get("X-Consumer-ID"); context.put(TelemetryParams.ACTOR.name(), consumerId); - ExecutionContext.getCurrent().getGlobalContext().put(TelemetryParams.ACTOR.name(), consumerId); +// ExecutionContext.getCurrent().getGlobalContext().put(TelemetryParams.ACTOR.name(), consumerId); } else if (null != request && null != request.getParams()) { if (null != request.getParams().getCid()) { String consumerId = request.getParams().getCid(); context.put(TelemetryParams.ACTOR.name(), consumerId); - ExecutionContext.getCurrent().getGlobalContext().put(TelemetryParams.ACTOR.name(), consumerId); +// ExecutionContext.getCurrent().getGlobalContext().put(TelemetryParams.ACTOR.name(), consumerId); } } if (null != data.get("X-Device-ID")) { diff --git a/app/telemetry/TelemetryBEEvent.java b/dial-core/src/main/java/org/sunbird/telemetry/TelemetryBEEvent.java similarity index 98% rename from app/telemetry/TelemetryBEEvent.java rename to dial-core/src/main/java/org/sunbird/telemetry/TelemetryBEEvent.java index c13e82e..f4e5244 100644 --- a/app/telemetry/TelemetryBEEvent.java +++ b/dial-core/src/main/java/org/sunbird/telemetry/TelemetryBEEvent.java @@ -1,4 +1,4 @@ -package telemetry; +package org.sunbird.telemetry; import java.util.HashMap; import java.util.Map; diff --git a/app/telemetry/TelemetryBJREvent.java b/dial-core/src/main/java/org/sunbird/telemetry/TelemetryBJREvent.java similarity index 97% rename from app/telemetry/TelemetryBJREvent.java rename to dial-core/src/main/java/org/sunbird/telemetry/TelemetryBJREvent.java index 8ee5f5d..9f5a74c 100644 --- a/app/telemetry/TelemetryBJREvent.java +++ b/dial-core/src/main/java/org/sunbird/telemetry/TelemetryBJREvent.java @@ -1,4 +1,4 @@ -package telemetry; +package org.sunbird.telemetry; import java.util.Map; public class TelemetryBJREvent { diff --git a/app/telemetry/TelemetryGenerator.java b/dial-core/src/main/java/org/sunbird/telemetry/TelemetryGenerator.java similarity index 99% rename from app/telemetry/TelemetryGenerator.java rename to dial-core/src/main/java/org/sunbird/telemetry/TelemetryGenerator.java index ed27331..e5ec8bd 100644 --- a/app/telemetry/TelemetryGenerator.java +++ b/dial-core/src/main/java/org/sunbird/telemetry/TelemetryGenerator.java @@ -1,7 +1,7 @@ -package telemetry; +package org.sunbird.telemetry; import com.fasterxml.jackson.databind.ObjectMapper; -import commons.AppConfig; +import org.sunbird.commons.AppConfig; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; diff --git a/app/telemetry/TelemetryHandler.java b/dial-core/src/main/java/org/sunbird/telemetry/TelemetryHandler.java similarity index 94% rename from app/telemetry/TelemetryHandler.java rename to dial-core/src/main/java/org/sunbird/telemetry/TelemetryHandler.java index a9c1e15..c55ac59 100644 --- a/app/telemetry/TelemetryHandler.java +++ b/dial-core/src/main/java/org/sunbird/telemetry/TelemetryHandler.java @@ -1,4 +1,4 @@ -package telemetry; +package org.sunbird.telemetry; /** * Interface to implement the handlers for the telemetry generated by diff --git a/app/telemetry/TelemetryLoggingHandler.java b/dial-core/src/main/java/org/sunbird/telemetry/TelemetryLoggingHandler.java similarity index 97% rename from app/telemetry/TelemetryLoggingHandler.java rename to dial-core/src/main/java/org/sunbird/telemetry/TelemetryLoggingHandler.java index 0bd12a4..ca58748 100644 --- a/app/telemetry/TelemetryLoggingHandler.java +++ b/dial-core/src/main/java/org/sunbird/telemetry/TelemetryLoggingHandler.java @@ -1,7 +1,7 @@ /** * */ -package telemetry; +package org.sunbird.telemetry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/app/telemetry/TelemetryManager.java b/dial-core/src/main/java/org/sunbird/telemetry/TelemetryManager.java similarity index 95% rename from app/telemetry/TelemetryManager.java rename to dial-core/src/main/java/org/sunbird/telemetry/TelemetryManager.java index 9f4e5eb..75988c9 100644 --- a/app/telemetry/TelemetryManager.java +++ b/dial-core/src/main/java/org/sunbird/telemetry/TelemetryManager.java @@ -1,10 +1,10 @@ -package telemetry; +package org.sunbird.telemetry; -import commons.AppConfig; -import commons.dto.ExecutionContext; -import commons.dto.HeaderParam; -import commons.exception.MiddlewareException; -import commons.exception.ResponseCode; +import org.sunbird.commons.AppConfig; +import org.sunbird.commons.dto.ExecutionContext; +import org.sunbird.commons.dto.HeaderParam; +import org.sunbird.commons.exception.MiddlewareException; +import org.sunbird.commons.exception.ResponseCode; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; diff --git a/app/telemetry/TelemetryParams.java b/dial-core/src/main/java/org/sunbird/telemetry/TelemetryParams.java similarity index 67% rename from app/telemetry/TelemetryParams.java rename to dial-core/src/main/java/org/sunbird/telemetry/TelemetryParams.java index f31ef45..cc5bea7 100644 --- a/app/telemetry/TelemetryParams.java +++ b/dial-core/src/main/java/org/sunbird/telemetry/TelemetryParams.java @@ -1,4 +1,4 @@ -package telemetry; +package org.sunbird.telemetry; public enum TelemetryParams { CHANNEL, ENV, ACTOR, APP_ID; diff --git a/app/utils/CassandraConnector.java b/dial-core/src/main/java/org/sunbird/utils/CassandraConnector.java similarity index 96% rename from app/utils/CassandraConnector.java rename to dial-core/src/main/java/org/sunbird/utils/CassandraConnector.java index 3506d96..070303a 100644 --- a/app/utils/CassandraConnector.java +++ b/dial-core/src/main/java/org/sunbird/utils/CassandraConnector.java @@ -1,13 +1,13 @@ -package utils; +package org.sunbird.utils; import com.datastax.driver.core.Cluster; import com.datastax.driver.core.ConsistencyLevel; import com.datastax.driver.core.QueryOptions; import com.datastax.driver.core.Session; -import commons.AppConfig; -import commons.exception.ServerException; +import org.sunbird.commons.AppConfig; +import org.sunbird.commons.exception.ServerException; import org.apache.commons.lang3.StringUtils; -import telemetry.TelemetryManager; +import org.sunbird.telemetry.TelemetryManager; import java.net.InetSocketAddress; import java.util.ArrayList; diff --git a/app/utils/CassandraStoreParam.java b/dial-core/src/main/java/org/sunbird/utils/CassandraStoreParam.java similarity index 91% rename from app/utils/CassandraStoreParam.java rename to dial-core/src/main/java/org/sunbird/utils/CassandraStoreParam.java index eac4a4d..417d654 100644 --- a/app/utils/CassandraStoreParam.java +++ b/dial-core/src/main/java/org/sunbird/utils/CassandraStoreParam.java @@ -1,4 +1,4 @@ -package utils; +package org.sunbird.utils; public enum CassandraStoreParam { index, object_type, UPDATE, DELETE, CREATE, EXTERNAL, ANONYMOUS, diff --git a/app/utils/Constants.java b/dial-core/src/main/java/org/sunbird/utils/Constants.java similarity index 81% rename from app/utils/Constants.java rename to dial-core/src/main/java/org/sunbird/utils/Constants.java index f131e0b..3fdd12f 100644 --- a/app/utils/Constants.java +++ b/dial-core/src/main/java/org/sunbird/utils/Constants.java @@ -1,9 +1,10 @@ -package utils; +package org.sunbird.utils; public class Constants { //Cassandra Connection constants public static final String IDENTIFIER="id"; + public static final String PROCESS_ID="processId"; public static final String SUCCESS="SUCCESS"; public static final String RESPONSE="response"; public static final String SESSION_IS_NULL="cassandra session is null for this "; @@ -99,4 +100,29 @@ public class Constants { // Dialcode Constants public static final String DIALCODE_SEARCH_LIMIT = "dialcode.search.limit"; public static final String DIALCODE_ES_CONN_INFO = "search.es_conn_info"; + public static final String DIALCODE = "dialcode"; + public static final String GENERATE_DIALCODE = "generateDialCode"; + public static final String UPDATE_DIALCODE = "updateDialCode"; + public static final String READ_DIALCODE = "readDialCode"; + public static final String LIST_DIALCODE = "listDialCode"; + public static final String SEARCH_DIALCODE = "searchDialCode"; + public static final String SYNC_DIALCODE = "syncDialCode"; + public static final String PUBLISH_DIALCODE = "publishDialCode"; + public static final String CREATE_PUBLISHER = "createPublisher"; + public static final String READ_PUBLISHER = "readPublisher"; + public static final String UPDATE_PUBLISHER = "updatePublisher"; + public static final String READ_QR_CODES_BATCH_INFO = "readQRCodesBatchInfo"; + + public static final String DIALCODES = "dialcodes"; + public static final String SYNC = "sync"; + public static final String PUBLISHER = "publisher"; + + public static final String CHANNEL_ID = "CHANNEL_ID"; + + public static final String SCHEMA_VERSION = "1.0"; + public static final String SCHEMA_NAME = "1.0"; + + //v4 + public static final String READ_DIALCODE_V4 = "readDialCodeV4"; + public static final String UPDATE_DIALCODE_V4 = "updateDialCodeV4"; } diff --git a/app/utils/DateUtils.java b/dial-core/src/main/java/org/sunbird/utils/DateUtils.java similarity index 60% rename from app/utils/DateUtils.java rename to dial-core/src/main/java/org/sunbird/utils/DateUtils.java index 4f4591b..05ea201 100644 --- a/app/utils/DateUtils.java +++ b/dial-core/src/main/java/org/sunbird/utils/DateUtils.java @@ -1,4 +1,5 @@ -package utils; +package org.sunbird.utils; + import org.apache.commons.lang3.StringUtils; @@ -7,9 +8,8 @@ public class DateUtils { - private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); - public static String format(Date date) { + SimpleDateFormat sdf = getDateFormat(); if (null != date) { try { return sdf.format(date); @@ -20,6 +20,7 @@ public static String format(Date date) { } public static Date parse(String dateStr) { + SimpleDateFormat sdf = getDateFormat(); if (StringUtils.isNotBlank(dateStr)) { try { return sdf.parse(dateStr); @@ -29,7 +30,17 @@ public static Date parse(String dateStr) { return null; } + public static SimpleDateFormat getDateFormat() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); + return sdf; + } public static String formatCurrentDate() { return format(new Date()); } + + + public static String formatCurrentDate(String pattern) { + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + return sdf.format(new Date()); + } } diff --git a/app/utils/DialCodeEnum.java b/dial-core/src/main/java/org/sunbird/utils/DialCodeEnum.java similarity index 94% rename from app/utils/DialCodeEnum.java rename to dial-core/src/main/java/org/sunbird/utils/DialCodeEnum.java index fca620b..2b02056 100644 --- a/app/utils/DialCodeEnum.java +++ b/dial-core/src/main/java/org/sunbird/utils/DialCodeEnum.java @@ -1,4 +1,4 @@ -package utils; +package org.sunbird.utils; public enum DialCodeEnum { channel, publisher, count, batchCode, Draft, status, Live, identifier, dialcode, dialcodes, generated_on, published_on, metadata, contextInfo, diff --git a/app/utils/DialCodeGenerator.java b/dial-core/src/main/java/org/sunbird/utils/DialCodeGenerator.java similarity index 91% rename from app/utils/DialCodeGenerator.java rename to dial-core/src/main/java/org/sunbird/utils/DialCodeGenerator.java index f9a222d..9c70f06 100644 --- a/app/utils/DialCodeGenerator.java +++ b/dial-core/src/main/java/org/sunbird/utils/DialCodeGenerator.java @@ -1,10 +1,11 @@ -package utils; +package org.sunbird.utils; -import commons.AppConfig; -import dbstore.DialCodeStore; -import dbstore.SystemConfigStore; +import org.sunbird.commons.AppConfig; +import org.sunbird.dbstore.DialCodeStore; +import org.sunbird.dbstore.SystemConfigStore; import org.apache.commons.lang3.StringUtils; -import telemetry.TelemetryManager; +import org.sunbird.managers.HealthCheckManager; +import org.sunbird.telemetry.TelemetryManager; import java.math.BigDecimal; import java.util.HashMap; @@ -79,7 +80,7 @@ private Double getMaxIndex(Double masterDBIndex) throws Exception { if (index < masterDBIndex) { String message = "Redis doesn't have the latest max index. Please set max index in redis as : " + masterDBIndex + " to enable the service."; System.out.println(message); - managers.HealthCheckManager.dialMaxIndexHealth = false; + HealthCheckManager.dialMaxIndexHealth = false; throw new Exception(message); // TODO: below code will be helpful for automating the Redis data correction. // RedisStoreUtil.saveNodeProperty("domain", "dialcode", "max_index", masterDBIndex.toString()); diff --git a/app/utils/KafkaUtils.java b/dial-core/src/main/java/org/sunbird/utils/KafkaUtils.java similarity index 94% rename from app/utils/KafkaUtils.java rename to dial-core/src/main/java/org/sunbird/utils/KafkaUtils.java index 6a8c41b..69d2ada 100644 --- a/app/utils/KafkaUtils.java +++ b/dial-core/src/main/java/org/sunbird/utils/KafkaUtils.java @@ -1,7 +1,7 @@ -package utils; +package org.sunbird.utils; -import commons.AppConfig; -import commons.exception.ClientException; +import org.sunbird.commons.AppConfig; +import org.sunbird.commons.exception.ClientException; import org.apache.kafka.clients.consumer.Consumer; import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.KafkaConsumer; @@ -14,7 +14,7 @@ import org.apache.kafka.common.serialization.LongSerializer; import org.apache.kafka.common.serialization.StringDeserializer; import org.apache.kafka.common.serialization.StringSerializer; -import telemetry.TelemetryManager; +import org.sunbird.telemetry.TelemetryManager; import java.util.List; import java.util.Map; diff --git a/app/utils/RedisStoreUtil.java b/dial-core/src/main/java/org/sunbird/utils/RedisStoreUtil.java similarity index 86% rename from app/utils/RedisStoreUtil.java rename to dial-core/src/main/java/org/sunbird/utils/RedisStoreUtil.java index 5e7fafc..fe8cd6e 100644 --- a/app/utils/RedisStoreUtil.java +++ b/dial-core/src/main/java/org/sunbird/utils/RedisStoreUtil.java @@ -1,10 +1,10 @@ -package utils; +package org.sunbird.utils; -import commons.exception.ServerException; +import org.sunbird.commons.exception.ServerException; import redis.clients.jedis.Jedis; -import static commons.JedisFactory.getRedisConncetion; -import static commons.JedisFactory.returnConnection; +import static org.sunbird.commons.JedisFactory.getRedisConncetion; +import static org.sunbird.commons.JedisFactory.returnConnection; public class RedisStoreUtil { private static final String KEY_SEPARATOR = ":"; diff --git a/test/common/CassandraTestSetup.java b/dial-core/src/test/java/org/sunbird/common/CassandraTestSetup.java similarity index 94% rename from test/common/CassandraTestSetup.java rename to dial-core/src/test/java/org/sunbird/common/CassandraTestSetup.java index 378ded8..c4a8b52 100644 --- a/test/common/CassandraTestSetup.java +++ b/dial-core/src/test/java/org/sunbird/common/CassandraTestSetup.java @@ -1,11 +1,11 @@ -package common; +package org.sunbird.common; import com.datastax.driver.core.Session; import org.cassandraunit.utils.EmbeddedCassandraServerHelper; import org.junit.AfterClass; import org.junit.BeforeClass; import play.test.WithApplication; -import utils.CassandraConnector; +import org.sunbird.utils.CassandraConnector; public class CassandraTestSetup extends WithApplication { diff --git a/test/commons/AppConfigTest.java b/dial-core/src/test/java/org/sunbird/commons/AppConfigTest.java similarity index 98% rename from test/commons/AppConfigTest.java rename to dial-core/src/test/java/org/sunbird/commons/AppConfigTest.java index d912fa0..d90f86a 100644 --- a/test/commons/AppConfigTest.java +++ b/dial-core/src/test/java/org/sunbird/commons/AppConfigTest.java @@ -1,4 +1,4 @@ -package commons; +package org.sunbird.commons; import org.junit.Assert; import org.junit.Test; diff --git a/test/commons/JsonUtilsTest.java b/dial-core/src/test/java/org/sunbird/commons/JsonUtilsTest.java similarity index 99% rename from test/commons/JsonUtilsTest.java rename to dial-core/src/test/java/org/sunbird/commons/JsonUtilsTest.java index 415e8c2..8110f06 100644 --- a/test/commons/JsonUtilsTest.java +++ b/dial-core/src/test/java/org/sunbird/commons/JsonUtilsTest.java @@ -1,4 +1,4 @@ -package commons; +package org.sunbird.commons; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.exc.InvalidDefinitionException; diff --git a/test/commons/SchemaCacheLoaderTest.java b/dial-core/src/test/java/org/sunbird/commons/SchemaCacheLoaderTest.java similarity index 93% rename from test/commons/SchemaCacheLoaderTest.java rename to dial-core/src/test/java/org/sunbird/commons/SchemaCacheLoaderTest.java index 244fd81..e4992e4 100644 --- a/test/commons/SchemaCacheLoaderTest.java +++ b/dial-core/src/test/java/org/sunbird/commons/SchemaCacheLoaderTest.java @@ -1,4 +1,4 @@ -package commons; +package org.sunbird.commons; import org.junit.Assert; import org.junit.Test; diff --git a/test/manager/DialCodeManagerImplTest.java b/dial-core/src/test/java/org/sunbird/manager/DialCodeManagerImplTest.java similarity index 98% rename from test/manager/DialCodeManagerImplTest.java rename to dial-core/src/test/java/org/sunbird/manager/DialCodeManagerImplTest.java index f8a88bd..d44d7a7 100644 --- a/test/manager/DialCodeManagerImplTest.java +++ b/dial-core/src/test/java/org/sunbird/manager/DialCodeManagerImplTest.java @@ -1,14 +1,14 @@ -package manager; +package org.sunbird.manager; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import common.CassandraTestSetup; -import commons.AppConfig; -import commons.dto.Response; -import commons.exception.ClientException; -import elasticsearch.ElasticSearchUtil; -import managers.DialcodeManager; +import org.sunbird.common.CassandraTestSetup; +import org.sunbird.commons.AppConfig; +import org.sunbird.commons.dto.Response; +import org.sunbird.commons.exception.ClientException; +import org.sunbird.elasticsearch.ElasticSearchUtil; +import org.sunbird.managers.DialcodeManager; import org.apache.commons.lang3.StringUtils; import org.junit.AfterClass; import org.junit.Assert; @@ -17,7 +17,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import utils.Constants; +import org.sunbird.utils.Constants; import java.io.IOException; import java.util.*; diff --git a/test/manager/HealthCheckManagerTest.java b/dial-core/src/test/java/org/sunbird/manager/HealthCheckManagerTest.java similarity index 89% rename from test/manager/HealthCheckManagerTest.java rename to dial-core/src/test/java/org/sunbird/manager/HealthCheckManagerTest.java index acf725f..b433141 100644 --- a/test/manager/HealthCheckManagerTest.java +++ b/dial-core/src/test/java/org/sunbird/manager/HealthCheckManagerTest.java @@ -1,8 +1,8 @@ -package manager; +package org.sunbird.manager; -import commons.dto.Response; -import managers.HealthCheckManager; -import managers.IHealthCheckManager; +import org.sunbird.commons.dto.Response; +import org.sunbird.managers.HealthCheckManager; +import org.sunbird.managers.IHealthCheckManager; import org.junit.After; import org.junit.Before; diff --git a/test/resources/application.conf b/dial-core/src/test/resources/application.conf similarity index 100% rename from test/resources/application.conf rename to dial-core/src/test/resources/application.conf diff --git a/test/resources/cassandra-unit.yaml b/dial-core/src/test/resources/cassandra-unit.yaml similarity index 100% rename from test/resources/cassandra-unit.yaml rename to dial-core/src/test/resources/cassandra-unit.yaml diff --git a/test/resources/context.json b/dial-core/src/test/resources/context.json similarity index 100% rename from test/resources/context.json rename to dial-core/src/test/resources/context.json diff --git a/test/resources/log4j.xml b/dial-core/src/test/resources/log4j.xml similarity index 100% rename from test/resources/log4j.xml rename to dial-core/src/test/resources/log4j.xml diff --git a/test/resources/routes b/dial-core/src/test/resources/routes similarity index 100% rename from test/resources/routes rename to dial-core/src/test/resources/routes diff --git a/dial-service/app/controllers/BaseController.scala b/dial-service/app/controllers/BaseController.scala new file mode 100644 index 0000000..65519b6 --- /dev/null +++ b/dial-service/app/controllers/BaseController.scala @@ -0,0 +1,76 @@ +package controllers + +import java.util.UUID + +import akka.actor.ActorRef +import akka.pattern.Patterns +import org.sunbird.utils.DateUtils +import org.sunbird.commons.dto.{Response, ResponseHandler} +import org.sunbird.commons.exception.ResponseCode +import play.api.mvc._ +import utils.JavaJsonUtils + + +import scala.collection.JavaConverters._ +import scala.collection.mutable +import scala.concurrent.{ExecutionContext, Future} + +abstract class BaseController(protected val cc: ControllerComponents)(implicit exec: ExecutionContext) extends AbstractController(cc) { + + def requestBody()(implicit request: Request[AnyContent]) = { + val body = request.body.asJson.getOrElse("{}").toString + JavaJsonUtils.deserialize[java.util.Map[String, Object]](body).getOrDefault("request", new java.util.HashMap()).asInstanceOf[java.util.Map[String, Object]] + } + + def commonHeaders()(implicit request: Request[AnyContent]): java.util.Map[String, Object] = { + val customHeaders = Map("x-channel-id" -> "CHANNEL_ID", "X-Consumer-ID" -> "CONSUMER_ID", "X-App-Id" -> "APP_ID", "x-device-id" -> "DEVICE_ID", "x-authenticated-userid" -> "X-Authenticated-Userid") + customHeaders.map(ch => { + val value = request.headers.get(ch._1) + if (value.isDefined && !value.isEmpty) { + collection.mutable.HashMap[String, Object](ch._2 -> value.get).asJava + } else { + collection.mutable.HashMap[String, Object]().asJava + } + }).reduce((a, b) => { + a.putAll(b) + a + }) + } + + def getRequest(input: java.util.Map[String, AnyRef], context: java.util.Map[String, AnyRef], operation: String): org.sunbird.commons.dto.Request = { + new org.sunbird.commons.dto.Request(context, input, operation, null); + } + + def getResult(apiId: String, actor: ActorRef, request: org.sunbird.commons.dto.Request, version: String = "3.0"): Future[Result] = { + val future = Patterns.ask(actor, request, 30000) recoverWith { case e: Exception => Future(ResponseHandler.getErrorResponse(e)) } + future.map(f => { + val result = f.asInstanceOf[Response] + result.setId(apiId) + result.setVer(version) + setResponseEnvelope(result) + val response = JavaJsonUtils.serialize(result); + result.getResponseCode match { + case ResponseCode.OK => Ok(response).as("application/json") + case ResponseCode.CLIENT_ERROR => BadRequest(response).as("application/json") + case ResponseCode.RESOURCE_NOT_FOUND => NotFound(response).as("application/json") + case _ => play.api.mvc.Results.InternalServerError(response).as("application/json") + } + }) + } + + def setResponseEnvelope(response: Response) = { + response.setTs(DateUtils.formatCurrentDate("yyyy-MM-dd'T'HH:mm:ss'Z'XXX")) + response.getParams.setResmsgid(UUID.randomUUID().toString) + } + + def setRequestContext(request:org.sunbird.commons.dto.Request, version: String, objectType: String, schemaName: String): Unit = { + var contextMap: java.util.Map[String, AnyRef] = new java.util.HashMap[String, AnyRef](){{ + put("graph_id", "domain") + put("version" , version) + put("objectType" , objectType) + put("schemaName", schemaName) + }}; + request.setObjectType(objectType); + request.setContext(contextMap) + } +} diff --git a/dial-service/app/controllers/HealthController.scala b/dial-service/app/controllers/HealthController.scala new file mode 100644 index 0000000..a880aa3 --- /dev/null +++ b/dial-service/app/controllers/HealthController.scala @@ -0,0 +1,21 @@ +package controllers + +import akka.actor.{ActorRef, ActorSystem} +import handlers.SignalHandler +import javax.inject._ +import play.api.mvc._ +import utils.{ActorNames, ApiId} + +import scala.concurrent.{ExecutionContext, Future} + +class HealthController @Inject()(@Named(ActorNames.HEALTH_ACTOR) healthActor: ActorRef, cc: ControllerComponents, actorSystem: ActorSystem, signalHandler: SignalHandler)(implicit exec: ExecutionContext) extends BaseController(cc) { + + def health(): Action[AnyContent] = Action.async { implicit request => + if (signalHandler.isShuttingDown) { + Future { ServiceUnavailable } + } else { + getResult(ApiId.APPLICATION_HEALTH, healthActor, new org.sunbird.commons.dto.Request()) + } + + } +} diff --git a/dial-service/app/controllers/v3/DialCodeController.scala b/dial-service/app/controllers/v3/DialCodeController.scala new file mode 100644 index 0000000..0e957d5 --- /dev/null +++ b/dial-service/app/controllers/v3/DialCodeController.scala @@ -0,0 +1,114 @@ +package controllers.v3 + +import akka.actor.{ActorRef, ActorSystem} +import com.google.inject.Singleton +import controllers.BaseController +import org.sunbird.utils.Constants +import play.api.mvc.ControllerComponents +import utils.{ActorNames, ApiId} + +import javax.inject.{Inject, Named} +import scala.concurrent.ExecutionContext +import scala.collection.JavaConverters._ + +@Singleton +class DialCodeController @Inject()(@Named(ActorNames.DIALCODE_ACTOR) dialCodeActor: ActorRef, cc: ControllerComponents, actorSystem: ActorSystem) (implicit exec: ExecutionContext) extends BaseController(cc) { + val objectType = "DialCode" + def generateDialCode() = Action.async { implicit request => + val headers = commonHeaders() + val body = requestBody() + val dialCodes = body.getOrDefault(Constants.DIALCODES, new java.util.HashMap()).asInstanceOf[java.util.Map[String, Object]] + dialCodes.putAll(headers) + val dialRequest = getRequest(dialCodes, headers, Constants.GENERATE_DIALCODE) + setRequestContext(dialRequest, Constants.SCHEMA_VERSION, objectType, Constants.SCHEMA_NAME) + getResult(ApiId.DIALCODE_GENERATE, dialCodeActor, dialRequest) + } + + def readDialCode(id: String) = Action.async { implicit request => + val headers = commonHeaders() + val dialCodes = new java.util.HashMap().asInstanceOf[java.util.Map[String, Object]] + dialCodes.putAll(headers) + dialCodes.putAll(Map(Constants.IDENTIFIER -> id).asJava) + val dialRequest = getRequest(dialCodes, headers, Constants.READ_DIALCODE) + setRequestContext(dialRequest, Constants.SCHEMA_VERSION, objectType, Constants.SCHEMA_NAME) + getResult(ApiId.DIALCODE_READ, dialCodeActor, dialRequest) + } + def updateDialCode(id: String) = Action.async { implicit request => + val headers = commonHeaders() + val body = requestBody() + val dialCode = body.getOrDefault(Constants.DIALCODE, new java.util.HashMap()).asInstanceOf[java.util.Map[String, Object]] + dialCode.putAll(headers) + dialCode.putAll(Map(Constants.IDENTIFIER -> id).asJava) + val dialRequest = getRequest(dialCode, headers, Constants.UPDATE_DIALCODE) + setRequestContext(dialRequest, Constants.SCHEMA_VERSION, objectType, Constants.SCHEMA_NAME) + getResult(ApiId.DIALCODE_UPDATE, dialCodeActor, dialRequest) + } + + def listDialCode() = Action.async { implicit request => + val headers = commonHeaders() + val body = requestBody() + body.putAll(headers) + val dialRequest = getRequest(body, headers, Constants.LIST_DIALCODE) + setRequestContext(dialRequest, Constants.SCHEMA_VERSION, objectType, Constants.SCHEMA_NAME) + getResult(ApiId.DIALCODE_LIST, dialCodeActor, dialRequest) + } + + def searchDialCode() = Action.async { implicit request => + val headers = commonHeaders() + val body = requestBody() + body.putAll(headers) + val dialRequest = getRequest(body, headers, Constants.SEARCH_DIALCODE) + setRequestContext(dialRequest, Constants.SCHEMA_VERSION, objectType, Constants.SCHEMA_NAME) + getResult(ApiId.DIALCODE_SEARCH, dialCodeActor, dialRequest) + } + + def syncDialCode() = Action.async { implicit request => + val headers = commonHeaders() + val body = requestBody() + body.putAll(headers) + val dialRequest = getRequest(body, headers, Constants.SYNC_DIALCODE) + setRequestContext(dialRequest, Constants.SCHEMA_VERSION, objectType, Constants.SCHEMA_NAME) + getResult(ApiId.DIALCODE_SYNC, dialCodeActor, dialRequest) + } + + def publishDialCode(id: String) = Action.async { implicit request => + val headers = commonHeaders() + val dialCodes = new java.util.HashMap().asInstanceOf[java.util.Map[String, Object]] + dialCodes.putAll(headers) + dialCodes.putAll(Map(Constants.IDENTIFIER -> id).asJava) + val dialRequest = getRequest(dialCodes, headers, Constants.PUBLISH_DIALCODE) + setRequestContext(dialRequest, Constants.SCHEMA_VERSION, objectType, Constants.SCHEMA_NAME) + getResult(ApiId.DIALCODE_PUBLISH, dialCodeActor, dialRequest) + } + + def createPublisher() = Action.async { implicit request => + val headers = commonHeaders() + val body = requestBody() + val publisher = body.getOrDefault(Constants.PUBLISHER, new java.util.HashMap()).asInstanceOf[java.util.Map[String, Object]] + publisher.putAll(headers) + val publisherRequest = getRequest(publisher, headers, Constants.CREATE_PUBLISHER) + setRequestContext(publisherRequest, Constants.SCHEMA_VERSION, objectType, Constants.SCHEMA_NAME) + getResult(ApiId.PUBLISHER_CREATE, dialCodeActor, publisherRequest) + } + + def readPublisher(id: String) = Action.async { implicit request => + val headers = commonHeaders() + val publisher = new java.util.HashMap().asInstanceOf[java.util.Map[String, Object]] + publisher.putAll(headers) + publisher.putAll(Map(Constants.IDENTIFIER -> id).asJava) + val publisherRequest = getRequest(publisher, headers, Constants.READ_PUBLISHER) + setRequestContext(publisherRequest, Constants.SCHEMA_VERSION, objectType, Constants.SCHEMA_NAME) + getResult(ApiId.PUBLISHER_READ, dialCodeActor, publisherRequest) + } + + def updatePublisher(id: String) = Action.async { implicit request => + val headers = commonHeaders() + val body = requestBody() + body.putAll(headers) + body.putAll(Map(Constants.IDENTIFIER -> id).asJava) + val publisherRequest = getRequest(body, headers, Constants.UPDATE_PUBLISHER) + setRequestContext(publisherRequest, Constants.SCHEMA_VERSION, objectType, Constants.SCHEMA_NAME) + getResult(ApiId.PUBLISHER_UPDATE, dialCodeActor, publisherRequest) + } + +} diff --git a/dial-service/app/controllers/v4/DialCodeController.scala b/dial-service/app/controllers/v4/DialCodeController.scala new file mode 100644 index 0000000..43632ac --- /dev/null +++ b/dial-service/app/controllers/v4/DialCodeController.scala @@ -0,0 +1,47 @@ +package controllers.v4 +import akka.actor.{ActorRef, ActorSystem} +import com.google.inject.Singleton +import controllers.BaseController +import org.sunbird.utils.Constants +import play.api.mvc.ControllerComponents +import utils.{ActorNames, ApiId} + +import javax.inject.{Inject, Named} +import scala.concurrent.ExecutionContext +import scala.collection.JavaConverters._ + +@Singleton +class DialCodeController @Inject()(@Named(ActorNames.DIALCODE_ACTOR) dialCodeActor: ActorRef, cc: ControllerComponents, actorSystem: ActorSystem) (implicit exec: ExecutionContext) extends BaseController(cc) { + val objectType = "DialCode" + def readDialCode(id: String) = Action.async { implicit request => + val headers = commonHeaders() + val dialCodes = new java.util.HashMap().asInstanceOf[java.util.Map[String, Object]] + dialCodes.putAll(headers) + dialCodes.putAll(Map(Constants.IDENTIFIER -> id).asJava) + val dialRequest = getRequest(dialCodes, headers, Constants.READ_DIALCODE_V4) + setRequestContext(dialRequest, Constants.SCHEMA_VERSION, objectType, Constants.SCHEMA_NAME) + getResult(ApiId.DIALCODE_READ, dialCodeActor, dialRequest) + } + + def updateDialCode(id: String) = Action.async { implicit request => + val headers = commonHeaders() + val body = requestBody() + val dialCode = body.getOrDefault(Constants.DIALCODE, new java.util.HashMap()).asInstanceOf[java.util.Map[String, Object]] + dialCode.putAll(headers) + dialCode.putAll(Map(Constants.IDENTIFIER -> id).asJava) + val dialRequest = getRequest(dialCode, headers, Constants.UPDATE_DIALCODE_V4) + setRequestContext(dialRequest, Constants.SCHEMA_VERSION, objectType, Constants.SCHEMA_NAME) + getResult(ApiId.DIALCODE_UPDATE, dialCodeActor, dialRequest) + } + + def readQRCodesBatchInfo(processId: String) = Action.async { implicit request => + val headers = commonHeaders() + val body = requestBody() + body.putAll(headers) + body.putAll(Map(Constants.PROCESS_ID -> processId).asJava) + val dialRequest = getRequest(body, headers, Constants.READ_QR_CODES_BATCH_INFO) + setRequestContext(dialRequest, Constants.SCHEMA_VERSION, objectType, Constants.SCHEMA_NAME) + getResult(ApiId.READ_QR_CODES_BATCH, dialCodeActor, dialRequest) + } + +} diff --git a/dial-service/app/filters/AccessLogFilter.scala b/dial-service/app/filters/AccessLogFilter.scala new file mode 100644 index 0000000..1858de6 --- /dev/null +++ b/dial-service/app/filters/AccessLogFilter.scala @@ -0,0 +1,45 @@ +package filters + +import akka.util.ByteString +import javax.inject.Inject +import org.sunbird.telemetry.TelemetryAccessEventUtil +import play.api.Logging +import play.api.libs.streams.Accumulator +import play.api.mvc._ + +import scala.concurrent.ExecutionContext +import scala.collection.JavaConverters._ + +class AccessLogFilter @Inject() (implicit ec: ExecutionContext) extends EssentialFilter with Logging { + + val xHeaderNames = Map("x-session-id" -> "X-Session-ID", "X-Consumer-ID" -> "x-consumer-id", "x-device-id" -> "X-Device-ID", "x-app-id" -> "APP_ID", "x-authenticated-userid" -> "X-Authenticated-Userid", "x-channel-id" -> "X-Channel-Id") + + def apply(nextFilter: EssentialAction) = new EssentialAction { + def apply(requestHeader: RequestHeader) = { + + val startTime = System.currentTimeMillis + + val accumulator: Accumulator[ByteString, Result] = nextFilter(requestHeader) + + accumulator.map { result => + val endTime = System.currentTimeMillis + val requestTime = endTime - startTime + + val path = requestHeader.uri + if(!path.contains("/health")){ + val headers = requestHeader.headers.headers.groupBy(_._1).mapValues(_.map(_._2)) + val appHeaders = headers.filter(header => xHeaderNames.keySet.contains(header._1.toLowerCase)) + .map(entry => (xHeaderNames.get(entry._1.toLowerCase()).get, entry._2.head)) + val otherDetails = Map[String, Any]("StartTime" -> startTime, "env" -> "assessment", + "RemoteAddress" -> requestHeader.remoteAddress, + "ContentLength" -> result.body.contentLength.getOrElse(0), + "Status" -> result.header.status, "Protocol" -> "http", + "path" -> path, + "Method" -> requestHeader.method.toString) + TelemetryAccessEventUtil.writeTelemetryEventLog((otherDetails ++ appHeaders).asInstanceOf[Map[String, AnyRef]].asJava) + } + result.withHeaders("Request-Time" -> requestTime.toString) + } + } + } +} \ No newline at end of file diff --git a/dial-service/app/handlers/SignalHandler.scala b/dial-service/app/handlers/SignalHandler.scala new file mode 100644 index 0000000..f98e212 --- /dev/null +++ b/dial-service/app/handlers/SignalHandler.scala @@ -0,0 +1,33 @@ +package handlers + +import java.util.concurrent.TimeUnit + +import akka.actor.ActorSystem +import javax.inject.{Inject, Singleton} +import org.slf4j.LoggerFactory +import play.api.inject.DefaultApplicationLifecycle +import sun.misc.Signal + +import scala.concurrent.duration.Duration + +@Singleton +class SignalHandler @Inject()(implicit actorSystem: ActorSystem, lifecycle: DefaultApplicationLifecycle) { + val LOG = LoggerFactory.getLogger(classOf[SignalHandler]) + val STOP_DELAY = Duration.create(30, TimeUnit.SECONDS) + var isShuttingDown = false + + println("Initializing SignalHandler...") + Signal.handle(new Signal("TERM"), new sun.misc.SignalHandler() { + override def handle(signal: Signal): Unit = { + // $COVERAGE-OFF$ Disabling scoverage as this code is impossible to test + isShuttingDown = true + println("Termination required, swallowing SIGTERM to allow current requests to finish. : " + System.currentTimeMillis()) + actorSystem.scheduler.scheduleOnce(STOP_DELAY)(() => { + println("ApplicationLifecycle stop triggered... : " + System.currentTimeMillis()) + lifecycle.stop() + })(actorSystem.dispatcher) + // $COVERAGE-ON + } + }) +} + diff --git a/dial-service/app/modules/DialModule.scala b/dial-service/app/modules/DialModule.scala new file mode 100644 index 0000000..e2a4766 --- /dev/null +++ b/dial-service/app/modules/DialModule.scala @@ -0,0 +1,16 @@ +package modules + +import com.google.inject.AbstractModule + +import org.sunbird.actors.{DialCodeActor, HealthActor} +import play.libs.akka.AkkaGuiceSupport +import utils.ActorNames +class DialModule extends AbstractModule with AkkaGuiceSupport { + + override def configure() = { + super.configure() + bindActor(classOf[HealthActor], ActorNames.HEALTH_ACTOR) + bindActor(classOf[DialCodeActor], ActorNames.DIALCODE_ACTOR) + println("Initialized application actors for DIAL service") + } +} diff --git a/dial-service/app/utils/ActorNames.scala b/dial-service/app/utils/ActorNames.scala new file mode 100644 index 0000000..17b9dbc --- /dev/null +++ b/dial-service/app/utils/ActorNames.scala @@ -0,0 +1,8 @@ +package utils + +object ActorNames { + + final val HEALTH_ACTOR = "healthActor" + final val DIALCODE_ACTOR = "dialCodeActor" + +} diff --git a/dial-service/app/utils/ApiId.scala b/dial-service/app/utils/ApiId.scala new file mode 100644 index 0000000..f2ac102 --- /dev/null +++ b/dial-service/app/utils/ApiId.scala @@ -0,0 +1,19 @@ +package utils + +object ApiId { + + final val APPLICATION_HEALTH = "sunbird.dialcode.health" + final val APPLICATION_SERVICE_HEALTH = "sunbird.dialcode.service.health" + final val DIALCODE_GENERATE = "sunbird.dialcode.generate" + final val DIALCODE_UPDATE = "sunbird.dialcode.update" + final val DIALCODE_READ = "sunbird.dialcode.read" + final val DIALCODE_LIST = "sunbird.dialcode.list" + final val DIALCODE_SEARCH = "sunbird.dialcode.search" + final val DIALCODE_SYNC = "sunbird.dialcode.sync" + final val DIALCODE_PUBLISH = "sunbird.dialcode.publish" + final val PUBLISHER_CREATE = "sunbird.publisher.create" + final val PUBLISHER_READ = "sunbird.publisher.info" + final val PUBLISHER_UPDATE = "sunbird.publisher.update" + final val READ_QR_CODES_BATCH = "sunbird.dialcode.batch.read" + +} diff --git a/dial-service/app/utils/JavaJsonUtils.scala b/dial-service/app/utils/JavaJsonUtils.scala new file mode 100644 index 0000000..600e258 --- /dev/null +++ b/dial-service/app/utils/JavaJsonUtils.scala @@ -0,0 +1,38 @@ +package utils + +import java.lang.reflect.{ParameterizedType, Type} + +import com.fasterxml.jackson.core.`type`.TypeReference +import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper} + +object JavaJsonUtils { + + @transient val mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + // mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false); + // mapper.setSerializationInclusion(Include.NON_NULL); + + @throws(classOf[Exception]) + def serialize(obj: AnyRef): String = { + mapper.writeValueAsString(obj); + } + + @throws(classOf[Exception]) + def deserialize[T: Manifest](value: String): T = mapper.readValue(value, typeReference[T]); + + private[this] def typeReference[T: Manifest] = new TypeReference[T] { + override def getType = typeFromManifest(manifest[T]) + } + + + private[this] def typeFromManifest(m: Manifest[_]): Type = { + if (m.typeArguments.isEmpty) { m.runtimeClass } + // $COVERAGE-OFF$Disabling scoverage as this code is impossible to test + else new ParameterizedType { + def getRawType = m.runtimeClass + def getActualTypeArguments = m.typeArguments.map(typeFromManifest).toArray + def getOwnerType = null + } + // $COVERAGE-ON$ + } +} diff --git a/conf/application.conf b/dial-service/conf/application.conf similarity index 65% rename from conf/application.conf rename to dial-service/conf/application.conf index 89adb76..7b9117a 100644 --- a/conf/application.conf +++ b/dial-service/conf/application.conf @@ -49,8 +49,8 @@ play.http { play.server.netty { # If you run Play on Linux, you can use Netty's native socket transport # for higher performance with less garbage. - #transport = "native" - maxChunkSize = 30000000 + log.wire = true + transport = "jdk" } ## WS (HTTP Client) @@ -70,9 +70,21 @@ play.cache { # If you want to bind several caches, you can bind the individually #bindCaches = ["db-cache", "user-cache", "session-cache"] } +## Secret key +# http://www.playframework.com/documentation/latest/ApplicationSecret +# ~~~~~ +# The secret key is used to sign Play's session cookie. +# This must be changed for production, but we don't recommend you change it in this file. +play.http.secret.key = a-long-secret-to-calm-the-rage-of-the-entropy-gods //play.http.filters= filters.HealthCheckFilter +play.modules.enabled += "modules.DialModule" + +akka { + serialization.jackson-modules = ["com.fasterxml.jackson.module.scala.DefaultScalaModule"] +} + # Logger # ~~~~~ # You can also configure logback (http://logback.qos.ch/), @@ -110,6 +122,73 @@ logger.play=INFO # Logger provided to your application: logger.application=DEBUG +## Filter Configuration +# https://www.playframework.com/documentation/latest/Filters +# ~~~~~ +# There are a number of built-in filters that can be enabled and configured +# to give Play greater security. +# +play.filters { + + # Enabled filters are run automatically against Play. + # CSRFFilter, AllowedHostFilters, and SecurityHeadersFilters are enabled by default. + enabled = [filters.AccessLogFilter] + + # Disabled filters remove elements from the enabled list. + # disabled += filters.CSRFFilter + + + ## CORS filter configuration + # https://www.playframework.com/documentation/latest/CorsFilter + # ~~~~~ + # CORS is a protocol that allows web applications to make requests from the browser + # across different domains. + # NOTE: You MUST apply the CORS configuration before the CSRF filter, as CSRF has + # dependencies on CORS settings. + cors { + # Filter paths by a whitelist of path prefixes + #pathPrefixes = ["/some/path", ...] + + # The allowed origins. If null, all origins are allowed. + #allowedOrigins = ["http://www.example.com"] + + # The allowed HTTP methods. If null, all methods are allowed + #allowedHttpMethods = ["GET", "POST"] + } + + ## Security headers filter configuration + # https://www.playframework.com/documentation/latest/SecurityHeaders + # ~~~~~ + # Defines security headers that prevent XSS attacks. + # If enabled, then all options are set to the below configuration by default: + headers { + # The X-Frame-Options header. If null, the header is not set. + #frameOptions = "DENY" + + # The X-XSS-Protection header. If null, the header is not set. + #xssProtection = "1; mode=block" + + # The X-Content-Type-Options header. If null, the header is not set. + #contentTypeOptions = "nosniff" + + # The X-Permitted-Cross-Domain-Policies header. If null, the header is not set. + #permittedCrossDomainPolicies = "master-only" + + # The Content-Security-Policy header. If null, the header is not set. + #contentSecurityPolicy = "default-src 'self'" + } + + ## Allowed hosts filter configuration + # https://www.playframework.com/documentation/latest/AllowedHostsFilter + # ~~~~~ + # Play provides a filter that lets you configure which hosts can access your application. + # This is useful to prevent cache poisoning attacks. + hosts { + # Allow requests to example.com, its subdomains, and localhost:9000. + #allowed = [".example.com", "localhost:9000"] + } +} + # APP Specific config # ~~~~~ # Application specific configurations can be provided here diff --git a/dial-service/conf/logback.xml b/dial-service/conf/logback.xml new file mode 100644 index 0000000..1e4fdaf --- /dev/null +++ b/dial-service/conf/logback.xml @@ -0,0 +1,28 @@ + + + + + + + + + + %d %msg%n + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dial-service/conf/routes b/dial-service/conf/routes new file mode 100644 index 0000000..6d24577 --- /dev/null +++ b/dial-service/conf/routes @@ -0,0 +1,18 @@ +# Routes +# This file defines all application routes (Higher priority routes first) +# ~~~~ +GET /health controllers.HealthController.health + +POST /dialcode/v3/generate controllers.v3.DialCodeController.generateDialCode() +PATCH /dialcode/v3/update/:id controllers.v3.DialCodeController.updateDialCode(id: String) +POST /dialcode/v3/list controllers.v3.DialCodeController.listDialCode() +GET /dialcode/v3/read/:id controllers.v3.DialCodeController.readDialCode(id: String) +POST /dialcode/v3/search controllers.v3.DialCodeController.searchDialCode() +#POST /dialcode/v3/sync controllers.v3.DialCodeController.syncDialCode() +POST /dialcode/v3/publish/:id controllers.v3.DialCodeController.publishDialCode(id: String) +POST /dialcode/v3/publisher/create controllers.v3.DialCodeController.createPublisher() +GET /dialcode/v3/publisher/read/:id controllers.v3.DialCodeController.readPublisher(id: String) +PATCH /dialcode/v3/publisher/update/:id controllers.v3.DialCodeController.updatePublisher(id: String) +PATCH /dialcode/v4/update/:id controllers.v4.DialCodeController.updateDialCode(id: String) +GET /dialcode/v4/read/:id controllers.v4.DialCodeController.readDialCode(id: String) +GET /dialcode/v4/batch/read/:processid controllers.v4.DialCodeController.readQRCodesBatchInfo(processid: String) \ No newline at end of file diff --git a/dial-service/pom.xml b/dial-service/pom.xml new file mode 100644 index 0000000..ef149b3 --- /dev/null +++ b/dial-service/pom.xml @@ -0,0 +1,254 @@ + + + + org.sunbird + sunbird-dial-service + 1.0-SNAPSHOT + + 4.0.0 + dial-service + play2 + + http://maven.apache.org + + + + scalaz-bintray + Scalaz Bintray - releases + https://dl.bintray.com/scalaz/releases/ + + false + + + + + + typesafe-releases-plugins + https://repo.typesafe.com/typesafe/releases/ + + false + + + + + 2.7.2 + 2.12.11 + 2.12 + 2.5.22 + 2.13.5 + 1.0.0-rc5 + 1.0.0 + + + + + com.typesafe.play + play_${scala.major.version} + ${play2.version} + + + com.fasterxml.jackson.core + jackson-core + + + com.fasterxml.jackson.module + jackson-module-scala_${scala.major.version} + + + com.fasterxml.jackson.core + jackson-annotations + + + com.fasterxml.jackson.module + jackson-module-parameter-names + + + com.fasterxml.jackson.dataformat + jackson-dataformat-cbor + + + + + com.typesafe.play + play-guice_${scala.major.version} + ${play2.version} + + + jackson-databind + com.fasterxml.jackson.core + + + com.fasterxml.jackson.module + jackson-module-scala_${scala.maj.version} + + + com.fasterxml.jackson.core + jackson-annotations + + + + + com.typesafe.play + filters-helpers_${scala.major.version} + ${play2.version} + + + com.typesafe.play + play-logback_${scala.major.version} + ${play2.version} + runtime + + + com.typesafe.play + play-netty-server_${scala.major.version} + + + io.netty + netty-transport-native-epoll + + + ${play2.version} + runtime + + + com.fasterxml.jackson.dataformat + jackson-dataformat-cbor + ${jackson.version} + + + com.fasterxml.jackson.module + jackson-module-parameter-names + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + org.scala-lang + scala-library + ${scala.version} + + + org.scalatest + scalatest_${scala.major.version} + 3.1.2 + test + + + com.typesafe.play + play-specs2_${scala.major.version} + + + io.netty + netty-transport-native-epoll + + + ${play2.version} + test + + + org.joda + joda-convert + 2.2.1 + + + com.github.danielwegener + logback-kafka-appender + + + org.xerial.snappy + snappy-java + + + 0.2.0-RC2 + + + com.fasterxml.jackson.module + jackson-module-scala_2.12 + ${jackson.version} + + + io.netty + netty-all + 4.1.68.Final + + + io.netty + netty-resolver-dns-native-macos + 4.1.68.Final + osx-aarch_64 + + + io.netty + netty-codec + 4.1.68.Final + + + io.netty + netty-transport-native-epoll + 4.1.68.Final + + + org.sunbird + dial-actors + 1.0-SNAPSHOT + jar + + + + + ${basedir}/app + + + ${basedir}/conf + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M4 + + + **/*Spec.java + **/*Test.java + + + + + com.google.code.play2-maven-plugin + play2-maven-plugin + ${play2.plugin.version} + true + + + com.google.code.sbt-compiler-maven-plugin + sbt-compiler-maven-plugin + ${sbt-compiler.plugin.version} + + -feature -deprecation -Xfatal-warnings + + + + org.scoverage + scoverage-maven-plugin + ${scoverage.plugin.version} + + ${scala.version} + true + true + .*RoutesPrefix.*;.*Routes.*;.*javascript.* + + + + + diff --git a/pom.xml b/pom.xml index f5a390c..46b9041 100644 --- a/pom.xml +++ b/pom.xml @@ -6,347 +6,66 @@ org.sunbird sunbird-dial-service - play2 + pom + + dial-core + dial-actors + dial-service + 1.0-SNAPSHOT - 2.4.6 + 2.7.2 1.0.0-rc5 - 2.11.12 + 2.5.22 + 2.12.11 + 2.12 2.13.5 UTF-8 1.4.1 1.0.0 - - - typesafe-releases-plugins - https://repo.typesafe.com/typesafe/releases/ - - false - - - - - - - com.typesafe - config - 1.3.0 - - - org.scalaz.stream - scalaz-stream_2.11 - 0.8.6a - - - ch.qos.logback - logback-classic - 1.2.0 - - - ch.qos.logback - logback-core - 1.2.9 - - - com.typesafe.play - play_2.11 - ${play2.version} - - - ch.qos.logback - logback-classic - - - ch.qos.logback - logback-core - - - xerces - xercesImpl - - - - - xerces - xercesImpl - 2.12.2 - - - com.typesafe.play - play-netty-server_2.11 - - - ${play2.version} - runtime - - - com.typesafe.play - play-specs2_2.11 - ${play2.version} - - - com.fasterxml.jackson.core - jackson-databind - - - test - - - org.scala-lang - scala-library - ${scala.version} - - - com.typesafe.akka - akka-actor_2.11 - 2.4.8 - - - - org.apache.httpcomponents - httpclient - 4.5.1 - - - - com.fasterxml.jackson.core - jackson-core - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-annotations - ${jackson.version} - - - com.typesafe.akka - akka-slf4j_2.11 - 2.4.6 - - - - com.google.guava - guava - 18.0 - - - com.typesafe.play - filters-helpers_2.11 - 2.4.6 - - - com.datastax.cassandra - cassandra-driver-core - 3.1.2 - - - com.google.guava - guava - - - io.netty - netty-codec - - - - - io.netty - netty-codec - 4.1.68.Final - - - org.cassandraunit - cassandra-unit - 3.11.2.0 - test - - - com.google.guava - guava - - - - - com.datastax.cassandra - cassandra-driver-mapping - 3.1.2 - - - redis.clients - jedis - 2.6.2 - - - org.elasticsearch.client - elasticsearch-rest-high-level-client - - - com.fasterxml.jackson.dataformat - jackson-dataformat-cbor - - - 7.17.13 - - - com.fasterxml.jackson.dataformat - jackson-dataformat-cbor - 2.12.1 - - - com.google.code.gson - gson - 2.8.9 - - - commons-collections - commons-collections - 3.2.2 - compile - - - com.github.danielwegener - logback-kafka-appender - 0.1.0 - - - org.apache.kafka - kafka-clients - - - org.xerial.snappy - snappy-java - - - 1.1.0 - - - org.xerial.snappy - snappy-java - 1.1.10.4 - - - - org.glassfish - jakarta.json - 2.0.1 - - - com.apicatalog - titanium-json-ld - 1.2.0 - - - commons-io - commons-io - 2.6 - - - org.leadpony.justify - justify - 3.1.0 - - - ${basedir}/app - ${basedir}/test - - - ${basedir}/conf - - - - - ${basedir}/test/resources - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - 11 - - - - org.apache.maven.plugins - maven-surefire-plugin - 3.0.0-M4 - - - **/*Spec.java - **/*Test.java - - - - - com.google.code.play2-maven-plugin - play2-maven-plugin - ${play2.plugin.version} - true - - - com.google.code.play2-maven-plugin - play2-provider-play24 - ${play2.plugin.version} - - - - - com.google.code.sbt-compiler-maven-plugin - sbt-compiler-maven-plugin - ${sbt-compiler.plugin.version} - - -feature -deprecation -Xfatal-warnings - - - - org.scoverage - scoverage-maven-plugin - ${scoverage.plugin.version} - - ${scala.version} - true - true - .*RoutesPrefix.*;.*Routes.*;.*javascript.* - - - - org.jacoco - jacoco-maven-plugin - 0.8.5 - - - default-prepare-agent - - prepare-agent - - - - default-report - prepare-package - - report - - - - report-aggregate - verify - - report-aggregate - - - - - + + + + org.codehaus.mojo + versions-maven-plugin + 2.5 + + false + + + + maven-assembly-plugin + 3.3.0 + + + src/assembly/bin.xml + + + + + org.scoverage + scoverage-maven-plugin + ${scoverage.plugin.version} + + ${scala.version} + true + true + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 11 + + + + \ No newline at end of file