You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metron.apache.org by sa...@apache.org on 2019/06/17 09:48:56 UTC
[metron] branch master updated: METRON-2092 [UI] Config UI does not
require you to set a grok timestamp field by default (ruffle1986 via
sardell) closes apache/metron#1393
This is an automated email from the ASF dual-hosted git repository.
sardell pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/metron.git
The following commit(s) were added to refs/heads/master by this push:
new 9621ec7 METRON-2092 [UI] Config UI does not require you to set a grok timestamp field by default (ruffle1986 via sardell) closes apache/metron#1393
9621ec7 is described below
commit 9621ec7dbd740e0fe37d12f283b4e7a7e0f0178f
Author: ruffle1986 <ft...@gmail.com>
AuthorDate: Mon Jun 17 11:48:21 2019 +0200
METRON-2092 [UI] Config UI does not require you to set a grok timestamp field by default (ruffle1986 via sardell) closes apache/metron#1393
---
.../src/app/model/sensor-parser-config.ts | 2 ++
.../sensor-parser-config.component.html | 8 +++++++-
.../sensor-parser-config.component.spec.ts | 19 ++++++++++++++++++-
.../sensor-parser-config.component.ts | 17 ++++++++---------
4 files changed, 35 insertions(+), 11 deletions(-)
diff --git a/metron-interface/metron-config/src/app/model/sensor-parser-config.ts b/metron-interface/metron-config/src/app/model/sensor-parser-config.ts
index a2cd4ae..d83ef31 100644
--- a/metron-interface/metron-config/src/app/model/sensor-parser-config.ts
+++ b/metron-interface/metron-config/src/app/model/sensor-parser-config.ts
@@ -35,11 +35,13 @@ export class SensorParserConfig {
errorWriterNumTasks: number;
spoutConfig: {};
stormConfig: {};
+ timestampField: string;
constructor() {
this.parserConfig = {};
this.fieldTransformations = [];
this.spoutConfig = {};
this.stormConfig = {};
+ this.timestampField = 'timestamp';
}
}
diff --git a/metron-interface/metron-config/src/app/sensors/sensor-parser-config/sensor-parser-config.component.html b/metron-interface/metron-config/src/app/sensors/sensor-parser-config/sensor-parser-config.component.html
index b4bdd92..c85d376 100644
--- a/metron-interface/metron-config/src/app/sensors/sensor-parser-config/sensor-parser-config.component.html
+++ b/metron-interface/metron-config/src/app/sensors/sensor-parser-config/sensor-parser-config.component.html
@@ -71,7 +71,7 @@
</div>
<div class="form-group" [ngClass]="{'panel-selected': showGrokValidator }" *ngIf="isGrokParser(sensorParserConfig)" >
- <label attr.for="grokStatement">GROK STATEMENT</label>
+ <label attr.for="grokStatement">GROK STATEMENT *</label>
<div class="input-group" [attr.disabled]="!sensorNameValid || !parserClassValid">
<input type="text" class="form-control" formControlName="grokStatement" [(ngModel)]="this.grokStatement" readonly>
<span class="input-group-btn">
@@ -83,6 +83,12 @@
</div>
</div>
+ <div class="form-group" *ngIf="isGrokParser(sensorParserConfig)" data-qe-id="timestamp-field">
+ <label attr.for="timestampField">TIMESTAMP *</label>
+ <input type="text" class="form-control" name="timestampField" formControlName="timestampField" [(ngModel)]="sensorParserConfig.timestampField">
+ <label *ngIf="!sensorParserConfig.timestampField"><span class="warning-text">Field is required. </span></label>
+ </div>
+
<div class="form-group" [ngClass]="{'panel-selected': showFieldSchema }" >
<label attr.for="fieldSchema">SCHEMA</label>
<div class="input-group" [attr.disabled]="!isConfigValid()">
diff --git a/metron-interface/metron-config/src/app/sensors/sensor-parser-config/sensor-parser-config.component.spec.ts b/metron-interface/metron-config/src/app/sensors/sensor-parser-config/sensor-parser-config.component.spec.ts
index ff1a812..228125d 100644
--- a/metron-interface/metron-config/src/app/sensors/sensor-parser-config/sensor-parser-config.component.spec.ts
+++ b/metron-interface/metron-config/src/app/sensors/sensor-parser-config/sensor-parser-config.component.spec.ts
@@ -583,7 +583,7 @@ describe('Component: SensorParserConfig', () => {
);
component.createForms();
- expect(Object.keys(component.sensorConfigForm.controls).length).toEqual(16);
+ expect(Object.keys(component.sensorConfigForm.controls).length).toEqual(17);
expect(
Object.keys(component.transformsValidationForm.controls).length
).toEqual(2);
@@ -1118,4 +1118,21 @@ describe('Component: SensorParserConfig', () => {
expect(component.showAdvancedParserConfiguration).toEqual(false);
}));
+
+ it('should be timestamp by default', () => {
+ expect(component.sensorParserConfig.timestampField).toEqual('timestamp');
+ });
+
+ it('should be invalid if timestamp field is empty', () => {
+ component.sensorNameValid = true;
+ component.kafkaTopicValid = true;
+ component.parserClassValid = true;
+ component.grokStatement = 'grokStatement';
+ component.sensorParserConfig = new SensorParserConfig();
+ component.sensorParserConfig.parserClassName = 'org.apache.metron.parsers.GrokParser'
+ component.sensorParserConfig.timestampField = '';
+ expect(component.isConfigValid()).toEqual(false);
+ component.sensorParserConfig.timestampField = 'timestamp';
+ expect(component.isConfigValid()).toEqual(true);
+ });
});
diff --git a/metron-interface/metron-config/src/app/sensors/sensor-parser-config/sensor-parser-config.component.ts b/metron-interface/metron-config/src/app/sensors/sensor-parser-config/sensor-parser-config.component.ts
index bb59de5..31ef9c0 100644
--- a/metron-interface/metron-config/src/app/sensors/sensor-parser-config/sensor-parser-config.component.ts
+++ b/metron-interface/metron-config/src/app/sensors/sensor-parser-config/sensor-parser-config.component.ts
@@ -210,6 +210,10 @@ export class SensorParserConfigComponent implements OnInit {
this.sensorParserConfig.parserClassName,
Validators.required
);
+ group['timestampField'] = new FormControl(
+ this.sensorParserConfig.timestampField,
+ Validators.required
+ );
group['grokStatement'] = new FormControl(this.grokStatement);
group['transforms'] = new FormControl(
this.sensorParserConfig['transforms']
@@ -325,7 +329,7 @@ export class SensorParserConfigComponent implements OnInit {
}
isGrokStatementValid(): boolean {
- return this.grokStatement !== undefined && Object.keys(this.grokStatement).length > 0;
+ return !!this.grokStatement;
}
isConfigValid() {
@@ -333,7 +337,8 @@ export class SensorParserConfigComponent implements OnInit {
return this.sensorNameValid &&
this.kafkaTopicValid &&
this.parserClassValid &&
- (!isGrokParser || this.isGrokStatementValid());
+ (!isGrokParser || this.isGrokStatementValid()) &&
+ (!isGrokParser || !!this.sensorParserConfig.timestampField);
}
getKafkaStatus() {
@@ -464,13 +469,7 @@ export class SensorParserConfigComponent implements OnInit {
}
isGrokParser(sensorParserConfig: SensorParserConfig): boolean {
- if (sensorParserConfig && sensorParserConfig.parserClassName) {
- return (
- sensorParserConfig.parserClassName ===
- 'org.apache.metron.parsers.GrokParser'
- );
- }
- return false;
+ return sensorParserConfig && sensorParserConfig.parserClassName === 'org.apache.metron.parsers.GrokParser';
}
getTransformationCount(): number {