Akshat | TP-12345 | dev hotfix (#50)
* TP-12345 | add play experiment * TP-12345 | sort experiment audit trails * TP-12345 | add tests * TP-12345 | change name from play to restart * TP-12345 | change log lines * TP-12345 | resolve https://github.cmd.navi-tech.in/medici/litmus/pull/50#discussion_r106754
This commit is contained in:
committed by
GitHub Enterprise
parent
c7b148d856
commit
293fad68c0
@@ -12,4 +12,5 @@ public class Constants {
|
||||
public static final String EXPERIMENT_ROLL_BACKED = "Experiment has been roll-backed";
|
||||
public static final String PAUSE_EXPERIMENT = "Experiment has been paused";
|
||||
public static final String METRIC_ATTACHED = "Metric %s attached to experiment";
|
||||
public static final String EXPERIMENT_RESTARTED = "Experiment Restarted";
|
||||
}
|
||||
|
||||
@@ -110,10 +110,17 @@ public class ExperimentControllerV2 {
|
||||
@PutMapping("/rollback/{experimentId}")
|
||||
public void rollbackExperiment(@PathVariable("experimentId") String experimentId,
|
||||
@RequestHeader(Constants.HEADER_EMAIL_ID) String emailId) {
|
||||
log.info("Release request received for experimentId: {}", experimentId);
|
||||
log.info("Rollback request received for experimentId: {}", experimentId);
|
||||
experimentService.rollbackExperiment(experimentId, emailId);
|
||||
}
|
||||
|
||||
@PutMapping("/restart/{experimentId}")
|
||||
public void restartExperiment(@PathVariable("experimentId") String experimentId,
|
||||
@RequestHeader(Constants.HEADER_EMAIL_ID) String emailId) {
|
||||
log.info("Restart request received for experimentId: {}", experimentId);
|
||||
experimentService.restartExperiment(experimentId, emailId);
|
||||
}
|
||||
|
||||
@GetMapping("/audit-trail/{experimentId}")
|
||||
public ResponseEntity<List<ExperimentAuditTrailDTO>> getExperimentAuditTrail(@PathVariable("experimentId") String experimentId) {
|
||||
return ResponseEntity.ok(experimentService.getExperimentAuditTrail(experimentId));
|
||||
|
||||
@@ -53,5 +53,7 @@ public interface ExperimentService {
|
||||
|
||||
void rollbackExperiment(String experimentId, String emailId);
|
||||
|
||||
void restartExperiment(String experimentId, String emailId);
|
||||
|
||||
List<ExperimentAuditTrailDTO> getExperimentAuditTrail(String experimentId);
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@ import org.springframework.stereotype.Service;
|
||||
import javax.transaction.Transactional;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
@@ -63,6 +64,7 @@ import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.navi.medici.enums.ExperimentType.EXPERIMENT;
|
||||
import static com.navi.medici.enums.ExperimentType.KILL_SWITCH;
|
||||
import static com.navi.medici.enums.ExperimentType.RELEASE;
|
||||
|
||||
@@ -396,12 +398,13 @@ public class ExperimentServiceImpl implements ExperimentService {
|
||||
ExperimentEntity experiment = getExperimentEntityFromId(experimentId);
|
||||
log.info("Releasing experiment with experimentId: {}", experimentId);
|
||||
ExperimentStatus experimentStatus = experiment.getExperimentInfo().getExperimentStatus();
|
||||
if (!experimentStatus.equals(ExperimentStatus.RUNNING)) {
|
||||
if (experimentStatus.equals(ExperimentStatus.DONE)) {
|
||||
throw new UnableToChangeExperimentStatusException("Unable to change release experiment as experiment is in " + experimentStatus.toString() + " state");
|
||||
}
|
||||
experiment.getExperimentInfo().setExperimentStatus(ExperimentStatus.DONE);
|
||||
experiment.setType(RELEASE);
|
||||
experiment.setUpdatedBy(emailId);
|
||||
log.info("Saving audit trail for releasing of experiment: {}", experiment.getName());
|
||||
saveAuditTrail(experimentId, Constants.EXPERIMENT_RELEASED, emailId);
|
||||
experiment.setUpdatedBy(emailId);
|
||||
experimentQuery.save(experiment);
|
||||
@@ -418,6 +421,7 @@ public class ExperimentServiceImpl implements ExperimentService {
|
||||
experiment.getExperimentInfo().setExperimentStatus(ExperimentStatus.HOLD);
|
||||
experiment.setType(KILL_SWITCH);
|
||||
experiment.setUpdatedBy(emailId);
|
||||
log.info("Saving audit trail for pausing of experiment: {}", experiment.getName());
|
||||
saveAuditTrail(experimentId, Constants.PAUSE_EXPERIMENT, emailId);
|
||||
experiment.setUpdatedBy(emailId);
|
||||
experimentQuery.save(experiment);
|
||||
@@ -428,17 +432,35 @@ public class ExperimentServiceImpl implements ExperimentService {
|
||||
ExperimentEntity experiment = getExperimentEntityFromId(experimentId);
|
||||
log.info("Rollbacking experiment with experimentId: {}", experimentId);
|
||||
ExperimentStatus experimentStatus = experiment.getExperimentInfo().getExperimentStatus();
|
||||
if (!experimentStatus.equals(ExperimentStatus.RUNNING)) {
|
||||
throw new UnableToChangeExperimentStatusException("Unable to change rollback experiment as experiment is in " + experimentStatus.toString() + " state");
|
||||
if (experimentStatus.equals(ExperimentStatus.DONE)) {
|
||||
throw new UnableToChangeExperimentStatusException("Unable to change rollback experiment as experiment is in" + experimentStatus.toString() + " state");
|
||||
}
|
||||
experiment.getExperimentInfo().setExperimentStatus(ExperimentStatus.DONE);
|
||||
experiment.setType(KILL_SWITCH);
|
||||
experiment.setUpdatedBy(emailId);
|
||||
log.info("Saving audit trail for rollbacking of experiment: {}", experiment.getName());
|
||||
saveAuditTrail(experimentId, Constants.EXPERIMENT_ROLL_BACKED, emailId);
|
||||
experiment.setUpdatedBy(emailId);
|
||||
experimentQuery.save(experiment);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restartExperiment(String experimentId, String emailId) {
|
||||
ExperimentEntity experiment = getExperimentEntityFromId(experimentId);
|
||||
log.info("Restarting experiment with experimentId: {}", experimentId);
|
||||
ExperimentStatus experimentStatus = experiment.getExperimentInfo().getExperimentStatus();
|
||||
if (!experimentStatus.equals(ExperimentStatus.HOLD)) {
|
||||
throw new UnableToChangeExperimentStatusException("Unable to change rollback experiment as experiment is in " + experimentStatus.toString() + " state");
|
||||
}
|
||||
experiment.getExperimentInfo().setExperimentStatus(ExperimentStatus.RUNNING);
|
||||
experiment.setType(EXPERIMENT);
|
||||
experiment.setUpdatedBy(emailId);
|
||||
log.info("Saving audit trail for restarting of experiment: {}", experiment.getName());
|
||||
saveAuditTrail(experimentId, Constants.EXPERIMENT_RESTARTED, emailId);
|
||||
experiment.setUpdatedBy(emailId);
|
||||
experimentQuery.save(experiment);
|
||||
}
|
||||
|
||||
private void saveAuditTrail(String experimentId, String log, String emailId) {
|
||||
ExperimentEntity experiment = getExperimentEntityFromId(experimentId);
|
||||
ExperimentAuditTrailEntity experimentAuditTrail = ExperimentAuditTrailEntity.builder()
|
||||
@@ -452,8 +474,10 @@ public class ExperimentServiceImpl implements ExperimentService {
|
||||
@Override
|
||||
public List<ExperimentAuditTrailDTO> getExperimentAuditTrail(String experimentId) {
|
||||
ExperimentEntity experiment = getExperimentEntityFromId(experimentId);
|
||||
return experiment.getExperimentAuditTrails().stream()
|
||||
List<ExperimentAuditTrailDTO> experimentAuditTrail = experiment.getExperimentAuditTrails().stream()
|
||||
.map(experimentMapper::mapExperimentAuditTrailEntityToExperimentAuditTrailDTO)
|
||||
.collect(Collectors.toList());
|
||||
experimentAuditTrail.sort(Comparator.comparing(ExperimentAuditTrailDTO::getCreatedAt));
|
||||
return experimentAuditTrail;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,6 +166,17 @@ public class ExperimentControllerV2Test {
|
||||
.andExpect(status().isOk());
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldRestartExperiment() throws Exception {
|
||||
String experimentId = TestUtils.getExperimentEntity().getExperimentId();
|
||||
String emailId = TestUtils.TEST_USER;
|
||||
MockHttpServletRequestBuilder httpRequest = MockMvcRequestBuilders.put("/v2/experiments/restart/" + experimentId)
|
||||
.header(Constants.HEADER_EMAIL_ID, TestUtils.TEST_USER);
|
||||
|
||||
mockMvc.perform(httpRequest)
|
||||
.andExpect(status().isOk());
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldGetExperimentAuditTrail() throws Exception {
|
||||
String experimentId = TestUtils.getExperimentEntity().getExperimentId();
|
||||
|
||||
@@ -305,4 +305,13 @@ class ExperimentServiceImplTest {
|
||||
.thenReturn(Optional.of(experiment));
|
||||
assertDoesNotThrow(() -> experimentService.rollbackExperiment(experiment.getExperimentId(), TestUtils.TEST_USER));
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldRestartExperiment() {
|
||||
ExperimentEntity experiment = TestUtils.getExperimentEntity();
|
||||
experiment.getExperimentInfo().setExperimentStatus(ExperimentStatus.HOLD);
|
||||
Mockito.when(experimentQuery.findByExperimentId(experiment.getExperimentId()))
|
||||
.thenReturn(Optional.of(experiment));
|
||||
assertDoesNotThrow(() -> experimentService.restartExperiment(experiment.getExperimentId(), TestUtils.TEST_USER));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user