Skip to content

Commit ac1ba6d

Browse files
[CYB-181] Update expected result functionality (#59)
* CYB-181: Update expected result functionality
1 parent 12c1221 commit ac1ba6d

File tree

6 files changed

+87
-38
lines changed

6 files changed

+87
-38
lines changed

flink-cyber/metron-parser-chain/parser-chains-config-service/frontend/parser-chains-client/src/app/chain-page/components/live-view/sample-data-form/sample-data-text-folder-input/sample-data-text-folder-input.component.html

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -85,25 +85,29 @@
8585
</td>
8686
</tr>
8787
<tr [nzExpand]="expandSet.has(data.id)">
88-
<nz-collapse>
89-
<nz-collapse-panel nzHeader="Source">
90-
<p>{{data.source}}</p>
91-
</nz-collapse-panel>
92-
<nz-collapse-panel nzHeader="Expected result">
93-
<p>Failure: {{data.expectedFailure}}</p>
94-
<p>{{data.expectedResult}}</p>
95-
</nz-collapse-panel>
96-
<nz-collapse-panel nzHeader="Actual result" [nzDisabled]="(runResults$ | async).get(data.id) === undefined">
97-
<p>Failure: {{(runResults$ | async).get(data.id)?.failure}}</p>
98-
<p>{{(runResults$ | async).get(data.id)?.result}}</p>
99-
</nz-collapse-panel>
100-
<nz-collapse-panel nzHeader="Difference"
101-
*ngIf="(getStatus(data.id) | async) === sampleTestStatus.FAIL">
102-
<app-text-diff-view
103-
originalModelJson="Failure: {{data.expectedFailure}}, Data: {{(runResults$ | async).get(data.id)?.expected}}"
104-
modifiedModelJson="Failure: {{(runResults$ | async).get(data.id)?.failure}}, Data: {{(runResults$ | async).get(data.id)?.result}}"></app-text-diff-view>
105-
</nz-collapse-panel>
106-
</nz-collapse>
88+
<ng-container *ngIf="(runResults$ | async).get(data.id) as runResult">
89+
<nz-collapse>
90+
<nz-collapse-panel nzHeader="Source">
91+
<p>{{data.source}}</p>
92+
</nz-collapse-panel>
93+
<nz-collapse-panel nzHeader="Expected result">
94+
<p>Failure: {{data.expectedFailure}}</p>
95+
<p>{{data.expectedResult}}</p>
96+
</nz-collapse-panel>
97+
<nz-collapse-panel nzHeader="Actual result" [nzDisabled]="runResult === undefined">
98+
<p>Failure: {{runResult?.failure}}</p>
99+
<p>{{runResult?.result}}</p>
100+
</nz-collapse-panel>
101+
<nz-collapse-panel nzHeader="Difference"
102+
*ngIf="(getStatus(data.id) | async) === sampleTestStatus.FAIL">
103+
<app-text-diff-view
104+
originalModelJson="Failure: {{data.expectedFailure}}, Data: {{runResult?.expected}}"
105+
modifiedModelJson="Failure: {{runResult?.failure}}, Data: {{runResult?.result}}"
106+
(expectedValueChange)="updateExpectedValue(runResult?.failure, runResult?.result, i, runResult.timestamp)"
107+
></app-text-diff-view>
108+
</nz-collapse-panel>
109+
</nz-collapse>
110+
</ng-container>
107111
</tr>
108112
</ng-container>
109113
</tbody>

flink-cyber/metron-parser-chain/parser-chains-config-service/frontend/parser-chains-client/src/app/chain-page/components/live-view/sample-data-form/sample-data-text-folder-input/sample-data-text-folder-input.component.ts

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,18 @@ import {EntryParsingResultModel} from "../../models/live-view.model";
99
import {select, Store} from "@ngrx/store";
1010
import {SampleDataTextFolderInputState} from "./sample-data-text-folder-input.reducers";
1111
import {
12-
getEditModalVisible,
13-
getExecutionStatus,
14-
getRunResults,
15-
getSampleData,
16-
getSampleFolderPath
12+
getEditModalVisible,
13+
getExecutionStatus,
14+
getRunResults,
15+
getSampleData,
16+
getSampleFolderPath
1717
} from "./sample-data-text-folder-input.selectors";
1818
import {Observable, Subject} from "rxjs";
1919
import {
20-
FetchSampleListTriggeredAction,
21-
SampleFolderViewInitializedAction,
22-
SaveSampleListTriggeredAction,
23-
ShowEditModalAction
20+
FetchSampleListTriggeredAction,
21+
SampleFolderViewInitializedAction,
22+
SaveSampleListTriggeredAction,
23+
ShowEditModalAction
2424
} from "./sample-data-text-folder-input.actions";
2525
import {UntypedFormBuilder, UntypedFormGroup} from "@angular/forms";
2626
import {map, takeUntil} from "rxjs/operators";
@@ -41,7 +41,8 @@ export class SampleDataTextFolderInputComponent implements OnInit, OnDestroy {
4141
expected: string,
4242
result: string,
4343
failure: boolean,
44-
raw: EntryParsingResultModel[]
44+
raw: EntryParsingResultModel[],
45+
timestamp: bigint
4546
}>>;
4647
sampleData$: Observable<SampleDataInternalModel[]>;
4748
sampleFolderPath$: Observable<string>;
@@ -193,6 +194,24 @@ export class SampleDataTextFolderInputComponent implements OnInit, OnDestroy {
193194
}));
194195
}
195196

197+
updateExpectedValue(failure: boolean, result: string, i: number, timestamp: bigint) {
198+
const sample = this.currentSampleData[i];
199+
200+
this.selectedSample = [i, sample]
201+
202+
let finalResult = result
203+
204+
if (timestamp){
205+
finalResult = finalResult.replace(String(timestamp), "%timestamp%")
206+
}
207+
208+
this.updateSample({
209+
...sample,
210+
expectedFailure: failure,
211+
expectedResult: finalResult
212+
})
213+
}
214+
196215
ngOnDestroy(): void {
197216
this._unsubscribe$.next();
198217
this._unsubscribe$.complete();

flink-cyber/metron-parser-chain/parser-chains-config-service/frontend/parser-chains-client/src/app/chain-page/components/live-view/sample-data-form/sample-data-text-folder-input/sample-data-text-folder-input.reducers.ts

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,13 @@ import {SampleDataInternalModel, SampleTestStatus} from "../../models/sample-dat
1414
import {
1515
ExecutionListFailedAction,
1616
ExecutionListSuccessfulAction,
17-
ExecutionListTriggeredAction, FetchSampleListFailedAction, FetchSampleListSuccessfulAction,
17+
ExecutionListTriggeredAction,
18+
FetchSampleListFailedAction,
19+
FetchSampleListSuccessfulAction,
1820
FetchSampleListTriggeredAction,
1921
HideEditModalAction,
20-
SampleFolderActionsType, SampleFolderPathRestoredAction,
22+
SampleFolderActionsType,
23+
SampleFolderPathRestoredAction,
2124
SaveSampleListFailedAction,
2225
SaveSampleListSuccessfulAction,
2326
SaveSampleListTriggeredAction,
@@ -38,7 +41,8 @@ export interface SampleDataTextFolderInputState {
3841
expected: string,
3942
result: string,
4043
failure: boolean,
41-
raw: EntryParsingResultModel[]
44+
raw: EntryParsingResultModel[],
45+
timestamp: bigint
4246
}>;
4347
}
4448

@@ -150,14 +154,16 @@ function prepareResult(rawResult: Map<number, [SampleDataInternalModel, EntryPar
150154
expected: string,
151155
result: string,
152156
failure: boolean,
153-
raw: EntryParsingResultModel[]
157+
raw: EntryParsingResultModel[],
158+
timestamp: bigint
154159
}> {
155160
const resultMap = new Map<number, {
156161
status: SampleTestStatus,
157162
expected: string,
158163
result: string,
159164
failure: boolean,
160-
raw: EntryParsingResultModel[]
165+
raw: EntryParsingResultModel[],
166+
timestamp: bigint
161167
}>();
162168
rawResult.forEach((value, key) => {
163169
const sample = value[0];
@@ -169,6 +175,7 @@ function prepareResult(rawResult: Map<number, [SampleDataInternalModel, EntryPar
169175
let output: string;
170176
let failure: boolean;
171177
let finalExpectedResult = sample.expectedResult;
178+
let timestamp = null;
172179

173180
if (failedParser) {
174181
output = failedParser.log.message;
@@ -181,7 +188,7 @@ function prepareResult(rawResult: Map<number, [SampleDataInternalModel, EntryPar
181188
}
182189
} else {
183190
const rawOutput = result[result.length - 1].output as { timestamp: string };
184-
const timestamp = rawOutput.timestamp;
191+
timestamp = rawOutput.timestamp;
185192

186193
output = JSON.stringify(rawOutput);
187194
failure = false;
@@ -200,7 +207,8 @@ function prepareResult(rawResult: Map<number, [SampleDataInternalModel, EntryPar
200207
expected: finalExpectedResult,
201208
result: output,
202209
failure,
203-
raw: result
210+
raw: result,
211+
timestamp: timestamp
204212
})
205213
})
206214
return resultMap

flink-cyber/metron-parser-chain/parser-chains-config-service/frontend/parser-chains-client/src/app/chain-page/components/live-view/text-diff-view/text-diff-view.component.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,15 @@
55
<label class="form-check-label">
66
<input class="form-check-input" type="checkbox" (change)="onChangeInline($any($event.target).checked)"> Inline Diff
77
</label>
8+
<button
9+
nz-button
10+
class="update-expected-button"
11+
nzType="default"
12+
(click)="updateExpectedValueButtonClick($event)"
13+
nz-tooltip
14+
nzTooltipTitle="Update 'Expected result' with values from the 'Actual result'">
15+
Update Expected result
16+
</button>
817
</div>
918
</form>
1019
</div>

flink-cyber/metron-parser-chain/parser-chains-config-service/frontend/parser-chains-client/src/app/chain-page/components/live-view/text-diff-view/text-diff-view.component.scss

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,12 @@
1818
margin-top: 6px;
1919
}
2020

21-
.editor{
21+
.editor {
2222
resize: vertical;
2323
overflow: auto;
2424
height: 500px;
25+
}
26+
27+
.update-expected-button {
28+
margin: 0.5rem;
2529
}

flink-cyber/metron-parser-chain/parser-chains-config-service/frontend/parser-chains-client/src/app/chain-page/components/live-view/text-diff-view/text-diff-view.component.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Component, Input, OnChanges, SimpleChanges} from '@angular/core';
1+
import {Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';
22
import {DiffEditorModel} from "ngx-monaco-editor-v2";
33

44
@Component({
@@ -10,6 +10,7 @@ export class TextDiffViewComponent implements OnChanges {
1010

1111
@Input() originalModelJson: string;
1212
@Input() modifiedModelJson: string;
13+
@Output() expectedValueChange = new EventEmitter<void>();
1314

1415
originalModel: DiffEditorModel;
1516
modifiedModel: DiffEditorModel;
@@ -28,4 +29,8 @@ export class TextDiffViewComponent implements OnChanges {
2829
onChangeInline(checked: boolean) {
2930
this.diffOptions = {...this.diffOptions, renderSideBySide: !checked};
3031
}
32+
33+
updateExpectedValueButtonClick($event: MouseEvent) {
34+
this.expectedValueChange.emit()
35+
}
3136
}

0 commit comments

Comments
 (0)