xref: /openbmc/phosphor-logging/tools/gen-eventfilter.py (revision 76fe0d1fd40349c1b84d11c311ed8909f45ff193)
1*76fe0d1fSPatrick Williams#!/usr/bin/env python3
2*76fe0d1fSPatrick Williams
3*76fe0d1fSPatrick Williamsimport argparse
4*76fe0d1fSPatrick Williamsimport json
5*76fe0d1fSPatrick Williamsimport os
6*76fe0d1fSPatrick Williamsimport sys
7*76fe0d1fSPatrick Williams
8*76fe0d1fSPatrick Williamsimport jsonschema
9*76fe0d1fSPatrick Williamsfrom mako.template import Template
10*76fe0d1fSPatrick Williams
11*76fe0d1fSPatrick Williamsimport yaml
12*76fe0d1fSPatrick Williams
13*76fe0d1fSPatrick Williams# Determine the script's directory to find the schema file relative to it.
14*76fe0d1fSPatrick WilliamsSCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
15*76fe0d1fSPatrick WilliamsSCHEMA_FILE = os.path.join(
16*76fe0d1fSPatrick Williams    SCRIPT_DIR, "phosphor-logging", "schemas", "eventfilter.schema.yaml"
17*76fe0d1fSPatrick Williams)
18*76fe0d1fSPatrick WilliamsTEMPLATE_FILE = os.path.join(
19*76fe0d1fSPatrick Williams    SCRIPT_DIR, "phosphor-logging", "templates", "event-filter.cpp.mako"
20*76fe0d1fSPatrick Williams)
21*76fe0d1fSPatrick Williams
22*76fe0d1fSPatrick Williams
23*76fe0d1fSPatrick Williamsdef main() -> int:
24*76fe0d1fSPatrick Williams    """
25*76fe0d1fSPatrick Williams    Validates a JSON filter file against the eventfilter schema.
26*76fe0d1fSPatrick Williams    """
27*76fe0d1fSPatrick Williams    parser = argparse.ArgumentParser(
28*76fe0d1fSPatrick Williams        description="Validate an event filter JSON file against the schema."
29*76fe0d1fSPatrick Williams    )
30*76fe0d1fSPatrick Williams    parser.add_argument(
31*76fe0d1fSPatrick Williams        "filter",
32*76fe0d1fSPatrick Williams        type=str,
33*76fe0d1fSPatrick Williams        help="Path to the JSON filter file to validate.",
34*76fe0d1fSPatrick Williams    )
35*76fe0d1fSPatrick Williams    args = parser.parse_args()
36*76fe0d1fSPatrick Williams
37*76fe0d1fSPatrick Williams    with open(args.filter, "r") as f:
38*76fe0d1fSPatrick Williams        filter_data = json.load(f)
39*76fe0d1fSPatrick Williams
40*76fe0d1fSPatrick Williams    with open(SCHEMA_FILE, "r") as f:
41*76fe0d1fSPatrick Williams        schema_data = yaml.safe_load(f)
42*76fe0d1fSPatrick Williams
43*76fe0d1fSPatrick Williams    jsonschema.validate(instance=filter_data, schema=schema_data)
44*76fe0d1fSPatrick Williams
45*76fe0d1fSPatrick Williams    template = Template(filename=TEMPLATE_FILE)
46*76fe0d1fSPatrick Williams    output = template.render(data=filter_data)
47*76fe0d1fSPatrick Williams    print(output)
48*76fe0d1fSPatrick Williams
49*76fe0d1fSPatrick Williams    return 0
50*76fe0d1fSPatrick Williams
51*76fe0d1fSPatrick Williams
52*76fe0d1fSPatrick Williamsif __name__ == "__main__":
53*76fe0d1fSPatrick Williams    sys.exit(main())
54