Skip to content

Commit c92902e

Browse files
authored
Merge pull request #155 from PublicisSapient/feature/DTS-50661-recommendation-batch-sn
Feature/dts 50661 recommendation batch sn
2 parents bbdd2c8 + 8fd4020 commit c92902e

File tree

43 files changed

+4837
-112
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+4837
-112
lines changed

ai-data-processor/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,11 @@
144144
<artifactId>junit-jupiter-api</artifactId>
145145
<scope>test</scope>
146146
</dependency>
147+
<dependency>
148+
<groupId>com.knowhow.retro</groupId>
149+
<artifactId>ai-gateway-client</artifactId>
150+
<version>1.0.0</version>
151+
</dependency>
147152

148153
<!--Logging dependencies-->
149154
<dependency>

ai-data-processor/src/main/java/com/publicissapient/kpidashboard/AiDataProcessorApplication.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99
import org.springframework.scheduling.annotation.EnableScheduling;
1010

1111
@SpringBootApplication
12-
@ComponentScan(basePackages = {"com.publicissapient", "com.knowhow.retro.notifications"})
13-
@EnableMongoRepositories(basePackages = {"com.publicissapient.**.repository"})
12+
@ComponentScan(basePackages = { "com.publicissapient", "com.knowhow.retro.notifications",
13+
"com.knowhow.retro.aigatewayclient" })
14+
@EnableMongoRepositories(basePackages = { "com.publicissapient.**.repository" })
1415
@EnableBatchProcessing
1516
@EnableAsync
1617
@EnableScheduling

ai-data-processor/src/main/java/com/publicissapient/kpidashboard/job/aiusagestatisticscollector/listener/AIUsageStatisticsJobCompletionListener.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616

1717
package com.publicissapient.kpidashboard.job.aiusagestatisticscollector.listener;
1818

19-
import com.publicissapient.kpidashboard.common.model.ProcessorExecutionTraceLog;
19+
import com.publicissapient.kpidashboard.common.model.tracelog.JobExecutionTraceLog;
2020
import com.publicissapient.kpidashboard.common.model.application.ErrorDetail;
21-
import com.publicissapient.kpidashboard.common.service.ProcessorExecutionTraceLogServiceImpl;
21+
import com.publicissapient.kpidashboard.common.service.JobExecutionTraceLogService;
2222
import com.publicissapient.kpidashboard.job.aiusagestatisticscollector.service.AccountBatchService;
2323
import lombok.AllArgsConstructor;
2424
import lombok.extern.slf4j.Slf4j;
@@ -37,7 +37,7 @@
3737
@AllArgsConstructor
3838
public class AIUsageStatisticsJobCompletionListener implements JobExecutionListener {
3939
private final AccountBatchService accountBatchService;
40-
private final ProcessorExecutionTraceLogServiceImpl processorExecutionTraceLogServiceImpl;
40+
private final JobExecutionTraceLogService jobExecutionTraceLogService;
4141

4242
@Override
4343
public void afterJob(@NonNull JobExecution jobExecution) {
@@ -50,20 +50,20 @@ private void storeJobExecutionStatus(JobExecution jobExecution) {
5050
String jobName = jobParameters.getString("jobName");
5151
ObjectId executionId = (ObjectId) Objects.requireNonNull(jobParameters.getParameter("executionId")).getValue();
5252

53-
Optional<ProcessorExecutionTraceLog> processorExecutionTraceLogOptional = this.processorExecutionTraceLogServiceImpl
53+
Optional<JobExecutionTraceLog> executionTraceLogOptional = this.jobExecutionTraceLogService
5454
.findById(executionId);
55-
if (processorExecutionTraceLogOptional.isPresent()) {
56-
ProcessorExecutionTraceLog executionTraceLog = processorExecutionTraceLogOptional.get();
55+
if (executionTraceLogOptional.isPresent()) {
56+
JobExecutionTraceLog executionTraceLog = executionTraceLogOptional.get();
5757
executionTraceLog.setExecutionOngoing(false);
58-
executionTraceLog.setExecutionEndedAt(Instant.now().toEpochMilli());
58+
executionTraceLog.setExecutionEndedAt(Instant.now());
5959
executionTraceLog.setExecutionSuccess(jobExecution.getStatus() == BatchStatus.COMPLETED);
6060
executionTraceLog
6161
.setErrorDetailList(jobExecution.getAllFailureExceptions().stream().map(failureException -> {
6262
ErrorDetail errorDetail = new ErrorDetail();
6363
errorDetail.setError(failureException.getMessage());
6464
return errorDetail;
6565
}).toList());
66-
this.processorExecutionTraceLogServiceImpl.saveAiDataProcessorExecutions(executionTraceLog);
66+
this.jobExecutionTraceLogService.updateJobExecution(executionTraceLog);
6767
} else {
6868
log.error("Could not store job execution ending status for job with name {} and execution id {}. Job "
6969
+ "execution could not be found", jobName, executionId);

ai-data-processor/src/main/java/com/publicissapient/kpidashboard/job/aiusagestatisticscollector/processor/AccountItemProcessor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.publicissapient.kpidashboard.job.aiusagestatisticscollector.dto.AIUsagePerOrgLevel;
2222
import com.publicissapient.kpidashboard.job.aiusagestatisticscollector.model.AIUsageStatistics;
2323
import com.publicissapient.kpidashboard.job.aiusagestatisticscollector.service.AIUsageStatisticsService;
24+
import com.publicissapient.kpidashboard.job.constant.JobConstants;
2425

2526
import jakarta.annotation.Nonnull;
2627
import lombok.AllArgsConstructor;
@@ -33,7 +34,7 @@ public class AccountItemProcessor implements ItemProcessor<AIUsagePerOrgLevel, A
3334

3435
@Override
3536
public AIUsageStatistics process(@Nonnull AIUsagePerOrgLevel item) {
36-
log.debug("[ai-usage-statistics-collector job] Fetching AI usage statistics for level name: {}", item.levelName());
37+
log.debug("{} Fetching AI usage statistics for level name: {}", JobConstants.LOG_PREFIX_AI_USAGE_STATISTICS, item.levelName());
3738
try {
3839
return aiUsageStatisticsService.fetchAIUsageStatistics(item.levelName());
3940
} catch (Exception ex) {

ai-data-processor/src/main/java/com/publicissapient/kpidashboard/job/aiusagestatisticscollector/reader/AccountItemReader.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.publicissapient.kpidashboard.job.aiusagestatisticscollector.reader;
1818

1919
import com.publicissapient.kpidashboard.job.aiusagestatisticscollector.dto.AIUsagePerOrgLevel;
20+
import com.publicissapient.kpidashboard.job.constant.JobConstants;
2021
import org.springframework.batch.item.ItemReader;
2122

2223
import com.publicissapient.kpidashboard.job.aiusagestatisticscollector.service.AccountBatchService;
@@ -37,7 +38,7 @@ public AIUsagePerOrgLevel read() {
3738
log.info("No more accounts.");
3839
return null;
3940
}
40-
log.info("[ai-usage-statistics-collector job] Reader fetched level name: {}", aiUsageStatistics.levelName());
41+
log.info("{} Reader fetched level name: {}", JobConstants.LOG_PREFIX_AI_USAGE_STATISTICS, aiUsageStatistics.levelName());
4142
return aiUsageStatistics;
4243
}
4344
}

ai-data-processor/src/main/java/com/publicissapient/kpidashboard/job/aiusagestatisticscollector/strategy/AIUsageStatisticsJobStrategy.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
import org.springframework.stereotype.Component;
3232
import org.springframework.transaction.PlatformTransactionManager;
3333

34-
import com.publicissapient.kpidashboard.common.service.ProcessorExecutionTraceLogServiceImpl;
34+
import com.publicissapient.kpidashboard.common.service.JobExecutionTraceLogService;
35+
import com.publicissapient.kpidashboard.common.service.ProcessorExecutionTraceLogService;
3536
import com.publicissapient.kpidashboard.job.aiusagestatisticscollector.config.AIUsageStatisticsCollectorJobConfig;
3637
import com.publicissapient.kpidashboard.job.aiusagestatisticscollector.listener.AIUsageStatisticsJobCompletionListener;
3738
import com.publicissapient.kpidashboard.job.aiusagestatisticscollector.model.AIUsageStatistics;
@@ -61,7 +62,7 @@ public class AIUsageStatisticsJobStrategy implements JobStrategy {
6162

6263
private final AccountBatchService accountBatchService;
6364
private final AIUsageStatisticsService aiUsageStatisticsService;
64-
private final ProcessorExecutionTraceLogServiceImpl processorExecutionTraceLogServiceImpl;
65+
private final JobExecutionTraceLogService jobExecutionTraceLogService;
6566

6667
@Override
6768
public String getJobName() {
@@ -72,7 +73,7 @@ public String getJobName() {
7273
public Job getJob() {
7374
Step startStep = chunkProcessAIUsageStatisticsForAccounts();
7475
AIUsageStatisticsJobCompletionListener jobListener = new AIUsageStatisticsJobCompletionListener(
75-
this.accountBatchService, this.processorExecutionTraceLogServiceImpl);
76+
this.accountBatchService, this.jobExecutionTraceLogService);
7677
return new JobBuilder(aiUsageStatisticsCollectorJobConfig.getName(), jobRepository)
7778
.start(startStep)
7879
.listener(jobListener)

ai-data-processor/src/main/java/com/publicissapient/kpidashboard/job/aiusagestatisticscollector/writer/AccountItemWriter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import com.publicissapient.kpidashboard.job.aiusagestatisticscollector.model.AIUsageStatistics;
2525
import com.publicissapient.kpidashboard.job.aiusagestatisticscollector.service.AIUsageStatisticsService;
26+
import com.publicissapient.kpidashboard.job.constant.JobConstants;
2627

2728
import lombok.AllArgsConstructor;
2829
import lombok.NonNull;
@@ -35,7 +36,7 @@ public class AccountItemWriter implements ItemWriter<AIUsageStatistics> {
3536

3637
@Override
3738
public void write(@NonNull Chunk<? extends AIUsageStatistics> chunk) {
38-
log.info("[ai-usage-statistics-collector job] Received chunk items for inserting into database with size: {}", chunk.size());
39+
log.info("{} Received chunk items for inserting into database with size: {}", JobConstants.LOG_PREFIX_AI_USAGE_STATISTICS, chunk.size());
3940
aiUsageStatisticsService.saveAll((List.copyOf(chunk.getItems())));
4041
}
4142
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright 2024 Sapient Corporation
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and limitations under the
14+
* License.
15+
*/
16+
17+
package com.publicissapient.kpidashboard.job.constant;
18+
19+
import lombok.experimental.UtilityClass;
20+
21+
/**
22+
* Constants used across AI Data Processor jobs.
23+
*/
24+
@UtilityClass
25+
public final class JobConstants {
26+
27+
public static final String JOB_PRODUCTIVITY_CALCULATION = "productivity-calculation";
28+
public static final String JOB_KPI_MATURITY_CALCULATION = "kpi-maturity-calculation";
29+
public static final String JOB_AI_USAGE_STATISTICS_COLLECTOR = "ai-usage-statistics-collector";
30+
public static final String JOB_RECOMMENDATION_CALCULATION = "recommendation-calculation";
31+
32+
public static final String LOG_PREFIX_RECOMMENDATION = "[recommendation-calculation job]";
33+
public static final String LOG_PREFIX_PRODUCTIVITY = "[productivity-calculation job]";
34+
public static final String LOG_PREFIX_KPI_MATURITY = "[kpi-maturity-calculation job]";
35+
public static final String LOG_PREFIX_AI_USAGE_STATISTICS = "[ai-usage-statistics-collector job]";
36+
37+
}

ai-data-processor/src/main/java/com/publicissapient/kpidashboard/job/kpimaturitycalculation/listener/KpiMaturityCalculationJobExecutionListener.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@
2727
import org.springframework.batch.core.JobParameters;
2828
import org.springframework.lang.NonNull;
2929

30-
import com.publicissapient.kpidashboard.common.model.ProcessorExecutionTraceLog;
30+
import com.publicissapient.kpidashboard.common.model.tracelog.JobExecutionTraceLog;
3131
import com.publicissapient.kpidashboard.common.model.application.ErrorDetail;
32-
import com.publicissapient.kpidashboard.common.service.ProcessorExecutionTraceLogServiceImpl;
32+
import com.publicissapient.kpidashboard.common.service.JobExecutionTraceLogService;
3333
import com.publicissapient.kpidashboard.job.productivitycalculation.service.ProjectBatchService;
3434

3535
import lombok.RequiredArgsConstructor;
@@ -39,7 +39,7 @@
3939
@RequiredArgsConstructor
4040
public class KpiMaturityCalculationJobExecutionListener implements JobExecutionListener {
4141
private final ProjectBatchService projectBatchService;
42-
private final ProcessorExecutionTraceLogServiceImpl processorExecutionTraceLogServiceImpl;
42+
private final JobExecutionTraceLogService jobExecutionTraceLogService;
4343

4444
@Override
4545
public void afterJob(@NonNull JobExecution jobExecution) {
@@ -52,20 +52,20 @@ private void storeJobExecutionStatus(JobExecution jobExecution) {
5252
String jobName = jobParameters.getString("jobName");
5353
ObjectId executionId = (ObjectId) Objects.requireNonNull(jobParameters.getParameter("executionId")).getValue();
5454

55-
Optional<ProcessorExecutionTraceLog> processorExecutionTraceLogOptional = this.processorExecutionTraceLogServiceImpl
55+
Optional<JobExecutionTraceLog> executionTraceLogOptional = this.jobExecutionTraceLogService
5656
.findById(executionId);
57-
if (processorExecutionTraceLogOptional.isPresent()) {
58-
ProcessorExecutionTraceLog executionTraceLog = processorExecutionTraceLogOptional.get();
57+
if (executionTraceLogOptional.isPresent()) {
58+
JobExecutionTraceLog executionTraceLog = executionTraceLogOptional.get();
5959
executionTraceLog.setExecutionOngoing(false);
60-
executionTraceLog.setExecutionEndedAt(Instant.now().toEpochMilli());
60+
executionTraceLog.setExecutionEndedAt(Instant.now());
6161
executionTraceLog.setExecutionSuccess(jobExecution.getStatus() == BatchStatus.COMPLETED);
6262
executionTraceLog
6363
.setErrorDetailList(jobExecution.getAllFailureExceptions().stream().map(failureException -> {
6464
ErrorDetail errorDetail = new ErrorDetail();
6565
errorDetail.setError(failureException.getMessage());
6666
return errorDetail;
6767
}).toList());
68-
this.processorExecutionTraceLogServiceImpl.saveAiDataProcessorExecutions(executionTraceLog);
68+
this.jobExecutionTraceLogService.updateJobExecution(executionTraceLog);
6969
} else {
7070
log.error("Could not store job execution ending status for job with name {} and execution id {}. Job "
7171
+ "execution could not be found", jobName, executionId);

ai-data-processor/src/main/java/com/publicissapient/kpidashboard/job/kpimaturitycalculation/processor/ProjectItemProcessor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.publicissapient.kpidashboard.job.kpimaturitycalculation.processor;
1818

19+
import com.publicissapient.kpidashboard.job.constant.JobConstants;
1920
import org.springframework.batch.item.ItemProcessor;
2021

2122
import com.publicissapient.kpidashboard.common.model.kpimaturity.organization.KpiMaturity;
@@ -34,7 +35,7 @@ public class ProjectItemProcessor implements ItemProcessor<ProjectInputDTO, KpiM
3435

3536
@Override
3637
public KpiMaturity process(@Nonnull ProjectInputDTO item) {
37-
log.info("[kpi-maturity-calculation job] Starting kpi metrics calculation for project with nodeId: {} and deliveryMethodology: {}", item.nodeId(), item
38+
log.info("{} Starting kpi metrics calculation for project with nodeId: {} and deliveryMethodology: {}", JobConstants.LOG_PREFIX_KPI_MATURITY, item.nodeId(), item
3839
.deliveryMethodology());
3940

4041
return kpiMaturityCalculationService.calculateKpiMaturityForProject(item);

0 commit comments

Comments
 (0)