import json import os import sys namespace_template = { "name": "", "cluster": "", "date": "", "metrics": {}, } def list_all_namespaces(file): """ Collect kubecost data from file dumped using ./kubecost_collector Args: file: file path to the dumped file of kubecost """ with open(file) as f: data = json.load(f) # data template = {code: int, data: [{name:{key:value...}}...]} data = data["data"] result = [] for ns in data: for _, props in ns.items(): ns_data = {} metrics = {} for key, value in props.items(): if key == "name": ns_data["name"] = value elif key == "properties": ns_data["cluster"] = value["cluster"] elif key == "start": ns_data["date"] = value.split("T")[0] elif key in ("window", "end"): continue else: metrics[key] = value ns_data["metrics"] = metrics result.append(ns_data) return result class DatetimeEncoder(json.JSONEncoder): def default(self, obj): try: return super().default(obj) except TypeError: return str(obj) if __name__ == '__main__': if len(sys.argv) != 2: print("Usage: python collect_kubecost_asset_daily_snapshot.py ") sys.exit(1) file = sys.argv[1] if not os.path.exists(file): print("File does not exist") sys.exit(1) data = list_all_namespaces(file) json.dump(data, open("kubecost_namespace_daily_asset_snapshot.json", "w"), indent=4)