115 lines
3.6 KiB
Python
115 lines
3.6 KiB
Python
|
import os
|
||
|
import argparse
|
||
|
|
||
|
# Creates a new metricset with all the necessary file
|
||
|
# In case the module does not exist, also the module is created
|
||
|
|
||
|
|
||
|
def generate_metricset(base_path, metricbeat_path, module, metricset):
|
||
|
|
||
|
generate_module(base_path, metricbeat_path, module, metricset)
|
||
|
metricset_path = base_path + "/module/" + module + "/" + metricset
|
||
|
meta_path = metricset_path + "/_meta"
|
||
|
|
||
|
if os.path.isdir(metricset_path):
|
||
|
print("Metricset already exists. Skipping creating metricset {}"
|
||
|
.format(metricset))
|
||
|
return
|
||
|
|
||
|
os.makedirs(meta_path)
|
||
|
|
||
|
templates = metricbeat_path + "/scripts/module/metricset/"
|
||
|
|
||
|
content = load_file(templates + "metricset.go.tmpl", module, metricset)
|
||
|
with open(metricset_path + "/" + metricset + ".go", "w") as f:
|
||
|
f.write(content)
|
||
|
|
||
|
content = load_file(templates + "fields.yml", module, metricset)
|
||
|
with open(meta_path + "/fields.yml", "w") as f:
|
||
|
f.write(content)
|
||
|
|
||
|
content = load_file(templates + "docs.asciidoc", module, metricset)
|
||
|
with open(meta_path + "/docs.asciidoc", "w") as f:
|
||
|
f.write(content)
|
||
|
|
||
|
content = load_file(templates + "data.json", module, metricset)
|
||
|
with open(meta_path + "/data.json", "w") as f:
|
||
|
f.write(content)
|
||
|
|
||
|
print("Metricset {} created.".format(metricset))
|
||
|
|
||
|
|
||
|
def generate_module(base_path, metricbeat_path, module, metricset):
|
||
|
|
||
|
module_path = base_path + "/module/" + module
|
||
|
meta_path = module_path + "/_meta"
|
||
|
|
||
|
if os.path.isdir(module_path):
|
||
|
print("Module already exists. Skipping creating module {}"
|
||
|
.format(module))
|
||
|
return
|
||
|
|
||
|
os.makedirs(meta_path)
|
||
|
|
||
|
templates = metricbeat_path + "/scripts/module/"
|
||
|
|
||
|
content = load_file(templates + "fields.yml", module, "")
|
||
|
with open(meta_path + "/fields.yml", "w") as f:
|
||
|
f.write(content)
|
||
|
|
||
|
content = load_file(templates + "docs.asciidoc", module, "")
|
||
|
with open(meta_path + "/docs.asciidoc", "w") as f:
|
||
|
f.write(content)
|
||
|
|
||
|
content = load_file(templates + "config.yml", module, metricset)
|
||
|
with open(meta_path + "/config.yml", "w") as f:
|
||
|
f.write(content)
|
||
|
|
||
|
content = load_file(templates + "doc.go.tmpl", module, "")
|
||
|
with open(module_path + "/doc.go", "w") as f:
|
||
|
f.write(content)
|
||
|
|
||
|
print("Module {} created.".format(module))
|
||
|
|
||
|
|
||
|
def load_file(file, module, metricset):
|
||
|
content = ""
|
||
|
with open(file) as f:
|
||
|
content = f.read()
|
||
|
|
||
|
return content.replace("{module}", module).replace("{metricset}",
|
||
|
metricset)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
|
||
|
parser = argparse.ArgumentParser(description="Creates a metricset")
|
||
|
parser.add_argument("--module", help="Module name")
|
||
|
parser.add_argument("--metricset", help="Metricset name")
|
||
|
|
||
|
parser.add_argument("--path", help="Beat path")
|
||
|
parser.add_argument("--es_beats",
|
||
|
help="The path to the general beats folder")
|
||
|
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
if args.path is None:
|
||
|
args.path = './'
|
||
|
print("Set default path for beat path: " + args.path)
|
||
|
|
||
|
if args.es_beats is None:
|
||
|
args.es_beats = '../'
|
||
|
print("Set default path for es_beats path: " + args.es_beats)
|
||
|
|
||
|
if args.module is None or args.module == '':
|
||
|
args.module = raw_input("Module name: ")
|
||
|
|
||
|
if args.metricset is None or args.metricset == '':
|
||
|
args.metricset = raw_input("Metricset name: ")
|
||
|
|
||
|
path = os.path.abspath(args.path)
|
||
|
metricbeat_path = os.path.abspath(args.es_beats + "/metricbeat")
|
||
|
|
||
|
generate_metricset(path, metricbeat_path, args.module.lower(),
|
||
|
args.metricset.lower())
|