func stripReferencesToEventModuleInQuery()

in dev/import-beats/kibana.go [523:584]


func stripReferencesToEventModuleInQuery(object mapStr, objectKey, moduleName string, dataStreamNames []string) (mapStr, error) {
	objectValue, err := object.getValue(objectKey)
	if _, ok := objectValue.(map[string]interface{}); !ok {
		return object, nil // not a map object
	}

	languageKey := objectKey + ".language"
	queryKey := objectKey + ".query"

	queryValue, err := object.getValue(queryKey)
	if err != nil && err != errKeyNotFound {
		return nil, fmt.Errorf("retrieving key '%s' failed: %v", queryKey, err)
	} else if err == errKeyNotFound {
		return object, nil // nothing to adjust
	}

	query, ok := queryValue.(string)
	if !ok {
		return object, nil // complex query (not a simple string)
	}
	if query == "" {
		return object, nil // empty query field
	}

	query = strings.ReplaceAll(query, ": ", ":")
	query = strings.ReplaceAll(query, " :", ":")
	query = strings.ReplaceAll(query, `"`, "")
	if strings.Contains(query, "event.module:"+moduleName) && (strings.Contains(query, "metricset.name:") || strings.Contains(query, "fileset.name:")) {
		query = strings.ReplaceAll(query, "event.module:"+moduleName, "")
		query = strings.ReplaceAll(query, "metricset.name:", fmt.Sprintf("data_stream.dataset:%s.", moduleName))
		query = strings.ReplaceAll(query, "fileset.name:", fmt.Sprintf("data_stream.dataset:%s.", moduleName))
		query = strings.TrimSpace(query)
		if strings.HasPrefix(query, "AND ") {
			query = query[4:]
		}

		_, err := object.put(queryKey, query)
		if err != nil {
			return nil, fmt.Errorf("replacing key '%s' failed: %v", queryKey, err)
		}
	} else if strings.Contains(query, "event.module:"+moduleName) {
		var eventDataStreams []string
		for _, dataStreamName := range dataStreamNames {
			eventDataStreams = append(eventDataStreams, fmt.Sprintf("data_stream.dataset:%s.%s", moduleName, dataStreamName))
		}

		value := " (" + strings.Join(eventDataStreams, " OR ") + ") "
		query = strings.ReplaceAll(query, "event.module:"+moduleName, value)
		query = strings.TrimSpace(query)

		_, err := object.put(queryKey, query)
		if err != nil {
			return nil, fmt.Errorf("replacing key '%s' failed: %v", queryKey, err)
		}

		_, err = object.put(languageKey, "kuery")
		if err != nil {
			return nil, fmt.Errorf("replacing key '%s' failed: %v", languageKey, err)
		}
	}
	return object, nil
}