in metron-interface/metron-config/src/app/sensors/sensor-field-schema/sensor-field-schema.component.ts [150:251]
createFieldSchemaRows() {
this.fieldSchemaRows = [];
this.savedFieldSchemaRows = [];
let fieldSchemaRowsCreated = {};
// Update rows with Stellar transformations
let stellarTransformations = this.sensorParserConfig.fieldTransformations.filter(fieldTransformer => fieldTransformer.transformation === 'STELLAR');
for (let fieldTransformer of stellarTransformations) {
if (fieldTransformer.config) {
for (let outputFieldName of Object.keys(fieldTransformer.config)) {
let stellarFunctionStatement = fieldTransformer.config[outputFieldName];
let configuredFunctions = stellarFunctionStatement.split('(');
let inputFieldName = configuredFunctions.splice(-1, 1)[0].replace(new RegExp('\\)', 'g'), '');
configuredFunctions.reverse();
if (!fieldSchemaRowsCreated[inputFieldName]) {
fieldSchemaRowsCreated[inputFieldName] = new FieldSchemaRow(inputFieldName);
}
fieldSchemaRowsCreated[inputFieldName].outputFieldName = outputFieldName;
fieldSchemaRowsCreated[inputFieldName].preview = stellarFunctionStatement;
fieldSchemaRowsCreated[inputFieldName].isSimple = this.isSimpleFunction(configuredFunctions);
if (fieldSchemaRowsCreated[inputFieldName].isSimple) {
for (let configuredFunction of configuredFunctions) {
fieldSchemaRowsCreated[inputFieldName].transformConfigured.push(new AutocompleteOption(configuredFunction));
}
}
}
}
}
// Update rows with Remove Transformations
let removeTransformations = this.sensorParserConfig.fieldTransformations.filter(fieldTransformer => fieldTransformer.transformation === 'REMOVE');
for (let fieldTransformer of removeTransformations) {
for (let inputFieldName of fieldTransformer.input) {
if (!fieldSchemaRowsCreated[inputFieldName]) {
fieldSchemaRowsCreated[inputFieldName] = new FieldSchemaRow(inputFieldName);
}
fieldSchemaRowsCreated[inputFieldName].isRemoved = true;
if (fieldTransformer.config && fieldTransformer.config['condition']) {
fieldSchemaRowsCreated[inputFieldName].conditionalRemove = true;
}
}
}
// Update rows with enrichments
if (this.sensorEnrichmentConfig.enrichment.fieldMap) {
for (let enrichment in this.sensorEnrichmentConfig.enrichment.fieldMap) {
if (enrichment !== 'hbaseEnrichment' && enrichment !== 'stellar') {
let fieldNames = this.sensorEnrichmentConfig.enrichment.fieldMap[enrichment];
for (let fieldName of fieldNames) {
if (!fieldSchemaRowsCreated[fieldName]) {
fieldSchemaRowsCreated[fieldName] = new FieldSchemaRow(fieldName);
}
fieldSchemaRowsCreated[fieldName].enrichmentConfigured.push(new AutocompleteOption(enrichment));
}
}
}
}
// Update rows with HBase enrichments
if (this.sensorEnrichmentConfig.enrichment.fieldToTypeMap) {
for (let fieldName of Object.keys(this.sensorEnrichmentConfig.enrichment.fieldToTypeMap)) {
let enrichments = this.sensorEnrichmentConfig.enrichment.fieldToTypeMap[fieldName];
if (!fieldSchemaRowsCreated[fieldName]) {
fieldSchemaRowsCreated[fieldName] = new FieldSchemaRow(fieldName);
}
for (let enrichment of enrichments) {
fieldSchemaRowsCreated[fieldName].enrichmentConfigured.push(new AutocompleteOption(enrichment));
}
}
}
// Update rows with threatIntels
if (this.sensorEnrichmentConfig.threatIntel.fieldToTypeMap) {
for (let fieldName of Object.keys(this.sensorEnrichmentConfig.threatIntel.fieldToTypeMap)) {
let threatIntels = this.sensorEnrichmentConfig.threatIntel.fieldToTypeMap[fieldName];
if (!fieldSchemaRowsCreated[fieldName]) {
fieldSchemaRowsCreated[fieldName] = new FieldSchemaRow(fieldName);
}
for (let threatIntel of threatIntels) {
fieldSchemaRowsCreated[fieldName].threatIntelConfigured.push(new AutocompleteOption(threatIntel));
}
}
}
this.fieldSchemaRows = Object.keys(fieldSchemaRowsCreated).map(key => fieldSchemaRowsCreated[key]);
// Adds rows from parseResult with no transformations/enrichments/threatIntels
let fieldSchemaRowsCreatedKeys = Object.keys(fieldSchemaRowsCreated);
for (let fieldName of Object.keys(this.parserResult).filter(fieldName => fieldSchemaRowsCreatedKeys.indexOf(fieldName) === -1)) {
let field = new FieldSchemaRow(fieldName);
field.isParserGenerated = true;
this.fieldSchemaRows.push(field);
}
// save the initial fieldSchemaRows
for (let fieldSchemaRow of this.fieldSchemaRows) {
this.savedFieldSchemaRows.push(JSON.parse(JSON.stringify(fieldSchemaRow)));
}
}