youtubebeat/vendor/github.com/elastic/beats/dev-tools/mage/fields.go

127 lines
3.6 KiB
Go

// Licensed to Elasticsearch B.V. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Elasticsearch B.V. licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package mage
import (
"os"
"path/filepath"
"github.com/magefile/mage/sh"
)
// GenerateFieldsYAML generates a fields.yml file for a Beat. This will include
// the common fields specified by libbeat, the common fields for the Beat,
// and any additional fields.yml files you specify.
//
// moduleDirs specifies additional directories to search for modules. The
// contents of each fields.yml will be included in the generated file.
func GenerateFieldsYAML(moduleDirs ...string) error {
return generateFieldsYAML(OSSBeatDir(), moduleDirs...)
}
// OSSBeatDir returns the OSS beat directory. You can pass paths and they will
// be joined and appended to the OSS beat dir.
func OSSBeatDir(path ...string) string {
ossDir := CWD()
// Check if we need to correct ossDir because it's in x-pack.
if parentDir := filepath.Base(filepath.Dir(ossDir)); parentDir == "x-pack" {
// If the OSS version of the beat exists.
tmp := filepath.Join(ossDir, "../..", BeatName)
if _, err := os.Stat(tmp); !os.IsNotExist(err) {
ossDir = tmp
}
}
return filepath.Join(append([]string{ossDir}, path...)...)
}
func generateFieldsYAML(baseDir string, moduleDirs ...string) error {
const globalFieldsCmdPath = "libbeat/scripts/cmd/global_fields/main.go"
beatsDir, err := ElasticBeatsDir()
if err != nil {
return err
}
globalFieldsCmd := sh.RunCmd("go", "run",
filepath.Join(beatsDir, globalFieldsCmdPath),
"-es_beats_path", beatsDir,
"-beat_path", baseDir,
"-out", "fields.yml",
)
return globalFieldsCmd(moduleDirs...)
}
// GenerateAllInOneFieldsGo generates an all-in-one fields.go file.
func GenerateAllInOneFieldsGo() error {
return GenerateFieldsGo("fields.yml", "include/fields.go")
}
// GenerateFieldsGo generates a .go file containing the fields.yml data.
func GenerateFieldsGo(fieldsYML, out string) error {
const assetCmdPath = "dev-tools/cmd/asset/asset.go"
beatsDir, err := ElasticBeatsDir()
if err != nil {
return err
}
licenseType := BeatLicense
if licenseType == "ASL 2.0" {
licenseType = "ASL2"
}
assetCmd := sh.RunCmd("go", "run",
filepath.Join(beatsDir, assetCmdPath),
"-pkg", "include",
"-in", fieldsYML,
"-out", createDir(out),
"-license", licenseType,
BeatName,
)
return assetCmd()
}
// GenerateModuleFieldsGo generates a fields.go file containing a copy of the
// each module's field.yml data in a format that can be embedded in Beat's
// binary.
func GenerateModuleFieldsGo() error {
const moduleFieldsCmdPath = "dev-tools/cmd/module_fields/main.go"
beatsDir, err := ElasticBeatsDir()
if err != nil {
return err
}
licenseType := BeatLicense
if licenseType == "ASL 2.0" {
licenseType = "ASL2"
}
moduleFieldsCmd := sh.RunCmd("go", "run",
filepath.Join(beatsDir, moduleFieldsCmdPath),
"-beat", BeatName,
"-license", licenseType,
filepath.Join(CWD(), "module"),
)
return moduleFieldsCmd()
}