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 a2cd4ae107..d83ef313bb 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 b4bdd92091..c85d37678a 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 @@
- +
@@ -83,6 +83,12 @@
+
+ + + +
+
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 ff1a812075..228125d3a8 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 bb59de512a..31ef9c0588 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 {