diff --git a/CHANGELOG-developer.asciidoc b/CHANGELOG-developer.asciidoc index 8a670158777..60b83f9b3ee 100644 --- a/CHANGELOG-developer.asciidoc +++ b/CHANGELOG-developer.asciidoc @@ -21,6 +21,7 @@ The list below covers the major changes between 6.3.0 and master only. - The beat.Pipeline is now passed to cfgfile.RunnerFactory. Beats using libbeat for module reloading or autodiscovery need to be adapted. {pull}7018[7017] - Moving of TLS helper functions and structs from `output/tls` to `tlscommon`. {pull}7054[7054] +- Port fields.yml collector to Golang {pull}6911[6911] ==== Bugfixes diff --git a/auditbeat/Makefile b/auditbeat/Makefile index d1782161107..d3e3e95c63a 100644 --- a/auditbeat/Makefile +++ b/auditbeat/Makefile @@ -7,6 +7,7 @@ GOX_OS?=linux windows ## @Building List of all OS to be supported by "make cross DEV_OS?=linux TESTING_ENVIRONMENT?=snapshot-noxpack ES_BEATS?=.. +FIELDS_FILE_PATH=module # Path to the libbeat Makefile include ${ES_BEATS}/libbeat/scripts/Makefile @@ -58,13 +59,6 @@ before-build: .PHONY: collect collect: fields collect-docs configs kibana -# Collects all module and metricset fields -.PHONY: fields -fields: python-env - @mkdir -p _meta - @cp _meta/fields.common.yml _meta/fields.generated.yml - @${PYTHON_ENV}/bin/python ${ES_BEATS}/metricbeat/scripts/fields_collector.py >> _meta/fields.generated.yml - # Collects all module configs .PHONY: configs configs: python-env diff --git a/auditbeat/include/fields.go b/auditbeat/include/fields.go index 6d0cef9aaa7..e59ae4249ad 100644 --- a/auditbeat/include/fields.go +++ b/auditbeat/include/fields.go @@ -14,5 +14,5 @@ func init() { // Asset returns asset data func Asset() string { - return "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" + return "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" } diff --git a/filebeat/Makefile b/filebeat/Makefile index af3acdd3085..4f7f4e5385d 100644 --- a/filebeat/Makefile +++ b/filebeat/Makefile @@ -5,6 +5,8 @@ SYSTEM_TESTS?=true TEST_ENVIRONMENT?=true GOX_FLAGS=-arch="amd64 386 arm ppc64 ppc64le" ES_BEATS?=.. +FIELDS_FILE_PATH=module + include ${ES_BEATS}/libbeat/scripts/Makefile @@ -19,13 +21,6 @@ kibana: @mkdir -p _meta/kibana @-cp -r module/*/_meta/kibana _meta/ -# Collects all module and dataset fields -.PHONY: fields -fields: python-env - @mkdir -p _meta/ - @cp ${ES_BEATS}/filebeat/_meta/fields.common.yml _meta/fields.generated.yml - @${PYTHON_ENV}/bin/python ${ES_BEATS}/metricbeat/scripts/fields_collector.py >> _meta/fields.generated.yml - # Collects all modules files to be packaged in a temporary folder .PHONY: modules modules: diff --git a/filebeat/include/fields.go b/filebeat/include/fields.go index 2cc394900bd..48a93354a1f 100644 --- a/filebeat/include/fields.go +++ b/filebeat/include/fields.go @@ -14,5 +14,5 @@ func init() { // Asset returns asset data func Asset() string { - return "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" + return "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" } diff --git a/generator/beat/Makefile b/generator/beat/Makefile index dd1e5be8557..0e5913ea44d 100644 --- a/generator/beat/Makefile +++ b/generator/beat/Makefile @@ -1 +1,4 @@ +override FIELDS_FILE_PATH= +export FIELDS_FILE_PATH + include ../common/Makefile diff --git a/generator/beat/{beat}/Makefile b/generator/beat/{beat}/Makefile index a4560753405..4d5248b74d8 100644 --- a/generator/beat/{beat}/Makefile +++ b/generator/beat/{beat}/Makefile @@ -46,4 +46,4 @@ before-build: # Collects all dependencies and then calls update .PHONY: collect -collect: +collect: fields diff --git a/generator/common/Makefile b/generator/common/Makefile index d7697614fd4..3fec8c4586f 100644 --- a/generator/common/Makefile +++ b/generator/common/Makefile @@ -6,6 +6,7 @@ BEAT_PATH=${BUILD_DIR}/src/beatpath/testbeat ES_BEATS=${GOPATH}/src/github.com/elastic/beats PREPARE_COMMAND?= + # Runs test build for mock beat .PHONY: test test: prepare-test diff --git a/generator/metricbeat/Makefile b/generator/metricbeat/Makefile index f3274adcadd..11203d15e0f 100644 --- a/generator/metricbeat/Makefile +++ b/generator/metricbeat/Makefile @@ -1,5 +1,8 @@ BEAT_TYPE=metricbeat -PREPARE_COMMAND=MODULE=elastic METRICSET=test make create-metricset ; +PREPARE_COMMAND=MODULE=elastic METRICSET=test make create-metricset ; FIELDS_FILE_PATH=module +override FIELDS_FILE_PATH= +export FIELDS_FILE_PATH + include ../common/Makefile @@ -7,3 +10,7 @@ prepare-test:: python-env mkdir -p ${BEAT_PATH}/scripts rsync -a --exclude=build ${PWD}/../../metricbeat/scripts/generate_imports_helper.py ${BEAT_PATH}/scripts + +# Collects all dependencies and then calls update +.PHONY: collect +collect: fields diff --git a/heartbeat/Makefile b/heartbeat/Makefile index e71f1bf5a46..e9f3f12e6e9 100644 --- a/heartbeat/Makefile +++ b/heartbeat/Makefile @@ -4,6 +4,7 @@ BEAT_PACKAGE_NAME=heartbeat-elastic BEAT_DESCRIPTION?=Ping remote services for availability and log results to Elasticsearch or send to Logstash. SYSTEM_TESTS=true TEST_ENVIRONMENT=false +FIELDS_FILE_PATH=monitors/active # Path to the libbeat Makefile -include ../libbeat/scripts/Makefile @@ -16,13 +17,6 @@ before-build: .PHONY: collect collect: fields imports -# Collects all module and metricset fields -.PHONY: fields -fields: - @mkdir -p _meta/ - @cp ${ES_BEATS}/heartbeat/_meta/fields.common.yml _meta/fields.generated.yml - @cat ${ES_BEATS}/heartbeat/monitors/active/*/_meta/fields.yml >> _meta/fields.generated.yml - # Generate imports for all monitors .PHONY: imports imports: python-env diff --git a/libbeat/Makefile b/libbeat/Makefile index 75633188f77..d63820feabc 100644 --- a/libbeat/Makefile +++ b/libbeat/Makefile @@ -1,15 +1,10 @@ BEAT_NAME=libbeat TEST_ENVIRONMENT?=true SYSTEM_TESTS=true +FIELDS_FILE_PATH=processors include scripts/Makefile -# Collects all fields from processors -.PHONY: fields -fields: - @cp _meta/fields.common.yml _meta/fields.generated.yml - @cat processors/*/_meta/fields.yml >> _meta/fields.generated.yml - # Collects all dependencies and then calls update .PHONY: collect -collect: fields +collect: libbeat_fields diff --git a/libbeat/generator/fields/fields.go b/libbeat/generator/fields/fields.go new file mode 100644 index 00000000000..af432ff19b3 --- /dev/null +++ b/libbeat/generator/fields/fields.go @@ -0,0 +1,149 @@ +package fields + +import ( + "bufio" + "fmt" + "io/ioutil" + "os" + "path" + "path/filepath" + "strings" +) + +var ( + generatedFieldsYml = filepath.Join("_meta", "fields.generated.yml") +) + +// YmlFile holds the info on files and how to write them into the global fields.yml +type YmlFile struct { + Path string + Indent int +} + +func collectBeatFiles(beatPath string, fieldFiles []*YmlFile) ([]*YmlFile, error) { + commonFields := filepath.Join(beatPath, "_meta", "fields.common.yml") + _, err := os.Stat(commonFields) + if os.IsNotExist(err) { + return fieldFiles, nil + } else if err != nil { + return nil, err + } + + files := []*YmlFile{ + &YmlFile{ + Path: commonFields, + Indent: 0, + }, + } + + return append(files, fieldFiles...), nil +} + +func writeGeneratedFieldsYml(beatsPath string, fieldFiles []*YmlFile) error { + outPath := path.Join(beatsPath, generatedFieldsYml) + f, err := os.Create(outPath) + if err != nil { + return err + } + defer f.Close() + + fw := bufio.NewWriter(f) + for _, p := range fieldFiles { + ff, err := os.Open(p.Path) + if err != nil { + return err + } + defer ff.Close() + + fs := bufio.NewScanner(ff) + for fs.Scan() { + err = writeIndentedLine(fw, fs.Text()+"\n", p.Indent) + if err != nil { + return err + } + + } + if err := fs.Err(); err != nil { + return err + } + } + return nil +} + +func writeIndentedLine(fw *bufio.Writer, l string, indent int) error { + ll := strings.Repeat(" ", indent) + l + fmt.Fprint(fw, ll) + return fw.Flush() +} + +// Generate collects fields.yml files and concatenates them into one global file. +func Generate(esBeatsPath, beatPath string, files []*YmlFile) error { + files, err := collectBeatFiles(beatPath, files) + if err != nil { + return err + } + + err = writeGeneratedFieldsYml(beatPath, files) + if err != nil { + return err + } + + return AppendFromLibbeat(esBeatsPath, beatPath) +} + +// AppendFromLibbeat appends fields.yml of libbeat to the fields.yml +func AppendFromLibbeat(esBeatsPath, beatPath string) error { + fieldsMetaPath := path.Join(beatPath, "_meta", "fields.yml") + generatedPath := path.Join(beatPath, generatedFieldsYml) + + err := createIfNotExists(fieldsMetaPath, generatedPath) + if err != nil { + return err + } + + if isLibbeat(beatPath) { + out := filepath.Join(esBeatsPath, "libbeat", "fields.yml") + return copyFileWithFlag(generatedPath, out, os.O_RDWR|os.O_CREATE|os.O_TRUNC) + } + + libbeatPath := filepath.Join(esBeatsPath, "libbeat", generatedFieldsYml) + out := filepath.Join(beatPath, "fields.yml") + err = copyFileWithFlag(libbeatPath, out, os.O_RDWR|os.O_CREATE|os.O_TRUNC) + if err != nil { + return err + } + return copyFileWithFlag(generatedPath, out, os.O_WRONLY|os.O_APPEND) +} + +func isLibbeat(beatPath string) bool { + return filepath.Base(beatPath) == "libbeat" +} + +func createIfNotExists(inPath, outPath string) error { + _, err := os.Stat(outPath) + if os.IsNotExist(err) { + err := copyFileWithFlag(inPath, outPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC) + if err != nil { + fmt.Println("Cannot find _meta/fields.yml") + } + return nil + } + return err +} + +func copyFileWithFlag(in, out string, flag int) error { + input, err := ioutil.ReadFile(in) + if err != nil { + return err + } + + output, err := os.OpenFile(out, flag, 0644) + if err != nil { + return err + } + defer output.Close() + + _, err = output.Write(input) + return err + +} diff --git a/libbeat/generator/fields/module_fields_collector.go b/libbeat/generator/fields/module_fields_collector.go new file mode 100644 index 00000000000..5725678610a --- /dev/null +++ b/libbeat/generator/fields/module_fields_collector.go @@ -0,0 +1,74 @@ +package fields + +import ( + "io/ioutil" + "os" + "path/filepath" +) + +var indentByModule = map[string]int{ + "processors": 0, + "module": 8, + "active": 8, + "protos": 8, +} + +// CollectModuleFiles looks for fields.yml files under the +// specified root directory +func CollectModuleFiles(root string) ([]*YmlFile, error) { + modules, err := ioutil.ReadDir(root) + if err != nil { + return nil, err + } + + var files []*YmlFile + for _, m := range modules { + f, err := collectFiles(m, root) + if err != nil { + return nil, err + } + files = append(files, f...) + } + + return files, nil +} + +func collectFiles(module os.FileInfo, modulesPath string) ([]*YmlFile, error) { + if !module.IsDir() { + return nil, nil + } + + var files []*YmlFile + fieldsYmlPath := filepath.Join(modulesPath, module.Name(), "_meta", "fields.yml") + if _, err := os.Stat(fieldsYmlPath); !os.IsNotExist(err) { + files = append(files, &YmlFile{ + Path: fieldsYmlPath, + Indent: 0, + }) + } else if !os.IsNotExist(err) && err != nil { + return nil, err + } + + modulesRoot := filepath.Base(modulesPath) + sets, err := ioutil.ReadDir(filepath.Join(modulesPath, module.Name())) + if err != nil { + return nil, err + } + + for _, s := range sets { + if !s.IsDir() { + continue + } + + fieldsYmlPath = filepath.Join(modulesPath, module.Name(), s.Name(), "_meta", "fields.yml") + if _, err = os.Stat(fieldsYmlPath); !os.IsNotExist(err) { + files = append(files, &YmlFile{ + Path: fieldsYmlPath, + Indent: indentByModule[modulesRoot], + }) + } else if !os.IsNotExist(err) && err != nil { + return nil, err + } + } + return files, nil +} diff --git a/libbeat/scripts/Makefile b/libbeat/scripts/Makefile index a8197a46288..3f5edc0023e 100755 --- a/libbeat/scripts/Makefile +++ b/libbeat/scripts/Makefile @@ -304,9 +304,19 @@ coverage-report: test ! -s ${COVERAGE_DIR}/unit.cov || go tool cover -html=${COVERAGE_DIR}/unit.cov -o ${COVERAGE_DIR}/unit.html +.PHONY: fields +fields: + echo $(PWD) + @go run ${ES_BEATS}/libbeat/scripts/cmd/global_fields/main.go --es_beats_path $(ES_BEATS) --beat_path $(PWD) $(FIELDS_FILE_PATH) + + +.PHONY: libbeat_fields +libbeat_fields: + @$(MAKE) -C ${ES_BEATS}/libbeat fields + .PHONY: update update: ## @build Update expects the most recent version of libbeat in the GOPATH -update: python-env collect +update: python-env libbeat_fields collect @echo "Updating generated files for ${BEAT_NAME}" @# Update config files. @@ -324,15 +334,7 @@ ifeq ($(BEAT_REF_YAML),true) @chmod 0640 ${BEAT_NAME}.reference.yml endif - @# Update libbeat fields.generated.yml - @$(MAKE) -C ${ES_BEATS}/libbeat fields - - @# Update fields.yml - @test -s _meta/fields.generated.yml || cp _meta/fields.yml _meta/fields.generated.yml -ifeq ($(BEAT_NAME), libbeat) - @cp ${ES_BEATS}/libbeat/_meta/fields.generated.yml fields.yml -else - @cat ${ES_BEATS}/libbeat/_meta/fields.generated.yml _meta/fields.generated.yml > fields.yml +ifneq ($(BEAT_NAME), libbeat) mkdir -p include go run ${ES_BEATS}/dev-tools/cmd/asset/asset.go -pkg include fields.yml $(BEAT_NAME) > include/fields.go endif diff --git a/libbeat/scripts/cmd/global_fields/main.go b/libbeat/scripts/cmd/global_fields/main.go new file mode 100644 index 00000000000..ccee1ffc87a --- /dev/null +++ b/libbeat/scripts/cmd/global_fields/main.go @@ -0,0 +1,56 @@ +package main + +import ( + "flag" + "fmt" + "os" + "path/filepath" + + "github.com/elastic/beats/libbeat/generator/fields" +) + +func main() { + esBeatsPath := flag.String("es_beats_path", "..", "Path to elastic/beats") + beatPath := flag.String("beat_path", ".", "Path to your Beat") + flag.Parse() + + beatFieldsPath := flag.Args() + name := filepath.Base(*beatPath) + + err := os.MkdirAll(filepath.Join(*beatPath, "_meta"), 0744) + if err != nil { + fmt.Printf("Cannot creata _meta dir for %s: %v\n", name, err) + os.Exit(1) + } + + if len(beatFieldsPath) == 0 { + fmt.Println("No field files to collect") + err = fields.AppendFromLibbeat(*esBeatsPath, *beatPath) + if err != nil { + fmt.Printf("Cannot generate global fields.yml for %s: %v\n", name, err) + os.Exit(2) + } + return + } + + if *beatPath == "" { + fmt.Println("beat_path cannot be empty") + os.Exit(1) + } + + pathToModules := filepath.Join(*beatPath, beatFieldsPath[0]) + fieldFiles, err := fields.CollectModuleFiles(pathToModules) + if err != nil { + fmt.Printf("Cannot collect fields.yml files: %v\n", err) + os.Exit(2) + + } + + err = fields.Generate(*esBeatsPath, *beatPath, fieldFiles) + if err != nil { + fmt.Printf("Cannot generate global fields.yml file for %s: %v\n", name, err) + os.Exit(3) + } + + fmt.Printf("Generated fields.yml for %s\n", name) +} diff --git a/libbeat/scripts/cmd/global_fields/main_test.go b/libbeat/scripts/cmd/global_fields/main_test.go new file mode 100644 index 00000000000..5957e26f82e --- /dev/null +++ b/libbeat/scripts/cmd/global_fields/main_test.go @@ -0,0 +1,792 @@ +package main + +import ( + "path/filepath" + "reflect" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/elastic/beats/libbeat/generator/fields" +) + +type testcase struct { + fieldsPath string + files []*fields.YmlFile +} + +var ( + beatsPath = filepath.Join("..", "..", "..", "..") + filebeatFiles = []*fields.YmlFile{ + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "apache2", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "apache2", "access", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "apache2", "error", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "auditd", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "auditd", "log", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "icinga", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "icinga", "debug", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "icinga", "main", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "icinga", "startup", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "iis", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "iis", "access", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "iis", "error", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "kafka", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "kafka", "log", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "logstash", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "logstash", "log", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "logstash", "slowlog", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "mongodb", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "mongodb", "log", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "mysql", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "mysql", "error", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "mysql", "slowlog", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "nginx", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "nginx", "access", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "nginx", "error", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "osquery", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "osquery", "result", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "postgresql", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "postgresql", "log", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "redis", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "redis", "log", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "redis", "slowlog", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "system", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "system", "auth", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "system", "syslog", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "traefik", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "filebeat", "module", "traefik", "access", "_meta", "fields.yml"), + Indent: 8, + }, + } + heartbeatFiles = []*fields.YmlFile{ + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "heartbeat", "monitors", "active", "dialchain", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "heartbeat", "monitors", "active", "http", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "heartbeat", "monitors", "active", "icmp", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "heartbeat", "monitors", "active", "tcp", "_meta", "fields.yml"), + Indent: 0, + }, + } + libbeatFiles = []*fields.YmlFile{ + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "libbeat", "processors", "add_cloud_metadata", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "libbeat", "processors", "add_docker_metadata", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "libbeat", "processors", "add_host_metadata", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "libbeat", "processors", "add_kubernetes_metadata", "_meta", "fields.yml"), + Indent: 0, + }, + } + metricbeatFiles = []*fields.YmlFile{ + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "aerospike", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "aerospike", "namespace", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "apache", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "apache", "status", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "ceph", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "ceph", "cluster_disk", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "ceph", "cluster_health", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "ceph", "cluster_status", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "ceph", "monitor_health", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "ceph", "osd_df", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "ceph", "osd_tree", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "ceph", "pool_disk", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "couchbase", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "couchbase", "bucket", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "couchbase", "cluster", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "couchbase", "node", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "docker", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "docker", "container", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "docker", "cpu", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "docker", "diskio", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "docker", "healthcheck", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "docker", "image", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "docker", "info", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "docker", "memory", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "docker", "network", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "dropwizard", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "dropwizard", "collector", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "elasticsearch", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "elasticsearch", "index", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "elasticsearch", "node", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "elasticsearch", "node_stats", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "etcd", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "etcd", "leader", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "etcd", "self", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "etcd", "store", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "golang", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "golang", "expvar", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "golang", "heap", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "graphite", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "graphite", "server", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "haproxy", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "haproxy", "info", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "haproxy", "stat", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "http", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "http", "json", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "http", "server", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "jolokia", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "jolokia", "jmx", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kafka", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kafka", "consumergroup", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kafka", "partition", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kibana", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kibana", "status", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kubernetes", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kubernetes", "container", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kubernetes", "event", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kubernetes", "node", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kubernetes", "pod", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kubernetes", "state_container", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kubernetes", "state_deployment", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kubernetes", "state_node", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kubernetes", "state_pod", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kubernetes", "state_replicaset", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kubernetes", "state_statefulset", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kubernetes", "system", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kubernetes", "volume", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kvm", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "kvm", "dommemstat", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "logstash", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "logstash", "node", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "logstash", "node_stats", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "memcached", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "memcached", "stats", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "mongodb", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "mongodb", "collstats", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "mongodb", "dbstats", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "mongodb", "status", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "munin", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "munin", "node", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "mysql", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "mysql", "status", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "nginx", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "nginx", "stubstatus", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "php_fpm", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "php_fpm", "pool", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "postgresql", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "postgresql", "activity", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "postgresql", "bgwriter", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "postgresql", "database", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "prometheus", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "prometheus", "collector", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "prometheus", "stats", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "rabbitmq", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "rabbitmq", "connection", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "rabbitmq", "node", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "rabbitmq", "queue", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "redis", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "redis", "info", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "redis", "keyspace", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "system", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "system", "core", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "system", "cpu", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "system", "diskio", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "system", "filesystem", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "system", "fsstat", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "system", "load", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "system", "memory", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "system", "network", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "system", "process", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "system", "process_summary", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "system", "raid", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "system", "socket", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "system", "uptime", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "uwsgi", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "uwsgi", "status", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "vsphere", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "vsphere", "datastore", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "vsphere", "host", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "vsphere", "virtualmachine", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "windows", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "windows", "perfmon", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "windows", "service", "_meta", "fields.yml"), + Indent: 8, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "zookeeper", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "metricbeat", "module", "zookeeper", "mntr", "_meta", "fields.yml"), + Indent: 8, + }, + } + packetbeatFiles = []*fields.YmlFile{ + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "packetbeat", "protos", "amqp", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "packetbeat", "protos", "cassandra", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "packetbeat", "protos", "dns", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "packetbeat", "protos", "http", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "packetbeat", "protos", "icmp", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "packetbeat", "protos", "memcache", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "packetbeat", "protos", "mongodb", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "packetbeat", "protos", "mysql", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "packetbeat", "protos", "nfs", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "packetbeat", "protos", "pgsql", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "packetbeat", "protos", "redis", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "packetbeat", "protos", "thrift", "_meta", "fields.yml"), + Indent: 0, + }, + &fields.YmlFile{ + Path: filepath.Join(beatsPath, "packetbeat", "protos", "tls", "_meta", "fields.yml"), + Indent: 0, + }, + } +) + +// TestCollectModuleFiles validates if the required files are collected +func TestCollectModuleFiles(t *testing.T) { + cases := []testcase{ + testcase{ + fieldsPath: filepath.Join(beatsPath, "filebeat", "module"), + files: filebeatFiles, + }, + testcase{ + fieldsPath: filepath.Join(beatsPath, "heartbeat", "monitors", "active"), + files: heartbeatFiles, + }, + testcase{ + fieldsPath: filepath.Join(beatsPath, "libbeat", "processors"), + files: libbeatFiles, + }, + testcase{ + fieldsPath: filepath.Join(beatsPath, "metricbeat", "module"), + files: metricbeatFiles, + }, + testcase{ + fieldsPath: filepath.Join(beatsPath, "packetbeat", "protos"), + files: packetbeatFiles, + }, + } + + for _, c := range cases { + fieldFiles, err := fields.CollectModuleFiles(c.fieldsPath) + if err != nil { + t.Fatal(err) + } + assert.True(t, reflect.DeepEqual(fieldFiles, c.files)) + } +} diff --git a/metricbeat/Makefile b/metricbeat/Makefile index 3586ee355d8..7cbfcfbf375 100644 --- a/metricbeat/Makefile +++ b/metricbeat/Makefile @@ -5,6 +5,7 @@ BEAT_DESCRIPTION?=Metricbeat is a lightweight shipper for metrics. SYSTEM_TESTS?=true TEST_ENVIRONMENT?=true ES_BEATS?=.. +FIELDS_FILE_PATH?=module # Metricbeat can only be cross-compiled on platforms not requiring CGO. GOX_OS=netbsd linux windows @@ -21,13 +22,6 @@ kibana: @mkdir -p _meta/kibana @-cp -r module/*/_meta/kibana _meta/ -# Collects all module and metricset fields -.PHONY: fields -fields: python-env - @mkdir -p _meta - @cp ${ES_BEATS}/metricbeat/_meta/fields.common.yml _meta/fields.generated.yml - @${PYTHON_ENV}/bin/python ${ES_BEATS}/metricbeat/scripts/fields_collector.py >> _meta/fields.generated.yml - # Collects all module docs .PHONY: collect-docs collect-docs: python-env diff --git a/metricbeat/include/fields.go b/metricbeat/include/fields.go index 23f27b942f6..1988e1caf1f 100644 --- a/metricbeat/include/fields.go +++ b/metricbeat/include/fields.go @@ -14,5 +14,5 @@ func init() { // Asset returns asset data func Asset() string { - return "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" + return "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" } diff --git a/packetbeat/Makefile b/packetbeat/Makefile index 1118608f92e..1e0922f6426 100644 --- a/packetbeat/Makefile +++ b/packetbeat/Makefile @@ -4,6 +4,7 @@ BEAT_DESCRIPTION?=Packetbeat analyzes network traffic and sends the data to Elas SYSTEM_TESTS?=true TEST_ENVIRONMENT=false ES_BEATS?=.. +FIELDS_FILE_PATH=protos TARGETS?="windows/amd64 windows/386 darwin/amd64"## @building list of platforms/architecture to be built by "make package" PACKAGES?=${BEAT_NAME}/deb ${BEAT_NAME}/rpm ${BEAT_NAME}/darwin ${BEAT_NAME}/win ${BEAT_NAME}/bin ## @Building List of OS to be supported by "make package" @@ -29,12 +30,6 @@ before-build: .PHONY: collect collect: fields imports -.PHONY: fields -fields: - @mkdir -p _meta - @cp ${ES_BEATS}/packetbeat/_meta/fields_base.yml _meta/fields.yml - @-cat protos/*/_meta/fields.yml >> _meta/fields.yml - .PHONY: benchmark benchmark: go test -short -bench=. ./... -cpu=2 diff --git a/packetbeat/_meta/fields_base.yml b/packetbeat/_meta/fields.common.yml similarity index 100% rename from packetbeat/_meta/fields_base.yml rename to packetbeat/_meta/fields.common.yml diff --git a/winlogbeat/Makefile b/winlogbeat/Makefile index 78fd998cbdc..3b533836cd7 100644 --- a/winlogbeat/Makefile +++ b/winlogbeat/Makefile @@ -23,5 +23,4 @@ before-build: # Collects all dependencies and then calls update .PHONY: collect -collect: - +collect: fields