Skip to content
Snippets Groups Projects
Commit 48814db6 authored by Igor Ignác's avatar Igor Ignác
Browse files

Address changes of sandbox id from Long to String

parent 7026c832
No related branches found
No related tags found
1 merge request!119Develop
Pipeline #213379 passed with stages
in 7 minutes and 37 seconds
......@@ -12,6 +12,7 @@ public class PhaseEvent {
@ApiModelProperty(value = "Identifier of events associated with trainee in phase.", required = true, example = "2")
@NotNull(message = "{phaseEvent.trainingRunId.NotNull.message}")
private Long trainingRunId;
private Long count;
private String phaseType;
private Long taskId;
@ApiModelProperty(value = "Identifier of phase.", required = true, example = "2")
......
......@@ -25,4 +25,6 @@ public class TrainingInstanceInfo {
@NotEmpty(message = "{trainingInstance.accessToken.NotEmpty.message}")
private String accessToken;
private List<Long> organizersRefIds;
private Boolean localEnvironment;
private Boolean backwardMode;
}
......@@ -2,11 +2,6 @@ package cz.muni.ics.kypo.training.adaptive.domain.simulator.imports;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import cz.muni.ics.kypo.training.adaptive.converter.LocalDateTimeUTCSerializer;
import cz.muni.ics.kypo.training.adaptive.dto.access.AccessPhaseDTO;
import cz.muni.ics.kypo.training.adaptive.dto.imports.phases.AbstractPhaseImportDTO;
import cz.muni.ics.kypo.training.adaptive.dto.info.InfoPhaseDTO;
import cz.muni.ics.kypo.training.adaptive.dto.questionnaire.QuestionnairePhaseDTO;
import cz.muni.ics.kypo.training.adaptive.dto.training.TrainingPhaseDTO;
import cz.muni.ics.kypo.training.adaptive.enums.TDState;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......@@ -14,7 +9,6 @@ import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
......
package cz.muni.ics.kypo.training.adaptive.domain.simulator.imports;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel(
value = "TrainingPhaseImport",
description = "Imported training phase."
)
@Data
public class MitreTechniqueImport {
@ApiModelProperty(value = "Mitre technique key identifying the mitre technique", example = "TA0043.T1590")
String techniqueKey;
}
......@@ -5,7 +5,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
......@@ -33,4 +32,6 @@ public class TrainingPhaseImport extends AbstractPhaseImport {
private List<DecisionMatrixRowImport> decisionMatrix;
@ApiModelProperty(value = "Questions related to the training phase.", required = true)
private List<AbstractQuestionImport> relatedQuestions;
@ApiModelProperty(value = "Mitre techniques specified by the instructor")
private List<MitreTechniqueImport> mitreTechniques;
}
......@@ -34,13 +34,13 @@ public class SankeySimulatorFacade {
private final InstanceSimulatorService instanceSimulatorService;
private final ObjectMapper objectMapper;
static final Pattern sandboxDetailPattern = Pattern.compile("(sandbox-[0-9]+-details)");
static final Pattern sandboxDetailPattern = Pattern.compile("(sandbox-[a-z0-9-]{36}-details)");
static final Pattern sandboxUserActionsPattern = Pattern.compile("(phase[0-9]+-useractions)");
static final Pattern trainingRunDetailsPattern = Pattern.compile("(training_run-id[0-9]+-details)");
static final Pattern trainingPhaseEventsPattern = Pattern.compile("(phase[0-9]+-events)");
static final Pattern trainingRunQuestionnairesPattern = Pattern.compile("(training_run-id-[0-9]+-questionnaires)");
static final Pattern trainingRunQuestionnaireAnswersPattern = Pattern.compile("(questionnaire_id-[0-9]+-answers)");
static final Pattern sandboxIdPatter = Pattern.compile("(\"sandbox_id\":[0-9]+)");
static final Pattern sandboxIdPatter = Pattern.compile("(\"sandbox_id\":[a-z0-9-]{36})");
static final Pattern trainingRunIdPattern = Pattern.compile("(training_run-id[0-9]+)");
public SankeySimulatorFacade(InstanceSimulatorService instanceSimulatorService,
......@@ -83,13 +83,13 @@ public class SankeySimulatorFacade {
ZipEntry zipEntry;
// Map<TrainingRunId, SandboxId>
Map<Long, Long> traineesIdentification = new HashMap<>();
Map<Long, String> traineesIdentification = new HashMap<>();
// Map<TrainingRunId, Map<phaseId, List<QuestionnaireActions>>>
Map<Long, Map<Long, List<QuestionnaireActions>>> questionnaireActions = new HashMap<>();
// Map<TrainingRunId, Map<phaseId, List<PhaseEvent>>>
Map<Long, Map<Long, List<PhaseEvent>>> trainingEvents = new HashMap<>();
// Map<TrainingRunId, Map<phaseId, List<PhaseUserActions>>>
Map<Long, Map<Long, List<PhaseUserActions>>> sandboxUseractions = new HashMap<>();
// Map<SandboxId, Map<phaseId, List<PhaseUserActions>>>
Map<String, Map<Long, List<PhaseUserActions>>> sandboxUseractions = new HashMap<>();
SankeyDiagramDTO sankeyDiagramDTO = new SankeyDiagramDTO();
ImportTrainingDefinition trainingDefinition = new ImportTrainingDefinition();
......@@ -104,7 +104,7 @@ public class SankeySimulatorFacade {
trainingDefinition = this.processDefinition(fileContent, validator, zipEntryName);
} else if (!zipEntry.isDirectory() && Pattern.matches("sankey_diagram.*", zipEntryName)) {
sankeyDiagramDTO = this.processSankey(fileContent, validator, zipEntryName);
} else if (Pattern.matches("logs/sandbox-[0-9]+-details/phase[0-9]+-useractions\\.json$", zipEntryName)) {
} else if (Pattern.matches("logs/sandbox-[a-z0-9-]{36}-details/phase[0-9]+-useractions\\.json$", zipEntryName)) {
sandboxUseractions = Optional.ofNullable(this.processSandboxLogs(fileContent, zipEntryName, sandboxUseractions, validator)).orElse(sandboxUseractions);
} else if (Pattern.matches("training_events/training_run-id[0-9]+-details/phase[0-9]+-events\\.json$", zipEntryName)) {
trainingEvents = Optional.ofNullable(this.processPhaseEvents(fileContent, zipEntryName, trainingEvents, validator)).orElse(trainingEvents);
......@@ -155,15 +155,15 @@ public class SankeySimulatorFacade {
return sankeyDiagramDTO;
}
private Map<Long, Map<Long, List<PhaseUserActions>>> processSandboxLogs(
private Map<String, Map<Long, List<PhaseUserActions>>> processSandboxLogs(
String fileContent,
String zipEntryName,
Map<Long, Map<Long, List<PhaseUserActions>>> sandboxUseractions,
Map<String, Map<Long, List<PhaseUserActions>>> sandboxUseractions,
Validator validator
) throws JsonProcessingException, BadRequestException {
Matcher matcher = sandboxDetailPattern.matcher(zipEntryName);
if (matcher.find()) {
Long sandboxId = Long.parseLong(matcher.group(1).replaceAll("[^0-9]+",""));
String sandboxId = matcher.group(1).replaceAll("[a-z0-9-]{36}","");
matcher = sandboxUserActionsPattern.matcher(zipEntryName);
if (matcher.find()) {
Long phaseId = Long.parseLong(matcher.group(1).replaceAll("[^0-9]+",""));
......@@ -209,14 +209,14 @@ public class SankeySimulatorFacade {
return null;
}
private void processTrainingEvents(String fileContent, String zipEntryName, Map<Long, Long> traineesIdentification) {
private void processTrainingEvents(String fileContent, String zipEntryName, Map<Long, String> traineesIdentification) {
Matcher matcher = trainingRunIdPattern.matcher(zipEntryName);
if (matcher.find()) {
Long trainingRunId = Long.parseLong(matcher.group(1).replaceAll("[^0-9]+", ""));
matcher = sandboxIdPatter.matcher(fileContent);
if (matcher.find()) {
Long sandboxId = Long.parseLong(matcher.group(1).replaceAll("[^0-9]+", ""));
String sandboxId = matcher.group(1).replaceAll("[a-z0-9-]{36}", "");
traineesIdentification.put(trainingRunId, sandboxId);
}
}
......
......@@ -56,11 +56,11 @@ public class InstanceSimulatorService {
* @return parsed sandbox interactions for the simulator.
* @throws JsonProcessingException if error occurs during parsing of phase-useractions.json
*/
public Map<Long, Map<Long, List<PhaseUserActions>>> parseSandboxInteractions(
public Map<String, Map<Long, List<PhaseUserActions>>> parseSandboxInteractions(
String content,
Long sandboxId,
String sandboxId,
Long phaseId,
Map<Long, Map<Long, List<PhaseUserActions>>> sandboxUseractions,
Map<String, Map<Long, List<PhaseUserActions>>> sandboxUseractions,
Validator validator
) throws JsonProcessingException, BadRequestException {
List<PhaseUserActions> phaseUserActionsCommands =
......@@ -167,10 +167,10 @@ public class InstanceSimulatorService {
*/
@Cacheable(value = "traineesPerformance", key = "#trainingInstanceInfo.getId() + '-' + #trainingInstanceInfo.getAccessToken()")
public String cacheTraineesPerformance(
Map<Long, Long> traineesIdentification,
Map<Long, String> traineesIdentification,
Map<Long, Map<Long, List<QuestionnaireActions>>> questionnaireActions,
Map<Long, Map<Long, List<PhaseEvent>>> trainingEvents,
Map<Long, Map<Long, List<PhaseUserActions>>> sandboxUseractions,
Map<String, Map<Long, List<PhaseUserActions>>> sandboxUseractions,
ImportTrainingDefinition trainingDefinition,
TrainingInstanceInfo trainingInstanceInfo
) {
......@@ -189,9 +189,6 @@ public class InstanceSimulatorService {
participantPerformance.setTraineeID(trainingRunId);
participantsPerformance.add(participantPerformance);
});
if (participantsPerformance.isEmpty()) {
throw new BadRequestException("The file was not processed. Unsupported data format", null);
}
String cacheKey = String.format("%d-%s", trainingInstanceInfo.getId(), trainingInstanceInfo.getAccessToken());
overallInstanceStatistics.setParticipantsPerformance(participantsPerformance);
overallInstanceStatistics.setTrainingDefinition(trainingDefinition);
......@@ -248,10 +245,10 @@ public class InstanceSimulatorService {
private List<OverallPhaseStatistics> computePhaseStatistics(
List<OverallPhaseStatistics> participantPerformance,
Long trainingRunId,
Long sandboxId,
String sandboxId,
Map<Long, Map<Long, List<QuestionnaireActions>>> questionnaireActions,
Map<Long, Map<Long, List<PhaseEvent>>> trainingEvents,
Map<Long, Map<Long, List<PhaseUserActions>>> sandboxUseractions,
Map<String, Map<Long, List<PhaseUserActions>>> sandboxUseractions,
ImportTrainingDefinition trainingDefinition
) {
QuestionnairePhaseImport questionnaire = (QuestionnairePhaseImport) getPreTrainingQuestionnaire(trainingDefinition);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment