Merge pull request #63 from medici/TP-26660-tesseract-fetch-modifications

Akshat | TP-26660 | add option for refreshing the metric from backend
This commit is contained in:
chandresh pancholi
2023-05-02 01:47:35 +05:30
committed by GitHub Enterprise
8 changed files with 55 additions and 9 deletions

View File

@@ -142,4 +142,11 @@ public class ExperimentControllerV2 {
log.info("updating status of tesseract_id: {} to {}", response.getTesseractId(), response.getStatus().toString());
experimentMetricResultService.updateStatusOfTesseractId(response);
}
@PutMapping("/refresh-metric")
@Timed(value = "experiment.refresh.metric.result", percentiles = {0.95, 0.99})
public void refreshMetricResultOfExperiment(@RequestParam("name") String experimentName) {
log.info("refresh metric request result received for experiment: {}", experimentName);
experimentMetricResultService.refreshMetricResult(experimentName);
}
}

View File

@@ -24,7 +24,7 @@ public class ExperimentMetricResultScheduler {
private final MeterRegistry meterRegistry;
@Value("${experiment.metric.fetch.limit.per.interval}")
private Integer experimentMetricFetchLimitPerInterval;
private int experimentMetricFetchLimitPerInterval;
@Scheduled(cron = "${experiment.metric.fetch.cron}")
@SchedulerLock(name = "ExperimentMetricResultScheduler_fetchExperimentMetricResult", lockAtMostForString = "PT10S")
@@ -35,4 +35,11 @@ public class ExperimentMetricResultScheduler {
Gauge.builder("queries_scheduled_per_interval", experimentMetricMappings, List::size)
.register(meterRegistry);
}
@Scheduled(cron = "${experiment.metric.job.reset.cron}")
@SchedulerLock(name = "ExperimentMetricResultScheduler_resetExperimentMericJob", lockAtMostForString = "PT10S")
public void setExperimentMetricJobsToFalse() {
log.info("scheduling resetting of experiment metric jobs");
experimentMetricResultService.setJobsToFalse();
}
}

View File

@@ -11,4 +11,8 @@ public interface ExperimentMetricResultService {
void registerExperimentMetricQueries(List<ExperimentMetricMappingEntity> experimentMetricMappings);
void updateStatusOfTesseractId(TesseractIdStatusResponse response);
void setJobsToFalse();
void refreshMetricResult(String experimentName);
}

View File

@@ -10,6 +10,7 @@ import com.navi.medici.entity.ExperimentMetricResultEntity;
import com.navi.medici.entity.MetricEntity;
import com.navi.medici.entity.TesseractIdStatusEntity;
import com.navi.medici.enums.ExperimentMetricType;
import com.navi.medici.exceptions.LitmusExperimentNotFoundException;
import com.navi.medici.metrics.MetricsUtils;
import com.navi.medici.query.experiment.IExperimentQuery;
import com.navi.medici.query.experimentmetricmapping.IExperimentMetricMappingQuery;
@@ -125,8 +126,6 @@ public class ExperimentMetricResultServiceImpl implements ExperimentMetricResult
throw new RuntimeException(String.format("Failed to process metric query: %s", metricQuery), e);
}
});
} else {
setJobsToFalse();
}
}
@@ -149,11 +148,23 @@ public class ExperimentMetricResultServiceImpl implements ExperimentMetricResult
});
}
private void setJobsToFalse() {
@Override
public void setJobsToFalse() {
log.info("setting all experiment-metric jobs to false");
log.info("setting all experiment-metric jobs to false that are true");
List<ExperimentMetricMappingEntity> experimentMetricMappings;
experimentMetricMappings = experimentMetricMappingQuery.findAll();
experimentMetricMappings = experimentMetricMappingQuery.findByIsJobRun(true);
experimentMetricMappings.forEach(experimentMetricMapping -> {
experimentMetricMapping.setJobRun(false);
experimentMetricMappingQuery.save(experimentMetricMapping);
});
}
@Override
public void refreshMetricResult(String experimentName) {
log.info("setting all metric mapping jobs to false for experiment: {}", experimentName);
ExperimentEntity experiment = getExperimentEntityFromName(experimentName);
List<ExperimentMetricMappingEntity> experimentMetricMappings = experimentMetricMappingQuery.findByExperiment(experiment);
experimentMetricMappings.forEach(experimentMetricMapping -> {
experimentMetricMapping.setJobRun(false);
experimentMetricMappingQuery.save(experimentMetricMapping);
@@ -191,4 +202,12 @@ public class ExperimentMetricResultServiceImpl implements ExperimentMetricResult
variableMap.put(Constants.DAY_INTERVAL_FOR_TOTAL_USERS, litmusCoreConfig.getQueryDayIntervalForTotalUsers());
return variableMap;
}
private ExperimentEntity getExperimentEntityFromName(String experimentName) {
Optional<ExperimentEntity> experimentEntity = experimentQuery.findByName(experimentName);
if (experimentEntity.isEmpty()) {
throw new LitmusExperimentNotFoundException("Experiment with name : " + experimentName + " is not present");
}
return experimentEntity.get();
}
}

View File

@@ -20,12 +20,10 @@ server.tomcat.mbeanregistry.enabled=true
spring.jmx.enabled=true
management.metrics.kafka.consumer.enabled=true
management.metrics.kafka.producer.enabled=true
kafka.servers=${KAFKA_SERVER:localhost:9092}
audit.kafka.servers=${AUDIT_KAFKA_SERVER:localhost:9092}
kafka.auditlog.topic=${AUDIT_LOG_TOPIC:audit-logs}
kms.base-url=${KMS_BASE_URL:http://google.com}
redis.host=${REDIS_HOST:127.0.0.1}
redis.port=6379
redis.expected.insertions=99999
@@ -55,7 +53,8 @@ tesseract.interval.function.multiplier=${TESSERACT_INTERVAL_FUNCTION_MULTIPLIER:
kafka.experiment.metric.result.topic=${KAFKA_EXPERIMENT_METRIC_RESULT_TOPIC:common-litmus-experiment-metric-result-topic}
kafka.litmus.consumer.group=${KAFKA_LITMUS_CONSUMER_GROUP:dev-kafka}
#metrics
experiment.metric.fetch.cron=${EXPERIMENT_METRIC_FETCH_CRON:0 0/1 0-7 * * ?}
experiment.metric.fetch.cron=${EXPERIMENT_METRIC_FETCH_CRON:0 * * ? * *}
experiment.metric.job.reset.cron=${EXPERIMENT_METRIC_JOB_RESET_CRON:0 58 23 ? * *}
experiment.metric.fetch.limit.per.interval=${EXPERIMENT_METRIC_FETCH_LIMIT_PER_INTERVAL:5}
population.graph.data.days.interval=${POPULATION_GRAPH_DATA_DAYS_INTERVAL:3}
query.schedule.and.end.time.diff.hours=${QUERY_SCHEDULE_AND_END_TIME_DIFF_HOURS:2}

View File

@@ -45,4 +45,9 @@ public class ExperimentMetricMappingQueryImpl implements IExperimentMetricMappin
public Optional<ExperimentMetricMappingEntity> findByExperimentAndMetric(ExperimentEntity experiment, MetricEntity metric) {
return experimentMetricMappingRepository.findByExperimentAndMetric(experiment, metric);
}
@Override
public List<ExperimentMetricMappingEntity> findByIsJobRun(boolean isJobRun) {
return experimentMetricMappingRepository.findByIsJobRun(isJobRun);
}
}

View File

@@ -19,4 +19,6 @@ public interface IExperimentMetricMappingQuery {
List<ExperimentMetricMappingEntity> findByExperiment(ExperimentEntity experiment);
Optional<ExperimentMetricMappingEntity> findByExperimentAndMetric(ExperimentEntity experiment, MetricEntity metric);
List<ExperimentMetricMappingEntity> findByIsJobRun(boolean isJobRun);
}

View File

@@ -23,4 +23,7 @@ public interface ExperimentMetricMappingRepository extends CrudRepository<Experi
List<ExperimentMetricMappingEntity> findByExperiment(ExperimentEntity experiment);
Optional<ExperimentMetricMappingEntity> findByExperimentAndMetric(ExperimentEntity experiment, MetricEntity metric);
@Query(value = "select * from experiment_metric_mapping emm where emm.is_job_run=:isJobRun", nativeQuery = true)
List<ExperimentMetricMappingEntity> findByIsJobRun(boolean isJobRun);
}