From dd814a7c1a8de056a79f7238578b09236edd5506 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 10 Aug 2023 11:18:49 +0200 Subject: Adding upstream version 1.42.0. Signed-off-by: Daniel Baumann --- integrations/check_collector_metadata.py | 89 ++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100755 integrations/check_collector_metadata.py (limited to 'integrations/check_collector_metadata.py') diff --git a/integrations/check_collector_metadata.py b/integrations/check_collector_metadata.py new file mode 100755 index 000000000..4e610b068 --- /dev/null +++ b/integrations/check_collector_metadata.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 + +import sys + +from pathlib import Path + +from jsonschema import ValidationError + +from gen_integrations import (CATEGORIES_FILE, SINGLE_PATTERN, MULTI_PATTERN, SINGLE_VALIDATOR, MULTI_VALIDATOR, + load_yaml, get_category_sets) + + +def main(): + if len(sys.argv) != 2: + print(':error:This script takes exactly one argument.') + return 2 + + check_path = Path(sys.argv[1]) + + if not check_path.is_file(): + print(f':error file={ check_path }:{ check_path } does not appear to be a regular file.') + return 1 + + if check_path.match(SINGLE_PATTERN): + variant = 'single' + print(f':debug:{ check_path } appears to be single-module metadata.') + elif check_path.match(MULTI_PATTERN): + variant = 'multi' + print(f':debug:{ check_path } appears to be multi-module metadata.') + else: + print(f':error file={ check_path }:{ check_path } does not match required file name format.') + return 1 + + categories = load_yaml(CATEGORIES_FILE) + + if not categories: + print(':error:Failed to load categories file.') + return 2 + + _, valid_categories = get_category_sets(categories) + + data = load_yaml(check_path) + + if not data: + print(f':error file={ check_path }:Failed to load data from { check_path }.') + return 1 + + check_modules = [] + + if variant == 'single': + try: + SINGLE_VALIDATOR.validate(data) + except ValidationError as e: + print(f':error file={ check_path }:Failed to validate { check_path } against the schema.') + raise e + else: + check_modules.append(data) + elif variant == 'multi': + try: + MULTI_VALIDATOR.validate(data) + except ValidationError as e: + print(f':error file={ check_path }:Failed to validate { check_path } against the schema.') + raise e + else: + for item in data['modules']: + item['meta']['plugin_name'] = data['plugin_name'] + check_modules.append(item) + else: + print(':error:Internal error encountered.') + return 2 + + failed = False + + for idx, module in enumerate(check_modules): + invalid_cats = set(module['meta']['monitored_instance']['categories']) - valid_categories + + if invalid_cats: + print(f':error file={ check_path }:Invalid categories found in module { idx } in { check_path }: { ", ".joiin(invalid_cats) }.') + failed = True + + if failed: + return 1 + else: + print('{ check_path } is a valid collector metadata file.') + return 0 + + +if __name__ == '__main__': + sys.exit(main()) -- cgit v1.2.3