def calculate(node_config):
    """aggregate parsed information for the report"""
    summary = {
        "nodes": {},
        "versions": set(),
        "cassandra_versions": set(),
        "spark_versions": set(),
        "solr_versions": set(),
        "workloads": {},
        "nodes_list": [],
        }
    for node, config in node_config.items():
        if config.get('version'):
            summary["versions"].add(config.get("version"))
        if config.get('cassandra_version'):
            summary["cassandra_versions"].add(config.get("cassandra_version"))
        if config.get('solr_version'):
            summary["solr_versions"].add(config.get("solr_version"))
        if config.get('spark_version'):
            summary["spark_versions"].add(config.get("spark_version"))
        summary["nodes_list"].append(node)
    summary["nodes"] = len(summary["nodes_list"])
    summary["nodes_list"] = sorted(summary["nodes_list"], reverse=True)
    return summary