From 0528d665d842e9740c58b94e386a0f72b10b49ea Mon Sep 17 00:00:00 2001 From: chandresh pancholi Date: Fri, 6 May 2022 15:40:44 +0530 Subject: [PATCH] litmus proxy batch experiment/variants api --- Dockerfile.core | 4 +- Dockerfile.proxy | 4 +- litmus-cache/pom.xml | 4 +- litmus-client/pom.xml | 6 +- .../navi/medici/client/ClickStreamClient.java | 7 ++- .../medici/client/HttpExperimentFetcher.java | 3 + .../medici/client/OkHttpClientContainer.java | 2 +- litmus-core/pom.xml | 12 ++-- litmus-db/pom.xml | 6 +- litmus-liquibase/pom.xml | 4 +- litmus-mock/pom.xml | 8 +-- litmus-model/pom.xml | 4 +- litmus-proxy/pom.xml | 16 +++-- .../controller/LitmusProxyController.java | 27 ++++++-- .../model/request/v1/ExperimentResponse.java | 19 ++++++ .../request/v1/ExperimentVariantResponse.java | 17 ++++++ .../v1/FetchBatchExperimentRequest.java | 20 ++++++ .../request/v1/FetchBatchVariantRequest.java | 20 ++++++ .../navi/medici/service/LitmusService.java | 17 ++++++ .../medici/service/LitmusServiceImpl.java | 61 +++++++++++++++++++ .../src/main/resources/application.properties | 1 + litmus-util/pom.xml | 4 +- pom.xml | 2 +- 23 files changed, 225 insertions(+), 43 deletions(-) create mode 100644 litmus-proxy/src/main/java/com/navi/medici/model/request/v1/ExperimentResponse.java create mode 100644 litmus-proxy/src/main/java/com/navi/medici/model/request/v1/ExperimentVariantResponse.java create mode 100644 litmus-proxy/src/main/java/com/navi/medici/model/request/v1/FetchBatchExperimentRequest.java create mode 100644 litmus-proxy/src/main/java/com/navi/medici/model/request/v1/FetchBatchVariantRequest.java create mode 100644 litmus-proxy/src/main/java/com/navi/medici/service/LitmusService.java create mode 100644 litmus-proxy/src/main/java/com/navi/medici/service/LitmusServiceImpl.java diff --git a/Dockerfile.core b/Dockerfile.core index 751318b..358733b 100644 --- a/Dockerfile.core +++ b/Dockerfile.core @@ -1,5 +1,5 @@ FROM 193044292705.dkr.ecr.ap-south-1.amazonaws.com/common/maven:3.8.3-openjdk-17-slim as builder -ARG ARTIFACT_VERSION=2.0.2-SNAPSHOT +ARG ARTIFACT_VERSION=2.0.3-SNAPSHOT RUN mkdir -p /build WORKDIR /build COPY . /build @@ -7,7 +7,7 @@ RUN mvn clean install -DskipTests RUN mvn clean verify -DskipTests -Dartifact.version=${ARTIFACT_VERSION} FROM 193044292705.dkr.ecr.ap-south-1.amazonaws.com/common/openjdk:17-slim-bullseye -ARG ARTIFACT_VERSION=2.0.2-SNAPSHOT +ARG ARTIFACT_VERSION=2.0.3-SNAPSHOT RUN mkdir -p /usr/local RUN apt-get update -y && apt-get -y install fontconfig libpng-dev WORKDIR /usr/local/ diff --git a/Dockerfile.proxy b/Dockerfile.proxy index 1c2b24c..f8be5ba 100644 --- a/Dockerfile.proxy +++ b/Dockerfile.proxy @@ -1,5 +1,5 @@ FROM 193044292705.dkr.ecr.ap-south-1.amazonaws.com/common/maven:3.8.3-openjdk-17-slim as builder -ARG ARTIFACT_VERSION=2.0.2-SNAPSHOT +ARG ARTIFACT_VERSION=2.0.3-SNAPSHOT RUN mkdir -p /build WORKDIR /build COPY . /build @@ -7,7 +7,7 @@ RUN mvn clean install -DskipTests RUN mvn clean verify -DskipTests -Dartifact.version=${ARTIFACT_VERSION} FROM 193044292705.dkr.ecr.ap-south-1.amazonaws.com/common/openjdk:17-slim-bullseye -ARG ARTIFACT_VERSION=2.0.2-SNAPSHOT +ARG ARTIFACT_VERSION=2.0.3-SNAPSHOT RUN mkdir -p /usr/local RUN apt-get update -y && apt-get -y install fontconfig libpng-dev WORKDIR /usr/local/ diff --git a/litmus-cache/pom.xml b/litmus-cache/pom.xml index a2678d3..05c265c 100644 --- a/litmus-cache/pom.xml +++ b/litmus-cache/pom.xml @@ -4,11 +4,11 @@ litmus com.navi.medici - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT litmus-cache - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT jar litmus-cache diff --git a/litmus-client/pom.xml b/litmus-client/pom.xml index 90e498d..0cff693 100644 --- a/litmus-client/pom.xml +++ b/litmus-client/pom.xml @@ -5,11 +5,11 @@ litmus com.navi.medici - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT litmus-client - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT jar litmus-client @@ -43,7 +43,7 @@ com.navi.medici litmus-model - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT diff --git a/litmus-client/src/main/java/com/navi/medici/client/ClickStreamClient.java b/litmus-client/src/main/java/com/navi/medici/client/ClickStreamClient.java index 857d6a6..8e85b3c 100644 --- a/litmus-client/src/main/java/com/navi/medici/client/ClickStreamClient.java +++ b/litmus-client/src/main/java/com/navi/medici/client/ClickStreamClient.java @@ -5,6 +5,7 @@ import com.navi.medici.clickstream.ClickStreamPayload; import com.navi.medici.config.LitmusConfig; import com.navi.medici.response.LitmusExperimentResponse; import com.navi.medici.util.JacksonUtils; +import io.micrometer.core.annotation.Timed; import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.MeterRegistry; import lombok.extern.log4j.Log4j2; @@ -32,6 +33,7 @@ public class ClickStreamClient { this.meterRegistry = meterRegistry; } + @Timed(value = "litmus_client_click_stream_publish_latency", percentiles = {0.90, 0.95, 0.99}) public void publish(String experimentName, ClickStreamPayload payload) { String requestBody = JacksonUtils.objectToString(payload); Request request = new Request.Builder() @@ -56,15 +58,14 @@ public class ClickStreamClient { log.error("clickstream ingestion received non-2xx. status: {}", response.code()); } } catch (Exception e) { - Counter.builder("litmus_client_click_stream_event_ingestion") + log.error("clickstream event ingestion failed. ", e); + Counter.builder("litmus_client_click_stream_event_ingestion_failed") .tag("vertical", vertical) .tag("experiment_name", experimentName) .tag("app_name", appName) .tag("exception", e.getMessage()) .register(meterRegistry) .increment(); - - log.error("clickstream event ingestion failed. ", e); } } } diff --git a/litmus-client/src/main/java/com/navi/medici/client/HttpExperimentFetcher.java b/litmus-client/src/main/java/com/navi/medici/client/HttpExperimentFetcher.java index b9394dc..afd411e 100644 --- a/litmus-client/src/main/java/com/navi/medici/client/HttpExperimentFetcher.java +++ b/litmus-client/src/main/java/com/navi/medici/client/HttpExperimentFetcher.java @@ -7,6 +7,7 @@ import com.navi.medici.response.LitmusExperimentResponse; import com.navi.medici.response.LitmusResponse; import com.navi.medici.util.JacksonUtils; import com.navi.medici.util.LitmusURLs; +import io.micrometer.core.annotation.Timed; import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.MeterRegistry; import java.net.URL; @@ -40,6 +41,7 @@ public class HttpExperimentFetcher implements ExperimentFetcher { } @Override + @Timed(value = "litmus_client_fetch_experiments_latency", percentiles = {0.90, 0.95, 0.99}) public LitmusExperimentResponse fetchExperiments(String vertical, Long pollingTime) throws LitmusException { URL experimentUrl = litmusURLs .getLitmusExperimentsURL(projectName, projectNamePrefix); @@ -100,6 +102,7 @@ public class HttpExperimentFetcher implements ExperimentFetcher { } } + @Timed(value = "litmus_client_segment_id_exists_latency", percentiles = {0.90, 0.95, 0.99}) public LitmusResponse segmentIdExists(String segmentName, String id) { URL segmentIdUrl = this.litmusURLs.getSegmentIdURL(); Request request = new Request.Builder() diff --git a/litmus-client/src/main/java/com/navi/medici/client/OkHttpClientContainer.java b/litmus-client/src/main/java/com/navi/medici/client/OkHttpClientContainer.java index 3ca58c2..452af94 100644 --- a/litmus-client/src/main/java/com/navi/medici/client/OkHttpClientContainer.java +++ b/litmus-client/src/main/java/com/navi/medici/client/OkHttpClientContainer.java @@ -17,7 +17,7 @@ public class OkHttpClientContainer { okHttpClient = new OkHttpClient.Builder() .readTimeout(1, TimeUnit.SECONDS) .callTimeout(1, TimeUnit.SECONDS) - .connectTimeout(1, TimeUnit.SECONDS) + .connectTimeout(10, TimeUnit.SECONDS) .build(); } } diff --git a/litmus-core/pom.xml b/litmus-core/pom.xml index c391c73..8badf5e 100644 --- a/litmus-core/pom.xml +++ b/litmus-core/pom.xml @@ -5,11 +5,11 @@ litmus com.navi.medici - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT litmus-core - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT jar litmus-core @@ -31,25 +31,25 @@ com.navi.medici litmus-model - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT com.navi.medici litmus-db - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT com.navi.medici litmus-cache - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT com.navi.medici litmus-util - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT diff --git a/litmus-db/pom.xml b/litmus-db/pom.xml index fddf879..2381e8c 100644 --- a/litmus-db/pom.xml +++ b/litmus-db/pom.xml @@ -4,11 +4,11 @@ litmus com.navi.medici - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT litmus-db - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT jar litmus-db @@ -27,7 +27,7 @@ com.navi.medici litmus-model - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT diff --git a/litmus-liquibase/pom.xml b/litmus-liquibase/pom.xml index 6b9a955..622d148 100644 --- a/litmus-liquibase/pom.xml +++ b/litmus-liquibase/pom.xml @@ -4,11 +4,11 @@ litmus com.navi.medici - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT litmus-liquibase - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT jar litmus-liquibase diff --git a/litmus-mock/pom.xml b/litmus-mock/pom.xml index 621fd8c..19f9bc1 100644 --- a/litmus-mock/pom.xml +++ b/litmus-mock/pom.xml @@ -4,11 +4,11 @@ litmus com.navi.medici - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT litmus-mock - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT jar litmus-mock @@ -16,13 +16,13 @@ com.navi.medici litmus-model - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT com.navi.medici litmus-client - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT diff --git a/litmus-model/pom.xml b/litmus-model/pom.xml index 8da069a..b52bcc3 100644 --- a/litmus-model/pom.xml +++ b/litmus-model/pom.xml @@ -5,11 +5,11 @@ litmus com.navi.medici - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT litmus-model - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT jar litmus-model diff --git a/litmus-proxy/pom.xml b/litmus-proxy/pom.xml index 8247c26..ea6e152 100644 --- a/litmus-proxy/pom.xml +++ b/litmus-proxy/pom.xml @@ -4,11 +4,11 @@ litmus com.navi.medici - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT litmus-proxy - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT jar litmus-proxy @@ -17,13 +17,13 @@ com.navi.medici litmus-model - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT com.navi.medici litmus-client - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT @@ -31,8 +31,6 @@ spring-boot-starter-web - - org.springframework.boot spring-boot-starter-actuator @@ -44,6 +42,12 @@ + + org.springdoc + springdoc-openapi-ui + 1.6.8 + + diff --git a/litmus-proxy/src/main/java/com/navi/medici/controller/LitmusProxyController.java b/litmus-proxy/src/main/java/com/navi/medici/controller/LitmusProxyController.java index cfe048c..b9e9369 100644 --- a/litmus-proxy/src/main/java/com/navi/medici/controller/LitmusProxyController.java +++ b/litmus-proxy/src/main/java/com/navi/medici/controller/LitmusProxyController.java @@ -1,12 +1,16 @@ package com.navi.medici.controller; import com.navi.medici.litmus.Litmus; +import com.navi.medici.model.request.v1.FetchBatchExperimentRequest; +import com.navi.medici.model.request.v1.FetchBatchVariantRequest; +import com.navi.medici.service.LitmusService; import io.micrometer.core.annotation.Timed; -import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @@ -14,12 +18,12 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/v1/proxy") @Log4j2 -public record LitmusProxyController(Litmus litmus) { +public record LitmusProxyController(Litmus litmus, LitmusService litmusService) { @GetMapping(value = "/experiment", produces = MediaType.APPLICATION_JSON_VALUE) @Timed(value = "litmus.proxy.fetch.experiment", percentiles = {0.95, 0.99}, extraTags = {"mt", "fetch"} ) public ResponseEntity fetch(@RequestParam("name") String experimentName) { - var result = litmus.isEnabled(experimentName); + var result = litmusService.fetchExperimentResponse(experimentName); return ResponseEntity.ok(result); } @@ -27,9 +31,24 @@ public record LitmusProxyController(Litmus litmus) { @GetMapping(value = "/variant", produces = MediaType.APPLICATION_JSON_VALUE) @Timed(value = "litmus.proxy.fetch.experiment", percentiles = {0.95, 0.99}, extraTags = {"mt", "fetchVariants"}) public ResponseEntity fetchVariants(@RequestParam("name") String variantName) { - var variant = litmus.getVariant(variantName); + var variant = litmusService.fetchVariant(variantName); return ResponseEntity.ok(variant); } + @PostMapping(value = "/batch/experiments", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity fetchBatchExperiment(@RequestBody FetchBatchExperimentRequest fetchBatchExperimentRequest) { + var response = litmusService.batchExperimentResponse(fetchBatchExperimentRequest); + + return ResponseEntity.ok(response); + } + + @PostMapping(value = "/batch/variants", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity fetchBatchVariantExperiment(@RequestBody FetchBatchVariantRequest fetchBatchVariantRequest) { + var response = litmusService.batchVariantResponse(fetchBatchVariantRequest); + + return ResponseEntity.ok(response); + } + + } diff --git a/litmus-proxy/src/main/java/com/navi/medici/model/request/v1/ExperimentResponse.java b/litmus-proxy/src/main/java/com/navi/medici/model/request/v1/ExperimentResponse.java new file mode 100644 index 0000000..4c48bfa --- /dev/null +++ b/litmus-proxy/src/main/java/com/navi/medici/model/request/v1/ExperimentResponse.java @@ -0,0 +1,19 @@ +package com.navi.medici.model.request.v1; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldDefaults; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@FieldDefaults(level = AccessLevel.PRIVATE) +public class ExperimentResponse { + String experimentName; + + Boolean response; +} diff --git a/litmus-proxy/src/main/java/com/navi/medici/model/request/v1/ExperimentVariantResponse.java b/litmus-proxy/src/main/java/com/navi/medici/model/request/v1/ExperimentVariantResponse.java new file mode 100644 index 0000000..8735186 --- /dev/null +++ b/litmus-proxy/src/main/java/com/navi/medici/model/request/v1/ExperimentVariantResponse.java @@ -0,0 +1,17 @@ +package com.navi.medici.model.request.v1; + +import com.navi.medici.variants.Variant; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class ExperimentVariantResponse { + String experimentName; + + Variant variant; +} diff --git a/litmus-proxy/src/main/java/com/navi/medici/model/request/v1/FetchBatchExperimentRequest.java b/litmus-proxy/src/main/java/com/navi/medici/model/request/v1/FetchBatchExperimentRequest.java new file mode 100644 index 0000000..3ee410a --- /dev/null +++ b/litmus-proxy/src/main/java/com/navi/medici/model/request/v1/FetchBatchExperimentRequest.java @@ -0,0 +1,20 @@ +package com.navi.medici.model.request.v1; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldDefaults; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +@FieldDefaults(level = AccessLevel.PRIVATE) +public class FetchBatchExperimentRequest { + @JsonProperty("experiment_names") + List experimentNames; +} diff --git a/litmus-proxy/src/main/java/com/navi/medici/model/request/v1/FetchBatchVariantRequest.java b/litmus-proxy/src/main/java/com/navi/medici/model/request/v1/FetchBatchVariantRequest.java new file mode 100644 index 0000000..f2ffb90 --- /dev/null +++ b/litmus-proxy/src/main/java/com/navi/medici/model/request/v1/FetchBatchVariantRequest.java @@ -0,0 +1,20 @@ +package com.navi.medici.model.request.v1; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldDefaults; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +@FieldDefaults(level = AccessLevel.PRIVATE) +public class FetchBatchVariantRequest { + @JsonProperty("experiment_names") + List experimentNames; +} diff --git a/litmus-proxy/src/main/java/com/navi/medici/service/LitmusService.java b/litmus-proxy/src/main/java/com/navi/medici/service/LitmusService.java new file mode 100644 index 0000000..c05426b --- /dev/null +++ b/litmus-proxy/src/main/java/com/navi/medici/service/LitmusService.java @@ -0,0 +1,17 @@ +package com.navi.medici.service; + +import com.navi.medici.model.request.v1.ExperimentResponse; +import com.navi.medici.model.request.v1.ExperimentVariantResponse; +import com.navi.medici.model.request.v1.FetchBatchExperimentRequest; +import com.navi.medici.model.request.v1.FetchBatchVariantRequest; +import java.util.List; + +public interface LitmusService { + List batchExperimentResponse(FetchBatchExperimentRequest fetchBatchExperimentRequest); + + ExperimentResponse fetchExperimentResponse(String experimentName); + + ExperimentVariantResponse fetchVariant(String experimentName); + + List batchVariantResponse(FetchBatchVariantRequest fetchBatchVariantRequest); +} diff --git a/litmus-proxy/src/main/java/com/navi/medici/service/LitmusServiceImpl.java b/litmus-proxy/src/main/java/com/navi/medici/service/LitmusServiceImpl.java new file mode 100644 index 0000000..dd5e39e --- /dev/null +++ b/litmus-proxy/src/main/java/com/navi/medici/service/LitmusServiceImpl.java @@ -0,0 +1,61 @@ +package com.navi.medici.service; + +import com.navi.medici.litmus.Litmus; +import com.navi.medici.model.request.v1.ExperimentResponse; +import com.navi.medici.model.request.v1.ExperimentVariantResponse; +import com.navi.medici.model.request.v1.FetchBatchExperimentRequest; +import com.navi.medici.model.request.v1.FetchBatchVariantRequest; +import java.util.List; +import java.util.stream.Collectors; +import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Service; + +@Service +@Log4j2 +public record LitmusServiceImpl(Litmus litmus) implements LitmusService { + + @Override + public List batchExperimentResponse(FetchBatchExperimentRequest fetchBatchExperimentRequest) { + return fetchBatchExperimentRequest.getExperimentNames().stream().map(experimentName -> { + var result = litmus.isEnabled(experimentName); + + return ExperimentResponse.builder() + .response(result) + .experimentName(experimentName) + .build(); + }).collect(Collectors.toList()); + } + + @Override + public ExperimentResponse fetchExperimentResponse(String experimentName) { + var result = litmus.isEnabled(experimentName); + return ExperimentResponse.builder() + .experimentName(experimentName) + .response(result) + .build(); + } + + @Override + public ExperimentVariantResponse fetchVariant(String experimentName) { + var result = litmus.getVariant(experimentName); + + return ExperimentVariantResponse.builder() + .variant(result) + .experimentName(experimentName) + .build(); + } + + @Override + public List batchVariantResponse(FetchBatchVariantRequest fetchBatchVariantRequest) { + return fetchBatchVariantRequest.getExperimentNames().stream().map(experimentName -> { + var result = litmus.getVariant(experimentName); + + return ExperimentVariantResponse.builder() + .variant(result) + .experimentName(experimentName) + .build(); + }).collect(Collectors.toList()); + } + + +} diff --git a/litmus-proxy/src/main/resources/application.properties b/litmus-proxy/src/main/resources/application.properties index 71cfc09..e3d7c36 100644 --- a/litmus-proxy/src/main/resources/application.properties +++ b/litmus-proxy/src/main/resources/application.properties @@ -11,3 +11,4 @@ management.metrics.kafka.producer.enabled=true litmus.api.endpoint=${LITMUS_API_ENDPOINT:https://dev-litmus-core.np.navi-tech.in/litmus-core/v1} clickstream.api.endpoint=${CLICK_STREAM_API_ENDPOINT:https://dev-janus.np.navi-tech.in/events/json} +springdoc.swagger-ui.path=/swagger-ui.html \ No newline at end of file diff --git a/litmus-util/pom.xml b/litmus-util/pom.xml index 07de400..69f98a2 100644 --- a/litmus-util/pom.xml +++ b/litmus-util/pom.xml @@ -4,11 +4,11 @@ litmus com.navi.medici - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT litmus-util - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT litmus-util diff --git a/pom.xml b/pom.xml index c68199e..7505746 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.navi.medici litmus - 2.0.2-SNAPSHOT + 2.0.3-SNAPSHOT pom litmus