spotbugsSummary.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #!/usr/bin/env python3
  2. import argparse
  3. import xml.etree.ElementTree as ET
  4. def get_counts(tree):
  5. category_counts = {}
  6. category_names = {}
  7. for child in tree.getroot():
  8. if child.tag == "BugInstance":
  9. category = child.attrib['category']
  10. if category in category_counts:
  11. category_counts[category] = category_counts[category] + 1
  12. else:
  13. category_counts[category] = 1
  14. elif child.tag == "BugCategory":
  15. category = child.attrib['category']
  16. category_names[category] = child[0].text
  17. summary = {}
  18. for category in category_counts.keys():
  19. summary[category_names[category]] = category_counts[category]
  20. return summary
  21. def print_html(summary):
  22. output = "<table><tr><th>Category</th><th>Count</th></tr>"
  23. categories = sorted(summary.keys())
  24. for category in categories:
  25. output += "<tr>"
  26. output += f"<td>{category}</td>"
  27. output += f"<td>{summary[category]}</td>"
  28. output += "</tr>"
  29. output += "<tr>"
  30. output += "<td><b>Total</b></td>"
  31. output += f"<td><b>{sum(summary.values())}</b></td>"
  32. output += "</tr>"
  33. output += "</table>"
  34. print(output)
  35. def print_total(summary):
  36. print(sum(summary.values()))
  37. if __name__ == "__main__":
  38. parser = argparse.ArgumentParser()
  39. parser.add_argument("--total", help="print total count instead of summary HTML",
  40. action="store_true")
  41. args = parser.parse_args()
  42. tree = ET.parse("app/build/reports/spotbugs/gplayDebug.xml")
  43. summary = get_counts(tree)
  44. if args.total:
  45. print_total(summary)
  46. else:
  47. print_html(summary)