createFieldSchemaRows()

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)));
    }
  }