Package versions report updates
diff --git a/cfg_checker/modules/packages/__init__.py b/cfg_checker/modules/packages/__init__.py
index 4f1a809..0e2d956 100644
--- a/cfg_checker/modules/packages/__init__.py
+++ b/cfg_checker/modules/packages/__init__.py
@@ -16,6 +16,6 @@
# collect data on installed packages
pChecker.collect_installed_packages()
# diff installed and candidates
- # pChecker.collect_packages()
+ pChecker.collect_packages()
# report it
pChecker.create_html_report(_filename)
diff --git a/cfg_checker/modules/packages/checker.py b/cfg_checker/modules/packages/checker.py
index 100b329..4956a52 100644
--- a/cfg_checker/modules/packages/checker.py
+++ b/cfg_checker/modules/packages/checker.py
@@ -32,7 +32,7 @@
logger_cli.info("... no JSON for '{}'".format(
key
))
- logger_cli.debug("... {}".format(_text[:_text.find('{')]))
+ logger_cli.debug("ERROR:\n{}\n".format(_text[:_text.find('{')]))
_dict = {}
self.nodes[key]['packages'] = _dict
@@ -50,16 +50,31 @@
:return: no return values, all date put to dict in place
"""
- _all_packages = {}
+ # Collect packages from all of the nodes in flat dict
+ _diff_packages = {}
for node_name, node_value in self.nodes.iteritems():
- for package_name in node_value['packages']:
- if package_name not in _all_packages:
- _all_packages[package_name] = {}
- _all_packages[package_name][node_name] = node_value
+ for _name, _value in node_value['packages'].iteritems():
+ if _name not in _diff_packages:
+ _diff_packages[_name] = {}
+ _diff_packages[_name]['df_nodes'] = {}
+ _diff_packages[_name]['eq_nodes'] = []
+
+ # compare packages, mark if equal
+ if _value['installed'] != _value['candidate']:
+ # Saving compare value so we not do str compare again
+ _value['is_equal'] = False
+ # add node name to list
+ _diff_packages[_name]['df_nodes'][node_name] = {
+ 'i': _value['installed'],
+ 'c': _value['candidate'],
+ 'raw': _value['raw']
+ }
+ else:
+ # Saving compare value so we not do str compare again
+ _value['is_equal'] = True
+ _diff_packages[_name]['eq_nodes'].append(node_name)
- # TODO: process data for per-package basis
-
- self.all_packages = _all_packages
+ self.diff_packages = _diff_packages
def create_html_report(self, filename):
"""
@@ -74,6 +89,7 @@
)
_report({
"nodes": self.nodes,
- "diffs": {}
+ "rc_diffs": {},
+ "pkg_diffs": self.diff_packages
})
logger_cli.info("-> Done")
diff --git a/cfg_checker/modules/reclass/comparer.py b/cfg_checker/modules/reclass/comparer.py
index eaf1ce8..5ef2ca5 100644
--- a/cfg_checker/modules/reclass/comparer.py
+++ b/cfg_checker/modules/reclass/comparer.py
@@ -135,7 +135,7 @@
)
# save it as a single data object
- self.models[name]["all_diffs"] = raw_tree[root_key]
+ self.models[name]["rc_diffs"] = raw_tree[root_key]
return True
def find_changes(self, dict1, dict2, path=""):
@@ -356,7 +356,7 @@
# report will have tabs for each of the comparable entities in diffs
report({
"nodes": {},
- "all_diffs": diffs,
+ "rc_diffs": diffs,
})
# with open("./gen_tree.json", "w+") as _out:
# _out.write(json.dumps(mComparer.generate_model_report_tree))
diff --git a/cfg_checker/reports/reporter.py b/cfg_checker/reports/reporter.py
index 9d2b2eb..e1d6b6f 100644
--- a/cfg_checker/reports/reporter.py
+++ b/cfg_checker/reports/reporter.py
@@ -63,7 +63,8 @@
# system, nodes, clusters, and the rest in other
data.update({
"nodes": payload['nodes'],
- "all_diffs": payload['diffs'],
+ "rc_diffs": payload['rc_diffs'],
+ "pkg_diffs": payload['pkg_diffs'],
"tabs": {}
})
@@ -121,18 +122,20 @@
return _fail_uniq
def _extend_data(self, data):
- _all_pkg = 0
+ # Count values on per-node basis
for key, value in data['nodes'].iteritems():
- # add count of packages for this node to total
- _all_pkg += len(value.keys())
-
# count differences
data['counters'][key] = {}
data['counters'][key]['packages'] = len(value['packages'].keys())
data['counters'][key]['package_diff'] = 0
+ data['counters'][key]['package_eq'] = 0
+
+ # Lookup if this fail is uniq for this node
for pkg_name, pkg_value in value['packages'].iteritems():
- if pkg_value['installed'] != pkg_value['candidate']:
- pkg_value['is_equal'] = False
+ if pkg_value['is_equal']:
+ pkg_value['fail_uniq'] = False
+ data['counters'][key]['package_eq'] += 1
+ else:
pkg_value['fail_uniq'] = self.is_fail_uniq(
pkg_value,
pkg_name,
@@ -140,11 +143,15 @@
key
)
data['counters'][key]['package_diff'] += 1
- else:
- pkg_value['is_equal'] = True
- pkg_value['fail_uniq'] = False
+
+ # Count values on all-diffs basis
+ for key, value in data['pkg_diffs'].iteritems():
+ data['counters'][key] = {}
+ data['counters'][key]['df_nodes'] = len(value['df_nodes'].keys())
+ data['counters'][key]['eq_nodes'] = len(value['eq_nodes'])
- data['counters']['total_packages'] = _all_pkg
+ # Save all packages counter
+ data['counters']['total_packages'] = data['pkg_diffs'].keys()
# Package versions report
@@ -153,8 +160,8 @@
def _extend_data(self, data):
# move names into separate place
- data["names"] = data["all_diffs"].pop("diff_names")
- data["tabs"] = data.pop("all_diffs")
+ data["names"] = data["rc_diffs"].pop("diff_names")
+ data["tabs"] = data.pop("rc_diffs")
# counters - mdl_diff
for _tab in data["tabs"].keys():