def grab_category_scores(store, categories=None, debug=False): '''Program to create and return some python Dicts with security scores and totals by category and totals by drone/category Categories is None or a list of desired categories. ''' cypher = '''START drone=node:Drone('*:*') RETURN drone''' BestPractices(CMAdb.io.config, CMAdb.io, store, CMAdb.log, debug=debug) dtype_totals = {} # scores organized by (category, discovery-type) drone_totals = {} # scores organized by (category, discovery-type, drone) rule_totals = {} # scores organized by (category, discovery-type, rule) for drone in store.load_cypher_nodes(cypher, Drone): designation = drone.designation discoverytypes = drone.bp_discoverytypes_list() for dtype in discoverytypes: dattr = Drone.bp_discoverytype_result_attrname(dtype) statuses = getattr(drone, dattr) for rule_obj in BestPractices.eval_objects[dtype]: rulesobj = rule_obj.fetch_rules(drone, None, dtype) _, scores, rulescores = BestPractices.compute_scores(drone, rulesobj, statuses) for category in scores: if category not in categories and categories: continue # Accumulate scores by (category, discovery_type) setup_dict2(dtype_totals, category, dtype) dtype_totals[category][dtype] += scores[category] # Accumulate scores by (category, discovery_type, drone) setup_dict3(drone_totals, category, dtype, designation) drone_totals[category][dtype][designation] += scores[category] # Accumulate scores by (category, discovery_type, ruleid) for ruleid in rulescores[category]: setup_dict3(rule_totals, category, dtype, ruleid) rule_totals[category][dtype][ruleid] += rulescores[category][ruleid] return dtype_totals, drone_totals, rule_totals