From 02cf580e9895ac17825b41e9bdb490eb445195cc Mon Sep 17 00:00:00 2001 From: Shailesh Pandey <110380977+shailesh-egov@users.noreply.github.com> Date: Tue, 27 Jun 2023 15:09:32 +0530 Subject: [PATCH 1/4] Added custem filter component and filter configuration fetch from master configuraiton (#186) --- .../main/java/com/tarento/analytics/constant/Constants.java | 3 ++- .../tarento/analytics/service/impl/MetadataServiceImpl.java | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/constant/Constants.java b/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/constant/Constants.java index 26624e5a21b..6e968531324 100644 --- a/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/constant/Constants.java +++ b/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/constant/Constants.java @@ -104,7 +104,8 @@ public interface DashBoardConfig { final static String NAME = "name"; final static String ID = "id"; final static String TITLE = "title"; - + final static String CUSTOM_FILTER_COMPONENT = "filter"; + final static String CUSTOM_FILTER_CONFIGURATION = "filterConfig"; } public interface MDMSKeys { final static String CODE = "code"; diff --git a/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/service/impl/MetadataServiceImpl.java b/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/service/impl/MetadataServiceImpl.java index 109cc09c409..3a9f94a2023 100644 --- a/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/service/impl/MetadataServiceImpl.java +++ b/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/service/impl/MetadataServiceImpl.java @@ -103,6 +103,12 @@ public ArrayNode getDashboardConfiguration(String dashboardId, String catagory, visArray.add(visual); }); } + // Check if filter component exists in config then add into response config + if (dbNode.has(Constants.DashBoardConfig.CUSTOM_FILTER_COMPONENT)) + copyDashboard.set(Constants.DashBoardConfig.CUSTOM_FILTER_COMPONENT, dbNode.get(Constants.DashBoardConfig.CUSTOM_FILTER_COMPONENT)); + // Check if FILTER CONFIGURATION exists in config then add into response config + if (dbNode.has(Constants.DashBoardConfig.CUSTOM_FILTER_CONFIGURATION)) + copyDashboard.set(Constants.DashBoardConfig.CUSTOM_FILTER_CONFIGURATION, dbNode.get(Constants.DashBoardConfig.CUSTOM_FILTER_CONFIGURATION)); } copyDashboard.set(Constants.DashBoardConfig.NAME, name); copyDashboard.set(Constants.DashBoardConfig.ID, id); From 03d6d62307128fa3488c18b48566a00c5d4e7b6d Mon Sep 17 00:00:00 2001 From: ajay-egov <95418896+ajay-egov@users.noreply.github.com> Date: Tue, 27 Jun 2023 17:30:23 +0530 Subject: [PATCH 2/4] PFM-2922 | Add metricCount to metric chart (#187) --- .../analytics/handler/MetricChartResponseHandler.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/handler/MetricChartResponseHandler.java b/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/handler/MetricChartResponseHandler.java index e193b76d6f2..5f3a85205e9 100644 --- a/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/handler/MetricChartResponseHandler.java +++ b/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/handler/MetricChartResponseHandler.java @@ -90,7 +90,9 @@ public AggregateDto translate(AggregateRequestDto request, ObjectNode aggregatio boolean isRoundOff = (chartNode.get(IS_ROUND_OFF)!=null && chartNode.get(IS_ROUND_OFF).asBoolean()) ? true : false; Plot latestDateplot = new Plot("todaysDate", Double.valueOf(0), "number");; Plot lastUpdatedTime = new Plot("lastUpdatedTime", Double.valueOf(0), "number"); + Plot latestCount = new Plot("count",Double.valueOf(0),"number"); Boolean isTodaysCollection = (chartNode.get("TodaysCollection") == null ? Boolean.FALSE : chartNode.get("TodaysCollection").asBoolean()); + Boolean isLatestCount = (chartNode.get("metricCount") == null ? Boolean.FALSE : chartNode.get("metricCount").asBoolean()); for( JsonNode headerPath : aggrsPaths) { List values = aggregationNode.findValues(headerPath.asText()); int valueIndex = 0; @@ -172,6 +174,12 @@ public AggregateDto translate(AggregateRequestDto request, ObjectNode aggregatio } } + if (isLatestCount == Boolean.TRUE){ + JsonNode countNode = aggregationNode.findValue("Count"); + if(countNode != null && countNode.has(IResponseHandler.VALUE)){ + latestCount.setValue(countNode.findValue(IResponseHandler.VALUE).asDouble()); + } + } valueIndex++; } // Why is aggrsPaths.size()==2 required? Is there validation if action = @@ -199,7 +207,7 @@ public AggregateDto translate(AggregateRequestDto request, ObjectNode aggregatio else throw new CustomException("INVALID_NUMBER_OF_OPERANDS", "Division operation can be performed only with 2 operands."); } - data.setPlots( Arrays.asList(latestDateplot,lastUpdatedTime)); + data.setPlots( Arrays.asList(latestDateplot,lastUpdatedTime,latestCount)); request.getResponseRecorder().put(visualizationCode, request.getModuleLevel(), data); dataList.add(data); if(chartNode.get(POST_AGGREGATION_THEORY) != null) { From 58a1ba6871fb9b8bb1ea191508401f024bdb35c6 Mon Sep 17 00:00:00 2001 From: ajay-egov <95418896+ajay-egov@users.noreply.github.com> Date: Tue, 18 Jul 2023 13:32:02 +0530 Subject: [PATCH 3/4] Add condition check to additive computed field (#203) * PFM-2922 | Add metricCount to metric chart * Add field check to additive computed field --- .../com/tarento/analytics/helper/AdditiveComputedField.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/helper/AdditiveComputedField.java b/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/helper/AdditiveComputedField.java index b8bbb5c9852..fcfa8649b91 100644 --- a/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/helper/AdditiveComputedField.java +++ b/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/helper/AdditiveComputedField.java @@ -39,8 +39,10 @@ public void add(Data data, List fields, String newField,JsonNode chartNo double total = 0.0; for (String field: fields){ - dataType = plotMap.get(field).getSymbol(); - total = total+ plotMap.get(field).getValue(); + if(plotMap.containsKey(field)) { + dataType = plotMap.get(field).getSymbol(); + total = total + plotMap.get(field).getValue(); + } } if(postAggrTheoryName != null && !postAggrTheoryName.isEmpty()) { ComputeHelper computeHelper = computeHelperFactory.getInstance(postAggrTheoryName); From d81c56e56f59af8e81eef17e53413f8442f6eb67 Mon Sep 17 00:00:00 2001 From: ajay-egov <95418896+ajay-egov@users.noreply.github.com> Date: Thu, 27 Jul 2023 16:38:53 +0530 Subject: [PATCH 4/4] Add compare two indices util to metric chart handler (#215) * PFM-2922 | Add metricCount to metric chart * Add field check to additive computed field * Add compareTwoindices util to metric chart handler --- .../analytics/handler/IResponseHandler.java | 15 +++++++++++++++ .../handler/MetricChartResponseHandler.java | 11 ++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/handler/IResponseHandler.java b/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/handler/IResponseHandler.java index bcc72b4e486..d64ee57582b 100644 --- a/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/handler/IResponseHandler.java +++ b/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/handler/IResponseHandler.java @@ -75,6 +75,8 @@ public interface IResponseHandler { public final String DOC_COUNT = "doc_count"; public static final String POST_AGGREGATION_THEORY = "postAggregationTheory"; + + public static final String COMPARE_TWO_INDICES = "compareTwoIndices"; public static final String CHART_SPECIFIC = "chartSpecificProperty"; @@ -207,4 +209,17 @@ default void appendMissingPlot(Set plotKeys, Data data, String symbol, b data.setPlots(sortedMap.values().stream().collect(Collectors.toList())); } + default Double compareTwoIndices(List> bucketList){ + List listA = bucketList.get(0); + List listB = bucketList.get(1); + + Double count = 0.0; + for (String str : listA) { + if (!listB.contains(str)) { + count++; + } + } + return count; + } + } diff --git a/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/handler/MetricChartResponseHandler.java b/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/handler/MetricChartResponseHandler.java index 5f3a85205e9..a64970e6e10 100644 --- a/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/handler/MetricChartResponseHandler.java +++ b/business-services/dashboard-analytics/src/main/java/com/tarento/analytics/handler/MetricChartResponseHandler.java @@ -84,6 +84,8 @@ public AggregateDto translate(AggregateRequestDto request, ObjectNode aggregatio List percentageList = new ArrayList<>(); ArrayNode aggrsPaths = (ArrayNode) chartNode.get(AGGS_PATH); + boolean extractBuckets = chartNode.get(POST_AGGREGATION_THEORY).asText().equals(COMPARE_TWO_INDICES); + List> bucketList = new ArrayList<>(); /* * Sums all value of all aggrsPaths i.e all aggregations * */ @@ -98,6 +100,9 @@ public AggregateDto translate(AggregateRequestDto request, ObjectNode aggregatio int valueIndex = 0; Double headerPathValue = new Double(0); for (JsonNode value : values) { + if(extractBuckets){ + bucketList.add(value.findValuesAsText("key")); + } if (isRoundOff) { ObjectMapper mapper = new ObjectMapper(); JsonNode node = value.get("value"); @@ -193,7 +198,11 @@ public AggregateDto translate(AggregateRequestDto request, ObjectNode aggregatio } String symbol = chartNode.get(IResponseHandler.VALUE_TYPE).asText(); - + if (extractBuckets && bucketList.size() ==2){ + Double count = compareTwoIndices(bucketList); + totalValues.clear(); + totalValues.add(count); + } try{ Data data = new Data(chartName, action.equals(PERCENTAGE) && aggrsPaths.size()==2? percentageValue(percentageList, isRoundOff) : (totalValues==null || totalValues.isEmpty())? 0.0 :totalValues.stream().reduce(0.0, Double::sum), symbol); //Logic to perform DIVISION action