1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #!/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())
|