Skip to content

Commit

Permalink
Merge pull request #41 from Cambio-Project/optional-stimuli
Browse files Browse the repository at this point in the history
Optional Stimuli Feature
  • Loading branch information
franksn90 authored Nov 1, 2024
2 parents b8785f5 + e242b9d commit cdbe466
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 8 deletions.
4 changes: 3 additions & 1 deletion components/PSPWizard.vue
Original file line number Diff line number Diff line change
Expand Up @@ -1548,7 +1548,9 @@ export default {
TBV_untimed: '',
TBV_timed: '',
target_logic: this.targetLogicOptions.indexOf(this.pspSpecification.selectedTargetLogic),
predicates_info: []
predicates_info: [],
monitoringChecked: true,
simulationChecked: true
};
const payloadWithNames = this.createPayload(this.pspSpecification.selectedScope, this.pspSpecification.selectedScopeEventQ, this.pspSpecification.selectedScopeEventR, this.pspSpecification.selectedPatternType, this.pspSpecification.selectedOccurrence, this.pspSpecification.selectedOrder, this.pspSpecification.selectedEventP, this.pspSpecification.selectedEventS, this.pspSpecification.selectedChainedEvents, this.pspSpecification.selectedTime, this.pspSpecification.selectedTimeUnitType, this.pspSpecification.selectedInterval, this.pspSpecification.selectedConstraintEvent, "SEL", this.pspSpecification.selectedTimeBound, this.pspSpecification.selectedProbabilityBound, this.pspSpecification.timeUnit, this.pspSpecification.probability, this.pspSpecification.upperLimit, this.pspSpecification.lowerLimit, true);
Expand Down
12 changes: 12 additions & 0 deletions components/Scenario.vue
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,18 @@ export default {
</span>
</div>
</div>
<div class="container-row-element-xxs">
<UTooltip text="Active for Simulation">
<UCheckbox disabled v-model="stimulus.simulationChecked" name="simulation"/>
<Icon name="heroicons:globe-alt-20-solid" size="1.3em" class="mb-1 ml-2 mr-2"/>
</UTooltip>
</div>
<div class="container-row-element-xxs">
<UTooltip text="Active for Monitoring">
<UCheckbox disabled v-model="stimulus.monitoringChecked" name="monitoring"/>
<Icon name="heroicons:chart-bar-16-solid" size="1.3em" class="mb-1 ml-2"/>
</UTooltip>
</div>
</div>
</li>
</ul>
Expand Down
18 changes: 18 additions & 0 deletions components/ScenarioEditor.vue
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,12 @@ export default {
searchWindowSize(newSearchWindowSize) {
this.addValue("searchWindowSize", newSearchWindowSize)
},
'stimuli': {
handler() {
this.setValue("stimuli", this.stimuli)
},
deep: true
},
'target': {
handler() {
changeAllTargets([this.scenario], this.target)
Expand Down Expand Up @@ -513,6 +519,18 @@ export default {
</div>
</div>
</div>
<div class="container-row-element-xxs">
<UTooltip text="Active for Simulations">
<UCheckbox v-model="stimulus.simulationChecked" name="simulation"/>
<Icon name="heroicons:globe-alt-20-solid" size="1.3em" class="mb-1 ml-2"/>
</UTooltip>
</div>
<div class="container-row-element-xxs">
<UTooltip text="Active for Monitoring">
<UCheckbox v-model="stimulus.monitoringChecked" name="monitoring"/>
<Icon name="heroicons:chart-bar-16-solid" size="1.3em" class="mb-1 ml-2"/>
</UTooltip>
</div>
<div class="container-row-element-xxs">
<UTooltip text="Delete Stimulus Specification">
<UButton color="red" icon="i-heroicons-trash-16-solid" square size="xs"
Expand Down
12 changes: 12 additions & 0 deletions components/Scenarios.vue
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,18 @@ export default {
</div>
</div>
</div>
<div class="container-row-element-xxs">
<UTooltip text="Active for Simulation">
<UCheckbox disabled v-model="stimulus.simulationChecked" name="simulation"/>
<Icon name="heroicons:globe-alt-20-solid" size="1.3em" class="mb-1 ml-2 mr-2"/>
</UTooltip>
</div>
<div class="container-row-element-xxs">
<UTooltip text="Active for Monitoring">
<UCheckbox disabled v-model="stimulus.monitoringChecked" name="monitoring"/>
<Icon name="heroicons:chart-bar-16-solid" size="1.3em" class="mb-1 ml-2"/>
</UTooltip>
</div>
</div>
</li>
</ul>
Expand Down
4 changes: 2 additions & 2 deletions server/api/startSearch.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {appendExistingFile} from "~/server/utils/appendExistingFile";
import {exportStimuli} from "~/server/utils/exportStimuli";
import {AnalysisType, exportStimuli} from "~/server/utils/exportStimuli";
import fs from "fs";
import {pushSearchNames} from "~/server/utils/pushSearchResult";

Expand All @@ -19,7 +19,7 @@ export default defineEventHandler(async (event) => {
await appendExistingFile(formData, "monitoring_data", monitoringName, "./uploaded/")
}

await exportStimuli(formData, "mtls", scenario)
await exportStimuli(formData, "mtls", scenario, AnalysisType.Monitoring)

formData.append("simulation_id", simulationID)
formData.append("search_window_size", scenario!.searchWindowSize!)
Expand Down
4 changes: 2 additions & 2 deletions server/api/startSimulation.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {exportStimuli} from "~/server/utils/exportStimuli";
import {AnalysisType, exportStimuli} from "~/server/utils/exportStimuli";
import {appendExistingFile} from "~/server/utils/appendExistingFile";
import {exportJsonAsFile} from "~/server/utils/appendJsonAsFile";
import fs from "fs";
Expand Down Expand Up @@ -30,7 +30,7 @@ export default defineEventHandler(async (event) => {

const formData = new FormData();

await exportStimuli(formData, "mtls", scenario)
await exportStimuli(formData, "mtls", scenario, AnalysisType.Simulation)

for (const architecture of architectureArray) {
const architectureName = Object.keys(architecture)[0]
Expand Down
37 changes: 34 additions & 3 deletions server/utils/exportStimuli.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,46 @@
import fs from 'fs';

export async function exportStimuli(formData: FormData, type: string, scenario: any) {
export enum AnalysisType {
Simulation,
Monitoring
}

export async function exportStimuli(formData: FormData, type: string, scenario: any, analysisType: AnalysisType) {
let fileContent = "";
for (let stimulus of scenario.stimuli!) {
fileContent = fileContent + stimulus.MTL + "\n"
switch (analysisType) {
case AnalysisType.Simulation:
fileContent = getSimulationMTLs(scenario)
break;
case AnalysisType.Monitoring:
fileContent = getMonitoringMTLs(scenario)
break;
}

let fileName = scenario.simulationID!
await fs.promises.writeFile(fileName, fileContent);

const file = await fs.promises.readFile("./" + fileName)
const blob = new Blob([file], {type: 'application/octet-stream'});
formData.append(type, blob, fileName)
await fs.promises.unlink(fileName);
}

function getSimulationMTLs(scenario: any): string {
let fileContent = "";
for (let stimulus of scenario.stimuli!) {
if (stimulus.simulationChecked) {
fileContent = fileContent + stimulus.MTL + "\n"
}
}
return fileContent
}

function getMonitoringMTLs(scenario: any): string {
let fileContent = "";
for (let stimulus of scenario.stimuli!) {
if (stimulus.monitoringChecked) {
fileContent = fileContent + stimulus.MTL + "\n"
}
}
return fileContent
}

0 comments on commit cdbe466

Please sign in to comment.