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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,4 +11,8 @@ public interface ExperimentMetricResultService {
|
||||
void registerExperimentMetricQueries(List<ExperimentMetricMappingEntity> experimentMetricMappings);
|
||||
|
||||
void updateStatusOfTesseractId(TesseractIdStatusResponse response);
|
||||
|
||||
void setJobsToFalse();
|
||||
|
||||
void refreshMetricResult(String experimentName);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,4 +19,6 @@ public interface IExperimentMetricMappingQuery {
|
||||
List<ExperimentMetricMappingEntity> findByExperiment(ExperimentEntity experiment);
|
||||
|
||||
Optional<ExperimentMetricMappingEntity> findByExperimentAndMetric(ExperimentEntity experiment, MetricEntity metric);
|
||||
|
||||
List<ExperimentMetricMappingEntity> findByIsJobRun(boolean isJobRun);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user