1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #!/usr/bin/env python
- # Copyright 2017 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- """A utility for generating builder classes for UKM entries.
- It takes as input a ukm.xml file describing all of the entries and metrics,
- and produces a c++ header and implementation file exposing builders for those
- entries and metrics.
- """
- import argparse
- import sys
- import ukm_model
- import builders_template
- import decode_template
- parser = argparse.ArgumentParser(description='Generate UKM entry builders')
- parser.add_argument('--input', help='Path to ukm.xml')
- parser.add_argument('--output', help='Path to generated files.')
- def main(argv):
- args = parser.parse_args()
- data = ReadFilteredData(args.input)
- relpath = 'services/metrics/public/cpp/'
- builders_template.WriteFiles(args.output, relpath, data)
- decode_template.WriteFiles(args.output, relpath, data)
- return 0
- def ReadFilteredData(path):
- """Reads data from path and filters out any obsolete metrics.
- Parses data from given path and removes all nodes that contain an
- <obsolete> tag. First iterates through <event> nodes, then <metric>
- nodes within them.
- Args:
- path: The path of the XML data source.
- Returns:
- A dict of the data not including any obsolete events or metrics.
- """
- with open(path) as ukm_file:
- data = ukm_model.UKM_XML_TYPE.Parse(ukm_file.read())
- event_tag = ukm_model._EVENT_TYPE.tag
- metric_tag = ukm_model._METRIC_TYPE.tag
- data[event_tag] = list(filter(ukm_model.IsNotObsolete, data[event_tag]))
- for event in data[event_tag]:
- event[metric_tag] = list(
- filter(ukm_model.IsNotObsolete, event[metric_tag]))
- return data
- if '__main__' == __name__:
- sys.exit(main(sys.argv))
|