From 752401e1a8b46652317190c2477e453e8c7f2618 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 21 Feb 2024 11:25:54 +0100 Subject: [PATCH 001/227] fix: removed volume for boaviztapi, using tag dev for scaphandre image --- docker-compose.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index a43d869..bb9c57b 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -29,7 +29,7 @@ services: - "/etc/crontab:/etc/crontab" scaphandre: - image: hubblo/scaphandre:greenhack22 + image: hubblo/scaphandre:dev volumes: - type: bind source: /proc @@ -48,8 +48,6 @@ services: - "5000:5000" networks: - boagent-network - volumes: - - "../boaviztapi/boaviztapi:/app/boaviztapi" volumes: powerdata: {} From 000eea9e41014d182c4dc7cfdc3a00720f297a7c Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 21 Feb 2024 11:26:52 +0100 Subject: [PATCH 002/227] fix: ignoring db sqlite files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 891be20..e742a97 100644 --- a/.gitignore +++ b/.gitignore @@ -138,3 +138,4 @@ dmypy.json .vscode/ *.json +*.db From a8ecc021b6fab639fdf1702f58c716c57454d02c Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 21 Feb 2024 11:38:25 +0100 Subject: [PATCH 003/227] fix: added db creation step with sqlite3 --- Dockerfile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Dockerfile b/Dockerfile index 704de1c..166a96f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,6 +18,12 @@ RUN pip3 install -r requirements.txt ENV PATH $PATH:/home/boagent/.local/bin +WORKDIR /home/boagent/db + +RUN sqlite3 boagent.db + +WORKDIR /home/boagent + COPY . . EXPOSE 8000 From 371c460eadbdebcd98bb77ca04d4c6c153a28b81 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 21 Feb 2024 14:45:08 +0100 Subject: [PATCH 004/227] fix: going back to previous scaphandre image, functioning boagent --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index bb9c57b..1b19afd 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -29,7 +29,7 @@ services: - "/etc/crontab:/etc/crontab" scaphandre: - image: hubblo/scaphandre:dev + image: hubblo/scaphandre:greenhack22 volumes: - type: bind source: /proc From 56cccfb5f325004a5cc90064eeffce398ae98be9 Mon Sep 17 00:00:00 2001 From: Benoit Petit Date: Wed, 21 Feb 2024 16:12:58 +0100 Subject: [PATCH 005/227] docs: improving routes description --- boagent/api/api.py | 33 +++++++++++++++++++++++++++------ boagent/api/config.py | 8 ++++++++ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 7abc85c..0cca238 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -29,7 +29,19 @@ def configure_static(app): def configure_app(): - app = FastAPI(title=settings.PROJECT_NAME, version=settings.PROJECT_VERSION) + app = FastAPI( + title=settings.PROJECT_NAME, + version=settings.PROJECT_VERSION, + description = settings.PROJECT_DESCRIPTION, + contact = { + "name": "Boavizta Members", + "url": "https://boavizta.org/en" + }, + license_info = { + "name": "Apache-2.0" + }, + openapi_tags = settings.TAGS_METADATA + ) configure_static(app) return app @@ -40,7 +52,7 @@ def configure_app(): create_database(get_engine(db_path=settings.db_path)) -@app.get("/info") +@app.get("/info", tags=["info"]) async def info(): return { "seconds_in_one_year": settings.seconds_in_one_year, @@ -52,7 +64,7 @@ async def info(): } -@app.get("/web", response_class=HTMLResponse) +@app.get("/web", tags=["web"], response_class=HTMLResponse) async def web(): res = "" with open("{}/index.html".format(settings.public_path), 'r') as fd: @@ -61,7 +73,7 @@ async def web(): return res -@app.get('/csv') +@app.get('/csv', tags=["csv"]) async def csv(data: str, since: str = "now", until: str = "24h", inwatt: bool = True) -> Response: start_date, stop_date = parse_date_info(since, until) @@ -124,7 +136,7 @@ async def last_data(table_name: str) -> Response: ) -@app.get("/metrics") +@app.get("/metrics", tags=["metrics"]) async def metrics(start_time: str = "0.0", end_time: str = "0.0", verbose: bool = False, output: str = "json", location: str = None, measure_power: bool = True, lifetime: float = settings.default_lifetime, fetch_hardware: bool = False): @@ -139,9 +151,18 @@ async def metrics(start_time: str = "0.0", end_time: str = "0.0", verbose: bool ) -@app.get("/query") +@app.get("/query", tags=["query"]) async def query(start_time: str = "0.0", end_time: str = "0.0", verbose: bool = False, location: str = None, measure_power: bool = True, lifetime: float = settings.default_lifetime, fetch_hardware: bool = False): + """ + start_time: Start time for evaluation. Accepts either UNIX Timestamp or ISO8601 date format. \n + end_time: End time for evaluation. Accepts either UNIX Timestamp or ISO8601 date format. \n + verbose: Get detailled metrics with extra information.\n + location: Country code to configure the local electricity grid to take into account.\n + measure_power: Get electricity consumption metrics from Scaphandre or not.\n + lifetime: Full lifetime of the machine to consider.\n + fetch_hardware: Regenerate hardware.json file with current machine hardware or not.\n + """ return get_metrics( iso8601_or_timestamp_as_timestamp(start_time), iso8601_or_timestamp_as_timestamp(end_time), diff --git a/boagent/api/config.py b/boagent/api/config.py index dbce29b..7ca93e8 100644 --- a/boagent/api/config.py +++ b/boagent/api/config.py @@ -5,6 +5,14 @@ class Settings(BaseSettings): PROJECT_NAME: str = "boagent" PROJECT_VERSION: str = "0.1.0" + PROJECT_DESCRIPTION: str = "Boagent is a local API and monitoring agent to help you estimate the environmental impact of your machine, including software activity and hardware embodied impacts." + TAGS_METADATA: list = [ + { "name": "info", "description": "Returns runtime configuration of Boagent." }, + { "name": "web", "description": "Web UI to explore Boagent metrics."}, + { "name": "csv", "description": "Internal route. Generates and returns a CSV-formatted dataset with metrics needed by the webUI" }, + { "name": "metrics", "description": "Returns metrics as a Prometheus HTTP exporter."}, + { "name": "query", "description": "This is the main route. Returns metrics in JSON format." } + ] seconds_in_one_year: int = 31536000 default_lifetime: float = os.getenv("DEFAULT_LIFETIME", 5.0) hardware_file_path: str = os.getenv("HARDWARE_FILE_PATH", "./hardware_data.json") From 6ed5017ceff1f236f99678c72df07f5c119852c7 Mon Sep 17 00:00:00 2001 From: repair Date: Thu, 22 Feb 2024 16:30:27 +0100 Subject: [PATCH 006/227] fix: corrected number of arguments for format for sorting disks --- boagent/api/utils.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/boagent/api/utils.py b/boagent/api/utils.py index c7099ba..a583d5e 100644 --- a/boagent/api/utils.py +++ b/boagent/api/utils.py @@ -9,7 +9,7 @@ def sort_ram(items: list): for r in items: if "manufacturer" in r: if "{}:{}".format(r["capacity"], r["manufacturer"]) in hash_map: - hash_map["{}:{}".format(r["capacity"], r["manufacturer"])]["units"]+=1 + hash_map["{}:{}".format(r["capacity"], r["manufacturer"])]["units"] += 1 else: hash_map["{}:{}".format(r["capacity"], r["manufacturer"])] = { "units": 1, @@ -21,21 +21,21 @@ def sort_ram(items: list): "units": 1, "capacity": r["capacity"] } - return [v for k,v in hash_map.items()] + return [v for k, v in hash_map.items()] def sort_disks(items: list): hash_map = {} for r in items: - if "{}:{}".format(r["capacity"], r["manufacturer"], r["type"]) in hash_map: - hash_map["{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"])]["units"]+=1 + if "{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"]) in hash_map: + hash_map["{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"])]["units"] += 1 else: - hash_map["{}:{}".format(r["capacity"], r["manufacturer"], r["type"])] = { + hash_map["{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"])] = { "units": 1, "manufacturer": r["manufacturer"], "capacity": r["capacity"], "type": r["type"] } - return [v for k,v in hash_map.items()] + return [v for k, v in hash_map.items()] def get_boavizta_api_client(): config = Configuration( From 75f902b0094c4ac55f294112445b6bc6a6c0599e Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 26 Feb 2024 16:15:08 +0100 Subject: [PATCH 007/227] fix: indentation for get_metrics --- boagent/api/api.py | 115 +++++++++++++++++++++++---------------------- 1 file changed, 58 insertions(+), 57 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 0cca238..db8fbfe 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -49,7 +49,7 @@ def configure_app(): app = configure_app() items = {} -create_database(get_engine(db_path=settings.db_path)) +# create_database(get_engine(db_path=settings.db_path)) @app.get("/info", tags=["info"]) @@ -308,6 +308,7 @@ async def impact(since: str = "now", until: str = "24h"): def get_metrics(start_time: float, end_time: float, verbose: bool, location: str, measure_power: bool, lifetime: float, fetch_hardware: bool = False): + now: float = time.time() if start_time and end_time: ratio = (end_time - start_time) / (lifetime * settings.seconds_in_one_year) @@ -360,66 +361,66 @@ def get_metrics(start_time: float, end_time: float, verbose: bool, location: str "long_unit": "Mega Joules" } - res["calculated_emissions"] = { - "value": boaviztapi_data["impacts"]["gwp"]["manufacture"] * ratio + boaviztapi_data["impacts"]["gwp"]["use"], - "description": "Total Green House Gaz emissions calculated for manufacturing and usage phases, between " - "start_time and end_time", - "type": "gauge", - "unit": "kg CO2eq", - "long_unit": "kilograms CO2 equivalent" - } + res["calculated_emissions"] = { + "value": boaviztapi_data["impacts"]["gwp"]["manufacture"] * ratio + boaviztapi_data["impacts"]["gwp"]["use"], + "description": "Total Green House Gaz emissions calculated for manufacturing and usage phases, between " + "start_time and end_time", + "type": "gauge", + "unit": "kg CO2eq", + "long_unit": "kilograms CO2 equivalent" + } - res["start_time"] = { - "value": start_time, - "description": "Start time for the evaluation, in timestamp format (seconds since 1970)", - "type": "counter", - "unit": "s", - "long_unit": "seconds" - } - res["end_time"] = { - "value": end_time, - "description": "End time for the evaluation, in timestamp format (seconds since 1970)", - "type": "counter", - "unit": "s", - "long_unit": "seconds" - } - res["embedded_emissions"] = { - "value": boaviztapi_data["impacts"]["gwp"]["manufacture"] * ratio, - "description": "Embedded carbon emissions (manufacturing phase)", - "type": "gauge", - "unit": "kg CO2eq", - "long_unit": "kilograms CO2 equivalent" - } - res["embedded_abiotic_resources_depletion"] = { - "value": boaviztapi_data["impacts"]["adp"]["manufacture"] * ratio, - "description": "Embedded abiotic ressources consumed (manufacturing phase)", - "type": "gauge", - "unit": "kg Sbeq", - "long_unit": "kilograms ADP equivalent" - } - res["embedded_primary_energy"] = { - "value": boaviztapi_data["impacts"]["pe"]["manufacture"] * ratio, - "description": "Embedded primary energy consumed (manufacturing phase)", - "type": "gauge", - "unit": "MJ", - "long_unit": "Mega Joules" - } - res["emissions_calculation_data"] = { - "average_power_measured": { - "value": host_avg_consumption, - "description": "Average power measured from start_time to end_time", + res["start_time"] = { + "value": start_time, + "description": "Start time for the evaluation, in timestamp format (seconds since 1970)", + "type": "counter", + "unit": "s", + "long_unit": "seconds" + } + res["end_time"] = { + "value": end_time, + "description": "End time for the evaluation, in timestamp format (seconds since 1970)", + "type": "counter", + "unit": "s", + "long_unit": "seconds" + } + res["embedded_emissions"] = { + "value": boaviztapi_data["impacts"]["gwp"]["manufacture"] * ratio, + "description": "Embedded carbon emissions (manufacturing phase)", "type": "gauge", - "unit": "W", - "long_unit": "Watts" - }, - "electricity_carbon_intensity": { - "value": boaviztapi_data["verbose"]["USAGE"]["gwp_factor"]["value"], - "description": "Carbon intensity of the electricity mix. Mix considered : {}".format(location), + "unit": "kg CO2eq", + "long_unit": "kilograms CO2 equivalent" + } + res["embedded_abiotic_resources_depletion"] = { + "value": boaviztapi_data["impacts"]["adp"]["manufacture"] * ratio, + "description": "Embedded abiotic ressources consumed (manufacturing phase)", "type": "gauge", - "unit": "kg CO2eq / kWh", - "long_unit": "Kilograms CO2 equivalent per KiloWattHour" + "unit": "kg Sbeq", + "long_unit": "kilograms ADP equivalent" + } + res["embedded_primary_energy"] = { + "value": boaviztapi_data["impacts"]["pe"]["manufacture"] * ratio, + "description": "Embedded primary energy consumed (manufacturing phase)", + "type": "gauge", + "unit": "MJ", + "long_unit": "Mega Joules" + } + res["emissions_calculation_data"] = { + "average_power_measured": { + "value": host_avg_consumption, + "description": "Average power measured from start_time to end_time", + "type": "gauge", + "unit": "W", + "long_unit": "Watts" + }, + "electricity_carbon_intensity": { + "value": boaviztapi_data["verbose"]["USAGE"]["gwp_factor"]["value"], + "description": "Carbon intensity of the electricity mix. Mix considered : {}".format(location), + "type": "gauge", + "unit": "kg CO2eq / kWh", + "long_unit": "Kilograms CO2 equivalent per KiloWattHour" + } } - } usage_location_status = boaviztapi_data["verbose"]["USAGE"]["usage_location"]["status"] if usage_location_status == "MODIFY": res["emissions_calculation_data"]["electricity_carbon_intensity"][ From d70fb4a08b5b8c6026de10d629f5afbbd7141bbf Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 26 Feb 2024 16:16:22 +0100 Subject: [PATCH 008/227] fix: adding reload flag to uvicorn for dev environment --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 166a96f..e89d36d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,4 +28,4 @@ COPY . . EXPOSE 8000 -ENTRYPOINT [ "/bin/bash", "-c", "cd boagent/api && uvicorn api:app --host 0.0.0.0" ] +ENTRYPOINT [ "/bin/bash", "-c", "cd boagent/api && uvicorn --reload api:app --host 0.0.0.0" ] From 95954ff8712ae8e681c2410e771d119860d102a7 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 26 Feb 2024 16:16:52 +0100 Subject: [PATCH 009/227] config: add boagent volume for dev environment --- docker-compose.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yaml b/docker-compose.yaml index 1b19afd..85d215e 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -27,6 +27,7 @@ services: - "./db:/app/db" - "../boaviztapi/boaviztapi:/app/boaviztapi" - "/etc/crontab:/etc/crontab" + - "./boagent:/home/boagent/boagent" scaphandre: image: hubblo/scaphandre:greenhack22 From e18b6acbeb9700deb3900f8221a98e5dbb49c483 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 26 Feb 2024 16:17:29 +0100 Subject: [PATCH 010/227] config: pytest dependency --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 0e2f523..6c47315 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,6 +19,7 @@ numpy==1.23.4 ; python_version < '3.10' pandas==1.5.1 py-cpuinfo==9.0.0 pydantic[dotenv]==1.10.2 +pytest==8.0.2 python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' python-dotenv==0.21.0 pytz==2022.5 From c9afccbb8b5a0fffd6b02a0315b5af231e967334 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 26 Feb 2024 16:48:15 +0100 Subject: [PATCH 011/227] fix: removed whitespaces --- boagent/api/config.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/boagent/api/config.py b/boagent/api/config.py index 7ca93e8..2aa0ebb 100644 --- a/boagent/api/config.py +++ b/boagent/api/config.py @@ -7,11 +7,11 @@ class Settings(BaseSettings): PROJECT_VERSION: str = "0.1.0" PROJECT_DESCRIPTION: str = "Boagent is a local API and monitoring agent to help you estimate the environmental impact of your machine, including software activity and hardware embodied impacts." TAGS_METADATA: list = [ - { "name": "info", "description": "Returns runtime configuration of Boagent." }, - { "name": "web", "description": "Web UI to explore Boagent metrics."}, - { "name": "csv", "description": "Internal route. Generates and returns a CSV-formatted dataset with metrics needed by the webUI" }, - { "name": "metrics", "description": "Returns metrics as a Prometheus HTTP exporter."}, - { "name": "query", "description": "This is the main route. Returns metrics in JSON format." } + {"name": "info", "description": "Returns runtime configuration of Boagent."}, + {"name": "web", "description": "Web UI to explore Boagent metrics."}, + {"name": "csv", "description": "Internal route. Generates and returns a CSV-formatted dataset with metrics needed by the webUI"}, + {"name": "metrics", "description": "Returns metrics as a Prometheus HTTP exporter."}, + {"name": "query", "description": "This is the main route. Returns metrics in JSON format."} ] seconds_in_one_year: int = 31536000 default_lifetime: float = os.getenv("DEFAULT_LIFETIME", 5.0) From 877892556edee807a7607f8149271d1af956593f Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 26 Feb 2024 16:49:27 +0100 Subject: [PATCH 012/227] fix: csv route to fix --- boagent/api/api.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index db8fbfe..f68de2d 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -77,7 +77,8 @@ async def web(): async def csv(data: str, since: str = "now", until: str = "24h", inwatt: bool = True) -> Response: start_date, stop_date = parse_date_info(since, until) - session = get_session(settings.db_path) + + '''session = get_session(settings.db_path) df = select_metric(session, data, start_date, stop_date) df['timestamp'] = df['timestamp'].apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S')) session.close() @@ -88,7 +89,12 @@ async def csv(data: str, since: str = "now", until: str = "24h", inwatt: bool = return Response( content=df.to_csv(index=False), media_type="text/csv" - ) + )''' + + return Response( + status_code=200, + content="not implemented yet" + ) @app.get("/yearly_embedded") From 5b54d21a767f5c0aabafb621a86e13a6f0bff843 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 26 Feb 2024 16:12:31 +0100 Subject: [PATCH 013/227] test: 200 codes for API endpoints --- boagent/api/test_api.py | 96 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 boagent/api/test_api.py diff --git a/boagent/api/test_api.py b/boagent/api/test_api.py new file mode 100644 index 0000000..ce3aa8c --- /dev/null +++ b/boagent/api/test_api.py @@ -0,0 +1,96 @@ +from datetime import datetime +from fastapi.testclient import TestClient +from unittest import TestCase +from .api import app + +client = TestClient(app) + +TODAY_ISO8601 = datetime.now().isoformat() + + +class ApiTest(TestCase): + + def test_read_info(self): + response = client.get("/info") + assert response.status_code == 200 + + def test_read_web(self): + response = client.get("/web") + assert response.status_code == 200 + + def test_read_metrics(self): + + params = { + "start_time": f"{TODAY_ISO8601}", + "end_time": f"{TODAY_ISO8601}", + "verbose": "false", + "location": "FRA", + "measure_power": "false", + "lifetime": 5, + "fetch_hardware": "false", + } + + response = client.get("/metrics", params=params) + assert response.status_code == 200 + + def test_read_query(self): + + params = { + "start_time": f"{TODAY_ISO8601}", + "end_time": f"{TODAY_ISO8601}", + "verbose": "false", + "location": "FRA", + "measure_power": "false", + "lifetime": 5, + "fetch_hardware": "false", + } + + response = client.get("/query", params=params) + assert response.status_code == 200 + + def test_read_yearly_embedded(self): + response = client.get("/yearly_embedded") + assert response.status_code == 200 + + def test_read_yearly_operational(self): + response = client.get("/yearly_operational") + assert response.status_code == 200 + + def test_read_last_info(self): + response = client.get("/last_info") + assert response.status_code == 200 + + def test_read_max_info(self): + response = client.get("/max_info") + assert response.status_code == 200 + + '''ROUTES DEPENDENT ON DATABASE AND / OR BOAVIZTAPI QUERIES''' + + def test_read_last_data(self): + response = client.get("/last_data") + assert response.status_code == 200 + + def test_read_update(self): + response = client.get("/update") + assert response.status_code == 200 + + def test_read_carbon_intensity_forecast(self): + params = {"since": "now", "until": "24h"} + response = client.get("/carbon_intensity_forecast", params=params) + assert response.status_code == 200 + + def test_read_carbon_intensity(self): + params = {"since": "now", "until": "24h"} + response = client.get("/carbon_intensity", params=params) + assert response.status_code == 200 + + def test_impact(self): + response = client.get("/impact") + assert response.status_code == 200 + + def test_read_csv(self): + + params = {"data": "power"} + + response = client.get("/csv", params=params) + assert response.status_code == 200 From dd9f1df96af0e33e0fe91a566fe92b3c669f96ee Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 26 Feb 2024 17:31:20 +0100 Subject: [PATCH 014/227] config: update boaviztapi image to release 1.2.2 --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 85d215e..5433566 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -44,7 +44,7 @@ services: - boagent-network boaviztapi: - image: ghcr.io/boavizta/boaviztapi:0.2.0a0 + image: ghcr.io/boavizta/boaviztapi:1.2.2 ports: - "5000:5000" networks: From 00d6b995a4e5044a8ff204cb721471b3b8023ba6 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 28 Feb 2024 10:15:59 +0100 Subject: [PATCH 015/227] fix: removed whitespaces in configure_app --- boagent/api/api.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index f68de2d..45a811e 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -32,15 +32,15 @@ def configure_app(): app = FastAPI( title=settings.PROJECT_NAME, version=settings.PROJECT_VERSION, - description = settings.PROJECT_DESCRIPTION, - contact = { + description=settings.PROJECT_DESCRIPTION, + contact={ "name": "Boavizta Members", "url": "https://boavizta.org/en" }, - license_info = { + license_info={ "name": "Apache-2.0" }, - openapi_tags = settings.TAGS_METADATA + openapi_tags=settings.TAGS_METADATA ) configure_static(app) return app @@ -49,7 +49,7 @@ def configure_app(): app = configure_app() items = {} -# create_database(get_engine(db_path=settings.db_path)) +create_database(get_engine(db_path=settings.db_path)) @app.get("/info", tags=["info"]) From fee85720ae163f016e7905512cdc62e216722072 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 28 Feb 2024 10:18:50 +0100 Subject: [PATCH 016/227] fix: second info() fn, created recommendation() instead --- boagent/api/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 45a811e..800ccc7 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -800,5 +800,5 @@ def find_preferred_execution_date_in_history(execution_date: datetime, @app.get("/recommendation") -async def info(): +async def recommendation(): return compute_recommendations() From 602cdde32de7da910a2ae61241d3f41e6bc11952 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 28 Feb 2024 12:56:18 +0100 Subject: [PATCH 017/227] fix: modified volume to access power_data.json --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 5433566..f02b395 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -38,7 +38,7 @@ services: - type: bind source: /sys/class/powercap target: /sys/class/powercap - - "powerdata:/app/data:rw" + - "./boagent/api:/app/data:rw" command: [ "--no-header", "json", "-s", "10", "--max-top-consumers", "0", "-f", "/app/data/power_data.json" ] networks: - boagent-network From 42c232cb635c42772f4ad5264f253ddf170f0a52 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 28 Feb 2024 17:13:53 +0100 Subject: [PATCH 018/227] fix: checking if keys 'manufacturer' and 'USAGE' exist in boaviztapi_data --- boagent/api/api.py | 143 ++++++++++++++++++++++++--------------------- 1 file changed, 77 insertions(+), 66 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 800ccc7..d664dcf 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -21,7 +21,9 @@ get_boavizta_api_client, sort_ram, sort_disks from config import settings from database import create_database, get_session, get_engine, insert_metric, select_metric, \ - CarbonIntensity, add_from_scaphandre, get_most_recent_data, get_max, new_highlight_spikes + CarbonIntensity, add_from_scaphandre, get_most_recent_data, get_max, new_highlight_spikes, \ + setup_database + def configure_static(app): @@ -49,7 +51,7 @@ def configure_app(): app = configure_app() items = {} -create_database(get_engine(db_path=settings.db_path)) +# setup_database() @app.get("/info", tags=["info"]) @@ -105,8 +107,13 @@ async def yearly_embedded(): configuration=generate_machine_configuration(hardware_data), usage={} ) - - return boaviztapi_data["impacts"]["gwp"]["manufacture"] / settings.default_lifetime + if "manufacturer" in boaviztapi_data: + return boaviztapi_data["impacts"]["gwp"]["manufacturer"] / settings.default_lifetime + else: + return Response( + status_code=200, + content="SSD/HDD manufacturer not recognized by BoaviztAPI yet." + ) @app.get("/yearly_operational") async def operational_impact_yearly(): @@ -303,14 +310,15 @@ async def impact(since: str = "now", until: str = "24h"): usage={} ) - yearly_embedded_emissions = boaviztapi_data["impacts"]["gwp"]["manufacture"] / settings.default_lifetime + if "manufacturer" in boaviztapi_data: + yearly_embedded_emissions = boaviztapi_data["impacts"]["gwp"]["manufacturer"] / settings.default_lifetime - df['embedded'] = yearly_embedded_emissions / (3.6*24*365) # from kgCO2eq/year to gCO2eq/s - df = df.drop(columns=['power_watt', 'carbon_intensity_g_per_watt_second']).reset_index() - return Response( - content=df.to_csv(index=False), - media_type="text/csv" - ) + df['embedded'] = yearly_embedded_emissions / (3.6*24*365) # from kgCO2eq/year to gCO2eq/s + df = df.drop(columns=['power_watt', 'carbon_intensity_g_per_watt_second']).reset_index() + return Response( + content=df.to_csv(index=False), + media_type="text/csv" + ) def get_metrics(start_time: float, end_time: float, verbose: bool, location: str, measure_power: bool, lifetime: float, fetch_hardware: bool = False): @@ -332,6 +340,7 @@ def get_metrics(start_time: float, end_time: float, verbose: bool, location: str res = {"emissions_calculation_data": {}} host_avg_consumption = None + if measure_power: power_data = get_power_data(start_time, end_time) host_avg_consumption = power_data["host_avg_consumption"] @@ -365,17 +374,7 @@ def get_metrics(start_time: float, end_time: float, verbose: bool, location: str "type": "gauge", "unit": "MJ", "long_unit": "Mega Joules" - } - - res["calculated_emissions"] = { - "value": boaviztapi_data["impacts"]["gwp"]["manufacture"] * ratio + boaviztapi_data["impacts"]["gwp"]["use"], - "description": "Total Green House Gaz emissions calculated for manufacturing and usage phases, between " - "start_time and end_time", - "type": "gauge", - "unit": "kg CO2eq", - "long_unit": "kilograms CO2 equivalent" - } - + } res["start_time"] = { "value": start_time, "description": "Start time for the evaluation, in timestamp format (seconds since 1970)", @@ -390,52 +389,64 @@ def get_metrics(start_time: float, end_time: float, verbose: bool, location: str "unit": "s", "long_unit": "seconds" } - res["embedded_emissions"] = { - "value": boaviztapi_data["impacts"]["gwp"]["manufacture"] * ratio, - "description": "Embedded carbon emissions (manufacturing phase)", - "type": "gauge", - "unit": "kg CO2eq", - "long_unit": "kilograms CO2 equivalent" - } - res["embedded_abiotic_resources_depletion"] = { - "value": boaviztapi_data["impacts"]["adp"]["manufacture"] * ratio, - "description": "Embedded abiotic ressources consumed (manufacturing phase)", - "type": "gauge", - "unit": "kg Sbeq", - "long_unit": "kilograms ADP equivalent" - } - res["embedded_primary_energy"] = { - "value": boaviztapi_data["impacts"]["pe"]["manufacture"] * ratio, - "description": "Embedded primary energy consumed (manufacturing phase)", - "type": "gauge", - "unit": "MJ", - "long_unit": "Mega Joules" - } - res["emissions_calculation_data"] = { - "average_power_measured": { - "value": host_avg_consumption, - "description": "Average power measured from start_time to end_time", + + if "manufacturer" in boaviztapi_data: + res["calculated_emissions"] = { + "value": boaviztapi_data["impacts"]["gwp"]["manufacturer"] * ratio + boaviztapi_data["impacts"]["gwp"]["use"], + "description": "Total Green House Gaz emissions calculated for manufacturing and usage phases, between " + "start_time and end_time", "type": "gauge", - "unit": "W", - "long_unit": "Watts" - }, - "electricity_carbon_intensity": { - "value": boaviztapi_data["verbose"]["USAGE"]["gwp_factor"]["value"], - "description": "Carbon intensity of the electricity mix. Mix considered : {}".format(location), + "unit": "kg CO2eq", + "long_unit": "kilograms CO2 equivalent" + } + res["embedded_emissions"] = { + "value": boaviztapi_data["impacts"]["gwp"]["manufacturer"] * ratio, + "description": "Embedded carbon emissions (manufacturing phase)", "type": "gauge", - "unit": "kg CO2eq / kWh", - "long_unit": "Kilograms CO2 equivalent per KiloWattHour" + "unit": "kg CO2eq", + "long_unit": "kilograms CO2 equivalent" } - } - usage_location_status = boaviztapi_data["verbose"]["USAGE"]["usage_location"]["status"] - if usage_location_status == "MODIFY": - res["emissions_calculation_data"]["electricity_carbon_intensity"][ - "description"] += "WARNING : The provided trigram doesn't match any existing country. So this result is " \ - "based on average European electricity mix. Be careful with this data. " - elif usage_location_status == "SET": - res["emissions_calculation_data"]["electricity_carbon_intensity"][ - "description"] += "WARNING : As no information was provided about your location, this result is based on " \ - "average European electricity mix. Be careful with this data. " + res["embedded_abiotic_resources_depletion"] = { + "value": boaviztapi_data["impacts"]["adp"]["manufacturer"] * ratio, + "description": "Embedded abiotic ressources consumed (manufacturing phase)", + "type": "gauge", + "unit": "kg Sbeq", + "long_unit": "kilograms ADP equivalent" + } + res["embedded_primary_energy"] = { + "value": boaviztapi_data["impacts"]["pe"]["manufacturer"] * ratio, + "description": "Embedded primary energy consumed (manufacturing phase)", + "type": "gauge", + "unit": "MJ", + "long_unit": "Mega Joules" + } + + if "USAGE" in boaviztapi_data: + res["emissions_calculation_data"] = { + "average_power_measured": { + "value": host_avg_consumption, + "description": "Average power measured from start_time to end_time", + "type": "gauge", + "unit": "W", + "long_unit": "Watts" + }, + "electricity_carbon_intensity": { + "value": boaviztapi_data["verbose"]["USAGE"]["gwp_factor"]["value"], + "description": "Carbon intensity of the electricity mix. Mix considered : {}".format(location), + "type": "gauge", + "unit": "kg CO2eq / kWh", + "long_unit": "Kilograms CO2 equivalent per KiloWattHour" + } + } + usage_location_status = boaviztapi_data["verbose"]["USAGE"]["usage_location"]["status"] + if usage_location_status == "MODIFY": + res["emissions_calculation_data"]["electricity_carbon_intensity"][ + "description"] += "WARNING : The provided trigram doesn't match any existing country. So this result is " \ + "based on average European electricity mix. Be careful with this data. " + elif usage_location_status == "SET": + res["emissions_calculation_data"]["electricity_carbon_intensity"][ + "description"] += "WARNING : As no information was provided about your location, this result is based on " \ + "average European electricity mix. Be careful with this data. " if verbose: res["emissions_calculation_data"]["raw_data"] = { @@ -547,7 +558,7 @@ def generate_machine_configuration(hardware_data): "units": len(hardware_data["cpus"]), "core_units": hardware_data['cpus'][0]["core_units"], "family": hardware_data['cpus'][0]['family'] - }, + }, "ram": sort_ram(hardware_data["rams"]), "disk": sort_disks(hardware_data["disks"]), "motherboard": hardware_data["mother_board"] if "mother_board" in hardware_data else {"units": 1}, From 53b84b4dd587298475bdc88b76848fba3f582644 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 28 Feb 2024 17:16:34 +0100 Subject: [PATCH 019/227] fix: database creation --- boagent/api/database.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/boagent/api/database.py b/boagent/api/database.py index 7c0b36a..0e10ceb 100644 --- a/boagent/api/database.py +++ b/boagent/api/database.py @@ -10,10 +10,12 @@ from sqlalchemy import Column, DateTime, Integer, Float, insert, select, inspect from sqlalchemy.engine import Engine, create_engine from sqlalchemy.orm import Session, declarative_base, declared_attr +from config import settings import json from utils import filter_date_range -from config import settings + +DB_PATH = settings.db_path Base = declarative_base() @@ -67,7 +69,12 @@ def get_session(db_path: str) -> Session: def get_engine(db_path: str) -> Engine: - return create_engine(f'sqlite:///{db_path}') + sqlite_engine = create_engine(f'sqlite:///{db_path}') + return sqlite_engine + + +def setup_database(): + create_database(get_engine(DB_PATH)) def insert_metric(session: Session, metric_name: str, timestamp: datetime, value: Any): From 801e98585b2c629507e6b221a4cb407d63603626 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 28 Feb 2024 17:31:23 +0100 Subject: [PATCH 020/227] test: implementing different use cases for read_query --- boagent/api/test_api.py | 67 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 59 insertions(+), 8 deletions(-) diff --git a/boagent/api/test_api.py b/boagent/api/test_api.py index ce3aa8c..07ddff4 100644 --- a/boagent/api/test_api.py +++ b/boagent/api/test_api.py @@ -1,11 +1,14 @@ -from datetime import datetime +from datetime import datetime, timedelta from fastapi.testclient import TestClient from unittest import TestCase from .api import app client = TestClient(app) -TODAY_ISO8601 = datetime.now().isoformat() +NOW_ISO8601 = datetime.now().isoformat() +NOW_ISO8601_MINUS_ONE_MINUTE = datetime.fromisoformat(NOW_ISO8601) - timedelta( + minutes=1 +) class ApiTest(TestCase): @@ -21,8 +24,8 @@ def test_read_web(self): def test_read_metrics(self): params = { - "start_time": f"{TODAY_ISO8601}", - "end_time": f"{TODAY_ISO8601}", + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", "verbose": "false", "location": "FRA", "measure_power": "false", @@ -33,11 +36,11 @@ def test_read_metrics(self): response = client.get("/metrics", params=params) assert response.status_code == 200 - def test_read_query(self): + def test_read_query_without_measure_power_and_fetch_hardware(self): params = { - "start_time": f"{TODAY_ISO8601}", - "end_time": f"{TODAY_ISO8601}", + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", "verbose": "false", "location": "FRA", "measure_power": "false", @@ -48,6 +51,52 @@ def test_read_query(self): response = client.get("/query", params=params) assert response.status_code == 200 + def test_read_query_with_measure_power(self): + + # TO IMPLEMENT : mock hardware_data.json with known functional values for Boaviztapi + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "false", + "location": "FRA", + "measure_power": "true", + "lifetime": 5, + "fetch_hardware": "false", + } + + response = client.get("/query", params=params) + assert response.status_code == 200 + + def test_read_query_with_measure_power_and_fetch_hardware(self): + + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "false", + "location": "FRA", + "measure_power": "true", + "lifetime": 5, + "fetch_hardware": "true", + } + + response = client.get("/query", params=params) + assert response.status_code == 200 + + def test_read_query_with_measure_power_and_fetch_hardware_verbose(self): + + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "true", + "location": "FRA", + "measure_power": "true", + "lifetime": 5, + "fetch_hardware": "true", + } + + response = client.get("/query", params=params) + assert response.status_code == 200 + def test_read_yearly_embedded(self): response = client.get("/yearly_embedded") assert response.status_code == 200 @@ -64,7 +113,9 @@ def test_read_max_info(self): response = client.get("/max_info") assert response.status_code == 200 - '''ROUTES DEPENDENT ON DATABASE AND / OR BOAVIZTAPI QUERIES''' + +class BoaviztapiTest(TestCase): + """ROUTES DEPENDENT ON DATABASE AND / OR BOAVIZTAPI QUERIES""" def test_read_last_data(self): response = client.get("/last_data") From 1af577a347def118d89d57b6c8a72c68e7924992 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 29 Feb 2024 11:45:06 +0100 Subject: [PATCH 021/227] fix: checking for valid vendor, vendor as disk class property --- boagent/hardware/disk/disk.py | 24 ++++++++++++++++++++---- boagent/hardware/hardware.py | 2 +- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/boagent/hardware/disk/disk.py b/boagent/hardware/disk/disk.py index ea10a80..157f483 100644 --- a/boagent/hardware/disk/disk.py +++ b/boagent/hardware/disk/disk.py @@ -2,6 +2,7 @@ import os import re + class DiskException(Exception): pass @@ -32,6 +33,7 @@ def __init__(self, sysfs_device_path): self._size = None self._blocks = None self._model = None + self._vendor = None self._major_minor = None self._partitions = [] self._sysfs_path = sysfs_device_path @@ -46,13 +48,15 @@ def type(self): def size(self): return self._size - def vendor(self): - return self._model.split(' ')[0] - @property def model(self): return self._model + @property + def vendor(self): + self._vendor = self.__check_vendor(self._model) + return self._vendor + @staticmethod def __try_to_read_first_line(item_path, default_value): retour = default_value @@ -61,6 +65,19 @@ def __try_to_read_first_line(item_path, default_value): retour = f.readline().strip() return retour + @staticmethod + # If one of the strings in /sys/block/***/device/model has numbers, it is not a valid vendor + def __check_vendor(model_string: str | None) -> str: + split_model = model_string.split(' ') + model_first_str = split_model[0] + model_second_str = split_model[1] + check_first_string_for_numbers = re.search("\\d", model_first_str) + result = bool(check_first_string_for_numbers) + if result: + return model_second_str + else: + return model_first_str + @staticmethod def __safe_int(maybeint): if maybeint is not None: @@ -111,7 +128,6 @@ def lookup(self): * disk size, computed from sectors count * partitions """ - device = None if self._looked_up: return diff --git a/boagent/hardware/hardware.py b/boagent/hardware/hardware.py index 53fb49e..a17791a 100755 --- a/boagent/hardware/hardware.py +++ b/boagent/hardware/hardware.py @@ -33,7 +33,7 @@ def format_disks(disks): for disk in disks: res.append({ "capacity": disk.size, - "manufacturer": disk.vendor(), + "manufacturer": disk.vendor, "type": disk.type }) return res From 113f56010cfdf7d6c980591fa160e31c9fefd2c8 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 29 Feb 2024 12:52:50 +0100 Subject: [PATCH 022/227] fix: lowercase vendor for boaviztapi format request --- boagent/hardware/disk/disk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boagent/hardware/disk/disk.py b/boagent/hardware/disk/disk.py index 157f483..bc320d8 100644 --- a/boagent/hardware/disk/disk.py +++ b/boagent/hardware/disk/disk.py @@ -54,7 +54,7 @@ def model(self): @property def vendor(self): - self._vendor = self.__check_vendor(self._model) + self._vendor = self.__check_vendor(self._model).lower() return self._vendor @staticmethod From f50b49e9f6be3e5f66f39fbb727af7a770b4d899 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 4 Mar 2024 10:23:58 +0100 Subject: [PATCH 023/227] fix: put settings in constants --- boagent/api/api.py | 91 ++++++++++++++++++++++------------------- boagent/api/database.py | 21 ++++------ 2 files changed, 59 insertions(+), 53 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index d664dcf..ade07ff 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -2,21 +2,19 @@ import math import os import time +import requests +import pytz +import pandas as pd + from datetime import datetime, timedelta from subprocess import run from typing import Dict, Any, Tuple, List, Optional - -import pytz from croniter import croniter - -import pandas as pd -import requests from fastapi import FastAPI, Response from fastapi.staticfiles import StaticFiles from fastapi.responses import HTMLResponse from boaviztapi_sdk.api.server_api import ServerApi from boaviztapi_sdk.model.server_dto import ServerDTO - from utils import iso8601_or_timestamp_as_timestamp, format_prometheus_output, format_prometheus_metric, \ get_boavizta_api_client, sort_ram, sort_disks from config import settings @@ -25,9 +23,20 @@ setup_database +HARDWARE_FILE_PATH = settings.hardware_file_path +POWER_DATA_FILE_PATH = settings.power_file_path +ASSETS_PATH = settings.assets_path +DB_PATH = settings.db_path +DEFAULT_LIFETIME = settings.default_lifetime +SECONDS_IN_ONE_YEAR = settings.seconds_in_one_year +HARDWARE_CLI = settings.hardware_cli +BOAVIZTAPI_ENDPOINT = settings.boaviztapi_endpoint +CARBON_AWARE_API_ENDPOINT = settings.carbon_aware_api_endpoint +CARBON_AWARE_API_TOKEN = settings.carbon_aware_api_token + def configure_static(app): - app.mount("/assets", StaticFiles(directory=settings.assets_path), name="assets") + app.mount("/assets", StaticFiles(directory=ASSETS_PATH), name="assets") def configure_app(): @@ -57,12 +66,12 @@ def configure_app(): @app.get("/info", tags=["info"]) async def info(): return { - "seconds_in_one_year": settings.seconds_in_one_year, - "default_lifetime": settings.default_lifetime, - "hardware_file_path": settings.hardware_file_path, - "power_file_path": settings.power_file_path, - "hardware_cli": settings.hardware_cli, - "boaviztapi_endpoint": settings.boaviztapi_endpoint + "seconds_in_one_year": SECONDS_IN_ONE_YEAR, + "default_lifetime": DEFAULT_LIFETIME, + "hardware_file_path": HARDWARE_FILE_PATH, + "power_file_path": POWER_DATA_FILE_PATH, + "hardware_cli": HARDWARE_CLI, + "boaviztapi_endpoint": BOAVIZTAPI_ENDPOINT } @@ -80,7 +89,7 @@ async def csv(data: str, since: str = "now", until: str = "24h", inwatt: bool = start_date, stop_date = parse_date_info(since, until) - '''session = get_session(settings.db_path) + '''session = get_session(DB_PATH) df = select_metric(session, data, start_date, stop_date) df['timestamp'] = df['timestamp'].apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S')) session.close() @@ -108,7 +117,7 @@ async def yearly_embedded(): usage={} ) if "manufacturer" in boaviztapi_data: - return boaviztapi_data["impacts"]["gwp"]["manufacturer"] / settings.default_lifetime + return boaviztapi_data["impacts"]["gwp"]["manufacturer"] / DEFAULT_LIFETIME else: return Response( status_code=200, @@ -120,11 +129,11 @@ async def operational_impact_yearly(): since = "now" until = "24h" start_date, stop_date = parse_date_info(since, until) - session = get_session(settings.db_path) + session = get_session(DB_PATH) df_power = select_metric(session, 'power', start_date, stop_date) df_power['power_watt'] = df_power['value'] / 1000 - #df_power = df_power.drop(columns=['value']) + # df_power = df_power.drop(columns=['value']) df_power = df_power.set_index('timestamp') df_carbon_intensity = select_metric(session, 'carbonintensity', start_date, stop_date) @@ -132,7 +141,7 @@ async def operational_impact_yearly(): yearly_operational = (df_power['power_watt'].mean()*df_carbon_intensity["carbon_intensity_g_per_watt_second"].mean())*(3600*24*365) # in gCO2eq - return round(yearly_operational/1000.0) # in kgCO2eq + return round(yearly_operational/1000.0) # in kgCO2eq @app.get('/last_data') @@ -151,7 +160,7 @@ async def last_data(table_name: str) -> Response: @app.get("/metrics", tags=["metrics"]) async def metrics(start_time: str = "0.0", end_time: str = "0.0", verbose: bool = False, output: str = "json", - location: str = None, measure_power: bool = True, lifetime: float = settings.default_lifetime, + location: str = None, measure_power: bool = True, lifetime: float = DEFAULT_LIFETIME, fetch_hardware: bool = False): return Response( content=format_prometheus_output( @@ -166,7 +175,7 @@ async def metrics(start_time: str = "0.0", end_time: str = "0.0", verbose: bool @app.get("/query", tags=["query"]) async def query(start_time: str = "0.0", end_time: str = "0.0", verbose: bool = False, location: str = None, - measure_power: bool = True, lifetime: float = settings.default_lifetime, fetch_hardware: bool = False): + measure_power: bool = True, lifetime: float = DEFAULT_LIFETIME, fetch_hardware: bool = False): """ start_time: Start time for evaluation. Accepts either UNIX Timestamp or ISO8601 date format. \n end_time: End time for evaluation. Accepts either UNIX Timestamp or ISO8601 date format. \n @@ -207,7 +216,7 @@ async def actual_intensity(): async def update(): response = query_electricity_carbon_intensity() info = parse_electricity_carbon_intensity(response) - session = get_session(settings.db_path) + session = get_session(DB_PATH) add_from_scaphandre(session) # lots lot insert_metric called here if info['value'] > 0: @@ -242,7 +251,7 @@ async def carbon_intensity(since: str = "now", until: str = "24h") -> Response: _, stop_date = parse_date_info(since, until, forecast=True) start_date, now = parse_date_info(since, until, forecast=False) - session = get_session(settings.db_path) + session = get_session(DB_PATH) df_history = select_metric(session, 'carbonintensity', start_date, now) now = upper_round_date_minutes_with_base(now, base=5) @@ -264,11 +273,11 @@ async def carbon_intensity(since: str = "now", until: str = "24h") -> Response: @app.get("/init_carbon_intensity") async def init_carbon_intensity(): - engine = get_engine(settings.db_path) + engine = get_engine(DB_PATH) CarbonIntensity.__table__.drop(engine) create_database(engine) - session = get_session(settings.db_path) + session = get_session(DB_PATH) now = datetime.utcnow() curr_date = now - timedelta(hours=24) @@ -284,7 +293,7 @@ async def init_carbon_intensity(): @app.get("/impact") async def impact(since: str = "now", until: str = "24h"): start_date, stop_date = parse_date_info(since, until) - session = get_session(settings.db_path) + session = get_session(DB_PATH) df_power = select_metric(session, 'power', start_date, stop_date) df_power['power_watt'] = df_power['value'] / 1000 @@ -302,7 +311,6 @@ async def impact(since: str = "now", until: str = "24h"): df = df_power.merge(df_carbon_intensity, on='timestamp') df['operational'] = df['power_watt'] * df['carbon_intensity_g_per_watt_second'] - hardware_data = get_hardware_data(False) boaviztapi_data = query_machine_impact_data( model=None, @@ -311,7 +319,7 @@ async def impact(since: str = "now", until: str = "24h"): ) if "manufacturer" in boaviztapi_data: - yearly_embedded_emissions = boaviztapi_data["impacts"]["gwp"]["manufacturer"] / settings.default_lifetime + yearly_embedded_emissions = boaviztapi_data["impacts"]["gwp"]["manufacturer"] / DEFAULT_LIFETIME df['embedded'] = yearly_embedded_emissions / (3.6*24*365) # from kgCO2eq/year to gCO2eq/s df = df.drop(columns=['power_watt', 'carbon_intensity_g_per_watt_second']).reset_index() @@ -325,15 +333,15 @@ def get_metrics(start_time: float, end_time: float, verbose: bool, location: str now: float = time.time() if start_time and end_time: - ratio = (end_time - start_time) / (lifetime * settings.seconds_in_one_year) + ratio = (end_time - start_time) / (lifetime * SECONDS_IN_ONE_YEAR) else: ratio = 1.0 if start_time == 0.0: start_time = now - 3600 if end_time == 0.0: end_time = now - if end_time - start_time >= lifetime * settings.seconds_in_one_year: - lifetime = (end_time - start_time) / float(settings.seconds_in_one_year) + if end_time - start_time >= lifetime * SECONDS_IN_ONE_YEAR: + lifetime = (end_time - start_time) / float(SECONDS_IN_ONE_YEAR) hardware_data = get_hardware_data(fetch_hardware) @@ -474,7 +482,7 @@ def format_usage_request(start_time, end_time, host_avg_consumption=None, locati def get_power_data(start_time, end_time): power_data = {} - with open(settings.power_file_path, 'r') as fd: + with open(POWER_DATA_FILE_PATH, 'r') as fd: # Get all items of the json list where start_time <= host.timestamp <= end_time data = json.load(fd) res = [e for e in data if start_time <= float(e['host']['timestamp']) <= end_time] @@ -487,8 +495,9 @@ def get_power_data(start_time, end_time): "careful with this data. " return power_data + def get_timeseries_data(start_time, end_time): - with open(settings.power_file_path, 'r') as fd: + with open(POWER_DATA_FILE_PATH, 'r') as fd: # Get all items of the json list where start_time <= host.timestamp <= end_time data = json.load(fd) res = [e for e in data if start_time <= float(e['host']['timestamp']) <= end_time] @@ -528,13 +537,13 @@ def get_hardware_data(fetch_hardware: bool): def read_hardware_data(): - with open(settings.hardware_file_path, 'r') as fd: + with open(HARDWARE_FILE_PATH, 'r') as fd: data = json.load(fd) return data def build_hardware_data(): - p = run([settings.hardware_cli, "--output-file", settings.hardware_file_path]) + p = run([HARDWARE_CLI, "--output-file", HARDWARE_FILE_PATH]) def query_machine_impact_data(model: dict = None, configuration: dict = None, usage: dict = None): @@ -571,13 +580,13 @@ def generate_machine_configuration(hardware_data): def query_electricity_carbon_intensity(start_date: Optional[datetime] = None, stop_date: Optional[datetime] = None) -> Dict[str, Any]: - url = settings.boaviztapi_endpoint + f'/v1/usage_router/gwp/current_intensity?location={settings.azure_location}' + url = BOAVIZTAPI_ENDPOINT + f'/v1/usage_router/gwp/current_intensity?location={settings.azure_location}' start_date = start_date or (datetime.utcnow() - timedelta(minutes=5)) stop_date = stop_date or datetime.utcnow() response = requests.post(url, json={ "source": "carbon_aware_api", - "url": settings.carbon_aware_api_endpoint, - "token": settings.carbon_aware_api_token, + "url": CARBON_AWARE_API_ENDPOINT, + "token": CARBON_AWARE_API_TOKEN, "start_date": start_date.strftime("%Y-%m-%dT%H:%M:%SZ"), "stop_date": stop_date.strftime("%Y-%m-%dT%H:%M:%SZ") }) @@ -599,15 +608,15 @@ def parse_electricity_carbon_intensity(carbon_aware_api_response: Dict[str, Any] def query_forecast_electricity_carbon_intensity(start_date: datetime, stop_date: datetime) -> Dict[str, Any]: - url = settings.boaviztapi_endpoint + f'/v1/usage_router/gwp/forecast_intensity?location={settings.azure_location}' + url = BOAVIZTAPI_ENDPOINT + f'/v1/usage_router/gwp/forecast_intensity?location={settings.azure_location}' retry = 0 while retry < 3: retry += 1 try: response = requests.post(url, json={ "source": "carbon_aware_api", - "url": settings.carbon_aware_api_endpoint, - "token": settings.carbon_aware_api_token, + "url": CARBON_AWARE_API_ENDPOINT, + "token": CARBON_AWARE_API_TOKEN, "start_date": start_date.strftime("%Y-%m-%dT%H:%M:%SZ"), "stop_date": stop_date.strftime("%Y-%m-%dT%H:%M:%SZ") }) @@ -745,7 +754,7 @@ def event_is_in_bad_time(event, df: pd.DataFrame): def compute_recommendations(since="now", until="24h"): start_date, stop_date = parse_date_info(since, until) - session = get_session(settings.db_path) + session = get_session(DB_PATH) df_power = select_metric(session, 'power', start_date, stop_date) # df_power['timestamp'] = pd.to_datetime(df_power['timestamp']) df_history = select_metric(session, 'carbonintensity', start_date, stop_date) diff --git a/boagent/api/database.py b/boagent/api/database.py index 0e10ceb..1aa41d5 100644 --- a/boagent/api/database.py +++ b/boagent/api/database.py @@ -1,21 +1,18 @@ -from datetime import datetime, timedelta, timezone -from distutils.log import error -from typing import Any, Optional - -import pytz -from click import option - +import json import pandas as pd import numpy as np + +from typing import Any, Optional +from datetime import datetime, timedelta, timezone from sqlalchemy import Column, DateTime, Integer, Float, insert, select, inspect from sqlalchemy.engine import Engine, create_engine from sqlalchemy.orm import Session, declarative_base, declared_attr from config import settings - -import json from utils import filter_date_range + DB_PATH = settings.db_path +POWER_DATA_FILE_PATH = settings.power_file_path Base = declarative_base() @@ -188,7 +185,7 @@ def get_most_recent_timestamp(session): def get_most_recent_data(table_name): """ Get a single row from the table which has the most recent timestamp""" - session = get_session(settings.db_path) + session = get_session(DB_PATH) table = metrics[table_name] data = session.query(table).order_by(table.timestamp.desc()).first() return data @@ -196,7 +193,7 @@ def get_most_recent_data(table_name): def get_max(table_name): """ Get a single row from the table which has the most recent timestamp""" - session = get_session(settings.db_path) + session = get_session(DB_PATH) table = metrics[table_name] data = session.query(table).order_by(table.value.desc()).first() return data @@ -216,7 +213,7 @@ def add_from_scaphandre(session): def scaphandre_to_csv(start_date: datetime, stop_date: datetime) -> pd.DataFrame: - with open(settings.power_file_path, 'r') as f: # if scaphandre is writing in the json -> KABOUM + with open(POWER_DATA_FILE_PATH, 'r') as f: # if scaphandre is writing in the json -> KABOUM data = json.loads(f.read()) lst = [] for d in data: From 6dd84bc767bac8d2c9d25782b8b7bb502e473244 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 4 Mar 2024 11:36:27 +0100 Subject: [PATCH 024/227] test: use mock files (json, db) for testing environment --- boagent/api/api.py | 2 +- boagent/api/test_api.py | 44 +++++++++++++++++++++++++++++++---------- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index ade07ff..7478758 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -60,7 +60,7 @@ def configure_app(): app = configure_app() items = {} -# setup_database() +setup_database() @app.get("/info", tags=["info"]) diff --git a/boagent/api/test_api.py b/boagent/api/test_api.py index 07ddff4..4a09455 100644 --- a/boagent/api/test_api.py +++ b/boagent/api/test_api.py @@ -1,15 +1,25 @@ from datetime import datetime, timedelta from fastapi.testclient import TestClient from unittest import TestCase -from .api import app +import config +from config import Settings + +# Mocks for testing environment +config.settings = Settings( + hardware_file_path="./mocks/hardware_data.json", + db_path="./mocks/boagent.db", + power_file_path="./mocks/power_data.json", +) -client = TestClient(app) +from .api import app # noqa NOW_ISO8601 = datetime.now().isoformat() NOW_ISO8601_MINUS_ONE_MINUTE = datetime.fromisoformat(NOW_ISO8601) - timedelta( minutes=1 ) +client = TestClient(app) + class ApiTest(TestCase): @@ -53,7 +63,6 @@ def test_read_query_without_measure_power_and_fetch_hardware(self): def test_read_query_with_measure_power(self): - # TO IMPLEMENT : mock hardware_data.json with known functional values for Boaviztapi params = { "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", "end_time": f"{NOW_ISO8601}", @@ -67,6 +76,21 @@ def test_read_query_with_measure_power(self): response = client.get("/query", params=params) assert response.status_code == 200 + def test_read_query_with_fetch_hardware(self): + + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "false", + "location": "FRA", + "measure_power": "false", + "lifetime": 5, + "fetch_hardware": "true", + } + + response = client.get("query", params=params) + assert response.status_code == 200 + def test_read_query_with_measure_power_and_fetch_hardware(self): params = { @@ -101,9 +125,9 @@ def test_read_yearly_embedded(self): response = client.get("/yearly_embedded") assert response.status_code == 200 - def test_read_yearly_operational(self): - response = client.get("/yearly_operational") - assert response.status_code == 200 + +class DatabaseTest(TestCase): + """ROUTES DEPENDENT ON DATABASE""" def test_read_last_info(self): response = client.get("/last_info") @@ -113,9 +137,9 @@ def test_read_max_info(self): response = client.get("/max_info") assert response.status_code == 200 - -class BoaviztapiTest(TestCase): - """ROUTES DEPENDENT ON DATABASE AND / OR BOAVIZTAPI QUERIES""" + def test_read_yearly_operational(self): + response = client.get("/yearly_operational") + assert response.status_code == 200 def test_read_last_data(self): response = client.get("/last_data") @@ -140,7 +164,7 @@ def test_impact(self): assert response.status_code == 200 def test_read_csv(self): - + """ROUTE NOT IMPLEMENTED YET""" params = {"data": "power"} response = client.get("/csv", params=params) From e330bbd693d877e928f285ce03369036dd8d33b5 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 4 Mar 2024 11:43:55 +0100 Subject: [PATCH 025/227] fix: constants for public, azure and boaviztapi paths --- boagent/api/api.py | 8 +++++--- boagent/api/utils.py | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 7478758..4906a70 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -25,11 +25,13 @@ HARDWARE_FILE_PATH = settings.hardware_file_path POWER_DATA_FILE_PATH = settings.power_file_path +PUBLIC_PATH = settings.public_path ASSETS_PATH = settings.assets_path DB_PATH = settings.db_path DEFAULT_LIFETIME = settings.default_lifetime SECONDS_IN_ONE_YEAR = settings.seconds_in_one_year HARDWARE_CLI = settings.hardware_cli +AZURE_LOCATION = settings.azure_location BOAVIZTAPI_ENDPOINT = settings.boaviztapi_endpoint CARBON_AWARE_API_ENDPOINT = settings.carbon_aware_api_endpoint CARBON_AWARE_API_TOKEN = settings.carbon_aware_api_token @@ -78,7 +80,7 @@ async def info(): @app.get("/web", tags=["web"], response_class=HTMLResponse) async def web(): res = "" - with open("{}/index.html".format(settings.public_path), 'r') as fd: + with open("{}/index.html".format(PUBLIC_PATH), 'r') as fd: res = fd.read() fd.close() return res @@ -580,7 +582,7 @@ def generate_machine_configuration(hardware_data): def query_electricity_carbon_intensity(start_date: Optional[datetime] = None, stop_date: Optional[datetime] = None) -> Dict[str, Any]: - url = BOAVIZTAPI_ENDPOINT + f'/v1/usage_router/gwp/current_intensity?location={settings.azure_location}' + url = BOAVIZTAPI_ENDPOINT + f'/v1/usage_router/gwp/current_intensity?location={AZURE_LOCATION}' start_date = start_date or (datetime.utcnow() - timedelta(minutes=5)) stop_date = stop_date or datetime.utcnow() response = requests.post(url, json={ @@ -608,7 +610,7 @@ def parse_electricity_carbon_intensity(carbon_aware_api_response: Dict[str, Any] def query_forecast_electricity_carbon_intensity(start_date: datetime, stop_date: datetime) -> Dict[str, Any]: - url = BOAVIZTAPI_ENDPOINT + f'/v1/usage_router/gwp/forecast_intensity?location={settings.azure_location}' + url = BOAVIZTAPI_ENDPOINT + f'/v1/usage_router/gwp/forecast_intensity?location={AZURE_LOCATION}' retry = 0 while retry < 3: retry += 1 diff --git a/boagent/api/utils.py b/boagent/api/utils.py index a583d5e..3f270c1 100644 --- a/boagent/api/utils.py +++ b/boagent/api/utils.py @@ -3,6 +3,7 @@ from dateutil import parser from config import settings +BOAVIZTAPI_ENDPOINT = settings.boaviztapi_endpoint def sort_ram(items: list): hash_map = {} @@ -39,7 +40,7 @@ def sort_disks(items: list): def get_boavizta_api_client(): config = Configuration( - host=settings.boaviztapi_endpoint, + host=BOAVIZTAPI_ENDPOINT, ) client = ApiClient( configuration=config, pool_threads=2 From 1670766e0bbbab688777be0b8fd0be9a67fd80bf Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 4 Mar 2024 16:23:46 +0100 Subject: [PATCH 026/227] fix: refactor cpu --- boagent/hardware/cpu/cpu.py | 34 +++++++--------------------------- 1 file changed, 7 insertions(+), 27 deletions(-) diff --git a/boagent/hardware/cpu/cpu.py b/boagent/hardware/cpu/cpu.py index cc5df55..f4f0242 100644 --- a/boagent/hardware/cpu/cpu.py +++ b/boagent/hardware/cpu/cpu.py @@ -1,19 +1,17 @@ #!/usr/bin/env python3 + from cpuinfo import get_cpu_info -from cpuid import * -import cpuid_native -import sys +from cpuid import cpuid, cpu_microarchitecture, cpu_name, cpu_vendor +CpuInfo = list[dict[str, str | tuple | dict[str, str] | dict]] -def get_socket_number_linux(location="/sys/devices/system/node/possible"): - if sys.platform != "linux": - return "cannot compute socket number for other OS than linux" +def get_socket_number_linux(location: str = "/sys/devices/system/node/possible") -> int: with open(location, 'r') as f: data = f.read() return int(data.split('-')[-1])+1 -def is_set(id, reg_idx, bit): +def is_set(id: int, reg_idx: int, bit: int) -> str: regs = cpuid(id) if (1 << bit) & regs[reg_idx]: @@ -21,9 +19,9 @@ def is_set(id, reg_idx, bit): else: return "--" -def get_cpus(): +def get_cpus() -> CpuInfo: cpu_info = [] - for i in range(get_socket_number_linux()): + for cpu_socket in range(get_socket_number_linux()): cpu_info.append({ "vendor": cpu_vendor(), "name": cpu_name(), @@ -44,21 +42,3 @@ def get_cpus(): "cpu_info": get_cpu_info(), }) return cpu_info - -if __name__ =="__main__": - print("socket number linux from a file : {}".format(get_socket_number_linux())) - print("Info from the library cpuid-py:") - cpu_info = get_cpus() - for toto in [cpu_info[0], get_cpu_info()]: - print("\n\n\n") - for key,value in toto.items(): - if(value is dict): - for i,j in value.items(): - if(j is dict): - for a,b in value.items(): - print("{} : {}\n".format(a ,b)) - - print("{} : {}\n".format(i,j)) - - else: - print("{} : {}\n".format(key,value)) From 847f9a065636a53d128a33f14173fc8ecd0c956f Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 4 Mar 2024 16:54:24 +0100 Subject: [PATCH 027/227] feat: get scaphandre v1.0.0 image --- docker-compose.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index f02b395..130857a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -30,7 +30,7 @@ services: - "./boagent:/home/boagent/boagent" scaphandre: - image: hubblo/scaphandre:greenhack22 + image: hubblo/scaphandre:1.0.0 volumes: - type: bind source: /proc @@ -38,7 +38,7 @@ services: - type: bind source: /sys/class/powercap target: /sys/class/powercap - - "./boagent/api:/app/data:rw" + - "powerdata:/app/data:rw" command: [ "--no-header", "json", "-s", "10", "--max-top-consumers", "0", "-f", "/app/data/power_data.json" ] networks: - boagent-network From e9430fd3807757671f4aa84dfb8033b3647f9c6f Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 4 Mar 2024 18:07:46 +0100 Subject: [PATCH 028/227] fix: format scaphandre json --- boagent/api/api.py | 26 +++++++++++++------------- boagent/api/utils.py | 8 ++++++++ 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 4906a70..4e028bd 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -15,7 +15,7 @@ from fastapi.responses import HTMLResponse from boaviztapi_sdk.api.server_api import ServerApi from boaviztapi_sdk.model.server_dto import ServerDTO -from utils import iso8601_or_timestamp_as_timestamp, format_prometheus_output, format_prometheus_metric, \ +from utils import iso8601_or_timestamp_as_timestamp, format_scaphandre_json, format_prometheus_output, format_prometheus_metric, \ get_boavizta_api_client, sort_ram, sort_disks from config import settings from database import create_database, get_session, get_engine, insert_metric, select_metric, \ @@ -483,19 +483,19 @@ def format_usage_request(start_time, end_time, host_avg_consumption=None, locati def get_power_data(start_time, end_time): + # Get all items of the json list where start_time <= host.timestamp <= end_time power_data = {} - with open(POWER_DATA_FILE_PATH, 'r') as fd: - # Get all items of the json list where start_time <= host.timestamp <= end_time - data = json.load(fd) - res = [e for e in data if start_time <= float(e['host']['timestamp']) <= end_time] - power_data['raw_data'] = res - power_data['host_avg_consumption'] = compute_average_consumption(res) - if end_time - start_time <= 3600: - power_data[ - 'warning'] = "The time window is lower than one hour, but the energy consumption estimate is in " \ - "Watt.Hour. So this is an extrapolation of the power usage profile on one hour. Be " \ - "careful with this data. " - return power_data + formatted_scaphandre_json = format_scaphandre_json(POWER_DATA_FILE_PATH) + data = json.loads(formatted_scaphandre_json) + res = [e for e in data if start_time <= float(e['host']['timestamp']) <= end_time] + power_data['raw_data'] = res + power_data['host_avg_consumption'] = compute_average_consumption(res) + if end_time - start_time <= 3600: + power_data[ + 'warning'] = "The time window is lower than one hour, but the energy consumption estimate is in " \ + "Watt.Hour. So this is an extrapolation of the power usage profile on one hour. Be " \ + "careful with this data. " + return power_data def get_timeseries_data(start_time, end_time): diff --git a/boagent/api/utils.py b/boagent/api/utils.py index 3f270c1..eb2be7a 100644 --- a/boagent/api/utils.py +++ b/boagent/api/utils.py @@ -2,6 +2,8 @@ from boaviztapi_sdk import ApiClient, Configuration from dateutil import parser from config import settings +from typing import Union +from os import PathLike BOAVIZTAPI_ENDPOINT = settings.boaviztapi_endpoint @@ -112,3 +114,9 @@ def filter_date_range(data: list, start_date: datetime, stop_date: datetime) -> if d["timestamp"] < end: upper_index+=1 return data[lower_index : upper_index] + + +def format_scaphandre_json(file: Union[str, PathLike]) -> str: + with open(file, 'r') as fd: + formatted_scaphandre_json = f"[{fd.read()}]".replace('{"host"', ',{"host"').replace(',{"host"', '{"host"', 1) + return formatted_scaphandre_json From 9f7162c9d71b3586b7349f2451a65f8bfb1114f9 Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 5 Mar 2024 10:26:36 +0100 Subject: [PATCH 029/227] config: reduce pytz import --- boagent/api/api.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 4e028bd..5cd4e1c 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -3,9 +3,9 @@ import os import time import requests -import pytz import pandas as pd +from pytz import UTC, utc from datetime import datetime, timedelta from subprocess import run from typing import Dict, Any, Tuple, List, Optional @@ -686,7 +686,7 @@ def parse_date_info(since: str, until: str, forecast: bool = False) -> Tuple[dat else: ValueError(f'unknown value until={until}') - return start_date.astimezone(pytz.UTC), end_date.astimezone(pytz.UTC) + return start_date.astimezone(UTC), end_date.astimezone(UTC) def upper_round_date_minutes_with_base(date: datetime, base: int) -> datetime: @@ -741,8 +741,8 @@ def get_cron_info(): for char in cron: if char.isdigit() or char == "*" or char == " " or char == "\t": sched += char - info["next"] = croniter(sched, base).get_next(datetime).astimezone(pytz.UTC) - info["previous"] = croniter(sched, base).get_prev(datetime).astimezone(pytz.UTC) + info["next"] = croniter(sched, base).get_next(datetime).astimezone(UTC) + info["previous"] = croniter(sched, base).get_prev(datetime).astimezone(UTC) info["job"] = cron.strip() crons_info.append(info) return crons_info @@ -765,7 +765,7 @@ def compute_recommendations(since="now", until="24h"): df_forecast['timestamp'] = df_forecast['timestamp'].apply(lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%SZ')) df_carbon_intensity = pd.concat([df_history, df_forecast]) - df_carbon_intensity['timestamp'] = df_carbon_intensity['timestamp'].apply(pytz.utc.localize) + df_carbon_intensity['timestamp'] = df_carbon_intensity['timestamp'].apply(utc.localize) df_carbon_intensity = new_highlight_spikes(df_carbon_intensity, "value") recommendations = [] @@ -814,7 +814,7 @@ def find_preferred_execution_date_in_history(execution_date: datetime, bests = df[df['ratio'] == df['ratio'].min()] for row in bests.itertuples(): - new_execution_date = pytz.utc.localize(datetime.strptime(str(row.timestamp), '%Y-%m-%d %H:%M:%S')) + new_execution_date = utc.localize(datetime.strptime(str(row.timestamp), '%Y-%m-%d %H:%M:%S')) if new_execution_date >= execution_date: return new_execution_date From 9e10631194a22b07a14e0c56f921fa2d9e47902c Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 5 Mar 2024 10:32:35 +0100 Subject: [PATCH 030/227] fix: remove get_timeseries_data, duplicate of get_power_data --- boagent/api/api.py | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 5cd4e1c..0a6464f 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -498,21 +498,6 @@ def get_power_data(start_time, end_time): return power_data -def get_timeseries_data(start_time, end_time): - with open(POWER_DATA_FILE_PATH, 'r') as fd: - # Get all items of the json list where start_time <= host.timestamp <= end_time - data = json.load(fd) - res = [e for e in data if start_time <= float(e['host']['timestamp']) <= end_time] - power_data['raw_data'] = res - power_data['host_avg_consumption'] = compute_average_consumption(res) - if end_time - start_time <= 3600: - power_data[ - 'warning'] = "The time window is lower than one hour, but the energy consumption estimate is in " \ - "Watt.Hour. So this is an extrapolation of the power usage profile on one hour. Be " \ - "careful with this data. " - return power_data - - def compute_average_consumption(power_data): # Host energy consumption total_host = 0.0 From 3b26e0b3b6f657476a6b12ff96460c8489c0226d Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 5 Mar 2024 16:00:36 +0100 Subject: [PATCH 031/227] refactor:commenting routes to be implemented / removed, returning 501 codes --- boagent/api/api.py | 83 +++++++++++++++++++++++++++-------------- boagent/api/test_api.py | 24 ++++++++---- 2 files changed, 71 insertions(+), 36 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 0a6464f..f4bf16c 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -105,8 +105,8 @@ async def csv(data: str, since: str = "now", until: str = "24h", inwatt: bool = )''' return Response( - status_code=200, - content="not implemented yet" + status_code=501, + content="Converting data to CSV is not implemented yet." ) @@ -128,7 +128,7 @@ async def yearly_embedded(): @app.get("/yearly_operational") async def operational_impact_yearly(): - since = "now" + """ since = "now" until = "24h" start_date, stop_date = parse_date_info(since, until) session = get_session(DB_PATH) @@ -143,21 +143,29 @@ async def operational_impact_yearly(): yearly_operational = (df_power['power_watt'].mean()*df_carbon_intensity["carbon_intensity_g_per_watt_second"].mean())*(3600*24*365) # in gCO2eq - return round(yearly_operational/1000.0) # in kgCO2eq + return round(yearly_operational/1000.0) # in kgCO2eq """ + + return Response( + status_code=501, + content="Getting yearly operational impact is not implemented yet." + ) @app.get('/last_data') async def last_data(table_name: str) -> Response: - data = get_most_recent_data(table_name) + """ data = get_most_recent_data(table_name) if data is None: return Response(status_code=404) else: - df = pd.DataFrame([[data.timestamp, data.value]], columns=['timestamp', 'value']) - return Response( - content=df.to_csv(index=False), - media_type="text/csv", - status_code=200 - ) + df = pd.DataFrame([[data.timestamp, data.value]], columns=['timestamp', 'value']) + return Response( + content=df.to_csv(index=False), + media_type="text/csv", + status_code=200) """ + return Response( + status_code=501, + content="Getting last data is not implemented yet." + ) @app.get("/metrics", tags=["metrics"]) @@ -195,7 +203,7 @@ async def query(start_time: str = "0.0", end_time: str = "0.0", verbose: bool = @app.get("/last_info") -async def actual_intensity(): +async def last_info(): res = {"power": get_most_recent_data("power"), "carbonintensity": get_most_recent_data("carbonintensity"), "cpu": get_most_recent_data("cpu"), "ram": get_most_recent_data("ram")} @@ -203,20 +211,20 @@ async def actual_intensity(): @app.get("/max_info") -async def actual_intensity(): +async def max_info(): res = {"power": get_max("power"), "carbonintensity": get_max("carbonintensity"), "ram": get_max("ram"), "cpu": get_max("cpu")} return res @app.get("/all_cron") -async def actual_intensity(): +async def all_cron(): return get_cron_info() @app.get("/update") async def update(): - response = query_electricity_carbon_intensity() + """ response = query_electricity_carbon_intensity() info = parse_electricity_carbon_intensity(response) session = get_session(DB_PATH) @@ -224,18 +232,23 @@ async def update(): if info['value'] > 0: insert_metric(session=session, metric_name='carbonintensity', timestamp=info['timestamp'], value=info['value']) session.commit() - session.close() - return Response(status_code=200) + session.close() """ + return Response(status_code=501, + content="Update route is not implemented yet.") @app.get("/carbon_intensity_forecast") async def carbon_intensity_forecast(since: str = "now", until: str = "24h") -> Response: - df = carbon_intensity_forecast_data(since, until) + """ df = carbon_intensity_forecast_data(since, until) df = new_highlight_spikes(df, "value") return Response( content=df.to_csv(index=False), media_type="text/csv" - ) + ) """ + return Response( + status_code=501, + content="Getting carbon intensity forecast is not implemented yet." + ) def carbon_intensity_forecast_data(since: str, until: str) -> pd.DataFrame: @@ -250,7 +263,7 @@ def carbon_intensity_forecast_data(since: str, until: str) -> pd.DataFrame: @app.get("/carbon_intensity") async def carbon_intensity(since: str = "now", until: str = "24h") -> Response: - _, stop_date = parse_date_info(since, until, forecast=True) + """ _, stop_date = parse_date_info(since, until, forecast=True) start_date, now = parse_date_info(since, until, forecast=False) session = get_session(DB_PATH) @@ -270,12 +283,16 @@ async def carbon_intensity(since: str = "now", until: str = "24h") -> Response: return Response( content=df.to_csv(index=False), media_type="text/csv" - ) + ) """ + return Response( + status_code=501, + content="Getting carbon intensity is not implemented yet." + ) @app.get("/init_carbon_intensity") async def init_carbon_intensity(): - engine = get_engine(DB_PATH) + """ engine = get_engine(DB_PATH) CarbonIntensity.__table__.drop(engine) create_database(engine) @@ -289,12 +306,16 @@ async def init_carbon_intensity(): info = parse_electricity_carbon_intensity(response) insert_metric(session, 'carbonintensity', info['timestamp'], info['value']) curr_date += timedelta(minutes=5) - session.commit() + session.commit() """ + return Response( + status_code=501, + content="Init Carbon intensity is not implemented yet." + ) @app.get("/impact") -async def impact(since: str = "now", until: str = "24h"): - start_date, stop_date = parse_date_info(since, until) +async def impact(since: str = "now", until: str = "24h") -> Response: + """ start_date, stop_date = parse_date_info(since, until) session = get_session(DB_PATH) df_power = select_metric(session, 'power', start_date, stop_date) @@ -328,7 +349,11 @@ async def impact(since: str = "now", until: str = "24h"): return Response( content=df.to_csv(index=False), media_type="text/csv" - ) + ) """ + return Response( + status_code=501, + content="Getting impact is not implemented yet." + ) def get_metrics(start_time: float, end_time: float, verbose: bool, location: str, measure_power: bool, lifetime: float, fetch_hardware: bool = False): @@ -523,7 +548,7 @@ def get_hardware_data(fetch_hardware: bool): return data -def read_hardware_data(): +def read_hardware_data() -> Dict: with open(HARDWARE_FILE_PATH, 'r') as fd: data = json.load(fd) return data @@ -548,7 +573,7 @@ def query_machine_impact_data(model: dict = None, configuration: dict = None, us return server_impact -def generate_machine_configuration(hardware_data): +def generate_machine_configuration(hardware_data) -> Dict[str, Any]: config = { "cpu": { "units": len(hardware_data["cpus"]), @@ -567,6 +592,7 @@ def generate_machine_configuration(hardware_data): def query_electricity_carbon_intensity(start_date: Optional[datetime] = None, stop_date: Optional[datetime] = None) -> Dict[str, Any]: + """DEPRECATED BOAVIZTAPI ROUTE""" url = BOAVIZTAPI_ENDPOINT + f'/v1/usage_router/gwp/current_intensity?location={AZURE_LOCATION}' start_date = start_date or (datetime.utcnow() - timedelta(minutes=5)) stop_date = stop_date or datetime.utcnow() @@ -595,6 +621,7 @@ def parse_electricity_carbon_intensity(carbon_aware_api_response: Dict[str, Any] def query_forecast_electricity_carbon_intensity(start_date: datetime, stop_date: datetime) -> Dict[str, Any]: + """DEPRECATED BOAVIZTAPI ROUTE""" url = BOAVIZTAPI_ENDPOINT + f'/v1/usage_router/gwp/forecast_intensity?location={AZURE_LOCATION}' retry = 0 while retry < 3: diff --git a/boagent/api/test_api.py b/boagent/api/test_api.py index 4a09455..6f14a32 100644 --- a/boagent/api/test_api.py +++ b/boagent/api/test_api.py @@ -138,34 +138,42 @@ def test_read_max_info(self): assert response.status_code == 200 def test_read_yearly_operational(self): + """ROUTE NOT IMPLEMENTED YET""" response = client.get("/yearly_operational") - assert response.status_code == 200 + assert response.status_code == 501 def test_read_last_data(self): - response = client.get("/last_data") - assert response.status_code == 200 + """ROUTE NOT IMPLEMENTED YET""" + + params = {"table_name": "cpu"} + response = client.get("/last_data", params=params) + assert response.status_code == 501 def test_read_update(self): + """ROUTE NOT IMPLEMENTED YET""" response = client.get("/update") - assert response.status_code == 200 + assert response.status_code == 501 def test_read_carbon_intensity_forecast(self): + """ROUTE NOT IMPLEMENTED YET""" params = {"since": "now", "until": "24h"} response = client.get("/carbon_intensity_forecast", params=params) - assert response.status_code == 200 + assert response.status_code == 501 def test_read_carbon_intensity(self): + """ROUTE NOT IMPLEMENTED YET""" params = {"since": "now", "until": "24h"} response = client.get("/carbon_intensity", params=params) - assert response.status_code == 200 + assert response.status_code == 501 def test_impact(self): + """ROUTE NOT IMPLEMENTED YET""" response = client.get("/impact") - assert response.status_code == 200 + assert response.status_code == 501 def test_read_csv(self): """ROUTE NOT IMPLEMENTED YET""" params = {"data": "power"} response = client.get("/csv", params=params) - assert response.status_code == 200 + assert response.status_code == 501 From 64b65b2dc1d2eeb676d7d0314df7d38be170208d Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 5 Mar 2024 16:26:44 +0100 Subject: [PATCH 032/227] refactor: typing for model and query_machine_impact_data --- boagent/api/api.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index f4bf16c..fc1dfa6 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -383,7 +383,7 @@ def get_metrics(start_time: float, end_time: float, verbose: bool, location: str res["emissions_calculation_data"]["energy_consumption_warning"] = power_data["warning"] boaviztapi_data = query_machine_impact_data( - model=None, + model={}, configuration=generate_machine_configuration(hardware_data), usage=format_usage_request(start_time, end_time, host_avg_consumption, location) ) @@ -409,7 +409,7 @@ def get_metrics(start_time: float, end_time: float, verbose: bool, location: str "type": "gauge", "unit": "MJ", "long_unit": "Mega Joules" - } + } res["start_time"] = { "value": start_time, "description": "Start time for the evaluation, in timestamp format (seconds since 1970)", @@ -558,7 +558,9 @@ def build_hardware_data(): p = run([HARDWARE_CLI, "--output-file", HARDWARE_FILE_PATH]) -def query_machine_impact_data(model: dict = None, configuration: dict = None, usage: dict = None): +def query_machine_impact_data(model: dict[str, str], + configuration: dict[str, dict[str, int]], + usage: dict[str, Any]) -> dict: server_api = ServerApi(get_boavizta_api_client()) server_impact = None From a4c2a6c983bae1b18788ee3e554df8428101fa55 Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 5 Mar 2024 17:10:25 +0100 Subject: [PATCH 033/227] refactor: typing and syntax --- boagent/api/utils.py | 20 +++++++---- boagent/hardware/cpu/cpu.py | 4 ++- boagent/hardware/disk/disk.py | 68 +++++++++++++++++------------------ 3 files changed, 49 insertions(+), 43 deletions(-) diff --git a/boagent/api/utils.py b/boagent/api/utils.py index eb2be7a..d941e96 100644 --- a/boagent/api/utils.py +++ b/boagent/api/utils.py @@ -2,11 +2,11 @@ from boaviztapi_sdk import ApiClient, Configuration from dateutil import parser from config import settings -from typing import Union from os import PathLike BOAVIZTAPI_ENDPOINT = settings.boaviztapi_endpoint + def sort_ram(items: list): hash_map = {} for r in items: @@ -26,6 +26,7 @@ def sort_ram(items: list): } return [v for k, v in hash_map.items()] + def sort_disks(items: list): hash_map = {} for r in items: @@ -40,6 +41,7 @@ def sort_disks(items: list): } return [v for k, v in hash_map.items()] + def get_boavizta_api_client(): config = Configuration( host=BOAVIZTAPI_ENDPOINT, @@ -49,6 +51,7 @@ def get_boavizta_api_client(): ) return client + def iso8601_or_timestamp_as_timestamp(iso_time: str): ''' Takes an str that's either a timestamp or an iso8601 @@ -77,6 +80,7 @@ def iso8601_or_timestamp_as_timestamp(iso_time: str): else: return float(iso_time) + def format_prometheus_output(res): response = "" for k, v in res.items(): @@ -94,6 +98,7 @@ def format_prometheus_output(res): return response + def format_prometheus_metric(metric_name, metric_description, metric_type, metric_value): response = """# HELP {} {} # TYPE {} {} @@ -101,22 +106,25 @@ def format_prometheus_metric(metric_name, metric_description, metric_type, metri """.format(metric_name, metric_description, metric_name, metric_type, metric_name, metric_value) return response + def filter_date_range(data: list, start_date: datetime, stop_date: datetime) -> list: lower_index = 0 upper_index = 0 start = datetime.timestamp(start_date) - end = datetime.timestamp(stop_date) + end = datetime.timestamp(stop_date) for d in data: - if d["timestamp"] < start: lower_index+=1 - if d["timestamp"] < end: upper_index+=1 + if d["timestamp"] < start: + lower_index += 1 + if d["timestamp"] < end: + upper_index += 1 - return data[lower_index : upper_index] + return data[lower_index: upper_index] -def format_scaphandre_json(file: Union[str, PathLike]) -> str: +def format_scaphandre_json(file: str | PathLike) -> str: with open(file, 'r') as fd: formatted_scaphandre_json = f"[{fd.read()}]".replace('{"host"', ',{"host"').replace(',{"host"', '{"host"', 1) return formatted_scaphandre_json diff --git a/boagent/hardware/cpu/cpu.py b/boagent/hardware/cpu/cpu.py index f4f0242..d827875 100644 --- a/boagent/hardware/cpu/cpu.py +++ b/boagent/hardware/cpu/cpu.py @@ -2,8 +2,9 @@ from cpuinfo import get_cpu_info from cpuid import cpuid, cpu_microarchitecture, cpu_name, cpu_vendor +from typing import TypeAlias -CpuInfo = list[dict[str, str | tuple | dict[str, str] | dict]] +CpuInfo: TypeAlias = list[dict[str, str | tuple | dict[str, str] | dict]] def get_socket_number_linux(location: str = "/sys/devices/system/node/possible") -> int: with open(location, 'r') as f: @@ -19,6 +20,7 @@ def is_set(id: int, reg_idx: int, bit: int) -> str: else: return "--" + def get_cpus() -> CpuInfo: cpu_info = [] for cpu_socket in range(get_socket_number_linux()): diff --git a/boagent/hardware/disk/disk.py b/boagent/hardware/disk/disk.py index bc320d8..614405f 100644 --- a/boagent/hardware/disk/disk.py +++ b/boagent/hardware/disk/disk.py @@ -9,10 +9,10 @@ class DiskException(Exception): @dataclass class Partition: - major: int = None - minor: int = None - blocks: int = None - name: str = None + major: int | None = None + minor: int | None = None + blocks: int | None = None + name: str | None = None @classmethod def from_proc(cls, data=None): @@ -29,16 +29,16 @@ def from_proc(cls, data=None): class Disk: def __init__(self, sysfs_device_path): - self._type = None - self._size = None - self._blocks = None - self._model = None - self._vendor = None - self._major_minor = None - self._partitions = [] - self._sysfs_path = sysfs_device_path - self._name = os.path.basename(sysfs_device_path) - self._looked_up = False + self._type: str = "type" + self._size: int = 0 + self._blocks: int | str = 0 + self._model: str = "model" + self._vendor: str = "vendor" + self._major_minor: str = "major:minor" + self._partitions: list = [] + self._sysfs_path: str = sysfs_device_path + self._name: str = os.path.basename(sysfs_device_path) + self._looked_up: bool = False @property def type(self): @@ -58,16 +58,16 @@ def vendor(self): return self._vendor @staticmethod - def __try_to_read_first_line(item_path, default_value): - retour = default_value + def __try_to_read_first_line(item_path: str, default_value: str) -> str: + first_line = default_value if os.path.exists(item_path): with open(item_path, 'r') as f: - retour = f.readline().strip() - return retour + first_line = f.readline().strip() + return first_line @staticmethod # If one of the strings in /sys/block/***/device/model has numbers, it is not a valid vendor - def __check_vendor(model_string: str | None) -> str: + def __check_vendor(model_string: str) -> str: split_model = model_string.split(' ') model_first_str = split_model[0] model_second_str = split_model[1] @@ -79,25 +79,22 @@ def __check_vendor(model_string: str | None) -> str: return model_first_str @staticmethod - def __safe_int(maybeint): - if maybeint is not None: - try: - return int(maybeint) - except ValueError: - # on retournera null - pass - return None + def __safe_int(maybeint: str) -> int | str: + try: + return int(maybeint) + except ValueError: + return "Unknown" @staticmethod def __rotational_info_to_disk_type(info): - retour = "Unknown" + disk_type = "Unknown" iinfo = Disk.__safe_int(info) if iinfo is not None: if iinfo == 0: - retour = "ssd" + disk_type = "ssd" elif iinfo == 1: - retour = "hdd" - return retour + disk_type = "hdd" + return disk_type def _populate_partitions(self): """ @@ -118,7 +115,6 @@ def _populate_partitions(self): index += 1 part_info_path = f'{part_info_path_base}{index}' - def lookup(self): """ Retrieve disk information from /sys/block/xxx where xxx is device logical name. @@ -133,11 +129,11 @@ def lookup(self): return self._model = Disk.__try_to_read_first_line(f'{self._sysfs_path}/device/model', 'Unknown model') - rotational = Disk.__try_to_read_first_line(f'{self._sysfs_path}/queue/rotational', None) + rotational = Disk.__try_to_read_first_line(f'{self._sysfs_path}/queue/rotational', 'Unknown') self._type = Disk.__rotational_info_to_disk_type(rotational) - self._major_minor = Disk.__try_to_read_first_line(f'{self._sysfs_path}/dev', None) - sectors_count = Disk.__safe_int(Disk.__try_to_read_first_line(f'{self._sysfs_path}/size', None)) - if sectors_count is not None: + self._major_minor = Disk.__try_to_read_first_line(f'{self._sysfs_path}/dev', 'Unknown') + sectors_count = Disk.__safe_int(Disk.__try_to_read_first_line(f'{self._sysfs_path}/size', 'Unknown')) + if type(sectors_count) is int: # Linux uses 512 bytes sectors self._size = sectors_count // (2 * 1024 * 1024) self._blocks = sectors_count From c51002a3a7ad3e6c2775be662ce4c33db58dc16c Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 6 Mar 2024 11:09:19 +0100 Subject: [PATCH 034/227] refactor: marking tests with pytest --- boagent/api/test_api.py | 18 +++++++++++++----- pytest.ini | 4 ++++ 2 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 pytest.ini diff --git a/boagent/api/test_api.py b/boagent/api/test_api.py index 6f14a32..f75707b 100644 --- a/boagent/api/test_api.py +++ b/boagent/api/test_api.py @@ -1,6 +1,7 @@ from datetime import datetime, timedelta from fastapi.testclient import TestClient from unittest import TestCase +from pytest import mark import config from config import Settings @@ -21,7 +22,7 @@ client = TestClient(app) -class ApiTest(TestCase): +class ApiEndpointsTest(TestCase): def test_read_info(self): response = client.get("/info") @@ -46,6 +47,7 @@ def test_read_metrics(self): response = client.get("/metrics", params=params) assert response.status_code == 200 + @mark.query def test_read_query_without_measure_power_and_fetch_hardware(self): params = { @@ -61,6 +63,7 @@ def test_read_query_without_measure_power_and_fetch_hardware(self): response = client.get("/query", params=params) assert response.status_code == 200 + @mark.query def test_read_query_with_measure_power(self): params = { @@ -76,6 +79,7 @@ def test_read_query_with_measure_power(self): response = client.get("/query", params=params) assert response.status_code == 200 + @mark.query def test_read_query_with_fetch_hardware(self): params = { @@ -91,6 +95,7 @@ def test_read_query_with_fetch_hardware(self): response = client.get("query", params=params) assert response.status_code == 200 + @mark.query def test_read_query_with_measure_power_and_fetch_hardware(self): params = { @@ -106,6 +111,7 @@ def test_read_query_with_measure_power_and_fetch_hardware(self): response = client.get("/query", params=params) assert response.status_code == 200 + @mark.query def test_read_query_with_measure_power_and_fetch_hardware_verbose(self): params = { @@ -125,10 +131,6 @@ def test_read_yearly_embedded(self): response = client.get("/yearly_embedded") assert response.status_code == 200 - -class DatabaseTest(TestCase): - """ROUTES DEPENDENT ON DATABASE""" - def test_read_last_info(self): response = client.get("/last_info") assert response.status_code == 200 @@ -142,6 +144,7 @@ def test_read_yearly_operational(self): response = client.get("/yearly_operational") assert response.status_code == 501 + @mark.database def test_read_last_data(self): """ROUTE NOT IMPLEMENTED YET""" @@ -149,28 +152,33 @@ def test_read_last_data(self): response = client.get("/last_data", params=params) assert response.status_code == 501 + @mark.database def test_read_update(self): """ROUTE NOT IMPLEMENTED YET""" response = client.get("/update") assert response.status_code == 501 + @mark.database def test_read_carbon_intensity_forecast(self): """ROUTE NOT IMPLEMENTED YET""" params = {"since": "now", "until": "24h"} response = client.get("/carbon_intensity_forecast", params=params) assert response.status_code == 501 + @mark.database def test_read_carbon_intensity(self): """ROUTE NOT IMPLEMENTED YET""" params = {"since": "now", "until": "24h"} response = client.get("/carbon_intensity", params=params) assert response.status_code == 501 + @mark.database def test_impact(self): """ROUTE NOT IMPLEMENTED YET""" response = client.get("/impact") assert response.status_code == 501 + @mark.database def test_read_csv(self): """ROUTE NOT IMPLEMENTED YET""" params = {"data": "power"} diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..1513401 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,4 @@ +[pytest] +markers = + query: mark a test for Boagent query endpoint. + database: mark a test a Boagent API route that is dependent on a SQLite database. From c1c9b74dc032cae87c7fc771328059cf67b9f02b Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 6 Mar 2024 11:56:37 +0100 Subject: [PATCH 035/227] tests: modified folder structure for pytest --- boagent/api/tests/__init__.py | 0 boagent/api/{ => tests}/test_api.py | 8 ++++---- pytest.ini | 6 ++++-- 3 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 boagent/api/tests/__init__.py rename boagent/api/{ => tests}/test_api.py (96%) diff --git a/boagent/api/tests/__init__.py b/boagent/api/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/boagent/api/test_api.py b/boagent/api/tests/test_api.py similarity index 96% rename from boagent/api/test_api.py rename to boagent/api/tests/test_api.py index f75707b..63cca9d 100644 --- a/boagent/api/test_api.py +++ b/boagent/api/tests/test_api.py @@ -7,12 +7,12 @@ # Mocks for testing environment config.settings = Settings( - hardware_file_path="./mocks/hardware_data.json", - db_path="./mocks/boagent.db", - power_file_path="./mocks/power_data.json", + hardware_file_path="./tests/mocks/hardware_data.json", + db_path="./tests/mocks/boagent.db", + power_file_path="./tests/mocks/power_data.json", ) -from .api import app # noqa +from api import app # noqa NOW_ISO8601 = datetime.now().isoformat() NOW_ISO8601_MINUS_ONE_MINUTE = datetime.fromisoformat(NOW_ISO8601) - timedelta( diff --git a/pytest.ini b/pytest.ini index 1513401..b74a453 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,4 +1,6 @@ [pytest] +testpaths = + tests markers = - query: mark a test for Boagent query endpoint. - database: mark a test a Boagent API route that is dependent on a SQLite database. + query: mark a test for Boagent query endpoint. + database: mark a test a Boagent API route that is dependent on a SQLite database. From a3e4b8733e2870681c23f5f347578e4e12bd24ba Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 6 Mar 2024 17:32:46 +0100 Subject: [PATCH 036/227] fix: remove motherboard --- boagent/api/api.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index fc1dfa6..a2d57f1 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -86,7 +86,7 @@ async def web(): return res -@app.get('/csv', tags=["csv"]) +@app.get("/csv", tags=["csv"]) async def csv(data: str, since: str = "now", until: str = "24h", inwatt: bool = True) -> Response: start_date, stop_date = parse_date_info(since, until) @@ -483,15 +483,15 @@ def get_metrics(start_time: float, end_time: float, verbose: bool, location: str "description"] += "WARNING : As no information was provided about your location, this result is based on " \ "average European electricity mix. Be careful with this data. " - if verbose: - res["emissions_calculation_data"]["raw_data"] = { - "hardware_data": hardware_data, - "resources_data": "not implemented yet", - "boaviztapi_data": boaviztapi_data, - "power_data": power_data, - "start_time": start_time, - "end_time": end_time - } + if verbose: + res["emissions_calculation_data"]["raw_data"] = { + "hardware_data": hardware_data, + "resources_data": "not implemented yet", + "boaviztapi_data": boaviztapi_data, + "power_data": power_data, + "start_time": start_time, + "end_time": end_time + } return res @@ -584,8 +584,6 @@ def generate_machine_configuration(hardware_data) -> Dict[str, Any]: }, "ram": sort_ram(hardware_data["rams"]), "disk": sort_disks(hardware_data["disks"]), - "motherboard": hardware_data["mother_board"] if "mother_board" in hardware_data else {"units": 1}, - # TODO: improve once the API provides more detail input "power_supply": hardware_data["power_supply"] if "power_supply" in hardware_data else {"units": 1} # TODO: if cpu is a small one, guess that power supply is light/average weight of a laptops power supply ? } From 56d024422cd3520bd1e5200db302793c9ee0019e Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 6 Mar 2024 17:42:10 +0100 Subject: [PATCH 037/227] fix: syntax for return formatted_scaphandre_json --- boagent/api/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boagent/api/utils.py b/boagent/api/utils.py index d941e96..a4babfa 100644 --- a/boagent/api/utils.py +++ b/boagent/api/utils.py @@ -127,4 +127,4 @@ def filter_date_range(data: list, start_date: datetime, stop_date: datetime) -> def format_scaphandre_json(file: str | PathLike) -> str: with open(file, 'r') as fd: formatted_scaphandre_json = f"[{fd.read()}]".replace('{"host"', ',{"host"').replace(',{"host"', '{"host"', 1) - return formatted_scaphandre_json + return formatted_scaphandre_json From 32d78687f26531f65fc05e281ae52d94bdc9c38d Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 6 Mar 2024 17:42:40 +0100 Subject: [PATCH 038/227] fix: format cpu --- boagent/hardware/cpu/cpu.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/boagent/hardware/cpu/cpu.py b/boagent/hardware/cpu/cpu.py index d827875..f62ae7f 100644 --- a/boagent/hardware/cpu/cpu.py +++ b/boagent/hardware/cpu/cpu.py @@ -22,11 +22,12 @@ def is_set(id: int, reg_idx: int, bit: int) -> str: def get_cpus() -> CpuInfo: - cpu_info = [] + cpu = [] + cpu_info = get_cpu_info() for cpu_socket in range(get_socket_number_linux()): - cpu_info.append({ - "vendor": cpu_vendor(), - "name": cpu_name(), + cpu.append({ + "vendor": cpu_info['vendor_id_raw'], + "name": cpu_info['brand_raw'], "microarch": cpu_microarchitecture(), "vector_instructions": { "sse": is_set(1, 3, 25), @@ -43,4 +44,4 @@ def get_cpus() -> CpuInfo: }, "cpu_info": get_cpu_info(), }) - return cpu_info + return cpu From 152524d06f6b29357560d7530a6177f58ff02d91 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 6 Mar 2024 17:44:09 +0100 Subject: [PATCH 039/227] fix: remove motherboard in config --- boagent/hardware/hardware.py | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/boagent/hardware/hardware.py b/boagent/hardware/hardware.py index a17791a..5efef1d 100755 --- a/boagent/hardware/hardware.py +++ b/boagent/hardware/hardware.py @@ -7,6 +7,7 @@ from cpu import get_cpus from ram import get_ram_info + @click.command() @click.option("--output-file", help="File to output the hardwate data to") def main(output_file): @@ -14,41 +15,43 @@ def main(output_file): res["disks"] = format_disks(disks()) res["cpus"] = format_cpus(get_cpus()) res["rams"] = format_rams(rams()) - res["mother_board"] = format_mother_board(mother_board()) if output_file is not None: - with open(output_file, 'w') as fd: + with open(output_file, "w") as fd: json.dump(res, fd, indent=4) else: json.dump(res, sys.stdout, indent=4) return 0 + def disks(): disks = search_physical_drives() for disk in disks: disk.lookup() return disks + def format_disks(disks): res = [] for disk in disks: - res.append({ - "capacity": disk.size, - "manufacturer": disk.vendor, - "type": disk.type - }) + res.append( + {"capacity": disk.size, "manufacturer": disk.vendor, "type": disk.type} + ) return res + def format_cpus(cpus): for cpu in cpus: cpu["core_units"] = cpu["cpu_info"]["count"] print("cpu[microarch][0][0] : {}".format(cpu["microarch"][0][0])) - cpu["family"] = cpu["microarch"][0][0].upper()+cpu["microarch"][0][1:] # Ensure first letter of CPU family is upper case, while boaviztapi 2.0 is not released and cpu family usage is not fixed - return cpus + cpu["family"] = cpu["microarch"][0][0].lower() + cpu["microarch"][0][1:] + return cpus + def rams(): rams = get_ram_info() return rams + def format_rams(rams): res = [] for ram in rams: @@ -60,11 +63,6 @@ def format_rams(rams): res.append(options) return res -def mother_board(): - pass - -def format_mother_board(mother_board): - return {} -if __name__ == '__main__': +if __name__ == "__main__": main() From a56dc884522cf35e5875f19109a0b9a7e4c407c4 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 7 Mar 2024 10:52:39 +0100 Subject: [PATCH 040/227] config: dependencies for netbox-agent integration --- requirements.txt | 50 +++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/requirements.txt b/requirements.txt index 6c47315..8b1ef8d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,33 +1,47 @@ --i https://pypi.python.org/simple aiofile==3.8.1 -anyio==3.6.2 ; python_full_version >= '3.6.2' +anyio==3.6.2 boaviztapi-sdk==0.1.2 -caio==0.9.8 ; python_version >= '3.5' and python_version < '4' -certifi==2022.9.24 ; python_version >= '3.6' -charset-normalizer==2.1.1 ; python_full_version >= '3.6.0' -click==8.1.3 ; python_version >= '3.7' +caio==0.9.8 +certifi==2022.9.24 +charset-normalizer==2.1.1 +click==8.1.3 cpuid==0.0.10 cpuid-native==0.0.7 croniter==1.3.7 +Cython==0.29.37 dataclasses==0.6 +distro==1.8.0 +exceptiongroup==1.2.0 fastapi==0.85.1 -greenlet==1.1.3.post0 ; python_version >= '3' and platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32'))))) -h11==0.14.0 ; python_version >= '3.7' -idna==3.4 ; python_version >= '3.5' +greenlet==1.1.3.post0 +h11==0.14.0 +idna==3.4 +iniconfig==2.0.0 +jsonargparse==3.11.2 mangum==0.16.0 -numpy==1.23.4 ; python_version < '3.10' +netaddr==0.8.0 +netbox-agent==0.7.1 +netifaces==0.11.0 +numpy==1.26.4 +packaging==23.1 pandas==1.5.1 +pluggy==1.4.0 py-cpuinfo==9.0.0 -pydantic[dotenv]==1.10.2 +pydantic==1.10.2 +pynetbox==6.1.2 pytest==8.0.2 -python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +python-dateutil==2.8.2 python-dotenv==0.21.0 +python-slugify==8.0.1 pytz==2022.5 +PyYAML==6.0.1 requests==2.28.1 -six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -sniffio==1.3.0 ; python_version >= '3.7' -sqlalchemy==1.4.42 -starlette==0.20.4 ; python_version >= '3.7' -typing-extensions==4.4.0 ; python_version < '3.10' -urllib3==1.26.12 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' and python_version < '4' +six==1.16.0 +sniffio==1.3.0 +SQLAlchemy==1.4.42 +starlette==0.20.4 +text-unidecode==1.3 +tomli==2.0.1 +typing_extensions==4.10.0 +urllib3==1.26.12 uvicorn==0.19.0 From c4eec48582970de3c83ada7df2a7c22d3db5285f Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 7 Mar 2024 19:30:04 +0100 Subject: [PATCH 041/227] config: tests folder structure in project --- boagent/tests/test_api.py | 187 +++++++++++++++++++++++++++++++++ boagent/tests/test_hardware.py | 39 +++++++ 2 files changed, 226 insertions(+) create mode 100644 boagent/tests/test_api.py create mode 100644 boagent/tests/test_hardware.py diff --git a/boagent/tests/test_api.py b/boagent/tests/test_api.py new file mode 100644 index 0000000..24b3ec4 --- /dev/null +++ b/boagent/tests/test_api.py @@ -0,0 +1,187 @@ +from datetime import datetime, timedelta +from fastapi.testclient import TestClient +from unittest import TestCase +from pytest import mark +import config +from api.config import Settings + +# Mocks for testing environment +config.settings = Settings( + hardware_file_path="./tests/mocks/hardware_data.json", + db_path="./tests/mocks/boagent.db", + power_file_path="./tests/mocks/power_data.json", +) + +from api import app # noqa + +NOW_ISO8601 = datetime.now().isoformat() +NOW_ISO8601_MINUS_ONE_MINUTE = datetime.fromisoformat(NOW_ISO8601) - timedelta( + minutes=1 +) + +client = TestClient(app) + + +class ApiEndpointsTest(TestCase): + + def test_read_info(self): + response = client.get("/info") + assert response.status_code == 200 + + def test_read_web(self): + response = client.get("/web") + assert response.status_code == 200 + + def test_read_metrics(self): + + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "false", + "location": "FRA", + "measure_power": "false", + "lifetime": 5, + "fetch_hardware": "false", + } + + response = client.get("/metrics", params=params) + assert response.status_code == 200 + + @mark.query + def test_read_query_without_measure_power_and_fetch_hardware(self): + + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "false", + "location": "FRA", + "measure_power": "false", + "lifetime": 5, + "fetch_hardware": "false", + } + + response = client.get("/query", params=params) + assert response.status_code == 200 + + @mark.query + def test_read_query_with_measure_power(self): + + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "false", + "location": "FRA", + "measure_power": "true", + "lifetime": 5, + "fetch_hardware": "false", + } + + response = client.get("/query", params=params) + assert response.status_code == 200 + + @mark.query + def test_read_query_with_fetch_hardware(self): + + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "false", + "location": "FRA", + "measure_power": "false", + "lifetime": 5, + "fetch_hardware": "true", + } + + response = client.get("query", params=params) + assert response.status_code == 200 + + @mark.query + def test_read_query_with_measure_power_and_fetch_hardware(self): + + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "false", + "location": "FRA", + "measure_power": "true", + "lifetime": 5, + "fetch_hardware": "true", + } + + response = client.get("/query", params=params) + assert response.status_code == 200 + + @mark.query + def test_read_query_with_measure_power_and_fetch_hardware_verbose(self): + + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "true", + "location": "FRA", + "measure_power": "true", + "lifetime": 5, + "fetch_hardware": "true", + } + + response = client.get("/query", params=params) + assert response.status_code == 200 + + def test_read_yearly_embedded(self): + response = client.get("/yearly_embedded") + assert response.status_code == 200 + + def test_read_last_info(self): + response = client.get("/last_info") + assert response.status_code == 200 + + def test_read_max_info(self): + response = client.get("/max_info") + assert response.status_code == 200 + + def test_read_yearly_operational(self): + """ROUTE NOT IMPLEMENTED YET""" + response = client.get("/yearly_operational") + assert response.status_code == 501 + + @mark.database + def test_read_last_data(self): + """ROUTE NOT IMPLEMENTED YET""" + + params = {"table_name": "cpu"} + response = client.get("/last_data", params=params) + assert response.status_code == 501 + + @mark.database + def test_read_update(self): + """ROUTE NOT IMPLEMENTED YET""" + response = client.get("/update") + assert response.status_code == 501 + + @mark.database + def test_read_carbon_intensity_forecast(self): + """ROUTE NOT IMPLEMENTED YET""" + params = {"since": "now", "until": "24h"} + response = client.get("/carbon_intensity_forecast", params=params) + assert response.status_code == 501 + + @mark.database + def test_read_carbon_intensity(self): + """ROUTE NOT IMPLEMENTED YET""" + params = {"since": "now", "until": "24h"} + response = client.get("/carbon_intensity", params=params) + assert response.status_code == 501 + + @mark.database + def test_impact(self): + """ROUTE NOT IMPLEMENTED YET""" + response = client.get("/impact") + assert response.status_code == 501 + + @mark.database + def test_read_csv(self): + """ROUTE NOT IMPLEMENTED YET""" + params = {"data": "power"} + + response = client.get("/csv", params=params) + assert response.status_code == 501 diff --git a/boagent/tests/test_hardware.py b/boagent/tests/test_hardware.py new file mode 100644 index 0000000..0cab120 --- /dev/null +++ b/boagent/tests/test_hardware.py @@ -0,0 +1,39 @@ +from unittest import TestCase +import hardware.cpu as cpu +import hardware.lshw as lshw + +hw = lshw.LSHW() + + +class LshwTest(TestCase): + def test_read_get_hw_linux_cpu(self): + cpu_data = hw.get_hw_linux("cpu") + + assert type(cpu_data) is list + + def test_read_get_hw_linux_storage(self): + storage_data = hw.get_hw_linux("storage") + + assert type(storage_data) is list + + def test_read_get_hw_linux_memory(self): + memory_data = hw.get_hw_linux("memory") + + assert type(memory_data) is list + + +class CpuTest(TestCase): + def test_read_get_cpus(self): + cpu_data = cpu.get_cpus() + + assert type(cpu_data) is list + assert "vendor" in cpu_data[0] + assert "name" in cpu_data[0] + + +class DiskTest(TestCase): + pass + + +class RamTest(TestCase): + pass From 66b22c8b5258c76d327789e466f20e4c56dc222f Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 7 Mar 2024 19:31:44 +0100 Subject: [PATCH 042/227] config: modified path to hardware_cli --- boagent/api/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boagent/api/config.py b/boagent/api/config.py index 2aa0ebb..2d367a7 100644 --- a/boagent/api/config.py +++ b/boagent/api/config.py @@ -17,7 +17,7 @@ class Settings(BaseSettings): default_lifetime: float = os.getenv("DEFAULT_LIFETIME", 5.0) hardware_file_path: str = os.getenv("HARDWARE_FILE_PATH", "./hardware_data.json") power_file_path: str = os.getenv("POWER_FILE_PATH", "./power_data.json") - hardware_cli: str = os.getenv("HARDWARE_CLI", "../hardware/hardware.py") + hardware_cli: str = os.getenv("HARDWARE_CLI", "../hardware/harware_cli.py") boaviztapi_endpoint: str = os.getenv("BOAVIZTAPI_ENDPOINT", "http://localhost:5000") db_path: str = os.getenv("BOAGENT_DB_PATH", "../../db/boagent.db") public_path: str = os.getenv("BOAGENT_PUBLIC_PATH", "../public") From 5ad016671e257063e4fa84fb702bc83928ed8450 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 7 Mar 2024 19:33:04 +0100 Subject: [PATCH 043/227] feat: add lshw to fetch hardware, modified hardware folder structure --- boagent/hardware/cpu.py | 64 ++++++++++ boagent/hardware/hardware_cli.py | 68 ++++++++++ boagent/hardware/lshw.py | 211 +++++++++++++++++++++++++++++++ 3 files changed, 343 insertions(+) create mode 100644 boagent/hardware/cpu.py create mode 100755 boagent/hardware/hardware_cli.py create mode 100644 boagent/hardware/lshw.py diff --git a/boagent/hardware/cpu.py b/boagent/hardware/cpu.py new file mode 100644 index 0000000..1b9125d --- /dev/null +++ b/boagent/hardware/cpu.py @@ -0,0 +1,64 @@ +from cpuinfo import get_cpu_info +from cpuid import cpuid, cpu_microarchitecture, cpu_name, cpu_vendor +from typing import TypeAlias + +from lshw import LSHW + +CpuInfo: TypeAlias = list[dict[str, str | tuple | dict[str, str] | dict]] + +lshw_data = LSHW() + +""" def get_socket_number_linux(location: str = "/sys/devices/system/node/possible") -> int: + with open(location, 'r') as f: + data = f.read() + return int(data.split('-')[-1])+1 """ + + +def is_set(id: int, reg_idx: int, bit: int) -> str: + regs = cpuid(id) + + if (1 << bit) & regs[reg_idx]: + return "Yes" + else: + return "--" + + +def get_cpus(): + cpus = [] + cpu_data = lshw_data.cpus + for cpu in cpu_data: + cpus.append({ + "vendor": cpu["vendor"], + "name": cpu["product"], + "microarch": cpu_microarchitecture(), + "cpu_info": get_cpu_info(), + }) + return cpus + + +""" +def get_cpus() -> CpuInfo: + cpu = [] + cpu_info = get_cpu_info() + for cpu_socket in range(get_socket_number_linux()): + cpu.append({ + "vendor": cpu_info['vendor_id_raw'], + "name": cpu_info['brand_raw'], + "microarch": cpu_microarchitecture(), + "vector_instructions": { + "sse": is_set(1, 3, 25), + "sse2": is_set(1, 3, 26), + "sse3": is_set(1, 2, 0), + "ssse3": is_set(1, 2, 9), + "sse4.1": is_set(1, 2, 19), + "sse4.2": is_set(1, 2, 20), + "sse4a": is_set(0x80000001, 2, 6), + "avx": is_set(1, 2, 28), + "avx2": is_set(7, 1, 5), + "bmi1": is_set(7, 1, 3), + "bmi2": is_set(7, 1, 8), + }, + "cpu_info": get_cpu_info(), + }) + return cpu +""" diff --git a/boagent/hardware/hardware_cli.py b/boagent/hardware/hardware_cli.py new file mode 100755 index 0000000..5efef1d --- /dev/null +++ b/boagent/hardware/hardware_cli.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 + +import click +import json +import sys +from disk import search_physical_drives +from cpu import get_cpus +from ram import get_ram_info + + +@click.command() +@click.option("--output-file", help="File to output the hardwate data to") +def main(output_file): + res = {} + res["disks"] = format_disks(disks()) + res["cpus"] = format_cpus(get_cpus()) + res["rams"] = format_rams(rams()) + if output_file is not None: + with open(output_file, "w") as fd: + json.dump(res, fd, indent=4) + else: + json.dump(res, sys.stdout, indent=4) + return 0 + + +def disks(): + disks = search_physical_drives() + for disk in disks: + disk.lookup() + return disks + + +def format_disks(disks): + res = [] + for disk in disks: + res.append( + {"capacity": disk.size, "manufacturer": disk.vendor, "type": disk.type} + ) + return res + + +def format_cpus(cpus): + for cpu in cpus: + cpu["core_units"] = cpu["cpu_info"]["count"] + print("cpu[microarch][0][0] : {}".format(cpu["microarch"][0][0])) + cpu["family"] = cpu["microarch"][0][0].lower() + cpu["microarch"][0][1:] + return cpus + + +def rams(): + rams = get_ram_info() + return rams + + +def format_rams(rams): + res = [] + for ram in rams: + options = { + "capacity": ram.size_gb, + } + if ram.manufacturer is not None and len(ram.manufacturer) > 0: + options["manufacturer"] = ram.manufacturer + res.append(options) + return res + + +if __name__ == "__main__": + main() diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py new file mode 100644 index 0000000..b239b58 --- /dev/null +++ b/boagent/hardware/lshw.py @@ -0,0 +1,211 @@ +from shutil import which +import subprocess +import logging +import json +import sys + +# Commented elements only available when runnning `lshw` as `sudo`. + + +def is_tool(name): + """Check whether `name` is on PATH and marked as executable""" + return which(name) is not None + + +class LSHW: + def __init__(self): + if not is_tool("lshw"): + logging.error("lshw does not seem to be installed") + sys.exit(1) + + data = subprocess.getoutput("lshw -quiet -json 2> /dev/null") + json_data = json.loads(data) + # Starting from version 02.18, `lshw -json` wraps its result in a list + # rather than returning directly a dictionary + if isinstance(json_data, list): + self.hw_info = json_data[0] + else: + self.hw_info = json_data + self.info = {} + self.memories = [] + self.interfaces = [] + self.cpus = [] + self.power = [] + self.disks = [] + self.gpus = [] + # self.vendor = self.hw_info["vendor"] + # self.product = self.hw_info["product"] + # self.chassis_serial = self.hw_info["serial"] + self.motherboard_serial = self.hw_info["children"][0].get("serial", "No S/N") + self.motherboard = self.hw_info["children"][0].get("product", "Motherboard") + + for k in self.hw_info["children"]: + if k["class"] == "power": + # self.power[k["id"]] = k + self.power.append(k) + + if "children" in k: + for j in k["children"]: + if j["class"] == "generic": + continue + + if j["class"] == "storage": + self.find_storage(j) + + if j["class"] == "memory": + self.find_memories(j) + + if j["class"] == "processor": + self.find_cpus(j) + + if j["class"] == "bridge": + self.walk_bridge(j) + + def get_hw_linux(self, hwclass): + if hwclass == "cpu": + return self.cpus + if hwclass == "gpu": + return self.gpus + if hwclass == "network": + return self.interfaces + if hwclass == "storage": + return self.disks + if hwclass == "memory": + return self.memories + + """ + def find_network(self, obj): + # Some interfaces do not have device (logical) name (eth0, for + # instance), such as not connected network mezzanine cards in blade + # servers. In such situations, the card will be named `unknown[0-9]`. + unkn_intfs = [] + for i in self.interfaces: + # newer versions of lshw can return a list of names, see issue #227 + if not isinstance(i["name"], list): + if i["name"].startswith("unknown"): + unkn_intfs.push(i) + else: + for j in i["name"]: + if j.startswith("unknown"): + unkn_intfs.push(j) + + unkn_name = "unknown{}".format(len(unkn_intfs)) + self.interfaces.append( + { + "name": obj.get("logicalname", unkn_name), + "macaddress": obj.get("serial", ""), + "serial": obj.get("serial", ""), + "product": obj["product"], + "vendor": obj["vendor"], + "description": obj["description"], + } + ) + """ + + def find_storage(self, obj): + if "children" in obj: + for device in obj["children"]: + self.disks.append( + { + "logicalname": device.get("logicalname"), + "product": device.get("product"), + "serial": device.get("serial"), + "version": device.get("version"), + "size": device.get("size"), + "description": device.get("description"), + "type": device.get("description"), + } + ) + elif "nvme" in obj["configuration"]["driver"]: + if not is_tool("nvme"): + logging.error("nvme-cli >= 1.0 does not seem to be installed") + return + try: + nvme = json.loads( + subprocess.check_output( + ["nvme", "-list", "-o", "json"], encoding="utf8" + ) + ) + for device in nvme["Devices"]: + d = { + "logicalname": device["DevicePath"], + "product": device["ModelNumber"], + "serial": device["SerialNumber"], + "version": device["Firmware"], + "description": "NVME", + "type": "NVME", + } + if "UsedSize" in device: + d["size"] = device["UsedSize"] + if "UsedBytes" in device: + d["size"] = device["UsedBytes"] + self.disks.append(d) + except Exception: + pass + + def find_cpus(self, obj): + if "product" in obj: + self.cpus.append( + { + "product": obj["product"], + "vendor": obj["vendor"], + # "description": obj["description"], + # "location": obj["slot"], + } + ) + + def find_memories(self, obj): + if "children" not in obj: + # print("not a DIMM memory.") + return + + for dimm in obj["children"]: + if "empty" in dimm["description"]: + continue + + self.memories.append( + { + "slot": dimm.get("slot"), + "description": dimm.get("description"), + "id": dimm.get("id"), + "serial": dimm.get("serial", "N/A"), + "vendor": dimm.get("vendor", "N/A"), + "product": dimm.get("product", "N/A"), + "size": dimm.get("size", 0) / 2**20 / 1024, + } + ) + + def find_gpus(self, obj): + if "product" in obj: + self.gpus.append( + { + "product": obj["product"], + "vendor": obj["vendor"], + "description": obj["description"], + } + ) + + def walk_bridge(self, obj): + if "children" not in obj: + return + + for bus in obj["children"]: + if bus["class"] == "storage": + self.find_storage(bus) + if bus["class"] == "display": + self.find_gpus(bus) + + if "children" in bus: + for b in bus["children"]: + if b["class"] == "storage": + self.find_storage(b) + # if b["class"] == "network": + # self.find_network(b) + if b["class"] == "display": + self.find_gpus(b) + + +""" + +if __name__ == "__main__": + pass """ From 1281c2bd6d0d41db7982556e46da8e7abd8fc8ad Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 7 Mar 2024 19:34:27 +0100 Subject: [PATCH 044/227] config: modified folder structure --- boagent/api/tests/__init__.py | 0 boagent/api/tests/test_api.py | 187 ------------------------------- boagent/hardware/cpu/__init__.py | 1 - boagent/hardware/cpu/cpu.py | 47 -------- boagent/hardware/hardware.py | 68 ----------- docker-compose.yaml | 1 + requirements.txt | 50 +++------ 7 files changed, 19 insertions(+), 335 deletions(-) delete mode 100644 boagent/api/tests/__init__.py delete mode 100644 boagent/api/tests/test_api.py delete mode 100644 boagent/hardware/cpu/__init__.py delete mode 100644 boagent/hardware/cpu/cpu.py delete mode 100755 boagent/hardware/hardware.py diff --git a/boagent/api/tests/__init__.py b/boagent/api/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/boagent/api/tests/test_api.py b/boagent/api/tests/test_api.py deleted file mode 100644 index 63cca9d..0000000 --- a/boagent/api/tests/test_api.py +++ /dev/null @@ -1,187 +0,0 @@ -from datetime import datetime, timedelta -from fastapi.testclient import TestClient -from unittest import TestCase -from pytest import mark -import config -from config import Settings - -# Mocks for testing environment -config.settings = Settings( - hardware_file_path="./tests/mocks/hardware_data.json", - db_path="./tests/mocks/boagent.db", - power_file_path="./tests/mocks/power_data.json", -) - -from api import app # noqa - -NOW_ISO8601 = datetime.now().isoformat() -NOW_ISO8601_MINUS_ONE_MINUTE = datetime.fromisoformat(NOW_ISO8601) - timedelta( - minutes=1 -) - -client = TestClient(app) - - -class ApiEndpointsTest(TestCase): - - def test_read_info(self): - response = client.get("/info") - assert response.status_code == 200 - - def test_read_web(self): - response = client.get("/web") - assert response.status_code == 200 - - def test_read_metrics(self): - - params = { - "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", - "end_time": f"{NOW_ISO8601}", - "verbose": "false", - "location": "FRA", - "measure_power": "false", - "lifetime": 5, - "fetch_hardware": "false", - } - - response = client.get("/metrics", params=params) - assert response.status_code == 200 - - @mark.query - def test_read_query_without_measure_power_and_fetch_hardware(self): - - params = { - "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", - "end_time": f"{NOW_ISO8601}", - "verbose": "false", - "location": "FRA", - "measure_power": "false", - "lifetime": 5, - "fetch_hardware": "false", - } - - response = client.get("/query", params=params) - assert response.status_code == 200 - - @mark.query - def test_read_query_with_measure_power(self): - - params = { - "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", - "end_time": f"{NOW_ISO8601}", - "verbose": "false", - "location": "FRA", - "measure_power": "true", - "lifetime": 5, - "fetch_hardware": "false", - } - - response = client.get("/query", params=params) - assert response.status_code == 200 - - @mark.query - def test_read_query_with_fetch_hardware(self): - - params = { - "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", - "end_time": f"{NOW_ISO8601}", - "verbose": "false", - "location": "FRA", - "measure_power": "false", - "lifetime": 5, - "fetch_hardware": "true", - } - - response = client.get("query", params=params) - assert response.status_code == 200 - - @mark.query - def test_read_query_with_measure_power_and_fetch_hardware(self): - - params = { - "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", - "end_time": f"{NOW_ISO8601}", - "verbose": "false", - "location": "FRA", - "measure_power": "true", - "lifetime": 5, - "fetch_hardware": "true", - } - - response = client.get("/query", params=params) - assert response.status_code == 200 - - @mark.query - def test_read_query_with_measure_power_and_fetch_hardware_verbose(self): - - params = { - "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", - "end_time": f"{NOW_ISO8601}", - "verbose": "true", - "location": "FRA", - "measure_power": "true", - "lifetime": 5, - "fetch_hardware": "true", - } - - response = client.get("/query", params=params) - assert response.status_code == 200 - - def test_read_yearly_embedded(self): - response = client.get("/yearly_embedded") - assert response.status_code == 200 - - def test_read_last_info(self): - response = client.get("/last_info") - assert response.status_code == 200 - - def test_read_max_info(self): - response = client.get("/max_info") - assert response.status_code == 200 - - def test_read_yearly_operational(self): - """ROUTE NOT IMPLEMENTED YET""" - response = client.get("/yearly_operational") - assert response.status_code == 501 - - @mark.database - def test_read_last_data(self): - """ROUTE NOT IMPLEMENTED YET""" - - params = {"table_name": "cpu"} - response = client.get("/last_data", params=params) - assert response.status_code == 501 - - @mark.database - def test_read_update(self): - """ROUTE NOT IMPLEMENTED YET""" - response = client.get("/update") - assert response.status_code == 501 - - @mark.database - def test_read_carbon_intensity_forecast(self): - """ROUTE NOT IMPLEMENTED YET""" - params = {"since": "now", "until": "24h"} - response = client.get("/carbon_intensity_forecast", params=params) - assert response.status_code == 501 - - @mark.database - def test_read_carbon_intensity(self): - """ROUTE NOT IMPLEMENTED YET""" - params = {"since": "now", "until": "24h"} - response = client.get("/carbon_intensity", params=params) - assert response.status_code == 501 - - @mark.database - def test_impact(self): - """ROUTE NOT IMPLEMENTED YET""" - response = client.get("/impact") - assert response.status_code == 501 - - @mark.database - def test_read_csv(self): - """ROUTE NOT IMPLEMENTED YET""" - params = {"data": "power"} - - response = client.get("/csv", params=params) - assert response.status_code == 501 diff --git a/boagent/hardware/cpu/__init__.py b/boagent/hardware/cpu/__init__.py deleted file mode 100644 index faf358d..0000000 --- a/boagent/hardware/cpu/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .cpu import get_cpus diff --git a/boagent/hardware/cpu/cpu.py b/boagent/hardware/cpu/cpu.py deleted file mode 100644 index f62ae7f..0000000 --- a/boagent/hardware/cpu/cpu.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python3 - -from cpuinfo import get_cpu_info -from cpuid import cpuid, cpu_microarchitecture, cpu_name, cpu_vendor -from typing import TypeAlias - -CpuInfo: TypeAlias = list[dict[str, str | tuple | dict[str, str] | dict]] - -def get_socket_number_linux(location: str = "/sys/devices/system/node/possible") -> int: - with open(location, 'r') as f: - data = f.read() - return int(data.split('-')[-1])+1 - - -def is_set(id: int, reg_idx: int, bit: int) -> str: - regs = cpuid(id) - - if (1 << bit) & regs[reg_idx]: - return "Yes" - else: - return "--" - - -def get_cpus() -> CpuInfo: - cpu = [] - cpu_info = get_cpu_info() - for cpu_socket in range(get_socket_number_linux()): - cpu.append({ - "vendor": cpu_info['vendor_id_raw'], - "name": cpu_info['brand_raw'], - "microarch": cpu_microarchitecture(), - "vector_instructions": { - "sse": is_set(1, 3, 25), - "sse2": is_set(1, 3, 26), - "sse3": is_set(1, 2, 0), - "ssse3": is_set(1, 2, 9), - "sse4.1": is_set(1, 2, 19), - "sse4.2": is_set(1, 2, 20), - "sse4a": is_set(0x80000001, 2, 6), - "avx": is_set(1, 2, 28), - "avx2": is_set(7, 1, 5), - "bmi1": is_set(7, 1, 3), - "bmi2": is_set(7, 1, 8), - }, - "cpu_info": get_cpu_info(), - }) - return cpu diff --git a/boagent/hardware/hardware.py b/boagent/hardware/hardware.py deleted file mode 100755 index 5efef1d..0000000 --- a/boagent/hardware/hardware.py +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env python3 - -import click -import json -import sys -from disk import search_physical_drives -from cpu import get_cpus -from ram import get_ram_info - - -@click.command() -@click.option("--output-file", help="File to output the hardwate data to") -def main(output_file): - res = {} - res["disks"] = format_disks(disks()) - res["cpus"] = format_cpus(get_cpus()) - res["rams"] = format_rams(rams()) - if output_file is not None: - with open(output_file, "w") as fd: - json.dump(res, fd, indent=4) - else: - json.dump(res, sys.stdout, indent=4) - return 0 - - -def disks(): - disks = search_physical_drives() - for disk in disks: - disk.lookup() - return disks - - -def format_disks(disks): - res = [] - for disk in disks: - res.append( - {"capacity": disk.size, "manufacturer": disk.vendor, "type": disk.type} - ) - return res - - -def format_cpus(cpus): - for cpu in cpus: - cpu["core_units"] = cpu["cpu_info"]["count"] - print("cpu[microarch][0][0] : {}".format(cpu["microarch"][0][0])) - cpu["family"] = cpu["microarch"][0][0].lower() + cpu["microarch"][0][1:] - return cpus - - -def rams(): - rams = get_ram_info() - return rams - - -def format_rams(rams): - res = [] - for ram in rams: - options = { - "capacity": ram.size_gb, - } - if ram.manufacturer is not None and len(ram.manufacturer) > 0: - options["manufacturer"] = ram.manufacturer - res.append(options) - return res - - -if __name__ == "__main__": - main() diff --git a/docker-compose.yaml b/docker-compose.yaml index 130857a..87e1cf9 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -31,6 +31,7 @@ services: scaphandre: image: hubblo/scaphandre:1.0.0 + privileged: true volumes: - type: bind source: /proc diff --git a/requirements.txt b/requirements.txt index 8b1ef8d..6c47315 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,47 +1,33 @@ +-i https://pypi.python.org/simple aiofile==3.8.1 -anyio==3.6.2 +anyio==3.6.2 ; python_full_version >= '3.6.2' boaviztapi-sdk==0.1.2 -caio==0.9.8 -certifi==2022.9.24 -charset-normalizer==2.1.1 -click==8.1.3 +caio==0.9.8 ; python_version >= '3.5' and python_version < '4' +certifi==2022.9.24 ; python_version >= '3.6' +charset-normalizer==2.1.1 ; python_full_version >= '3.6.0' +click==8.1.3 ; python_version >= '3.7' cpuid==0.0.10 cpuid-native==0.0.7 croniter==1.3.7 -Cython==0.29.37 dataclasses==0.6 -distro==1.8.0 -exceptiongroup==1.2.0 fastapi==0.85.1 -greenlet==1.1.3.post0 -h11==0.14.0 -idna==3.4 -iniconfig==2.0.0 -jsonargparse==3.11.2 +greenlet==1.1.3.post0 ; python_version >= '3' and platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32'))))) +h11==0.14.0 ; python_version >= '3.7' +idna==3.4 ; python_version >= '3.5' mangum==0.16.0 -netaddr==0.8.0 -netbox-agent==0.7.1 -netifaces==0.11.0 -numpy==1.26.4 -packaging==23.1 +numpy==1.23.4 ; python_version < '3.10' pandas==1.5.1 -pluggy==1.4.0 py-cpuinfo==9.0.0 -pydantic==1.10.2 -pynetbox==6.1.2 +pydantic[dotenv]==1.10.2 pytest==8.0.2 -python-dateutil==2.8.2 +python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' python-dotenv==0.21.0 -python-slugify==8.0.1 pytz==2022.5 -PyYAML==6.0.1 requests==2.28.1 -six==1.16.0 -sniffio==1.3.0 -SQLAlchemy==1.4.42 -starlette==0.20.4 -text-unidecode==1.3 -tomli==2.0.1 -typing_extensions==4.10.0 -urllib3==1.26.12 +six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +sniffio==1.3.0 ; python_version >= '3.7' +sqlalchemy==1.4.42 +starlette==0.20.4 ; python_version >= '3.7' +typing-extensions==4.4.0 ; python_version < '3.10' +urllib3==1.26.12 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' and python_version < '4' uvicorn==0.19.0 From 1979ed6093c551735d5dc78cde2fc2a6b26e850b Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 11 Mar 2024 15:20:30 +0100 Subject: [PATCH 045/227] feat: add check_disk_vendor as util --- boagent/api/utils.py | 73 +++++++++++++++++++++++++++++++++----------- 1 file changed, 56 insertions(+), 17 deletions(-) diff --git a/boagent/api/utils.py b/boagent/api/utils.py index a4babfa..9d351cb 100644 --- a/boagent/api/utils.py +++ b/boagent/api/utils.py @@ -3,6 +3,7 @@ from dateutil import parser from config import settings from os import PathLike +import re BOAVIZTAPI_ENDPOINT = settings.boaviztapi_endpoint @@ -17,12 +18,12 @@ def sort_ram(items: list): hash_map["{}:{}".format(r["capacity"], r["manufacturer"])] = { "units": 1, "manufacturer": r["manufacturer"], - "capacity": r["capacity"] + "capacity": r["capacity"], } else: hash_map["{}".format(r["capacity"])] = { "units": 1, - "capacity": r["capacity"] + "capacity": r["capacity"], } return [v for k, v in hash_map.items()] @@ -31,13 +32,15 @@ def sort_disks(items: list): hash_map = {} for r in items: if "{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"]) in hash_map: - hash_map["{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"])]["units"] += 1 + hash_map["{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"])][ + "units" + ] += 1 else: hash_map["{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"])] = { "units": 1, "manufacturer": r["manufacturer"], "capacity": r["capacity"], - "type": r["type"] + "type": r["type"], } return [v for k, v in hash_map.items()] @@ -46,17 +49,15 @@ def get_boavizta_api_client(): config = Configuration( host=BOAVIZTAPI_ENDPOINT, ) - client = ApiClient( - configuration=config, pool_threads=2 - ) + client = ApiClient(configuration=config, pool_threads=2) return client def iso8601_or_timestamp_as_timestamp(iso_time: str): - ''' + """ Takes an str that's either a timestamp or an iso8601 time. Returns a float that represents a timestamp. - ''' + """ if iso_time == "0.0" or iso_time == "0": return float(iso_time) else: @@ -87,23 +88,47 @@ def format_prometheus_output(res): if "value" in v and "type" in v: if "description" not in v: v["description"] = "TODO: define me" - response += format_prometheus_metric(k, "{}. {}".format(v["description"], "In {} ({}).".format(v["long_unit"], v["unit"])), v["type"], v["value"]) - #response += format_prometheus_metric("energy_consumption", "Energy consumed in the evaluation time window (evaluated at least for an hour, be careful if the time windows is lower than 1 hour), in Wh", "counter", res["emissions_calculation_data"]["energy_consumption"]) + response += format_prometheus_metric( + k, + "{}. {}".format( + v["description"], "In {} ({}).".format(v["long_unit"], v["unit"]) + ), + v["type"], + v["value"], + ) + # response += format_prometheus_metric("energy_consumption", "Energy consumed in the evaluation time window (evaluated at least for an hour, be careful if the time windows is lower than 1 hour), in Wh", "counter", res["emissions_calculation_data"]["energy_consumption"]) else: for x, y in v.items(): if "value" in y and "type" in y: if "description" not in y: y["description"] = "TODO: define me" - response += format_prometheus_metric("{}_{}".format(k,x), "{}. {}".format(y["description"], "In {} ({}).".format(y["long_unit"], y["unit"])), y["type"], y["value"]) + response += format_prometheus_metric( + "{}_{}".format(k, x), + "{}. {}".format( + y["description"], + "In {} ({}).".format(y["long_unit"], y["unit"]), + ), + y["type"], + y["value"], + ) return response -def format_prometheus_metric(metric_name, metric_description, metric_type, metric_value): +def format_prometheus_metric( + metric_name, metric_description, metric_type, metric_value +): response = """# HELP {} {} # TYPE {} {} {} {} -""".format(metric_name, metric_description, metric_name, metric_type, metric_name, metric_value) +""".format( + metric_name, + metric_description, + metric_name, + metric_type, + metric_name, + metric_value, + ) return response @@ -121,10 +146,24 @@ def filter_date_range(data: list, start_date: datetime, stop_date: datetime) -> if d["timestamp"] < end: upper_index += 1 - return data[lower_index: upper_index] + return data[lower_index:upper_index] def format_scaphandre_json(file: str | PathLike) -> str: - with open(file, 'r') as fd: - formatted_scaphandre_json = f"[{fd.read()}]".replace('{"host"', ',{"host"').replace(',{"host"', '{"host"', 1) + with open(file, "r") as fd: + formatted_scaphandre_json = f"[{fd.read()}]".replace( + '{"host"', ',{"host"' + ).replace(',{"host"', '{"host"', 1) return formatted_scaphandre_json + + +def check_disk_vendor(model_string: str) -> str: + split_model = model_string.split(" ") + model_first_str = split_model[0] + model_second_str = split_model[1] + check_first_string_for_numbers = re.search("\\d", model_first_str) + result = bool(check_first_string_for_numbers) + if result: + return model_second_str + else: + return model_first_str From 580fd070d066eb3cdb0a7c2f68500d0704994935 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 11 Mar 2024 15:21:29 +0100 Subject: [PATCH 046/227] test: testing lshw cpus and disks properties --- boagent/tests/test_hardware.py | 40 +++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/boagent/tests/test_hardware.py b/boagent/tests/test_hardware.py index 0cab120..e60797f 100644 --- a/boagent/tests/test_hardware.py +++ b/boagent/tests/test_hardware.py @@ -1,8 +1,10 @@ from unittest import TestCase -import hardware.cpu as cpu + +# import hardware.cpu as cpu import hardware.lshw as lshw +# import hardware.hardware_cli as hwcli -hw = lshw.LSHW() +hw = lshw.Lshw() class LshwTest(TestCase): @@ -21,19 +23,41 @@ def test_read_get_hw_linux_memory(self): assert type(memory_data) is list + def test_read_cpus_properties(self): + cpu_data = hw.cpus + + for cpu in cpu_data: + assert "vendor" in cpu + assert "name" in cpu + assert "core_units" in cpu + assert "units" in cpu + assert cpu["vendor"] is not None + assert cpu["name"] is not None + assert cpu["core_units"] is not None + assert cpu["units"] is not None + + def test_read_disks_properties(self): + disks_data = hw.disks -class CpuTest(TestCase): + for disk in disks_data: + assert "type" in disk + assert "model" in disk + assert "manufacturer" in disk + assert "capacity" in disk + assert disk["type"] == "ssd" or disk["type"] == "hdd" or disk["type"] == "unknown" + + +""" class CpuTest(TestCase): def test_read_get_cpus(self): cpu_data = cpu.get_cpus() assert type(cpu_data) is list assert "vendor" in cpu_data[0] assert "name" in cpu_data[0] + """ -class DiskTest(TestCase): - pass - +class HardwarecliTest(TestCase): -class RamTest(TestCase): - pass + def test_read_hardware_cli_cpus(self): + pass From 4e0a01d3441a8ad106e9f3668a24e851cfec5e4e Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 11 Mar 2024 15:22:28 +0100 Subject: [PATCH 047/227] feat: WIP modifying lshw for boaviztapi data format --- boagent/hardware/lshw.py | 54 ++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py index b239b58..84ab23a 100644 --- a/boagent/hardware/lshw.py +++ b/boagent/hardware/lshw.py @@ -12,13 +12,13 @@ def is_tool(name): return which(name) is not None -class LSHW: +class Lshw: def __init__(self): if not is_tool("lshw"): logging.error("lshw does not seem to be installed") sys.exit(1) - data = subprocess.getoutput("lshw -quiet -json 2> /dev/null") + data = subprocess.getoutput("sudo lshw -quiet -json 2> /dev/null") json_data = json.loads(data) # Starting from version 02.18, `lshw -json` wraps its result in a list # rather than returning directly a dictionary @@ -28,7 +28,7 @@ def __init__(self): self.hw_info = json_data self.info = {} self.memories = [] - self.interfaces = [] + # self.interfaces = [] self.cpus = [] self.power = [] self.disks = [] @@ -66,8 +66,8 @@ def get_hw_linux(self, hwclass): return self.cpus if hwclass == "gpu": return self.gpus - if hwclass == "network": - return self.interfaces + """ if hwclass == "network": + return self.interfaces """ if hwclass == "storage": return self.disks if hwclass == "memory": @@ -105,40 +105,38 @@ def find_network(self, obj): def find_storage(self, obj): if "children" in obj: for device in obj["children"]: - self.disks.append( - { - "logicalname": device.get("logicalname"), - "product": device.get("product"), - "serial": device.get("serial"), - "version": device.get("version"), - "size": device.get("size"), - "description": device.get("description"), - "type": device.get("description"), - } - ) - elif "nvme" in obj["configuration"]["driver"]: + d = { + "model": device.get("product"), + "manufacturer": device.get("vendor"), + "capacity": device.get("size"), + } + if "type" in device == "SCSI Disk": + d["type"] = "hdd" + if "type" in device == "NVMe device": + d["type"] = "ssd" + else: + d["type"] = "unknown" + self.disks.append(d) + if "nvme" in obj["configuration"]["driver"]: if not is_tool("nvme"): logging.error("nvme-cli >= 1.0 does not seem to be installed") return try: nvme = json.loads( subprocess.check_output( - ["nvme", "-list", "-o", "json"], encoding="utf8" + ["sudo", "nvme", "-list", "-o", "json"], encoding="utf8" ) ) for device in nvme["Devices"]: d = { - "logicalname": device["DevicePath"], - "product": device["ModelNumber"], - "serial": device["SerialNumber"], - "version": device["Firmware"], - "description": "NVME", - "type": "NVME", + "model": device["ModelNumber"], + "manufacturer": "manufacturer", + "type": "ssd", } if "UsedSize" in device: - d["size"] = device["UsedSize"] + d["capacity"] = device["UsedSize"] if "UsedBytes" in device: - d["size"] = device["UsedBytes"] + d["capacity"] = device["UsedBytes"] self.disks.append(d) except Exception: pass @@ -147,8 +145,10 @@ def find_cpus(self, obj): if "product" in obj: self.cpus.append( { - "product": obj["product"], + "name": obj["product"], "vendor": obj["vendor"], + "core_units": obj["configuration"]["cores"], + "units": +1, # "description": obj["description"], # "location": obj["slot"], } From 0fe48306e4ed16b36189b2d5f02ac9a539d6bdca Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 11 Mar 2024 16:59:12 +0100 Subject: [PATCH 048/227] refactor: moved check_disk_vendor to lshw --- boagent/api/utils.py | 73 ++++++++++------------------------------ boagent/hardware/lshw.py | 46 +++++++++++++++---------- 2 files changed, 46 insertions(+), 73 deletions(-) diff --git a/boagent/api/utils.py b/boagent/api/utils.py index 9d351cb..a4babfa 100644 --- a/boagent/api/utils.py +++ b/boagent/api/utils.py @@ -3,7 +3,6 @@ from dateutil import parser from config import settings from os import PathLike -import re BOAVIZTAPI_ENDPOINT = settings.boaviztapi_endpoint @@ -18,12 +17,12 @@ def sort_ram(items: list): hash_map["{}:{}".format(r["capacity"], r["manufacturer"])] = { "units": 1, "manufacturer": r["manufacturer"], - "capacity": r["capacity"], + "capacity": r["capacity"] } else: hash_map["{}".format(r["capacity"])] = { "units": 1, - "capacity": r["capacity"], + "capacity": r["capacity"] } return [v for k, v in hash_map.items()] @@ -32,15 +31,13 @@ def sort_disks(items: list): hash_map = {} for r in items: if "{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"]) in hash_map: - hash_map["{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"])][ - "units" - ] += 1 + hash_map["{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"])]["units"] += 1 else: hash_map["{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"])] = { "units": 1, "manufacturer": r["manufacturer"], "capacity": r["capacity"], - "type": r["type"], + "type": r["type"] } return [v for k, v in hash_map.items()] @@ -49,15 +46,17 @@ def get_boavizta_api_client(): config = Configuration( host=BOAVIZTAPI_ENDPOINT, ) - client = ApiClient(configuration=config, pool_threads=2) + client = ApiClient( + configuration=config, pool_threads=2 + ) return client def iso8601_or_timestamp_as_timestamp(iso_time: str): - """ + ''' Takes an str that's either a timestamp or an iso8601 time. Returns a float that represents a timestamp. - """ + ''' if iso_time == "0.0" or iso_time == "0": return float(iso_time) else: @@ -88,47 +87,23 @@ def format_prometheus_output(res): if "value" in v and "type" in v: if "description" not in v: v["description"] = "TODO: define me" - response += format_prometheus_metric( - k, - "{}. {}".format( - v["description"], "In {} ({}).".format(v["long_unit"], v["unit"]) - ), - v["type"], - v["value"], - ) - # response += format_prometheus_metric("energy_consumption", "Energy consumed in the evaluation time window (evaluated at least for an hour, be careful if the time windows is lower than 1 hour), in Wh", "counter", res["emissions_calculation_data"]["energy_consumption"]) + response += format_prometheus_metric(k, "{}. {}".format(v["description"], "In {} ({}).".format(v["long_unit"], v["unit"])), v["type"], v["value"]) + #response += format_prometheus_metric("energy_consumption", "Energy consumed in the evaluation time window (evaluated at least for an hour, be careful if the time windows is lower than 1 hour), in Wh", "counter", res["emissions_calculation_data"]["energy_consumption"]) else: for x, y in v.items(): if "value" in y and "type" in y: if "description" not in y: y["description"] = "TODO: define me" - response += format_prometheus_metric( - "{}_{}".format(k, x), - "{}. {}".format( - y["description"], - "In {} ({}).".format(y["long_unit"], y["unit"]), - ), - y["type"], - y["value"], - ) + response += format_prometheus_metric("{}_{}".format(k,x), "{}. {}".format(y["description"], "In {} ({}).".format(y["long_unit"], y["unit"])), y["type"], y["value"]) return response -def format_prometheus_metric( - metric_name, metric_description, metric_type, metric_value -): +def format_prometheus_metric(metric_name, metric_description, metric_type, metric_value): response = """# HELP {} {} # TYPE {} {} {} {} -""".format( - metric_name, - metric_description, - metric_name, - metric_type, - metric_name, - metric_value, - ) +""".format(metric_name, metric_description, metric_name, metric_type, metric_name, metric_value) return response @@ -146,24 +121,10 @@ def filter_date_range(data: list, start_date: datetime, stop_date: datetime) -> if d["timestamp"] < end: upper_index += 1 - return data[lower_index:upper_index] + return data[lower_index: upper_index] def format_scaphandre_json(file: str | PathLike) -> str: - with open(file, "r") as fd: - formatted_scaphandre_json = f"[{fd.read()}]".replace( - '{"host"', ',{"host"' - ).replace(',{"host"', '{"host"', 1) + with open(file, 'r') as fd: + formatted_scaphandre_json = f"[{fd.read()}]".replace('{"host"', ',{"host"').replace(',{"host"', '{"host"', 1) return formatted_scaphandre_json - - -def check_disk_vendor(model_string: str) -> str: - split_model = model_string.split(" ") - model_first_str = split_model[0] - model_second_str = split_model[1] - check_first_string_for_numbers = re.search("\\d", model_first_str) - result = bool(check_first_string_for_numbers) - if result: - return model_second_str - else: - return model_first_str diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py index 84ab23a..0ddd44f 100644 --- a/boagent/hardware/lshw.py +++ b/boagent/hardware/lshw.py @@ -3,6 +3,7 @@ import logging import json import sys +import re # Commented elements only available when runnning `lshw` as `sudo`. @@ -12,6 +13,17 @@ def is_tool(name): return which(name) is not None +def check_disk_vendor(model_string: str) -> str: + split_model = model_string.split(" ") + model_first_str = split_model[0] + model_second_str = split_model[1] + check_first_string_for_numbers = re.search("\\d", model_first_str) + result = bool(check_first_string_for_numbers) + if result: + return model_second_str + else: + return model_first_str + class Lshw: def __init__(self): if not is_tool("lshw"): @@ -105,18 +117,20 @@ def find_network(self, obj): def find_storage(self, obj): if "children" in obj: for device in obj["children"]: - d = { - "model": device.get("product"), - "manufacturer": device.get("vendor"), - "capacity": device.get("size"), - } - if "type" in device == "SCSI Disk": - d["type"] = "hdd" - if "type" in device == "NVMe device": - d["type"] = "ssd" - else: - d["type"] = "unknown" - self.disks.append(d) + if "vendor" in device: + d = { + "manufacturer": check_disk_vendor(device["vendor"]).lower(), + "capacity": device["size"], + } + if "type" in device == "SCSI Disk": + d["type"] = "hdd" + if "type" in device == "NVMe device": + d["type"] = "ssd" + if "type" in device == "Mass storage device": + d["type"] = "usb" + else: + d["type"] = "unknown" + self.disks.append(d) if "nvme" in obj["configuration"]["driver"]: if not is_tool("nvme"): logging.error("nvme-cli >= 1.0 does not seem to be installed") @@ -129,14 +143,13 @@ def find_storage(self, obj): ) for device in nvme["Devices"]: d = { - "model": device["ModelNumber"], - "manufacturer": "manufacturer", + "manufacturer": check_disk_vendor(device["ModelNumber"]).lower(), "type": "ssd", } if "UsedSize" in device: - d["capacity"] = device["UsedSize"] + d["capacity"] = (device["UsedSize"] // 1073741824) if "UsedBytes" in device: - d["capacity"] = device["UsedBytes"] + d["capacity"] = (device["UsedBytes"] // 1073741824) self.disks.append(d) except Exception: pass @@ -206,6 +219,5 @@ def walk_bridge(self, obj): """ - if __name__ == "__main__": pass """ From 3e344828a664950c71caf5254ec28a17fb879134 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 11 Mar 2024 16:59:43 +0100 Subject: [PATCH 049/227] test: simplified assertions --- boagent/tests/test_hardware.py | 62 +++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/boagent/tests/test_hardware.py b/boagent/tests/test_hardware.py index e60797f..ff9a449 100644 --- a/boagent/tests/test_hardware.py +++ b/boagent/tests/test_hardware.py @@ -1,11 +1,12 @@ from unittest import TestCase -# import hardware.cpu as cpu import hardware.lshw as lshw -# import hardware.hardware_cli as hwcli hw = lshw.Lshw() +lshw_cpus_data = hw.cpus +lshw_disks_data = hw.disks + class LshwTest(TestCase): def test_read_get_hw_linux_cpu(self): @@ -23,38 +24,53 @@ def test_read_get_hw_linux_memory(self): assert type(memory_data) is list - def test_read_cpus_properties(self): - cpu_data = hw.cpus + def test_read_cpu_vendor(self): - for cpu in cpu_data: + for cpu in lshw_cpus_data: assert "vendor" in cpu + assert type(cpu["vendor"]) is str + + def test_read_cpu_name(self): + + for cpu in lshw_cpus_data: assert "name" in cpu + assert type(cpu["name"]) is str + + def test_read_cpu_core_units(self): + + for cpu in lshw_cpus_data: assert "core_units" in cpu + assert type(cpu["core_units"]) is str + + def test_read_cpu_units(self): + + for cpu in lshw_cpus_data: assert "units" in cpu - assert cpu["vendor"] is not None - assert cpu["name"] is not None - assert cpu["core_units"] is not None - assert cpu["units"] is not None + assert type(cpu["units"]) is int - def test_read_disks_properties(self): - disks_data = hw.disks + def test_read_disks_type(self): - for disk in disks_data: + for disk in lshw_disks_data: assert "type" in disk - assert "model" in disk - assert "manufacturer" in disk - assert "capacity" in disk - assert disk["type"] == "ssd" or disk["type"] == "hdd" or disk["type"] == "unknown" + assert type(disk["type"]) is str + assert ( + disk["type"] == "ssd" + or disk["type"] == "hdd" + or disk["type"] == "usb" + or disk["type"] == "unknown" + ) + + def test_read_disks_manufacturer(self): + for disk in lshw_disks_data: + assert "manufacturer" in disk + assert type(disk["manufacturer"]) is str -""" class CpuTest(TestCase): - def test_read_get_cpus(self): - cpu_data = cpu.get_cpus() + def test_read_disks_capacity(self): - assert type(cpu_data) is list - assert "vendor" in cpu_data[0] - assert "name" in cpu_data[0] - """ + for disk in lshw_disks_data: + assert "capacity" in disk + assert type(disk["capacity"]) is int class HardwarecliTest(TestCase): From d061396ed7b6dbb8312142d5020a360d09587746 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 11 Mar 2024 17:19:51 +0100 Subject: [PATCH 050/227] test: testing ram data from lshw --- boagent/tests/test_hardware.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/boagent/tests/test_hardware.py b/boagent/tests/test_hardware.py index ff9a449..75195fd 100644 --- a/boagent/tests/test_hardware.py +++ b/boagent/tests/test_hardware.py @@ -6,6 +6,7 @@ lshw_cpus_data = hw.cpus lshw_disks_data = hw.disks +lshw_ram_data = hw.memories class LshwTest(TestCase): @@ -72,6 +73,18 @@ def test_read_disks_capacity(self): assert "capacity" in disk assert type(disk["capacity"]) is int + def test_read_ram_manufacturer(self): + + for ram in lshw_ram_data: + assert "manufacturer" in ram + assert type(ram["manufacturer"]) is str + + def test_read_ram_capacity(self): + + for ram in lshw_ram_data: + assert "capacity" in ram + assert type(ram["capacity"]) is int + class HardwarecliTest(TestCase): From 4c4e0089d6e1e5ebb50c6db39857e8421136f999 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 11 Mar 2024 17:20:14 +0100 Subject: [PATCH 051/227] feat: get ram data from lshw --- boagent/hardware/lshw.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py index 0ddd44f..8a7d687 100644 --- a/boagent/hardware/lshw.py +++ b/boagent/hardware/lshw.py @@ -178,13 +178,8 @@ def find_memories(self, obj): self.memories.append( { - "slot": dimm.get("slot"), - "description": dimm.get("description"), - "id": dimm.get("id"), - "serial": dimm.get("serial", "N/A"), - "vendor": dimm.get("vendor", "N/A"), - "product": dimm.get("product", "N/A"), - "size": dimm.get("size", 0) / 2**20 / 1024, + "manufacturer": dimm.get("vendor", "N/A"), + "capacity": dimm.get("size", 0) // 2**20 // 1024, } ) From f025f325861ac513b93d0b45c6699ec9d53469cf Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 11 Mar 2024 17:39:33 +0100 Subject: [PATCH 052/227] test: get units for each component, list slices for parsing data --- boagent/tests/test_hardware.py | 41 +++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/boagent/tests/test_hardware.py b/boagent/tests/test_hardware.py index 75195fd..be0dd45 100644 --- a/boagent/tests/test_hardware.py +++ b/boagent/tests/test_hardware.py @@ -25,33 +25,32 @@ def test_read_get_hw_linux_memory(self): assert type(memory_data) is list - def test_read_cpu_vendor(self): + def test_read_cpus_vendor(self): - for cpu in lshw_cpus_data: + for cpu in lshw_cpus_data[1:]: assert "vendor" in cpu assert type(cpu["vendor"]) is str - def test_read_cpu_name(self): + def test_read_cpus_name(self): - for cpu in lshw_cpus_data: + for cpu in lshw_cpus_data[1:]: assert "name" in cpu assert type(cpu["name"]) is str - def test_read_cpu_core_units(self): + def test_read_cpus_core_units(self): - for cpu in lshw_cpus_data: + for cpu in lshw_cpus_data[1:]: assert "core_units" in cpu assert type(cpu["core_units"]) is str - def test_read_cpu_units(self): + def test_read_cpus_units(self): - for cpu in lshw_cpus_data: - assert "units" in cpu - assert type(cpu["units"]) is int + assert "units" in lshw_cpus_data[0] + assert type(lshw_cpus_data[0]["units"]) is int def test_read_disks_type(self): - for disk in lshw_disks_data: + for disk in lshw_disks_data[1:]: assert "type" in disk assert type(disk["type"]) is str assert ( @@ -63,28 +62,40 @@ def test_read_disks_type(self): def test_read_disks_manufacturer(self): - for disk in lshw_disks_data: + for disk in lshw_disks_data[1:]: assert "manufacturer" in disk assert type(disk["manufacturer"]) is str def test_read_disks_capacity(self): - for disk in lshw_disks_data: + for disk in lshw_disks_data[1:]: assert "capacity" in disk assert type(disk["capacity"]) is int + def test_read_disks_units(self): + + assert "units" in lshw_disks_data[0] + assert type(lshw_disks_data[0]["units"]) is int + def test_read_ram_manufacturer(self): - for ram in lshw_ram_data: + for ram in lshw_ram_data[1:]: assert "manufacturer" in ram assert type(ram["manufacturer"]) is str def test_read_ram_capacity(self): - for ram in lshw_ram_data: + print(lshw_ram_data) + + for ram in lshw_ram_data[1:]: assert "capacity" in ram assert type(ram["capacity"]) is int + def test_read_ram_units(self): + + assert "units" in lshw_ram_data[0] + assert type(lshw_ram_data[0]["units"]) is int + class HardwarecliTest(TestCase): From 8360fbf53acf6ed8c5aca7dbe3a38e5c1917d5a7 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 11 Mar 2024 17:40:10 +0100 Subject: [PATCH 053/227] feat: adding units for disks, cpus, ram --- boagent/hardware/lshw.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py index 8a7d687..23add27 100644 --- a/boagent/hardware/lshw.py +++ b/boagent/hardware/lshw.py @@ -39,11 +39,11 @@ def __init__(self): else: self.hw_info = json_data self.info = {} - self.memories = [] + self.memories = [{"units": 0}] # self.interfaces = [] - self.cpus = [] + self.cpus = [{"units": 0}] self.power = [] - self.disks = [] + self.disks = [{"units": 0}] self.gpus = [] # self.vendor = self.hw_info["vendor"] # self.product = self.hw_info["product"] @@ -131,6 +131,7 @@ def find_storage(self, obj): else: d["type"] = "unknown" self.disks.append(d) + self.disks[0]["units"] += 1 if "nvme" in obj["configuration"]["driver"]: if not is_tool("nvme"): logging.error("nvme-cli >= 1.0 does not seem to be installed") @@ -161,11 +162,11 @@ def find_cpus(self, obj): "name": obj["product"], "vendor": obj["vendor"], "core_units": obj["configuration"]["cores"], - "units": +1, # "description": obj["description"], # "location": obj["slot"], } ) + self.cpus[0]["units"] += 1 def find_memories(self, obj): if "children" not in obj: @@ -176,6 +177,8 @@ def find_memories(self, obj): if "empty" in dimm["description"]: continue + self.memories[0]["units"] += 1 + self.memories.append( { "manufacturer": dimm.get("vendor", "N/A"), From 6fecd491bb6f95345cac8af07398412610b23970 Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 12 Mar 2024 17:37:58 +0100 Subject: [PATCH 054/227] feat: check disk type with rotational --- boagent/hardware/lshw.py | 41 ++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py index 23add27..fb2c0a7 100644 --- a/boagent/hardware/lshw.py +++ b/boagent/hardware/lshw.py @@ -4,9 +4,12 @@ import json import sys import re +import os # Commented elements only available when runnning `lshw` as `sudo`. +SYS_BLOCK_PATH = "/sys/block" + def is_tool(name): """Check whether `name` is on PATH and marked as executable""" @@ -24,6 +27,23 @@ def check_disk_vendor(model_string: str) -> str: else: return model_first_str + +def get_disk_type(dev_path: str) -> str: + + device = dev_path.removeprefix("/dev") + + rotational_fp = os.path.realpath(f"{SYS_BLOCK_PATH}{device}/queue/rotational") + + with open(rotational_fp, "r") as file: + rotational = int(file.read()) + + if rotational == 0: + return "ssd" + if rotational == 1: + return "hdd" + return "unknown" + + class Lshw: def __init__(self): if not is_tool("lshw"): @@ -121,15 +141,9 @@ def find_storage(self, obj): d = { "manufacturer": check_disk_vendor(device["vendor"]).lower(), "capacity": device["size"], + "logicalname": device["logicalname"], + "type": get_disk_type(device["logicalname"]), } - if "type" in device == "SCSI Disk": - d["type"] = "hdd" - if "type" in device == "NVMe device": - d["type"] = "ssd" - if "type" in device == "Mass storage device": - d["type"] = "usb" - else: - d["type"] = "unknown" self.disks.append(d) self.disks[0]["units"] += 1 if "nvme" in obj["configuration"]["driver"]: @@ -144,13 +158,16 @@ def find_storage(self, obj): ) for device in nvme["Devices"]: d = { - "manufacturer": check_disk_vendor(device["ModelNumber"]).lower(), - "type": "ssd", + "logicalname": device["DevicePath"], + "manufacturer": check_disk_vendor( + device["ModelNumber"] + ).lower(), + "type": get_disk_type(device["DevicePath"]), } if "UsedSize" in device: - d["capacity"] = (device["UsedSize"] // 1073741824) + d["capacity"] = device["UsedSize"] // 1073741824 if "UsedBytes" in device: - d["capacity"] = (device["UsedBytes"] // 1073741824) + d["capacity"] = device["UsedBytes"] // 1073741824 self.disks.append(d) except Exception: pass From e3db639e996b49754808d0e8ba1a52f335c3d541 Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 12 Mar 2024 17:38:41 +0100 Subject: [PATCH 055/227] test: testing check disk type and reading disk logicalname --- boagent/tests/test_hardware.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/boagent/tests/test_hardware.py b/boagent/tests/test_hardware.py index be0dd45..293bf5a 100644 --- a/boagent/tests/test_hardware.py +++ b/boagent/tests/test_hardware.py @@ -1,8 +1,8 @@ from unittest import TestCase +from hardware.lshw import Lshw, get_disk_type -import hardware.lshw as lshw -hw = lshw.Lshw() +hw = Lshw() lshw_cpus_data = hw.cpus lshw_disks_data = hw.disks @@ -60,6 +60,24 @@ def test_read_disks_type(self): or disk["type"] == "unknown" ) + def test_read_disk_dev_name(self): + + for disk in lshw_disks_data[1:]: + assert "logicalname" in disk + assert type(disk["logicalname"]) is str + + def test_check_disk_type_is_ssd(self): + + dev_logicalname = "/dev/nvme0n1" + disk_type = get_disk_type(dev_logicalname) + assert disk_type == "ssd" + + def test_check_disk_type_is_hdd(self): + + dev_logicalname = "/dev/sda" + disk_type = get_disk_type(dev_logicalname) + assert disk_type == "hdd" + def test_read_disks_manufacturer(self): for disk in lshw_disks_data[1:]: From 742ffdc9b83b7678b418f5c2a916e0337764f444 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 13 Mar 2024 10:49:16 +0100 Subject: [PATCH 056/227] feat: separate function for get rotational int --- boagent/hardware/lshw.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py index fb2c0a7..7081209 100644 --- a/boagent/hardware/lshw.py +++ b/boagent/hardware/lshw.py @@ -28,19 +28,33 @@ def check_disk_vendor(model_string: str) -> str: return model_first_str -def get_disk_type(dev_path: str) -> str: +def get_rotational_int(dev_path: str) -> int: device = dev_path.removeprefix("/dev") - rotational_fp = os.path.realpath(f"{SYS_BLOCK_PATH}{device}/queue/rotational") + try: + rotational_fp = os.path.realpath(f"{SYS_BLOCK_PATH}{device}/queue/rotational", strict=True) + print(rotational_fp) + + except OSError: + print("Rotational file was not found") + return 2 + else: + with open(rotational_fp, "r") as file: + rotational_int = int(file.read()) + return rotational_int + + +def get_disk_type(dev_path: str) -> str: - with open(rotational_fp, "r") as file: - rotational = int(file.read()) + rotational = get_rotational_int(dev_path) if rotational == 0: return "ssd" if rotational == 1: return "hdd" + if rotational == 2: + return "unknown" return "unknown" From 48dcf9a97ca95c48fabc2dffc9c16092b35a2b39 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 13 Mar 2024 10:49:37 +0100 Subject: [PATCH 057/227] test: mock rotational for get disk type --- boagent/tests/test_hardware.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/boagent/tests/test_hardware.py b/boagent/tests/test_hardware.py index 293bf5a..da4962d 100644 --- a/boagent/tests/test_hardware.py +++ b/boagent/tests/test_hardware.py @@ -1,5 +1,6 @@ from unittest import TestCase from hardware.lshw import Lshw, get_disk_type +from unittest.mock import patch hw = Lshw() @@ -66,15 +67,21 @@ def test_read_disk_dev_name(self): assert "logicalname" in disk assert type(disk["logicalname"]) is str - def test_check_disk_type_is_ssd(self): + @patch("hardware.lshw.get_rotational_int") + def test_check_disk_type_is_ssd(self, mocked_get_rotational): + + dev_logicalname = "/dev/nvmeex" + mocked_get_rotational.return_value = 0 - dev_logicalname = "/dev/nvme0n1" disk_type = get_disk_type(dev_logicalname) assert disk_type == "ssd" - def test_check_disk_type_is_hdd(self): + @patch("hardware.lshw.get_rotational_int") + def test_check_disk_type_is_hdd(self, mocked_get_rotational): + + dev_logicalname = "/dev/sdaex" + mocked_get_rotational.return_value = 1 - dev_logicalname = "/dev/sda" disk_type = get_disk_type(dev_logicalname) assert disk_type == "hdd" From fd4cf48e406b974b0660001282b68651f9aedb7d Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 13 Mar 2024 11:43:19 +0100 Subject: [PATCH 058/227] test: test error handling for rotational_int and get_disk_type --- boagent/tests/test_hardware.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/boagent/tests/test_hardware.py b/boagent/tests/test_hardware.py index da4962d..284eef1 100644 --- a/boagent/tests/test_hardware.py +++ b/boagent/tests/test_hardware.py @@ -1,5 +1,5 @@ from unittest import TestCase -from hardware.lshw import Lshw, get_disk_type +from hardware.lshw import Lshw, get_disk_type, get_rotational_int from unittest.mock import patch @@ -85,6 +85,19 @@ def test_check_disk_type_is_hdd(self, mocked_get_rotational): disk_type = get_disk_type(dev_logicalname) assert disk_type == "hdd" + def test_int_for_get_rotational_int_when_file_not_found(self): + + dev_erroneous_name = "/dev/thisnameleadstonorotational" + rotational_int = get_rotational_int(dev_erroneous_name) + + self.assertEqual(rotational_int, 2) + + def test_read_disk_type_when_dev_path_not_found(self): + + dev_erroneous_name = "/dev/thisnamedoesntexist" + disk_type = get_disk_type(dev_erroneous_name) + assert disk_type == "unknown" + def test_read_disks_manufacturer(self): for disk in lshw_disks_data[1:]: From e275ca8c239e1ceca358ac8d2f405c127fb23856 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 13 Mar 2024 15:34:42 +0100 Subject: [PATCH 059/227] test: modified tests files and directories structure --- boagent/hardware/lshw/__init__.py | 1 + boagent/hardware/{ => lshw}/lshw.py | 1 + boagent/hardware/test_hardwarecli.py | 20 +++++++++++++++++++ .../tests/{test_hardware.py => test_lshw.py} | 12 +++-------- 4 files changed, 25 insertions(+), 9 deletions(-) create mode 100644 boagent/hardware/lshw/__init__.py rename boagent/hardware/{ => lshw}/lshw.py (99%) create mode 100644 boagent/hardware/test_hardwarecli.py rename boagent/tests/{test_hardware.py => test_lshw.py} (93%) diff --git a/boagent/hardware/lshw/__init__.py b/boagent/hardware/lshw/__init__.py new file mode 100644 index 0000000..c470d63 --- /dev/null +++ b/boagent/hardware/lshw/__init__.py @@ -0,0 +1 @@ +from .lshw import get_rotational_int, get_disk_type, Lshw diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw/lshw.py similarity index 99% rename from boagent/hardware/lshw.py rename to boagent/hardware/lshw/lshw.py index 7081209..44f40ad 100644 --- a/boagent/hardware/lshw.py +++ b/boagent/hardware/lshw/lshw.py @@ -183,6 +183,7 @@ def find_storage(self, obj): if "UsedBytes" in device: d["capacity"] = device["UsedBytes"] // 1073741824 self.disks.append(d) + self.disks[0]["units"] += 1 except Exception: pass diff --git a/boagent/hardware/test_hardwarecli.py b/boagent/hardware/test_hardwarecli.py new file mode 100644 index 0000000..63f22b8 --- /dev/null +++ b/boagent/hardware/test_hardwarecli.py @@ -0,0 +1,20 @@ +from unittest import TestCase +from hardware_cli import get_cpus, get_ram, get_disks + + +class HardwarecliTest(TestCase): + + def test_read_hardware_cli_cpus(self): + + cpus = get_cpus() + assert type(cpus) is list + + def test_read_hardware_cli_ram(self): + + ram = get_ram() + assert type(ram) is list + + def test_read_hardware_cli_disks(self): + + disks = get_disks() + assert type(disks) is list diff --git a/boagent/tests/test_hardware.py b/boagent/tests/test_lshw.py similarity index 93% rename from boagent/tests/test_hardware.py rename to boagent/tests/test_lshw.py index 284eef1..ed17d34 100644 --- a/boagent/tests/test_hardware.py +++ b/boagent/tests/test_lshw.py @@ -1,5 +1,5 @@ from unittest import TestCase -from hardware.lshw import Lshw, get_disk_type, get_rotational_int +from hardware.lshw.lshw import Lshw, get_disk_type, get_rotational_int from unittest.mock import patch @@ -67,7 +67,7 @@ def test_read_disk_dev_name(self): assert "logicalname" in disk assert type(disk["logicalname"]) is str - @patch("hardware.lshw.get_rotational_int") + @patch("hardware.lshw.lshw.get_rotational_int") def test_check_disk_type_is_ssd(self, mocked_get_rotational): dev_logicalname = "/dev/nvmeex" @@ -76,7 +76,7 @@ def test_check_disk_type_is_ssd(self, mocked_get_rotational): disk_type = get_disk_type(dev_logicalname) assert disk_type == "ssd" - @patch("hardware.lshw.get_rotational_int") + @patch("hardware.lshw.lshw.get_rotational_int") def test_check_disk_type_is_hdd(self, mocked_get_rotational): dev_logicalname = "/dev/sdaex" @@ -133,9 +133,3 @@ def test_read_ram_units(self): assert "units" in lshw_ram_data[0] assert type(lshw_ram_data[0]["units"]) is int - - -class HardwarecliTest(TestCase): - - def test_read_hardware_cli_cpus(self): - pass From ead597f6caa671c167ff34645de5b966e93e5226 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 13 Mar 2024 15:37:23 +0100 Subject: [PATCH 060/227] feat: WIP lshw class instance in hardware_cli to fetch hardware --- boagent/hardware/hardware_cli.py | 46 +++++++++++++++++++------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/boagent/hardware/hardware_cli.py b/boagent/hardware/hardware_cli.py index 5efef1d..c340cc6 100755 --- a/boagent/hardware/hardware_cli.py +++ b/boagent/hardware/hardware_cli.py @@ -3,18 +3,26 @@ import click import json import sys -from disk import search_physical_drives -from cpu import get_cpus -from ram import get_ram_info +from lshw import Lshw + +# from disk import search_physical_drives +# from cpu import get_cpus +# from ram import get_ram_info + +lshw = Lshw() + +lshw_cpus = lshw.cpus +lshw_ram = lshw.memories +lshw_disks = lshw.disks @click.command() @click.option("--output-file", help="File to output the hardwate data to") def main(output_file): res = {} - res["disks"] = format_disks(disks()) - res["cpus"] = format_cpus(get_cpus()) - res["rams"] = format_rams(rams()) + res["disks"] = get_disks() + res["cpus"] = get_cpus() + res["rams"] = get_ram() if output_file is not None: with open(output_file, "w") as fd: json.dump(res, fd, indent=4) @@ -23,7 +31,7 @@ def main(output_file): return 0 -def disks(): +""" def disks(): disks = search_physical_drives() for disk in disks: disk.lookup() @@ -36,23 +44,25 @@ def format_disks(disks): res.append( {"capacity": disk.size, "manufacturer": disk.vendor, "type": disk.type} ) - return res + return res """ -def format_cpus(cpus): - for cpu in cpus: - cpu["core_units"] = cpu["cpu_info"]["count"] - print("cpu[microarch][0][0] : {}".format(cpu["microarch"][0][0])) - cpu["family"] = cpu["microarch"][0][0].lower() + cpu["microarch"][0][1:] - return cpus +def get_disks(): + disks = lshw_disks + return disks + +def get_cpus(): + cpus = lshw_cpus + return cpus -def rams(): - rams = get_ram_info() + +def get_ram(): + rams = lshw_ram return rams -def format_rams(rams): +""" def format_rams(rams): res = [] for ram in rams: options = { @@ -62,7 +72,7 @@ def format_rams(rams): options["manufacturer"] = ram.manufacturer res.append(options) return res - + """ if __name__ == "__main__": main() From ece37c36ffef76c6d34902e6fed3d8eb96a12d10 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 13 Mar 2024 16:40:06 +0100 Subject: [PATCH 061/227] test: testing hardware cli main with click testing module --- boagent/hardware/test_hardwarecli.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/boagent/hardware/test_hardwarecli.py b/boagent/hardware/test_hardwarecli.py index 63f22b8..9d2226e 100644 --- a/boagent/hardware/test_hardwarecli.py +++ b/boagent/hardware/test_hardwarecli.py @@ -1,5 +1,7 @@ from unittest import TestCase -from hardware_cli import get_cpus, get_ram, get_disks +from os.path import exists +from hardware_cli import main, get_cpus, get_ram, get_disks +from click.testing import CliRunner class HardwarecliTest(TestCase): @@ -18,3 +20,25 @@ def test_read_hardware_cli_disks(self): disks = get_disks() assert type(disks) is list + + def test_write_hardware_json_file_from_hardware_cli_with_output_file_flag_on(self): + + runner = CliRunner() + with runner.isolated_filesystem(): + result_file_path = "hardware_data.json" + + result = runner.invoke(main, ["--output-file", f"./{result_file_path}"]) + assert exists(f"./{result_file_path}") is True + + assert result.exit_code == 0 + + def test_read_stdout_from_hardware_cli(self): + + runner = CliRunner() + + result = runner.invoke(main) + + assert result.exit_code == 0 + assert result.output.count("disks") >= 1 + assert result.output.count("rams") >= 1 + assert result.output.count("cpu") >= 1 From 56552fed32ec37c5c7e8cd01a7ea65711a9c75ae Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 13 Mar 2024 17:15:56 +0100 Subject: [PATCH 062/227] test: test_api_integration in same folder as api, WIP modifying API code --- boagent/api/api.py | 11 +- boagent/api/test_api_integration.py | 186 ++++++++++++++++++++++++++++ 2 files changed, 192 insertions(+), 5 deletions(-) create mode 100644 boagent/api/test_api_integration.py diff --git a/boagent/api/api.py b/boagent/api/api.py index a2d57f1..ac1fc8b 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -62,7 +62,7 @@ def configure_app(): app = configure_app() items = {} -setup_database() +# setup_database() @app.get("/info", tags=["info"]) @@ -384,7 +384,7 @@ def get_metrics(start_time: float, end_time: float, verbose: bool, location: str boaviztapi_data = query_machine_impact_data( model={}, - configuration=generate_machine_configuration(hardware_data), + configuration=hardware_data, usage=format_usage_request(start_time, end_time, host_avg_consumption, location) ) @@ -537,6 +537,7 @@ def compute_average_consumption(power_data): def get_hardware_data(fetch_hardware: bool): + print(fetch_hardware) data = {} if fetch_hardware: build_hardware_data() @@ -555,7 +556,7 @@ def read_hardware_data() -> Dict: def build_hardware_data(): - p = run([HARDWARE_CLI, "--output-file", HARDWARE_FILE_PATH]) + run([HARDWARE_CLI, "--output-file", HARDWARE_FILE_PATH]) def query_machine_impact_data(model: dict[str, str], @@ -579,8 +580,8 @@ def generate_machine_configuration(hardware_data) -> Dict[str, Any]: config = { "cpu": { "units": len(hardware_data["cpus"]), - "core_units": hardware_data['cpus'][0]["core_units"], - "family": hardware_data['cpus'][0]['family'] + "core_units": hardware_data['cpus'][1]["core_units"], + # "family": hardware_data['cpus'][1]['family'] }, "ram": sort_ram(hardware_data["rams"]), "disk": sort_disks(hardware_data["disks"]), diff --git a/boagent/api/test_api_integration.py b/boagent/api/test_api_integration.py new file mode 100644 index 0000000..97a85d7 --- /dev/null +++ b/boagent/api/test_api_integration.py @@ -0,0 +1,186 @@ +from datetime import datetime, timedelta +from fastapi.testclient import TestClient +from unittest import TestCase +from pytest import mark +from config import Settings + +# Mocks for testing environment +settings = Settings( + hardware_file_path="./tests/mocks/hardware_data.json", + db_path="./tests/mocks/boagent.db", + power_file_path="./tests/mocks/power_data.json", +) + +from api import app # noqa + +NOW_ISO8601 = datetime.now().isoformat() +NOW_ISO8601_MINUS_ONE_MINUTE = datetime.fromisoformat(NOW_ISO8601) - timedelta( + minutes=1 +) + +client = TestClient(app) + + +class ApiEndpointsTest(TestCase): + + def test_read_info(self): + response = client.get("/info") + assert response.status_code == 200 + + def test_read_web(self): + response = client.get("/web") + assert response.status_code == 200 + + def test_read_metrics(self): + + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "false", + "location": "FRA", + "measure_power": "false", + "lifetime": 5, + "fetch_hardware": "false", + } + + response = client.get("/metrics", params=params) + assert response.status_code == 200 + + @mark.query + def test_read_query_without_measure_power_and_fetch_hardware(self): + + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "false", + "location": "FRA", + "measure_power": "false", + "lifetime": 5, + "fetch_hardware": "false", + } + + response = client.get("/query", params=params) + assert response.status_code == 200 + + @mark.query + def test_read_query_with_measure_power(self): + + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "false", + "location": "FRA", + "measure_power": "true", + "lifetime": 5, + "fetch_hardware": "false", + } + + response = client.get("/query", params=params) + assert response.status_code == 200 + + @mark.query + def test_read_query_with_fetch_hardware(self): + + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "false", + "location": "FRA", + "measure_power": "false", + "lifetime": 5, + "fetch_hardware": "true", + } + + response = client.get("query", params=params) + assert response.status_code == 200 + + @mark.query + def test_read_query_with_measure_power_and_fetch_hardware(self): + + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "false", + "location": "FRA", + "measure_power": "true", + "lifetime": 5, + "fetch_hardware": "true", + } + + response = client.get("/query", params=params) + assert response.status_code == 200 + + @mark.query + def test_read_query_with_measure_power_and_fetch_hardware_verbose(self): + + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "true", + "location": "FRA", + "measure_power": "true", + "lifetime": 5, + "fetch_hardware": "true", + } + + response = client.get("/query", params=params) + assert response.status_code == 200 + + def test_read_yearly_embedded(self): + response = client.get("/yearly_embedded") + assert response.status_code == 200 + + def test_read_last_info(self): + response = client.get("/last_info") + assert response.status_code == 200 + + def test_read_max_info(self): + response = client.get("/max_info") + assert response.status_code == 200 + + def test_read_yearly_operational(self): + """ROUTE NOT IMPLEMENTED YET""" + response = client.get("/yearly_operational") + assert response.status_code == 501 + + @mark.database + def test_read_last_data(self): + """ROUTE NOT IMPLEMENTED YET""" + + params = {"table_name": "cpu"} + response = client.get("/last_data", params=params) + assert response.status_code == 501 + + @mark.database + def test_read_update(self): + """ROUTE NOT IMPLEMENTED YET""" + response = client.get("/update") + assert response.status_code == 501 + + @mark.database + def test_read_carbon_intensity_forecast(self): + """ROUTE NOT IMPLEMENTED YET""" + params = {"since": "now", "until": "24h"} + response = client.get("/carbon_intensity_forecast", params=params) + assert response.status_code == 501 + + @mark.database + def test_read_carbon_intensity(self): + """ROUTE NOT IMPLEMENTED YET""" + params = {"since": "now", "until": "24h"} + response = client.get("/carbon_intensity", params=params) + assert response.status_code == 501 + + @mark.database + def test_impact(self): + """ROUTE NOT IMPLEMENTED YET""" + response = client.get("/impact") + assert response.status_code == 501 + + @mark.database + def test_read_csv(self): + """ROUTE NOT IMPLEMENTED YET""" + params = {"data": "power"} + + response = client.get("/csv", params=params) + assert response.status_code == 501 From ce7abac89e57d71791ee2973cff50128ddcd9858 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 13 Mar 2024 17:45:44 +0100 Subject: [PATCH 063/227] test: adding file for api functions tests --- boagent/api/test_api_unit.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 boagent/api/test_api_unit.py diff --git a/boagent/api/test_api_unit.py b/boagent/api/test_api_unit.py new file mode 100644 index 0000000..2c8da42 --- /dev/null +++ b/boagent/api/test_api_unit.py @@ -0,0 +1,12 @@ +from unittest import TestCase + +from api import build_hardware_data +import os + + +class ApiUnitTest(TestCase): + + def test_read_build_hardware_data(self): + + build_hardware_data() + assert os.path.exists("./hardware_data.json") is True From 5fcfa8dd8c04e91e8138b3454bd1bf3f4a9d4476 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 14 Mar 2024 18:20:22 +0100 Subject: [PATCH 064/227] test: correct format for read_hardware_data --- boagent/api/api.py | 1 - boagent/api/config.py | 2 +- boagent/api/test_api_unit.py | 11 +++++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index ac1fc8b..b5f2730 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -537,7 +537,6 @@ def compute_average_consumption(power_data): def get_hardware_data(fetch_hardware: bool): - print(fetch_hardware) data = {} if fetch_hardware: build_hardware_data() diff --git a/boagent/api/config.py b/boagent/api/config.py index 2d367a7..65ca482 100644 --- a/boagent/api/config.py +++ b/boagent/api/config.py @@ -17,7 +17,7 @@ class Settings(BaseSettings): default_lifetime: float = os.getenv("DEFAULT_LIFETIME", 5.0) hardware_file_path: str = os.getenv("HARDWARE_FILE_PATH", "./hardware_data.json") power_file_path: str = os.getenv("POWER_FILE_PATH", "./power_data.json") - hardware_cli: str = os.getenv("HARDWARE_CLI", "../hardware/harware_cli.py") + hardware_cli: str = os.getenv("HARDWARE_CLI", "../hardware/hardware_cli.py") boaviztapi_endpoint: str = os.getenv("BOAVIZTAPI_ENDPOINT", "http://localhost:5000") db_path: str = os.getenv("BOAGENT_DB_PATH", "../../db/boagent.db") public_path: str = os.getenv("BOAGENT_PUBLIC_PATH", "../public") diff --git a/boagent/api/test_api_unit.py b/boagent/api/test_api_unit.py index 2c8da42..44fe88c 100644 --- a/boagent/api/test_api_unit.py +++ b/boagent/api/test_api_unit.py @@ -1,6 +1,5 @@ from unittest import TestCase - -from api import build_hardware_data +from .api import build_hardware_data, read_hardware_data import os @@ -10,3 +9,11 @@ def test_read_build_hardware_data(self): build_hardware_data() assert os.path.exists("./hardware_data.json") is True + + def test_read_read_hardware_data(self): + + data = read_hardware_data() + assert type(data) is dict + assert type(data["cpu"]) is list + assert type(data["ram"]) is list + assert type(data["disk"]) is list From 62fd76b6f71d3771e48c8124f89b7eabaecf3074 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 14 Mar 2024 18:24:14 +0100 Subject: [PATCH 065/227] fix: singular for components format --- boagent/hardware/hardware_cli.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/boagent/hardware/hardware_cli.py b/boagent/hardware/hardware_cli.py index c340cc6..d501486 100755 --- a/boagent/hardware/hardware_cli.py +++ b/boagent/hardware/hardware_cli.py @@ -20,9 +20,9 @@ @click.option("--output-file", help="File to output the hardwate data to") def main(output_file): res = {} - res["disks"] = get_disks() - res["cpus"] = get_cpus() - res["rams"] = get_ram() + res["disk"] = get_disks() + res["cpu"] = get_cpus() + res["ram"] = get_ram() if output_file is not None: with open(output_file, "w") as fd: json.dump(res, fd, indent=4) From 680fa59f604998e0ea17df7827efc62d484f0ed2 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 14 Mar 2024 18:25:46 +0100 Subject: [PATCH 066/227] fix: modified logic for check_vendor, format for component units, exception for nvme-cli not installed --- boagent/hardware/lshw/lshw.py | 40 ++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/boagent/hardware/lshw/lshw.py b/boagent/hardware/lshw/lshw.py index 44f40ad..ef74078 100644 --- a/boagent/hardware/lshw/lshw.py +++ b/boagent/hardware/lshw/lshw.py @@ -18,11 +18,20 @@ def is_tool(name): def check_disk_vendor(model_string: str) -> str: split_model = model_string.split(" ") + + if len(split_model) == 1: + check_string_for_numbers = bool(re.search("\\d", model_string)) + if check_string_for_numbers: + raise Exception( + "Lshw did not output an acceptable manufacturer name for this device." + ) + else: + return model_string + model_first_str = split_model[0] model_second_str = split_model[1] - check_first_string_for_numbers = re.search("\\d", model_first_str) - result = bool(check_first_string_for_numbers) - if result: + check_first_string_for_numbers = bool(re.search("\\d", model_first_str)) + if check_first_string_for_numbers: return model_second_str else: return model_first_str @@ -33,8 +42,9 @@ def get_rotational_int(dev_path: str) -> int: device = dev_path.removeprefix("/dev") try: - rotational_fp = os.path.realpath(f"{SYS_BLOCK_PATH}{device}/queue/rotational", strict=True) - print(rotational_fp) + rotational_fp = os.path.realpath( + f"{SYS_BLOCK_PATH}{device}/queue/rotational", strict=True + ) except OSError: print("Rotational file was not found") @@ -73,11 +83,11 @@ def __init__(self): else: self.hw_info = json_data self.info = {} - self.memories = [{"units": 0}] + self.memories = [] # self.interfaces = [] - self.cpus = [{"units": 0}] + self.cpus = [] self.power = [] - self.disks = [{"units": 0}] + self.disks = [] self.gpus = [] # self.vendor = self.hw_info["vendor"] # self.product = self.hw_info["product"] @@ -151,10 +161,11 @@ def find_network(self, obj): def find_storage(self, obj): if "children" in obj: for device in obj["children"]: - if "vendor" in device: + if "vendor" in device and "size" in device: d = { + "units": +1, "manufacturer": check_disk_vendor(device["vendor"]).lower(), - "capacity": device["size"], + "capacity": device["size"] // 1073741824, "logicalname": device["logicalname"], "type": get_disk_type(device["logicalname"]), } @@ -163,7 +174,7 @@ def find_storage(self, obj): if "nvme" in obj["configuration"]["driver"]: if not is_tool("nvme"): logging.error("nvme-cli >= 1.0 does not seem to be installed") - return + raise Exception("nvme-cli >= 1.0 does not seem to be installed") try: nvme = json.loads( subprocess.check_output( @@ -172,6 +183,7 @@ def find_storage(self, obj): ) for device in nvme["Devices"]: d = { + "units": +1, "logicalname": device["DevicePath"], "manufacturer": check_disk_vendor( device["ModelNumber"] @@ -183,7 +195,6 @@ def find_storage(self, obj): if "UsedBytes" in device: d["capacity"] = device["UsedBytes"] // 1073741824 self.disks.append(d) - self.disks[0]["units"] += 1 except Exception: pass @@ -191,6 +202,7 @@ def find_cpus(self, obj): if "product" in obj: self.cpus.append( { + "units": +1, "name": obj["product"], "vendor": obj["vendor"], "core_units": obj["configuration"]["cores"], @@ -198,7 +210,6 @@ def find_cpus(self, obj): # "location": obj["slot"], } ) - self.cpus[0]["units"] += 1 def find_memories(self, obj): if "children" not in obj: @@ -209,10 +220,9 @@ def find_memories(self, obj): if "empty" in dimm["description"]: continue - self.memories[0]["units"] += 1 - self.memories.append( { + "units": +1, "manufacturer": dimm.get("vendor", "N/A"), "capacity": dimm.get("size", 0) // 2**20 // 1024, } From 9125136a8b627f5e202131e9b57c83e6c0655c69 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 14 Mar 2024 18:27:13 +0100 Subject: [PATCH 067/227] test: check_vendor, nvme-cli not installed exception, component units format --- boagent/hardware/test_hardwarecli.py | 4 +- boagent/tests/test_lshw.py | 83 +++++++++++++++++++++++----- 2 files changed, 70 insertions(+), 17 deletions(-) diff --git a/boagent/hardware/test_hardwarecli.py b/boagent/hardware/test_hardwarecli.py index 9d2226e..fa191ec 100644 --- a/boagent/hardware/test_hardwarecli.py +++ b/boagent/hardware/test_hardwarecli.py @@ -39,6 +39,6 @@ def test_read_stdout_from_hardware_cli(self): result = runner.invoke(main) assert result.exit_code == 0 - assert result.output.count("disks") >= 1 - assert result.output.count("rams") >= 1 + assert result.output.count("disk") >= 1 + assert result.output.count("ram") >= 1 assert result.output.count("cpu") >= 1 diff --git a/boagent/tests/test_lshw.py b/boagent/tests/test_lshw.py index ed17d34..8d5d7c6 100644 --- a/boagent/tests/test_lshw.py +++ b/boagent/tests/test_lshw.py @@ -1,7 +1,16 @@ from unittest import TestCase -from hardware.lshw.lshw import Lshw, get_disk_type, get_rotational_int +from hardware.lshw.lshw import ( + Lshw, + get_disk_type, + get_rotational_int, + check_disk_vendor, +) from unittest.mock import patch +from json import load +from os import path +current_dir = path.dirname(__file__) +mock_lshw_data = path.join(f"{current_dir}", "./mocks/sudo_lshw_data") hw = Lshw() @@ -28,30 +37,65 @@ def test_read_get_hw_linux_memory(self): def test_read_cpus_vendor(self): - for cpu in lshw_cpus_data[1:]: + for cpu in lshw_cpus_data: assert "vendor" in cpu assert type(cpu["vendor"]) is str def test_read_cpus_name(self): - for cpu in lshw_cpus_data[1:]: + for cpu in lshw_cpus_data: assert "name" in cpu assert type(cpu["name"]) is str def test_read_cpus_core_units(self): - for cpu in lshw_cpus_data[1:]: + for cpu in lshw_cpus_data: assert "core_units" in cpu assert type(cpu["core_units"]) is str def test_read_cpus_units(self): - assert "units" in lshw_cpus_data[0] - assert type(lshw_cpus_data[0]["units"]) is int + for cpu in lshw_cpus_data: + assert "units" in cpu + assert type(cpu["units"]) is int + + def test_read_check_disk_vendor_with_correct_model(self): + + model = "LENOVO 123456154" + result = check_disk_vendor(model) + + assert result == "LENOVO" + + def test_read_check_disk_vendor_with_incorrect_model(self): + + model = "12345121 LENOVO" + result = check_disk_vendor(model) + + assert result == "LENOVO" + + def test_read_check_disk_vendor_with_one_correct_string_in_model(self): + + model = "LENOVO" + result = check_disk_vendor(model) + + assert result == "LENOVO" + + def test_read_check_disk_vendor_with_one_incorrect_string_in_model(self): + + model = "12345211" + with self.assertRaises(Exception): + check_disk_vendor(model) + + def test_read_check_disk_vendor_with_multiple_strings_in_model(self): + + model = "LENOVO 123456 MODEL" + result = check_disk_vendor(model) + + assert result == "LENOVO" def test_read_disks_type(self): - for disk in lshw_disks_data[1:]: + for disk in lshw_disks_data: assert "type" in disk assert type(disk["type"]) is str assert ( @@ -63,7 +107,7 @@ def test_read_disks_type(self): def test_read_disk_dev_name(self): - for disk in lshw_disks_data[1:]: + for disk in lshw_disks_data: assert "logicalname" in disk assert type(disk["logicalname"]) is str @@ -98,33 +142,42 @@ def test_read_disk_type_when_dev_path_not_found(self): disk_type = get_disk_type(dev_erroneous_name) assert disk_type == "unknown" + @patch("hardware.lshw.lshw.is_tool") + def test_check_nvme_cli_is_installed_to_find_storage_and_raises_error_if_not( + self, mocked_is_tool + ): + + with open(f"{mock_lshw_data}_disks.json", "r") as file: + mocked_is_tool.return_value = False + data = load(file) + self.assertRaises(Exception, hw.find_storage(data)) + def test_read_disks_manufacturer(self): - for disk in lshw_disks_data[1:]: + for disk in lshw_disks_data: assert "manufacturer" in disk assert type(disk["manufacturer"]) is str def test_read_disks_capacity(self): - for disk in lshw_disks_data[1:]: + for disk in lshw_disks_data: assert "capacity" in disk assert type(disk["capacity"]) is int def test_read_disks_units(self): - assert "units" in lshw_disks_data[0] - assert type(lshw_disks_data[0]["units"]) is int + for disk in lshw_disks_data: + assert "units" in disk + assert type(disk["units"]) is int def test_read_ram_manufacturer(self): - for ram in lshw_ram_data[1:]: + for ram in lshw_ram_data: assert "manufacturer" in ram assert type(ram["manufacturer"]) is str def test_read_ram_capacity(self): - print(lshw_ram_data) - for ram in lshw_ram_data[1:]: assert "capacity" in ram assert type(ram["capacity"]) is int From d31169bfce0803ba7617cd1d7671a79df411d75c Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 18 Mar 2024 10:15:35 +0100 Subject: [PATCH 068/227] refactor: get_rotational_int, check_disk_vendor and check_disk_type as Lshw class methods --- boagent/hardware/lshw/__init__.py | 2 +- boagent/hardware/lshw/lshw.py | 111 ++++++++++++++---------------- boagent/tests/test_lshw.py | 31 ++++----- 3 files changed, 67 insertions(+), 77 deletions(-) diff --git a/boagent/hardware/lshw/__init__.py b/boagent/hardware/lshw/__init__.py index c470d63..1512487 100644 --- a/boagent/hardware/lshw/__init__.py +++ b/boagent/hardware/lshw/__init__.py @@ -1 +1 @@ -from .lshw import get_rotational_int, get_disk_type, Lshw +from .lshw import Lshw diff --git a/boagent/hardware/lshw/lshw.py b/boagent/hardware/lshw/lshw.py index ef74078..541d334 100644 --- a/boagent/hardware/lshw/lshw.py +++ b/boagent/hardware/lshw/lshw.py @@ -16,58 +16,6 @@ def is_tool(name): return which(name) is not None -def check_disk_vendor(model_string: str) -> str: - split_model = model_string.split(" ") - - if len(split_model) == 1: - check_string_for_numbers = bool(re.search("\\d", model_string)) - if check_string_for_numbers: - raise Exception( - "Lshw did not output an acceptable manufacturer name for this device." - ) - else: - return model_string - - model_first_str = split_model[0] - model_second_str = split_model[1] - check_first_string_for_numbers = bool(re.search("\\d", model_first_str)) - if check_first_string_for_numbers: - return model_second_str - else: - return model_first_str - - -def get_rotational_int(dev_path: str) -> int: - - device = dev_path.removeprefix("/dev") - - try: - rotational_fp = os.path.realpath( - f"{SYS_BLOCK_PATH}{device}/queue/rotational", strict=True - ) - - except OSError: - print("Rotational file was not found") - return 2 - else: - with open(rotational_fp, "r") as file: - rotational_int = int(file.read()) - return rotational_int - - -def get_disk_type(dev_path: str) -> str: - - rotational = get_rotational_int(dev_path) - - if rotational == 0: - return "ssd" - if rotational == 1: - return "hdd" - if rotational == 2: - return "unknown" - return "unknown" - - class Lshw: def __init__(self): if not is_tool("lshw"): @@ -164,13 +112,14 @@ def find_storage(self, obj): if "vendor" in device and "size" in device: d = { "units": +1, - "manufacturer": check_disk_vendor(device["vendor"]).lower(), - "capacity": device["size"] // 1073741824, + "manufacturer": self.check_disk_vendor( + device["vendor"] + ).lower(), + "capacity": device["size"], "logicalname": device["logicalname"], - "type": get_disk_type(device["logicalname"]), + "type": self.get_disk_type(device["logicalname"]), } self.disks.append(d) - self.disks[0]["units"] += 1 if "nvme" in obj["configuration"]["driver"]: if not is_tool("nvme"): logging.error("nvme-cli >= 1.0 does not seem to be installed") @@ -185,10 +134,10 @@ def find_storage(self, obj): d = { "units": +1, "logicalname": device["DevicePath"], - "manufacturer": check_disk_vendor( + "manufacturer": self.check_disk_vendor( device["ModelNumber"] ).lower(), - "type": get_disk_type(device["DevicePath"]), + "type": "ssd", } if "UsedSize" in device: d["capacity"] = device["UsedSize"] // 1073741824 @@ -257,6 +206,52 @@ def walk_bridge(self, obj): if b["class"] == "display": self.find_gpus(b) + def check_disk_vendor(self, model_string: str) -> str: + split_model = model_string.split(" ") + vendor = "" + + model_first_str = split_model[0] + model_second_str = split_model[1] + check_first_string_for_numbers = re.search("\\d", model_first_str) + result = bool(check_first_string_for_numbers) + + if result: + vendor = model_second_str + return vendor + else: + vendor = model_first_str + return vendor + + def get_disk_type(self, dev_path: str) -> str: + + rotational = self.get_rotational_int(dev_path) + + if rotational == 0: + return "ssd" + if rotational == 1: + return "hdd" + if rotational == 2: + return "unknown" + return "unknown" + + def get_rotational_int(self, dev_path: str) -> int: + + device = dev_path.removeprefix("/dev") + + try: + rotational_fp = os.path.realpath( + f"{SYS_BLOCK_PATH}{device}/queue/rotational", strict=True + ) + print(rotational_fp) + + except OSError: + print("Rotational file was not found") + return 2 + else: + with open(rotational_fp, "r") as file: + rotational_int = int(file.read()) + return rotational_int + """ if __name__ == "__main__": diff --git a/boagent/tests/test_lshw.py b/boagent/tests/test_lshw.py index 8d5d7c6..795f986 100644 --- a/boagent/tests/test_lshw.py +++ b/boagent/tests/test_lshw.py @@ -1,10 +1,5 @@ from unittest import TestCase -from hardware.lshw.lshw import ( - Lshw, - get_disk_type, - get_rotational_int, - check_disk_vendor, -) +from hardware.lshw.lshw import Lshw from unittest.mock import patch from json import load from os import path @@ -62,21 +57,21 @@ def test_read_cpus_units(self): def test_read_check_disk_vendor_with_correct_model(self): model = "LENOVO 123456154" - result = check_disk_vendor(model) + result = hw.check_disk_vendor(model) assert result == "LENOVO" def test_read_check_disk_vendor_with_incorrect_model(self): model = "12345121 LENOVO" - result = check_disk_vendor(model) + result = hw.check_disk_vendor(model) assert result == "LENOVO" def test_read_check_disk_vendor_with_one_correct_string_in_model(self): model = "LENOVO" - result = check_disk_vendor(model) + result = hw.check_disk_vendor(model) assert result == "LENOVO" @@ -84,12 +79,12 @@ def test_read_check_disk_vendor_with_one_incorrect_string_in_model(self): model = "12345211" with self.assertRaises(Exception): - check_disk_vendor(model) + hw.check_disk_vendor(model) def test_read_check_disk_vendor_with_multiple_strings_in_model(self): model = "LENOVO 123456 MODEL" - result = check_disk_vendor(model) + result = hw.check_disk_vendor(model) assert result == "LENOVO" @@ -111,35 +106,35 @@ def test_read_disk_dev_name(self): assert "logicalname" in disk assert type(disk["logicalname"]) is str - @patch("hardware.lshw.lshw.get_rotational_int") + @patch("hardware.lshw.Lshw.get_rotational_int") def test_check_disk_type_is_ssd(self, mocked_get_rotational): - dev_logicalname = "/dev/nvmeex" + dev_logicalname = "/dev/ssdonsata" mocked_get_rotational.return_value = 0 - disk_type = get_disk_type(dev_logicalname) + disk_type = hw.get_disk_type(dev_logicalname) assert disk_type == "ssd" - @patch("hardware.lshw.lshw.get_rotational_int") + @patch("hardware.lshw.Lshw.get_rotational_int") def test_check_disk_type_is_hdd(self, mocked_get_rotational): dev_logicalname = "/dev/sdaex" mocked_get_rotational.return_value = 1 - disk_type = get_disk_type(dev_logicalname) + disk_type = hw.get_disk_type(dev_logicalname) assert disk_type == "hdd" def test_int_for_get_rotational_int_when_file_not_found(self): dev_erroneous_name = "/dev/thisnameleadstonorotational" - rotational_int = get_rotational_int(dev_erroneous_name) + rotational_int = hw.get_rotational_int(dev_erroneous_name) self.assertEqual(rotational_int, 2) def test_read_disk_type_when_dev_path_not_found(self): dev_erroneous_name = "/dev/thisnamedoesntexist" - disk_type = get_disk_type(dev_erroneous_name) + disk_type = hw.get_disk_type(dev_erroneous_name) assert disk_type == "unknown" @patch("hardware.lshw.lshw.is_tool") From dee59dc244a1f5e1a190beb173e1d9a5c8c60f65 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 18 Mar 2024 10:21:39 +0100 Subject: [PATCH 069/227] config: pytest config for module importation --- pytest.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/pytest.ini b/pytest.ini index b74a453..2d336c0 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,4 +1,5 @@ [pytest] +addopts = --import-mode=importlib testpaths = tests markers = From ecff1499908dd2d27c0ed4093706a3ed98975f3e Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 18 Mar 2024 12:22:39 +0100 Subject: [PATCH 070/227] test: get_hardware data with different booleans for fetch_hardware --- boagent/api/__init__.py | 1 + boagent/api/api.py | 2 +- boagent/api/test_api_unit.py | 27 ++++++++++++++++++++++++++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/boagent/api/__init__.py b/boagent/api/__init__.py index e69de29..878d2c3 100644 --- a/boagent/api/__init__.py +++ b/boagent/api/__init__.py @@ -0,0 +1 @@ +from .api import build_hardware_data, read_hardware_data, get_hardware_data diff --git a/boagent/api/api.py b/boagent/api/api.py index b5f2730..11abf49 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -542,7 +542,7 @@ def get_hardware_data(fetch_hardware: bool): build_hardware_data() try: data = read_hardware_data() - except Exception as e: + except Exception: build_hardware_data() data = read_hardware_data() return data diff --git a/boagent/api/test_api_unit.py b/boagent/api/test_api_unit.py index 44fe88c..3e9284d 100644 --- a/boagent/api/test_api_unit.py +++ b/boagent/api/test_api_unit.py @@ -1,5 +1,7 @@ from unittest import TestCase -from .api import build_hardware_data, read_hardware_data +from unittest.mock import patch + +from api import build_hardware_data, read_hardware_data, get_hardware_data import os @@ -12,8 +14,31 @@ def test_read_build_hardware_data(self): def test_read_read_hardware_data(self): + build_hardware_data() data = read_hardware_data() assert type(data) is dict + assert type(data) is dict assert type(data["cpu"]) is list assert type(data["ram"]) is list assert type(data["disk"]) is list + + @patch("api.build_hardware_data") + def test_read_get_hardware_data_with_fetch_hardware_false( + self, mocked_build_hardware + ): + + # Test case where hardware_data.json is already present on the + # filesystem through previous call to build_hardware_data + + build_hardware_data() + data = get_hardware_data(fetch_hardware=False) + assert type(data) is dict + mocked_build_hardware.assert_not_called() + + def test_tead_get_hardware_data_with_fetch_hardware_true(self): + + data = get_hardware_data(fetch_hardware=True) + assert type(data) is dict + + def tearDown(self) -> None: + os.remove("./hardware_data.json") From 5d020792a927ac77218d7419bce8c825e525c75a Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 18 Mar 2024 12:23:39 +0100 Subject: [PATCH 071/227] refactor: changed output name from main to hardware_data --- boagent/hardware/hardware_cli.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/boagent/hardware/hardware_cli.py b/boagent/hardware/hardware_cli.py index d501486..acd350f 100755 --- a/boagent/hardware/hardware_cli.py +++ b/boagent/hardware/hardware_cli.py @@ -19,15 +19,15 @@ @click.command() @click.option("--output-file", help="File to output the hardwate data to") def main(output_file): - res = {} - res["disk"] = get_disks() - res["cpu"] = get_cpus() - res["ram"] = get_ram() + hardware_data = {} + hardware_data["disks"] = get_disks() + hardware_data["cpus"] = get_cpus() + hardware_data["rams"] = get_ram() if output_file is not None: with open(output_file, "w") as fd: - json.dump(res, fd, indent=4) + json.dump(hardware_data, fd, indent=4) else: - json.dump(res, sys.stdout, indent=4) + json.dump(hardware_data, sys.stdout, indent=4) return 0 @@ -39,12 +39,12 @@ def main(output_file): def format_disks(disks): - res = [] + hardware_data = [] for disk in disks: - res.append( + hardware_data.append( {"capacity": disk.size, "manufacturer": disk.vendor, "type": disk.type} ) - return res """ + return hardware_data """ def get_disks(): @@ -63,15 +63,15 @@ def get_ram(): """ def format_rams(rams): - res = [] + hardware_data = [] for ram in rams: options = { "capacity": ram.size_gb, } if ram.manufacturer is not None and len(ram.manufacturer) > 0: options["manufacturer"] = ram.manufacturer - res.append(options) - return res + hardware_data.append(options) + return hardware_data """ if __name__ == "__main__": From 24ff90722a4b9b1469aef4df540116ca9f096ed3 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 18 Mar 2024 15:32:44 +0100 Subject: [PATCH 072/227] config: install pre-commit for formatting and linting --- .gitignore | 2 + .pre-commit-config.yaml | 16 + boagent/__init__.py | 4 +- boagent/api/Query.yaml | 2 +- boagent/api/api.py | 547 +++++++++++++++----------- boagent/api/config.py | 23 +- boagent/api/database.py | 95 +++-- boagent/api/log.txt | 1 - boagent/api/test_api_integration.py | 3 +- boagent/api/test_api_unit.py | 1 - boagent/api/utils.py | 60 ++- boagent/hardware/AWS/README.md | 2 - boagent/hardware/cpu.py | 16 +- boagent/hardware/disk/README.md | 2 +- boagent/hardware/disk/disk.py | 88 +++-- boagent/hardware/ram/dmidecode.py | 38 +- boagent/hardware/ram/meminfo.py | 8 +- boagent/hardware/ram/model.py | 2 +- boagent/hardware/test_hardwarecli.py | 1 - boagent/public/assets/dygraph.min.js | 2 +- boagent/public/assets/synchronizer.js | 2 +- boagent/public/index.html | 3 +- boagent/requirements.txt | 1 + boagent/tests/test_api.py | 3 +- docker-compose.yaml | 8 +- setup.py | 58 ++- setup/docker-compose.yaml | 8 +- 27 files changed, 603 insertions(+), 393 deletions(-) create mode 100644 .pre-commit-config.yaml delete mode 100644 boagent/api/log.txt diff --git a/.gitignore b/.gitignore index e742a97..b6924cc 100644 --- a/.gitignore +++ b/.gitignore @@ -139,3 +139,5 @@ dmypy.json *.json *.db +*.svg +*.csv diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..6e5b662 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,16 @@ +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v2.3.0 + hooks: + - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace +- repo: https://github.com/psf/black + rev: 22.10.0 + hooks: + - id: black +- repo: https://github.com/PyCQA/flake8 + rev: 7.0.0 + hooks: + - id: flake8 + entry: flake8 --ignore=E501,W503 --per-file-ignores='__init__.py:F401' diff --git a/boagent/__init__.py b/boagent/__init__.py index 214973d..3726ce5 100644 --- a/boagent/__init__.py +++ b/boagent/__init__.py @@ -5,5 +5,5 @@ """ __version__ = "0.0.8" -__author__ = 'Benoit Petit ' -__credits__ = 'Boavizta contributors' +__author__ = "Benoit Petit " +__credits__ = "Boavizta contributors" diff --git a/boagent/api/Query.yaml b/boagent/api/Query.yaml index cc5d015..5ea39eb 100644 --- a/boagent/api/Query.yaml +++ b/boagent/api/Query.yaml @@ -4,7 +4,7 @@ info: version: 1.0.0 summary: >- The query API allows you to determine the environmental footprint for - different types of scenarios (time-baed or machine-based). + different types of scenarios (time-baed or machine-based). description: >- Use this API to get the environmental footprint for your any operation happening on the server. diff --git a/boagent/api/api.py b/boagent/api/api.py index 11abf49..c143e3f 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -15,12 +15,22 @@ from fastapi.responses import HTMLResponse from boaviztapi_sdk.api.server_api import ServerApi from boaviztapi_sdk.model.server_dto import ServerDTO -from utils import iso8601_or_timestamp_as_timestamp, format_scaphandre_json, format_prometheus_output, format_prometheus_metric, \ - get_boavizta_api_client, sort_ram, sort_disks +from utils import ( + iso8601_or_timestamp_as_timestamp, + format_scaphandre_json, + format_prometheus_output, + get_boavizta_api_client, + sort_ram, + sort_disks, +) from config import settings -from database import create_database, get_session, get_engine, insert_metric, select_metric, \ - CarbonIntensity, add_from_scaphandre, get_most_recent_data, get_max, new_highlight_spikes, \ - setup_database +from database import ( + get_session, + select_metric, + get_most_recent_data, + get_max, + new_highlight_spikes, +) HARDWARE_FILE_PATH = settings.hardware_file_path @@ -46,14 +56,9 @@ def configure_app(): title=settings.PROJECT_NAME, version=settings.PROJECT_VERSION, description=settings.PROJECT_DESCRIPTION, - contact={ - "name": "Boavizta Members", - "url": "https://boavizta.org/en" - }, - license_info={ - "name": "Apache-2.0" - }, - openapi_tags=settings.TAGS_METADATA + contact={"name": "Boavizta Members", "url": "https://boavizta.org/en"}, + license_info={"name": "Apache-2.0"}, + openapi_tags=settings.TAGS_METADATA, ) configure_static(app) return app @@ -62,8 +67,6 @@ def configure_app(): app = configure_app() items = {} -# setup_database() - @app.get("/info", tags=["info"]) async def info(): @@ -73,25 +76,26 @@ async def info(): "hardware_file_path": HARDWARE_FILE_PATH, "power_file_path": POWER_DATA_FILE_PATH, "hardware_cli": HARDWARE_CLI, - "boaviztapi_endpoint": BOAVIZTAPI_ENDPOINT + "boaviztapi_endpoint": BOAVIZTAPI_ENDPOINT, } @app.get("/web", tags=["web"], response_class=HTMLResponse) async def web(): res = "" - with open("{}/index.html".format(PUBLIC_PATH), 'r') as fd: + with open("{}/index.html".format(PUBLIC_PATH), "r") as fd: res = fd.read() fd.close() return res @app.get("/csv", tags=["csv"]) -async def csv(data: str, since: str = "now", until: str = "24h", inwatt: bool = True) -> Response: +async def csv( + data: str, since: str = "now", until: str = "24h", inwatt: bool = True +) -> Response: start_date, stop_date = parse_date_info(since, until) - - '''session = get_session(DB_PATH) + """session = get_session(DB_PATH) df = select_metric(session, data, start_date, stop_date) df['timestamp'] = df['timestamp'].apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S')) session.close() @@ -102,12 +106,11 @@ async def csv(data: str, since: str = "now", until: str = "24h", inwatt: bool = return Response( content=df.to_csv(index=False), media_type="text/csv" - )''' + )""" return Response( - status_code=501, - content="Converting data to CSV is not implemented yet." - ) + status_code=501, content="Converting data to CSV is not implemented yet." + ) @app.get("/yearly_embedded") @@ -116,19 +119,20 @@ async def yearly_embedded(): boaviztapi_data = query_machine_impact_data( model=None, configuration=generate_machine_configuration(hardware_data), - usage={} + usage={}, ) if "manufacturer" in boaviztapi_data: return boaviztapi_data["impacts"]["gwp"]["manufacturer"] / DEFAULT_LIFETIME else: return Response( - status_code=200, - content="SSD/HDD manufacturer not recognized by BoaviztAPI yet." - ) + status_code=200, + content="SSD/HDD manufacturer not recognized by BoaviztAPI yet.", + ) + @app.get("/yearly_operational") async def operational_impact_yearly(): - """ since = "now" + """since = "now" until = "24h" start_date, stop_date = parse_date_info(since, until) session = get_session(DB_PATH) @@ -143,49 +147,67 @@ async def operational_impact_yearly(): yearly_operational = (df_power['power_watt'].mean()*df_carbon_intensity["carbon_intensity_g_per_watt_second"].mean())*(3600*24*365) # in gCO2eq - return round(yearly_operational/1000.0) # in kgCO2eq """ + return round(yearly_operational/1000.0) # in kgCO2eq""" return Response( - status_code=501, - content="Getting yearly operational impact is not implemented yet." - ) + status_code=501, + content="Getting yearly operational impact is not implemented yet.", + ) -@app.get('/last_data') +@app.get("/last_data") async def last_data(table_name: str) -> Response: - """ data = get_most_recent_data(table_name) + """data = get_most_recent_data(table_name) if data is None: return Response(status_code=404) else: - df = pd.DataFrame([[data.timestamp, data.value]], columns=['timestamp', 'value']) + df = pd.DataFrame([[data.timestamp, data.value]], columns=['timestamp', 'value']) return Response( content=df.to_csv(index=False), media_type="text/csv", - status_code=200) """ + status_code=200)""" return Response( - status_code=501, - content="Getting last data is not implemented yet." - ) + status_code=501, content="Getting last data is not implemented yet." + ) @app.get("/metrics", tags=["metrics"]) -async def metrics(start_time: str = "0.0", end_time: str = "0.0", verbose: bool = False, output: str = "json", - location: str = None, measure_power: bool = True, lifetime: float = DEFAULT_LIFETIME, - fetch_hardware: bool = False): +async def metrics( + start_time: str = "0.0", + end_time: str = "0.0", + verbose: bool = False, + output: str = "json", + location: str = None, + measure_power: bool = True, + lifetime: float = DEFAULT_LIFETIME, + fetch_hardware: bool = False, +): return Response( content=format_prometheus_output( get_metrics( iso8601_or_timestamp_as_timestamp(start_time), iso8601_or_timestamp_as_timestamp(end_time), - verbose, location, measure_power, lifetime, fetch_hardware + verbose, + location, + measure_power, + lifetime, + fetch_hardware, ) - ), media_type="plain-text" + ), + media_type="plain-text", ) @app.get("/query", tags=["query"]) -async def query(start_time: str = "0.0", end_time: str = "0.0", verbose: bool = False, location: str = None, - measure_power: bool = True, lifetime: float = DEFAULT_LIFETIME, fetch_hardware: bool = False): +async def query( + start_time: str = "0.0", + end_time: str = "0.0", + verbose: bool = False, + location: str = None, + measure_power: bool = True, + lifetime: float = DEFAULT_LIFETIME, + fetch_hardware: bool = False, +): """ start_time: Start time for evaluation. Accepts either UNIX Timestamp or ISO8601 date format. \n end_time: End time for evaluation. Accepts either UNIX Timestamp or ISO8601 date format. \n @@ -198,22 +220,34 @@ async def query(start_time: str = "0.0", end_time: str = "0.0", verbose: bool = return get_metrics( iso8601_or_timestamp_as_timestamp(start_time), iso8601_or_timestamp_as_timestamp(end_time), - verbose, location, measure_power, lifetime, fetch_hardware + verbose, + location, + measure_power, + lifetime, + fetch_hardware, ) @app.get("/last_info") async def last_info(): - res = {"power": get_most_recent_data("power"), "carbonintensity": get_most_recent_data("carbonintensity"), - "cpu": get_most_recent_data("cpu"), "ram": get_most_recent_data("ram")} + res = { + "power": get_most_recent_data("power"), + "carbonintensity": get_most_recent_data("carbonintensity"), + "cpu": get_most_recent_data("cpu"), + "ram": get_most_recent_data("ram"), + } return res @app.get("/max_info") async def max_info(): - res = {"power": get_max("power"), "carbonintensity": get_max("carbonintensity"), "ram": get_max("ram"), - "cpu": get_max("cpu")} + res = { + "power": get_max("power"), + "carbonintensity": get_max("carbonintensity"), + "ram": get_max("ram"), + "cpu": get_max("cpu"), + } return res @@ -224,7 +258,7 @@ async def all_cron(): @app.get("/update") async def update(): - """ response = query_electricity_carbon_intensity() + """response = query_electricity_carbon_intensity() info = parse_electricity_carbon_intensity(response) session = get_session(DB_PATH) @@ -232,23 +266,22 @@ async def update(): if info['value'] > 0: insert_metric(session=session, metric_name='carbonintensity', timestamp=info['timestamp'], value=info['value']) session.commit() - session.close() """ - return Response(status_code=501, - content="Update route is not implemented yet.") + session.close()""" + return Response(status_code=501, content="Update route is not implemented yet.") @app.get("/carbon_intensity_forecast") async def carbon_intensity_forecast(since: str = "now", until: str = "24h") -> Response: - """ df = carbon_intensity_forecast_data(since, until) + """df = carbon_intensity_forecast_data(since, until) df = new_highlight_spikes(df, "value") return Response( content=df.to_csv(index=False), media_type="text/csv" - ) """ + )""" return Response( - status_code=501, - content="Getting carbon intensity forecast is not implemented yet." - ) + status_code=501, + content="Getting carbon intensity forecast is not implemented yet.", + ) def carbon_intensity_forecast_data(since: str, until: str) -> pd.DataFrame: @@ -263,7 +296,7 @@ def carbon_intensity_forecast_data(since: str, until: str) -> pd.DataFrame: @app.get("/carbon_intensity") async def carbon_intensity(since: str = "now", until: str = "24h") -> Response: - """ _, stop_date = parse_date_info(since, until, forecast=True) + """_, stop_date = parse_date_info(since, until, forecast=True) start_date, now = parse_date_info(since, until, forecast=False) session = get_session(DB_PATH) @@ -283,16 +316,15 @@ async def carbon_intensity(since: str = "now", until: str = "24h") -> Response: return Response( content=df.to_csv(index=False), media_type="text/csv" - ) """ + )""" return Response( - status_code=501, - content="Getting carbon intensity is not implemented yet." - ) + status_code=501, content="Getting carbon intensity is not implemented yet." + ) @app.get("/init_carbon_intensity") async def init_carbon_intensity(): - """ engine = get_engine(DB_PATH) + """engine = get_engine(DB_PATH) CarbonIntensity.__table__.drop(engine) create_database(engine) @@ -306,16 +338,15 @@ async def init_carbon_intensity(): info = parse_electricity_carbon_intensity(response) insert_metric(session, 'carbonintensity', info['timestamp'], info['value']) curr_date += timedelta(minutes=5) - session.commit() """ + session.commit()""" return Response( - status_code=501, - content="Init Carbon intensity is not implemented yet." - ) + status_code=501, content="Init Carbon intensity is not implemented yet." + ) @app.get("/impact") async def impact(since: str = "now", until: str = "24h") -> Response: - """ start_date, stop_date = parse_date_info(since, until) + """start_date, stop_date = parse_date_info(since, until) session = get_session(DB_PATH) df_power = select_metric(session, 'power', start_date, stop_date) @@ -349,14 +380,19 @@ async def impact(since: str = "now", until: str = "24h") -> Response: return Response( content=df.to_csv(index=False), media_type="text/csv" - ) """ - return Response( - status_code=501, - content="Getting impact is not implemented yet." - ) + )""" + return Response(status_code=501, content="Getting impact is not implemented yet.") + -def get_metrics(start_time: float, end_time: float, verbose: bool, location: str, measure_power: bool, lifetime: float, - fetch_hardware: bool = False): +def get_metrics( + start_time: float, + end_time: float, + verbose: bool, + location: str, + measure_power: bool, + lifetime: float, + fetch_hardware: bool = False, +): now: float = time.time() if start_time and end_time: @@ -380,12 +416,16 @@ def get_metrics(start_time: float, end_time: float, verbose: bool, location: str power_data = get_power_data(start_time, end_time) host_avg_consumption = power_data["host_avg_consumption"] if "warning" in power_data: - res["emissions_calculation_data"]["energy_consumption_warning"] = power_data["warning"] + res["emissions_calculation_data"][ + "energy_consumption_warning" + ] = power_data["warning"] boaviztapi_data = query_machine_impact_data( model={}, configuration=hardware_data, - usage=format_usage_request(start_time, end_time, host_avg_consumption, location) + usage=format_usage_request( + start_time, end_time, host_avg_consumption, location + ), ) if measure_power: @@ -394,66 +434,67 @@ def get_metrics(start_time: float, end_time: float, verbose: bool, location: str "description": "GHG emissions related to usage, from start_time to end_time.", "type": "gauge", "unit": "kg CO2eq", - "long_unit": "kilograms CO2 equivalent" + "long_unit": "kilograms CO2 equivalent", } res["total_operational_abiotic_resources_depletion"] = { "value": boaviztapi_data["impacts"]["adp"]["use"], "description": "Abiotic Resources Depletion (minerals & metals, ADPe) due to the usage phase.", "type": "gauge", "unit": "kgSbeq", - "long_unit": "kilograms Antimony equivalent" + "long_unit": "kilograms Antimony equivalent", } res["total_operational_primary_energy_consumed"] = { "value": boaviztapi_data["impacts"]["pe"]["use"], "description": "Primary Energy consumed due to the usage phase.", "type": "gauge", "unit": "MJ", - "long_unit": "Mega Joules" + "long_unit": "Mega Joules", } res["start_time"] = { "value": start_time, "description": "Start time for the evaluation, in timestamp format (seconds since 1970)", "type": "counter", "unit": "s", - "long_unit": "seconds" + "long_unit": "seconds", } res["end_time"] = { "value": end_time, "description": "End time for the evaluation, in timestamp format (seconds since 1970)", "type": "counter", "unit": "s", - "long_unit": "seconds" + "long_unit": "seconds", } if "manufacturer" in boaviztapi_data: res["calculated_emissions"] = { - "value": boaviztapi_data["impacts"]["gwp"]["manufacturer"] * ratio + boaviztapi_data["impacts"]["gwp"]["use"], + "value": boaviztapi_data["impacts"]["gwp"]["manufacturer"] * ratio + + boaviztapi_data["impacts"]["gwp"]["use"], "description": "Total Green House Gaz emissions calculated for manufacturing and usage phases, between " - "start_time and end_time", + "start_time and end_time", "type": "gauge", "unit": "kg CO2eq", - "long_unit": "kilograms CO2 equivalent" + "long_unit": "kilograms CO2 equivalent", } res["embedded_emissions"] = { "value": boaviztapi_data["impacts"]["gwp"]["manufacturer"] * ratio, "description": "Embedded carbon emissions (manufacturing phase)", "type": "gauge", "unit": "kg CO2eq", - "long_unit": "kilograms CO2 equivalent" + "long_unit": "kilograms CO2 equivalent", } res["embedded_abiotic_resources_depletion"] = { "value": boaviztapi_data["impacts"]["adp"]["manufacturer"] * ratio, "description": "Embedded abiotic ressources consumed (manufacturing phase)", "type": "gauge", "unit": "kg Sbeq", - "long_unit": "kilograms ADP equivalent" + "long_unit": "kilograms ADP equivalent", } res["embedded_primary_energy"] = { "value": boaviztapi_data["impacts"]["pe"]["manufacturer"] * ratio, "description": "Embedded primary energy consumed (manufacturing phase)", "type": "gauge", "unit": "MJ", - "long_unit": "Mega Joules" + "long_unit": "Mega Joules", } if "USAGE" in boaviztapi_data: @@ -463,25 +504,35 @@ def get_metrics(start_time: float, end_time: float, verbose: bool, location: str "description": "Average power measured from start_time to end_time", "type": "gauge", "unit": "W", - "long_unit": "Watts" + "long_unit": "Watts", }, "electricity_carbon_intensity": { "value": boaviztapi_data["verbose"]["USAGE"]["gwp_factor"]["value"], - "description": "Carbon intensity of the electricity mix. Mix considered : {}".format(location), + "description": "Carbon intensity of the electricity mix. Mix considered : {}".format( + location + ), "type": "gauge", "unit": "kg CO2eq / kWh", - "long_unit": "Kilograms CO2 equivalent per KiloWattHour" - } + "long_unit": "Kilograms CO2 equivalent per KiloWattHour", + }, } - usage_location_status = boaviztapi_data["verbose"]["USAGE"]["usage_location"]["status"] + usage_location_status = boaviztapi_data["verbose"]["USAGE"][ + "usage_location" + ]["status"] if usage_location_status == "MODIFY": res["emissions_calculation_data"]["electricity_carbon_intensity"][ - "description"] += "WARNING : The provided trigram doesn't match any existing country. So this result is " \ - "based on average European electricity mix. Be careful with this data. " + "description" + ] += ( + "WARNING : The provided trigram doesn't match any existing country. So this result is " + "based on average European electricity mix. Be careful with this data. " + ) elif usage_location_status == "SET": res["emissions_calculation_data"]["electricity_carbon_intensity"][ - "description"] += "WARNING : As no information was provided about your location, this result is based on " \ - "average European electricity mix. Be careful with this data. " + "description" + ] += ( + "WARNING : As no information was provided about your location, this result is based on " + "average European electricity mix. Be careful with this data. " + ) if verbose: res["emissions_calculation_data"]["raw_data"] = { @@ -490,16 +541,16 @@ def get_metrics(start_time: float, end_time: float, verbose: bool, location: str "boaviztapi_data": boaviztapi_data, "power_data": power_data, "start_time": start_time, - "end_time": end_time + "end_time": end_time, } return res -def format_usage_request(start_time, end_time, host_avg_consumption=None, location=None): +def format_usage_request( + start_time, end_time, host_avg_consumption=None, location=None +): hours_use_time = (end_time - start_time) / 3600.0 - kwargs_usage = { - "hours_use_time": hours_use_time - } + kwargs_usage = {"hours_use_time": hours_use_time} if location: kwargs_usage["usage_location"] = location if host_avg_consumption: @@ -512,14 +563,15 @@ def get_power_data(start_time, end_time): power_data = {} formatted_scaphandre_json = format_scaphandre_json(POWER_DATA_FILE_PATH) data = json.loads(formatted_scaphandre_json) - res = [e for e in data if start_time <= float(e['host']['timestamp']) <= end_time] - power_data['raw_data'] = res - power_data['host_avg_consumption'] = compute_average_consumption(res) + res = [e for e in data if start_time <= float(e["host"]["timestamp"]) <= end_time] + power_data["raw_data"] = res + power_data["host_avg_consumption"] = compute_average_consumption(res) if end_time - start_time <= 3600: - power_data[ - 'warning'] = "The time window is lower than one hour, but the energy consumption estimate is in " \ - "Watt.Hour. So this is an extrapolation of the power usage profile on one hour. Be " \ - "careful with this data. " + power_data["warning"] = ( + "The time window is lower than one hour, but the energy consumption estimate is in " + "Watt.Hour. So this is an extrapolation of the power usage profile on one hour. Be " + "careful with this data. " + ) return power_data @@ -529,7 +581,7 @@ def compute_average_consumption(power_data): avg_host = 0.0 if len(power_data) > 0: for r in power_data: - total_host += float(r['host']['consumption']) + total_host += float(r["host"]["consumption"]) avg_host = total_host / len(power_data) / 1000000.0 # from microwatts to watts @@ -549,7 +601,7 @@ def get_hardware_data(fetch_hardware: bool): def read_hardware_data() -> Dict: - with open(HARDWARE_FILE_PATH, 'r') as fd: + with open(HARDWARE_FILE_PATH, "r") as fd: data = json.load(fd) return data @@ -558,19 +610,25 @@ def build_hardware_data(): run([HARDWARE_CLI, "--output-file", HARDWARE_FILE_PATH]) -def query_machine_impact_data(model: dict[str, str], - configuration: dict[str, dict[str, int]], - usage: dict[str, Any]) -> dict: +def query_machine_impact_data( + model: dict[str, str], + configuration: dict[str, dict[str, int]], + usage: dict[str, Any], +) -> dict: server_api = ServerApi(get_boavizta_api_client()) server_impact = None if configuration: server_dto = ServerDTO(usage=usage, configuration=configuration) - server_impact = server_api.server_impact_by_config_v1_server_post(server_dto=server_dto) + server_impact = server_api.server_impact_by_config_v1_server_post( + server_dto=server_dto + ) elif model: server_dto = ServerDTO(usage=usage, model=model) - server_impact = server_api.server_impact_by_model_v1_server_get(server_dto=server_dto) + server_impact = server_api.server_impact_by_model_v1_server_get( + server_dto=server_dto + ) return server_impact @@ -579,90 +637,120 @@ def generate_machine_configuration(hardware_data) -> Dict[str, Any]: config = { "cpu": { "units": len(hardware_data["cpus"]), - "core_units": hardware_data['cpus'][1]["core_units"], + "core_units": hardware_data["cpus"][1]["core_units"], # "family": hardware_data['cpus'][1]['family'] - }, + }, "ram": sort_ram(hardware_data["rams"]), "disk": sort_disks(hardware_data["disks"]), - "power_supply": hardware_data["power_supply"] if "power_supply" in hardware_data else {"units": 1} + "power_supply": hardware_data["power_supply"] + if "power_supply" in hardware_data + else {"units": 1} # TODO: if cpu is a small one, guess that power supply is light/average weight of a laptops power supply ? } return config -def query_electricity_carbon_intensity(start_date: Optional[datetime] = None, - stop_date: Optional[datetime] = None) -> Dict[str, Any]: +def query_electricity_carbon_intensity( + start_date: Optional[datetime] = None, stop_date: Optional[datetime] = None +) -> Dict[str, Any]: """DEPRECATED BOAVIZTAPI ROUTE""" - url = BOAVIZTAPI_ENDPOINT + f'/v1/usage_router/gwp/current_intensity?location={AZURE_LOCATION}' + url = ( + BOAVIZTAPI_ENDPOINT + + f"/v1/usage_router/gwp/current_intensity?location={AZURE_LOCATION}" + ) start_date = start_date or (datetime.utcnow() - timedelta(minutes=5)) stop_date = stop_date or datetime.utcnow() - response = requests.post(url, json={ - "source": "carbon_aware_api", - "url": CARBON_AWARE_API_ENDPOINT, - "token": CARBON_AWARE_API_TOKEN, - "start_date": start_date.strftime("%Y-%m-%dT%H:%M:%SZ"), - "stop_date": stop_date.strftime("%Y-%m-%dT%H:%M:%SZ") - }) + response = requests.post( + url, + json={ + "source": "carbon_aware_api", + "url": CARBON_AWARE_API_ENDPOINT, + "token": CARBON_AWARE_API_TOKEN, + "start_date": start_date.strftime("%Y-%m-%dT%H:%M:%SZ"), + "stop_date": stop_date.strftime("%Y-%m-%dT%H:%M:%SZ"), + }, + ) return response.json() def parse_electricity_carbon_intensity(carbon_aware_api_response: Dict[str, Any]): - intensity_dict = carbon_aware_api_response['_value'] - if 'endTime' in intensity_dict and 'carbonIntensity' in intensity_dict: + intensity_dict = carbon_aware_api_response["_value"] + if "endTime" in intensity_dict and "carbonIntensity" in intensity_dict: return { - 'timestamp': datetime.fromisoformat(intensity_dict['endTime']), - 'value': round(intensity_dict['carbonIntensity'], 3) + "timestamp": datetime.fromisoformat(intensity_dict["endTime"]), + "value": round(intensity_dict["carbonIntensity"], 3), } else: - return { - 'timestamp': datetime.now(), - 'value': 0 - } + return {"timestamp": datetime.now(), "value": 0} -def query_forecast_electricity_carbon_intensity(start_date: datetime, stop_date: datetime) -> Dict[str, Any]: +def query_forecast_electricity_carbon_intensity( + start_date: datetime, stop_date: datetime +) -> Dict[str, Any]: """DEPRECATED BOAVIZTAPI ROUTE""" - url = BOAVIZTAPI_ENDPOINT + f'/v1/usage_router/gwp/forecast_intensity?location={AZURE_LOCATION}' + url = ( + BOAVIZTAPI_ENDPOINT + + f"/v1/usage_router/gwp/forecast_intensity?location={AZURE_LOCATION}" + ) retry = 0 while retry < 3: retry += 1 try: - response = requests.post(url, json={ - "source": "carbon_aware_api", - "url": CARBON_AWARE_API_ENDPOINT, - "token": CARBON_AWARE_API_TOKEN, - "start_date": start_date.strftime("%Y-%m-%dT%H:%M:%SZ"), - "stop_date": stop_date.strftime("%Y-%m-%dT%H:%M:%SZ") - }) + response = requests.post( + url, + json={ + "source": "carbon_aware_api", + "url": CARBON_AWARE_API_ENDPOINT, + "token": CARBON_AWARE_API_TOKEN, + "start_date": start_date.strftime("%Y-%m-%dT%H:%M:%SZ"), + "stop_date": stop_date.strftime("%Y-%m-%dT%H:%M:%SZ"), + }, + ) return response.json()[0] except KeyError: response_err = response.json() - if response_err['title'] == 'ArgumentException': - errors = response_err['errors'] - if 'dataStartAt' in errors: - if len(errors['dataStartAt']) == 1: - error_msg = errors['dataStartAt'][0].split("'") - start_date = datetime.strptime(error_msg[1][:-10], '%m/%d/%Y %H:%M:%S') - stop_date = datetime.strptime(error_msg[3][:-10], '%m/%d/%Y %H:%M:%S') - elif 'dataEndAt' in errors: - if len(errors['dataEndAt']) == 1: - error_msg = errors['dataEndAt'][0].split("'") - start_date = datetime.strptime(error_msg[1][:-10], '%m/%d/%Y %H:%M:%S') - stop_date = datetime.strptime(error_msg[3][:-10], '%m/%d/%Y %H:%M:%S') - - -def parse_forecast_electricity_carbon_intensity(response: Dict[str, Any]) -> List[Dict[str, Any]]: - forecasts = response['forecastData'] + if response_err["title"] == "ArgumentException": + errors = response_err["errors"] + if "dataStartAt" in errors: + if len(errors["dataStartAt"]) == 1: + error_msg = errors["dataStartAt"][0].split("'") + start_date = datetime.strptime( + error_msg[1][:-10], "%m/%d/%Y %H:%M:%S" + ) + stop_date = datetime.strptime( + error_msg[3][:-10], "%m/%d/%Y %H:%M:%S" + ) + elif "dataEndAt" in errors: + if len(errors["dataEndAt"]) == 1: + error_msg = errors["dataEndAt"][0].split("'") + start_date = datetime.strptime( + error_msg[1][:-10], "%m/%d/%Y %H:%M:%S" + ) + stop_date = datetime.strptime( + error_msg[3][:-10], "%m/%d/%Y %H:%M:%S" + ) + + +def parse_forecast_electricity_carbon_intensity( + response: Dict[str, Any] +) -> List[Dict[str, Any]]: + forecasts = response["forecastData"] results = [] for item in forecasts: - results.append({ - 'timestamp': datetime.fromisoformat(item['timestamp']).strftime("%Y-%m-%dT%H:%M:%SZ"), - 'value': item['value'] - }) + results.append( + { + "timestamp": datetime.fromisoformat(item["timestamp"]).strftime( + "%Y-%m-%dT%H:%M:%SZ" + ), + "value": item["value"], + } + ) return results -def parse_date_info(since: str, until: str, forecast: bool = False) -> Tuple[datetime, datetime]: +def parse_date_info( + since: str, until: str, forecast: bool = False +) -> Tuple[datetime, datetime]: if forecast: start_date = datetime.utcnow() end_date = start_date + timedelta(hours=1) @@ -670,33 +758,33 @@ def parse_date_info(since: str, until: str, forecast: bool = False) -> Tuple[dat end_date = datetime.utcnow() start_date = end_date - timedelta(hours=1) - if since == 'now' and not forecast: + if since == "now" and not forecast: end_date = datetime.utcnow() - elif since == 'now' and forecast: + elif since == "now" and forecast: start_date = datetime.utcnow() else: - ValueError(f'unknown value since={since}') + ValueError(f"unknown value since={since}") - if until.endswith('d'): - days = int(until.replace('d', '')) + if until.endswith("d"): + days = int(until.replace("d", "")) if forecast: end_date = start_date + timedelta(days=days) else: start_date = end_date - timedelta(days=days) - if until.endswith('h'): - hours = int(until.replace('h', '')) + if until.endswith("h"): + hours = int(until.replace("h", "")) if forecast: end_date = start_date + timedelta(hours=hours) else: start_date = end_date - timedelta(hours=hours) - elif until.endswith('m'): - minutes = int(until.replace('m', '')) + elif until.endswith("m"): + minutes = int(until.replace("m", "")) if forecast: end_date = start_date + timedelta(minutes=minutes) else: start_date = end_date - timedelta(minutes=minutes) else: - ValueError(f'unknown value until={until}') + ValueError(f"unknown value until={until}") return start_date.astimezone(UTC), end_date.astimezone(UTC) @@ -731,7 +819,7 @@ def get_all_cron(): if cron_user: crons.append(cron_user) else: - output = os.popen(f"crontab -l").read() + output = os.popen("crontab -l").read() for line in output.splitlines(): if line != "" and (line[0].isdigit() or line[0] == "*"): crons.append(line) @@ -761,72 +849,87 @@ def get_cron_info(): def event_is_in_bad_time(event, df: pd.DataFrame): - df = df.set_index('timestamp') - index = df.index.get_indexer([event], method='nearest') + df = df.set_index("timestamp") + index = df.index.get_indexer([event], method="nearest") return df.iloc[index].peak.values[0] == 1 def compute_recommendations(since="now", until="24h"): start_date, stop_date = parse_date_info(since, until) session = get_session(DB_PATH) - df_power = select_metric(session, 'power', start_date, stop_date) + df_power = select_metric(session, "power", start_date, stop_date) # df_power['timestamp'] = pd.to_datetime(df_power['timestamp']) - df_history = select_metric(session, 'carbonintensity', start_date, stop_date) + df_history = select_metric(session, "carbonintensity", start_date, stop_date) df_forecast = carbon_intensity_forecast_data(since, until) - df_forecast['timestamp'] = df_forecast['timestamp'].apply(lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%SZ')) + df_forecast["timestamp"] = df_forecast["timestamp"].apply( + lambda x: datetime.strptime(x, "%Y-%m-%dT%H:%M:%SZ") + ) df_carbon_intensity = pd.concat([df_history, df_forecast]) - df_carbon_intensity['timestamp'] = df_carbon_intensity['timestamp'].apply(utc.localize) + df_carbon_intensity["timestamp"] = df_carbon_intensity["timestamp"].apply( + utc.localize + ) df_carbon_intensity = new_highlight_spikes(df_carbon_intensity, "value") recommendations = [] crons = get_cron_info() for cron in crons: - if event_is_in_bad_time(cron['next'], df_carbon_intensity): - recommendations.append({ - 'type': 'CRON', - 'execution_date': cron['next'], - 'preferred_execution_date': find_preferred_execution_date_in_future(df_forecast), - 'mode': 'forecast', - 'job': cron['job'] - }) - if event_is_in_bad_time(cron['previous'], df_carbon_intensity): - recommendations.append({ - 'type': 'CRON', - 'execution_date': datetime.strptime(str(cron['previous'])[:-6], '%Y-%m-%d %H:%M:%S'), - 'preferred_execution_date': find_preferred_execution_date_in_history(cron['previous'], df_power, - df_history), - 'mode': 'history', - 'job': cron['job'] - }) + if event_is_in_bad_time(cron["next"], df_carbon_intensity): + recommendations.append( + { + "type": "CRON", + "execution_date": cron["next"], + "preferred_execution_date": find_preferred_execution_date_in_future( + df_forecast + ), + "mode": "forecast", + "job": cron["job"], + } + ) + if event_is_in_bad_time(cron["previous"], df_carbon_intensity): + recommendations.append( + { + "type": "CRON", + "execution_date": datetime.strptime( + str(cron["previous"])[:-6], "%Y-%m-%d %H:%M:%S" + ), + "preferred_execution_date": find_preferred_execution_date_in_history( + cron["previous"], df_power, df_history + ), + "mode": "history", + "job": cron["job"], + } + ) return recommendations def find_preferred_execution_date_in_future(df_forecast: pd.DataFrame): - bests = df_forecast[df_forecast['value'] == df_forecast['value'].min()] + bests = df_forecast[df_forecast["value"] == df_forecast["value"].min()] return bests.iloc[0].timestamp -def find_preferred_execution_date_in_history(execution_date: datetime, - df_power: pd.DataFrame, - df_intensity: pd.DataFrame) -> datetime: - df_power = df_power.rename(columns={'value': 'power'}) - df_power = df_power.set_index('timestamp') - df_power = df_power.resample('1s').mean() - df_power = df_power.fillna(method='ffill') - df_intensity = df_intensity.rename(columns={'value': 'carbon_intensity'}) - df_intensity = df_intensity.set_index('timestamp') - df_intensity = df_intensity.resample('1s').mean() - df_intensity = df_intensity.fillna(method='ffill') - df = df_power.merge(df_intensity, on='timestamp') - df = df.reset_index(names='timestamp') +def find_preferred_execution_date_in_history( + execution_date: datetime, df_power: pd.DataFrame, df_intensity: pd.DataFrame +) -> datetime: + df_power = df_power.rename(columns={"value": "power"}) + df_power = df_power.set_index("timestamp") + df_power = df_power.resample("1s").mean() + df_power = df_power.fillna(method="ffill") + df_intensity = df_intensity.rename(columns={"value": "carbon_intensity"}) + df_intensity = df_intensity.set_index("timestamp") + df_intensity = df_intensity.resample("1s").mean() + df_intensity = df_intensity.fillna(method="ffill") + df = df_power.merge(df_intensity, on="timestamp") + df = df.reset_index(names="timestamp") - df['ratio'] = df['power'] * df['carbon_intensity'] - bests = df[df['ratio'] == df['ratio'].min()] + df["ratio"] = df["power"] * df["carbon_intensity"] + bests = df[df["ratio"] == df["ratio"].min()] for row in bests.itertuples(): - new_execution_date = utc.localize(datetime.strptime(str(row.timestamp), '%Y-%m-%d %H:%M:%S')) + new_execution_date = utc.localize( + datetime.strptime(str(row.timestamp), "%Y-%m-%d %H:%M:%S") + ) if new_execution_date >= execution_date: return new_execution_date diff --git a/boagent/api/config.py b/boagent/api/config.py index 65ca482..e573d14 100644 --- a/boagent/api/config.py +++ b/boagent/api/config.py @@ -7,11 +7,20 @@ class Settings(BaseSettings): PROJECT_VERSION: str = "0.1.0" PROJECT_DESCRIPTION: str = "Boagent is a local API and monitoring agent to help you estimate the environmental impact of your machine, including software activity and hardware embodied impacts." TAGS_METADATA: list = [ - {"name": "info", "description": "Returns runtime configuration of Boagent."}, - {"name": "web", "description": "Web UI to explore Boagent metrics."}, - {"name": "csv", "description": "Internal route. Generates and returns a CSV-formatted dataset with metrics needed by the webUI"}, - {"name": "metrics", "description": "Returns metrics as a Prometheus HTTP exporter."}, - {"name": "query", "description": "This is the main route. Returns metrics in JSON format."} + {"name": "info", "description": "Returns runtime configuration of Boagent."}, + {"name": "web", "description": "Web UI to explore Boagent metrics."}, + { + "name": "csv", + "description": "Internal route. Generates and returns a CSV-formatted dataset with metrics needed by the webUI", + }, + { + "name": "metrics", + "description": "Returns metrics as a Prometheus HTTP exporter.", + }, + { + "name": "query", + "description": "This is the main route. Returns metrics in JSON format.", + }, ] seconds_in_one_year: int = 31536000 default_lifetime: float = os.getenv("DEFAULT_LIFETIME", 5.0) @@ -22,7 +31,9 @@ class Settings(BaseSettings): db_path: str = os.getenv("BOAGENT_DB_PATH", "../../db/boagent.db") public_path: str = os.getenv("BOAGENT_PUBLIC_PATH", "../public") assets_path: str = os.getenv("BOAGENT_ASSETS_PATH", "../public/assets") - carbon_aware_api_endpoint: str = os.getenv("CARBON_AWARE_API_ENDPOINT", "https://carbon-aware-api.azurewebsites.net") + carbon_aware_api_endpoint: str = os.getenv( + "CARBON_AWARE_API_ENDPOINT", "https://carbon-aware-api.azurewebsites.net" + ) carbon_aware_api_token: str = os.getenv("CARBON_AWARE_API_TOKEN") azure_location: str = os.getenv("AZURE_LOCATION", "northeurope") diff --git a/boagent/api/database.py b/boagent/api/database.py index 1aa41d5..aa87672 100644 --- a/boagent/api/database.py +++ b/boagent/api/database.py @@ -46,10 +46,10 @@ class Ram(TimeSeriesRecord): metrics = { - 'carbonintensity': CarbonIntensity, - 'power': Power, - 'cpu': Cpu, - 'ram': Ram, + "carbonintensity": CarbonIntensity, + "power": Power, + "cpu": Cpu, + "ram": Ram, } @@ -66,7 +66,7 @@ def get_session(db_path: str) -> Session: def get_engine(db_path: str) -> Engine: - sqlite_engine = create_engine(f'sqlite:///{db_path}') + sqlite_engine = create_engine(f"sqlite:///{db_path}") return sqlite_engine @@ -80,17 +80,21 @@ def insert_metric(session: Session, metric_name: str, timestamp: datetime, value session.execute(statement) -def insert_metric_and_commit(session: Session, metric_name: str, timestamp: datetime, value: Any): +def insert_metric_and_commit( + session: Session, metric_name: str, timestamp: datetime, value: Any +): model = metrics[metric_name] statement = insert(model).values(timestamp=timestamp, value=value) session.execute(statement) session.commit() -def select_metric(session: Session, - metric_name: str, - start_date: Optional[datetime] = None, - stop_date: Optional[datetime] = None) -> pd.DataFrame: +def select_metric( + session: Session, + metric_name: str, + start_date: Optional[datetime] = None, + stop_date: Optional[datetime] = None, +) -> pd.DataFrame: if metric_name not in metrics: return pd.DataFrame() model = metrics[metric_name] @@ -99,8 +103,7 @@ def select_metric(session: Session, if start_date is None: start_date = stop_date - timedelta(hours=1) statement = select(model.timestamp, model.value).where( - model.timestamp >= start_date, - model.timestamp <= stop_date + model.timestamp >= start_date, model.timestamp <= stop_date ) results = session.execute(statement).all() return pd.DataFrame(results) @@ -118,7 +121,7 @@ def get_full_peak(start: int, diffs: list) -> list: res.append(start + i) i = i + 1 else: - while val < (- 3 * recover * val) and start + i < len(diffs): + while val < (-3 * recover * val) and start + i < len(diffs): val += diffs[start + i] res.append(start + i) i = i + 1 @@ -151,40 +154,41 @@ def highlight_spikes(data: pd.DataFrame, colname: str = None) -> pd.DataFrame: return data -def new_highlight_spikes(df: pd.DataFrame, col: str = 'value') -> pd.DataFrame: - df = df.set_index('timestamp').reset_index(names='timestamp') - rol_col = f'_rolling_{col}' +def new_highlight_spikes(df: pd.DataFrame, col: str = "value") -> pd.DataFrame: + df = df.set_index("timestamp").reset_index(names="timestamp") + rol_col = f"_rolling_{col}" quant_max = df[col].quantile(q=0.70) quant_min = df[col].quantile(q=0.20) window = 3 df[rol_col] = df[col].ewm(span=window).mean() - df['peak'] = 0 + df["peak"] = 0 indexes_max = df[df[rol_col] >= quant_max].index indexes_min = df[df[rol_col] <= quant_min].index - df.loc[indexes_max, 'peak'] = 1 - df.loc[indexes_min, 'peak'] = -1 + df.loc[indexes_max, "peak"] = 1 + df.loc[indexes_min, "peak"] = -1 for row in df.itertuples(): if row.peak != 0 and row.Index > window + 2: for i in range(window + 1): - df.loc[row.Index - i, 'peak'] = row.peak + df.loc[row.Index - i, "peak"] = row.peak df = df.drop(columns=[rol_col]) return df def get_most_recent_timestamp(session): - """ Get a single row from the table which has the most recent timestamp""" + """Get a single row from the table which has the most recent timestamp""" table_list = [Power, Cpu, Ram] last_timestamp_list = [] for table in table_list: data = session.query(table).order_by(table.timestamp.desc()).first() - if data != None: last_timestamp_list.append(data.timestamp) + if data is not None: + last_timestamp_list.append(data.timestamp) return max(last_timestamp_list) if last_timestamp_list else None def get_most_recent_data(table_name): - """ Get a single row from the table which has the most recent timestamp""" + """Get a single row from the table which has the most recent timestamp""" session = get_session(DB_PATH) table = metrics[table_name] data = session.query(table).order_by(table.timestamp.desc()).first() @@ -192,7 +196,7 @@ def get_most_recent_data(table_name): def get_max(table_name): - """ Get a single row from the table which has the most recent timestamp""" + """Get a single row from the table which has the most recent timestamp""" session = get_session(DB_PATH) table = metrics[table_name] data = session.query(table).order_by(table.value.desc()).first() @@ -201,32 +205,53 @@ def get_max(table_name): def add_from_scaphandre(session): last_timestamp = get_most_recent_timestamp(session) - last_timestamp = last_timestamp + timedelta(seconds=5) if last_timestamp != None else datetime.now() - timedelta(hours=24) + last_timestamp = ( + last_timestamp + timedelta(seconds=5) + if last_timestamp is not None + else datetime.now() - timedelta(hours=24) + ) df = scaphandre_to_csv(start_date=last_timestamp, stop_date=datetime.utcnow()) if df.empty: return else: for row in df.itertuples(): - insert_metric(session, metric_name='power', timestamp=row.timestamp, value=row.consumption) - insert_metric(session, metric_name='cpu', timestamp=row.timestamp, value=row.cpu_total_active) - insert_metric(session, metric_name='ram', timestamp=row.timestamp, value=row.ram_used) + insert_metric( + session, + metric_name="power", + timestamp=row.timestamp, + value=row.consumption, + ) + insert_metric( + session, + metric_name="cpu", + timestamp=row.timestamp, + value=row.cpu_total_active, + ) + insert_metric( + session, metric_name="ram", timestamp=row.timestamp, value=row.ram_used + ) def scaphandre_to_csv(start_date: datetime, stop_date: datetime) -> pd.DataFrame: - with open(POWER_DATA_FILE_PATH, 'r') as f: # if scaphandre is writing in the json -> KABOUM + with open( + POWER_DATA_FILE_PATH, "r" + ) as f: # if scaphandre is writing in the json -> KABOUM data = json.loads(f.read()) lst = [] for d in data: data_point = {} - data_point['timestamp'] = d['host']['timestamp'] - data_point['consumption'] = d['host']['consumption'] - data_point['cpu_total_active'] = float(d['resources']['cpu']['total_active']) - data_point['ram_used'] = d['resources']['ram']['used'].split()[0] + data_point["timestamp"] = d["host"]["timestamp"] + data_point["consumption"] = d["host"]["consumption"] + data_point["cpu_total_active"] = float(d["resources"]["cpu"]["total_active"]) + data_point["ram_used"] = d["resources"]["ram"]["used"].split()[0] lst.append(data_point) wanted_data = filter_date_range(lst, start_date, stop_date) for d in wanted_data: d["timestamp"] = datetime.fromtimestamp(d["timestamp"], tz=timezone.utc) - d["consumption"] = float("{:.4f}".format(d["consumption"] * 10 ** -3)) + d["consumption"] = float("{:.4f}".format(d["consumption"] * 10**-3)) d["cpu_total_active"] = float("{:.4f}".format(d["cpu_total_active"])) - return pd.DataFrame(wanted_data, columns=["timestamp", "consumption", "cpu_total_active", "ram_used"]) + return pd.DataFrame( + wanted_data, + columns=["timestamp", "consumption", "cpu_total_active", "ram_used"], + ) diff --git a/boagent/api/log.txt b/boagent/api/log.txt deleted file mode 100644 index 113dbc1..0000000 --- a/boagent/api/log.txt +++ /dev/null @@ -1 +0,0 @@ -Application shutdownApplication shutdown \ No newline at end of file diff --git a/boagent/api/test_api_integration.py b/boagent/api/test_api_integration.py index 97a85d7..0b1eec5 100644 --- a/boagent/api/test_api_integration.py +++ b/boagent/api/test_api_integration.py @@ -11,7 +11,7 @@ power_file_path="./tests/mocks/power_data.json", ) -from api import app # noqa +from api import app # noqa NOW_ISO8601 = datetime.now().isoformat() NOW_ISO8601_MINUS_ONE_MINUTE = datetime.fromisoformat(NOW_ISO8601) - timedelta( @@ -22,7 +22,6 @@ class ApiEndpointsTest(TestCase): - def test_read_info(self): response = client.get("/info") assert response.status_code == 200 diff --git a/boagent/api/test_api_unit.py b/boagent/api/test_api_unit.py index 3e9284d..f946a42 100644 --- a/boagent/api/test_api_unit.py +++ b/boagent/api/test_api_unit.py @@ -6,7 +6,6 @@ class ApiUnitTest(TestCase): - def test_read_build_hardware_data(self): build_hardware_data() diff --git a/boagent/api/utils.py b/boagent/api/utils.py index a4babfa..1cc159d 100644 --- a/boagent/api/utils.py +++ b/boagent/api/utils.py @@ -17,12 +17,12 @@ def sort_ram(items: list): hash_map["{}:{}".format(r["capacity"], r["manufacturer"])] = { "units": 1, "manufacturer": r["manufacturer"], - "capacity": r["capacity"] + "capacity": r["capacity"], } else: hash_map["{}".format(r["capacity"])] = { "units": 1, - "capacity": r["capacity"] + "capacity": r["capacity"], } return [v for k, v in hash_map.items()] @@ -31,13 +31,15 @@ def sort_disks(items: list): hash_map = {} for r in items: if "{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"]) in hash_map: - hash_map["{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"])]["units"] += 1 + hash_map["{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"])][ + "units" + ] += 1 else: hash_map["{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"])] = { "units": 1, "manufacturer": r["manufacturer"], "capacity": r["capacity"], - "type": r["type"] + "type": r["type"], } return [v for k, v in hash_map.items()] @@ -46,17 +48,15 @@ def get_boavizta_api_client(): config = Configuration( host=BOAVIZTAPI_ENDPOINT, ) - client = ApiClient( - configuration=config, pool_threads=2 - ) + client = ApiClient(configuration=config, pool_threads=2) return client def iso8601_or_timestamp_as_timestamp(iso_time: str): - ''' + """ Takes an str that's either a timestamp or an iso8601 time. Returns a float that represents a timestamp. - ''' + """ if iso_time == "0.0" or iso_time == "0": return float(iso_time) else: @@ -87,23 +87,47 @@ def format_prometheus_output(res): if "value" in v and "type" in v: if "description" not in v: v["description"] = "TODO: define me" - response += format_prometheus_metric(k, "{}. {}".format(v["description"], "In {} ({}).".format(v["long_unit"], v["unit"])), v["type"], v["value"]) - #response += format_prometheus_metric("energy_consumption", "Energy consumed in the evaluation time window (evaluated at least for an hour, be careful if the time windows is lower than 1 hour), in Wh", "counter", res["emissions_calculation_data"]["energy_consumption"]) + response += format_prometheus_metric( + k, + "{}. {}".format( + v["description"], "In {} ({}).".format(v["long_unit"], v["unit"]) + ), + v["type"], + v["value"], + ) + # response += format_prometheus_metric("energy_consumption", "Energy consumed in the evaluation time window (evaluated at least for an hour, be careful if the time windows is lower than 1 hour), in Wh", "counter", res["emissions_calculation_data"]["energy_consumption"]) else: for x, y in v.items(): if "value" in y and "type" in y: if "description" not in y: y["description"] = "TODO: define me" - response += format_prometheus_metric("{}_{}".format(k,x), "{}. {}".format(y["description"], "In {} ({}).".format(y["long_unit"], y["unit"])), y["type"], y["value"]) + response += format_prometheus_metric( + "{}_{}".format(k, x), + "{}. {}".format( + y["description"], + "In {} ({}).".format(y["long_unit"], y["unit"]), + ), + y["type"], + y["value"], + ) return response -def format_prometheus_metric(metric_name, metric_description, metric_type, metric_value): +def format_prometheus_metric( + metric_name, metric_description, metric_type, metric_value +): response = """# HELP {} {} # TYPE {} {} {} {} -""".format(metric_name, metric_description, metric_name, metric_type, metric_name, metric_value) +""".format( + metric_name, + metric_description, + metric_name, + metric_type, + metric_name, + metric_value, + ) return response @@ -121,10 +145,12 @@ def filter_date_range(data: list, start_date: datetime, stop_date: datetime) -> if d["timestamp"] < end: upper_index += 1 - return data[lower_index: upper_index] + return data[lower_index:upper_index] def format_scaphandre_json(file: str | PathLike) -> str: - with open(file, 'r') as fd: - formatted_scaphandre_json = f"[{fd.read()}]".replace('{"host"', ',{"host"').replace(',{"host"', '{"host"', 1) + with open(file, "r") as fd: + formatted_scaphandre_json = f"[{fd.read()}]".replace( + '{"host"', ',{"host"' + ).replace(',{"host"', '{"host"', 1) return formatted_scaphandre_json diff --git a/boagent/hardware/AWS/README.md b/boagent/hardware/AWS/README.md index 7038cd7..68c0e25 100644 --- a/boagent/hardware/AWS/README.md +++ b/boagent/hardware/AWS/README.md @@ -1,3 +1 @@ # Agent - - diff --git a/boagent/hardware/cpu.py b/boagent/hardware/cpu.py index 1b9125d..8d11c22 100644 --- a/boagent/hardware/cpu.py +++ b/boagent/hardware/cpu.py @@ -1,5 +1,5 @@ from cpuinfo import get_cpu_info -from cpuid import cpuid, cpu_microarchitecture, cpu_name, cpu_vendor +from cpuid import cpuid, cpu_microarchitecture from typing import TypeAlias from lshw import LSHW @@ -27,12 +27,14 @@ def get_cpus(): cpus = [] cpu_data = lshw_data.cpus for cpu in cpu_data: - cpus.append({ - "vendor": cpu["vendor"], - "name": cpu["product"], - "microarch": cpu_microarchitecture(), - "cpu_info": get_cpu_info(), - }) + cpus.append( + { + "vendor": cpu["vendor"], + "name": cpu["product"], + "microarch": cpu_microarchitecture(), + "cpu_info": get_cpu_info(), + } + ) return cpus diff --git a/boagent/hardware/disk/README.md b/boagent/hardware/disk/README.md index cf17a63..918a3e6 100644 --- a/boagent/hardware/disk/README.md +++ b/boagent/hardware/disk/README.md @@ -15,4 +15,4 @@ it is running on real drives. ## MacOS TBD ## Windows -TBD \ No newline at end of file +TBD diff --git a/boagent/hardware/disk/disk.py b/boagent/hardware/disk/disk.py index 614405f..123dc72 100644 --- a/boagent/hardware/disk/disk.py +++ b/boagent/hardware/disk/disk.py @@ -17,13 +17,15 @@ class Partition: @classmethod def from_proc(cls, data=None): if not data: - raise DiskException('No data found!') + raise DiskException("No data found!") data = data.strip().split() - obj = {'major': int(data[0]), - 'minor': int(data[1]), - 'blocks': int(data[2]), - 'name': data[3]} + obj = { + "major": int(data[0]), + "minor": int(data[1]), + "blocks": int(data[2]), + "name": data[3], + } return cls(**obj) @@ -61,14 +63,14 @@ def vendor(self): def __try_to_read_first_line(item_path: str, default_value: str) -> str: first_line = default_value if os.path.exists(item_path): - with open(item_path, 'r') as f: + with open(item_path, "r") as f: first_line = f.readline().strip() return first_line @staticmethod # If one of the strings in /sys/block/***/device/model has numbers, it is not a valid vendor def __check_vendor(model_string: str) -> str: - split_model = model_string.split(' ') + split_model = model_string.split(" ") model_first_str = split_model[0] model_second_str = split_model[1] check_first_string_for_numbers = re.search("\\d", model_first_str) @@ -100,20 +102,26 @@ def _populate_partitions(self): """ Retrieve partitions information for one device from sysfs """ - part_info_path_base = f'{self._sysfs_path}/{self._name}' + part_info_path_base = f"{self._sysfs_path}/{self._name}" index = 1 - part_info_path = f'{part_info_path_base}{index}' + part_info_path = f"{part_info_path_base}{index}" while os.path.exists(part_info_path): - majmin = Disk.__try_to_read_first_line(f'{part_info_path}/dev', '-1:-1').split(':') - - self._partitions.append(Partition(major=Disk.__safe_int(majmin[0]), - minor=Disk.__safe_int(majmin[1]), - blocks=Disk.__safe_int(Disk.__try_to_read_first_line(f'{part_info_path}/size', 0)), - name=f'{self._name}{index}' - ) - ) + majmin = Disk.__try_to_read_first_line( + f"{part_info_path}/dev", "-1:-1" + ).split(":") + + self._partitions.append( + Partition( + major=Disk.__safe_int(majmin[0]), + minor=Disk.__safe_int(majmin[1]), + blocks=Disk.__safe_int( + Disk.__try_to_read_first_line(f"{part_info_path}/size", 0) + ), + name=f"{self._name}{index}", + ) + ) index += 1 - part_info_path = f'{part_info_path_base}{index}' + part_info_path = f"{part_info_path_base}{index}" def lookup(self): """ @@ -128,11 +136,19 @@ def lookup(self): if self._looked_up: return - self._model = Disk.__try_to_read_first_line(f'{self._sysfs_path}/device/model', 'Unknown model') - rotational = Disk.__try_to_read_first_line(f'{self._sysfs_path}/queue/rotational', 'Unknown') + self._model = Disk.__try_to_read_first_line( + f"{self._sysfs_path}/device/model", "Unknown model" + ) + rotational = Disk.__try_to_read_first_line( + f"{self._sysfs_path}/queue/rotational", "Unknown" + ) self._type = Disk.__rotational_info_to_disk_type(rotational) - self._major_minor = Disk.__try_to_read_first_line(f'{self._sysfs_path}/dev', 'Unknown') - sectors_count = Disk.__safe_int(Disk.__try_to_read_first_line(f'{self._sysfs_path}/size', 'Unknown')) + self._major_minor = Disk.__try_to_read_first_line( + f"{self._sysfs_path}/dev", "Unknown" + ) + sectors_count = Disk.__safe_int( + Disk.__try_to_read_first_line(f"{self._sysfs_path}/size", "Unknown") + ) if type(sectors_count) is int: # Linux uses 512 bytes sectors self._size = sectors_count // (2 * 1024 * 1024) @@ -145,21 +161,21 @@ def __repr__(self): if not self._looked_up: self.lookup() - ret = '' - ret = f'Disk ({self._major_minor}) {self._name}: \n' - ret += f'\tBlocks: {self._blocks}\n' - ret += f'\tSize: {self._size}Gb\n' - ret += f'\tModel: {self._model}\n' - ret += f'\tType: {self._type}\n' - ret += '\n' + ret = "" + ret = f"Disk ({self._major_minor}) {self._name}: \n" + ret += f"\tBlocks: {self._blocks}\n" + ret += f"\tSize: {self._size}Gb\n" + ret += f"\tModel: {self._model}\n" + ret += f"\tType: {self._type}\n" + ret += "\n" - ret += f'Disk has {len(self._partitions)} partition(s): \n' + ret += f"Disk has {len(self._partitions)} partition(s): \n" for part in self._partitions: if part.minor != 0: - ret += f'\tBlocks: {part.blocks}\n' - ret += f'\tSize: {part.blocks // (2 * 1024 * 1024)}Gb\n' - ret += f'\tName: {part.name}\n' - ret += '\n' + ret += f"\tBlocks: {part.blocks}\n" + ret += f"\tSize: {part.blocks // (2 * 1024 * 1024)}Gb\n" + ret += f"\tName: {part.name}\n" + ret += "\n" return ret @@ -167,8 +183,8 @@ def __repr__(self): def search_physical_drives(): disks = [] - virtual_drive_pattern = re.compile('.*/devices/virtual/.*') - for possible_drive in os.scandir('/sys/block'): + virtual_drive_pattern = re.compile(".*/devices/virtual/.*") + for possible_drive in os.scandir("/sys/block"): realpath = os.path.realpath(possible_drive.path) # path seems to point to a "real" drive if virtual_drive_pattern.match(realpath) is None: diff --git a/boagent/hardware/ram/dmidecode.py b/boagent/hardware/ram/dmidecode.py index d6a241e..9ca5688 100644 --- a/boagent/hardware/ram/dmidecode.py +++ b/boagent/hardware/ram/dmidecode.py @@ -15,25 +15,25 @@ def get_dmidecode_info() -> List[MemoryDevice]: cmd_output = execute_dmidecode() return parse_dmidecode(cmd_output) except Exception as e: - raise DMIDecodeError('cannot extract ram info from dmidecode.') from e + raise DMIDecodeError("cannot extract ram info from dmidecode.") from e def execute_dmidecode() -> Optional[str]: - proc = subprocess.Popen(['dmidecode', '-t', '17'], stdout=subprocess.PIPE) + proc = subprocess.Popen(["dmidecode", "-t", "17"], stdout=subprocess.PIPE) stdout, stderr = proc.communicate() if proc.returncode > 0: - raise RuntimeError(f'failed to run dmidecode command.') + raise RuntimeError("failed to run dmidecode command.") else: return stdout.decode() def parse_dmidecode(dmidecode_dump: str) -> List[MemoryDevice]: memory_devices = [] - for record in dmidecode_dump.split('\n\n'): + for record in dmidecode_dump.split("\n\n"): if skip_record(record): continue - record_lines = record.split('\n') + record_lines = record.split("\n") record_map = build_record_map(record_lines) if not is_record_map_valid(record_map): @@ -44,7 +44,7 @@ def parse_dmidecode(dmidecode_dump: str) -> List[MemoryDevice]: def skip_record(record) -> bool: - if len(record.split('\n')) < 4: + if len(record.split("\n")) < 4: return True return False @@ -54,57 +54,57 @@ def build_record_map(record_lines: List[str]) -> Mapping[str, str]: for raw_line in record_lines: if skip_record_line(raw_line): continue - line = raw_line.replace('\t', '') + line = raw_line.replace("\t", "") line = line.strip() - key, value = line.split(':') + key, value = line.split(":") value = value.strip() record_map[key] = value return record_map def skip_record_line(line: str) -> bool: - if not line.startswith('\t'): + if not line.startswith("\t"): return True return False def is_record_map_valid(record_map: Mapping) -> bool: - if re.search(r'empty', record_map['Manufacturer'], re.IGNORECASE): + if re.search(r"empty", record_map["Manufacturer"], re.IGNORECASE): return False return True def parse_record_map_to_memory_device(record_map: Mapping[str, str]): - size = record_map.get('Size') + size = record_map.get("Size") if size: size = parse_size_to_gb(size) - speed = record_map.get('Speed') + speed = record_map.get("Speed") if speed: speed = parse_speed_to_mt_s(speed) return MemoryDevice( - manufacturer=record_map.get('Manufacturer'), - model=record_map.get('Part Number'), + manufacturer=record_map.get("Manufacturer"), + model=record_map.get("Part Number"), size_gb=size, - type_=record_map.get('Type'), + type_=record_map.get("Type"), speed_mt_s=speed, - form_factor=record_map.get('Form Factor') + form_factor=record_map.get("Form Factor"), ) def parse_size_to_gb(size_str: str) -> int: - size = re.search(r'[0-9]+', size_str) + size = re.search(r"[0-9]+", size_str) if size: size = int(size[0]) - if 'MB' in size_str: + if "MB" in size_str: size = int(size / 1024) return size return 0 def parse_speed_to_mt_s(speed_str: str) -> int: - speed = re.search(r'[0-9]+', speed_str) + speed = re.search(r"[0-9]+", speed_str) if speed: return int(speed[0]) return 0 diff --git a/boagent/hardware/ram/meminfo.py b/boagent/hardware/ram/meminfo.py index 730ab0d..556642b 100644 --- a/boagent/hardware/ram/meminfo.py +++ b/boagent/hardware/ram/meminfo.py @@ -17,16 +17,16 @@ def get_meminfo() -> List[MemoryDevice]: memory_size_gb = convert_kb_in_gb(memory_size_kb) return [MemoryDevice(size_gb=memory_size_gb)] except Exception as e: - raise MemInfoError('cannot extract ram info from meminfo.') from e + raise MemInfoError("cannot extract ram info from meminfo.") from e def get_total_memory_in_kb() -> int: - with open('/proc/meminfo', 'r') as f: + with open("/proc/meminfo", "r") as f: for line in f.readlines(): - if 'MemTotal' in line: + if "MemTotal" in line: mem_total_line = line.strip() break - total_size_kb = int(re.search(r'[0-9]+', mem_total_line)[0]) + total_size_kb = int(re.search(r"[0-9]+", mem_total_line)[0]) return total_size_kb diff --git a/boagent/hardware/ram/model.py b/boagent/hardware/ram/model.py index a32daf5..40bde47 100644 --- a/boagent/hardware/ram/model.py +++ b/boagent/hardware/ram/model.py @@ -4,6 +4,7 @@ # TODO: To be replaced by ComponentRAM from openapi client. + @dataclass() class MemoryDevice: manufacturer: Optional[str] = None @@ -12,4 +13,3 @@ class MemoryDevice: type_: Optional[str] = None speed_mt_s: Optional[int] = None form_factor: Optional[str] = None - diff --git a/boagent/hardware/test_hardwarecli.py b/boagent/hardware/test_hardwarecli.py index fa191ec..f08101d 100644 --- a/boagent/hardware/test_hardwarecli.py +++ b/boagent/hardware/test_hardwarecli.py @@ -5,7 +5,6 @@ class HardwarecliTest(TestCase): - def test_read_hardware_cli_cpus(self): cpus = get_cpus() diff --git a/boagent/public/assets/dygraph.min.js b/boagent/public/assets/dygraph.min.js index 0ec8abb..ef3b4da 100644 --- a/boagent/public/assets/dygraph.min.js +++ b/boagent/public/assets/dygraph.min.js @@ -3,4 +3,4 @@ null===d||isNaN(d)||(d=u.yval_stacked)),null===d&&(d=NaN,o||(u.yval=NaN)),u.y=r.calcYNormal_(s,d,l)}this.dygraph_.dataHandler_.onLineEvaluated(i,s,l)}},r.prototype._evaluateLineTicks=function(){var t,e,a,i,n,r;for(this.xticks=[],t=0;t=0&&i<1&&this.xticks.push({pos:i,label:a,has_tick:r});for(this.yticks=[],t=0;t0&&i<=1&&this.yticks.push({axis:t,pos:i,label:a,has_tick:r})},r.prototype._evaluateAnnotations=function(){var t,e={};for(t=0;t1&&o.update(this.yAxes_[1].options,s.y2||{}),o.update(this.xAxis_.options,s.x||{})}},u.prototype.get=function(t){var e=this.getGlobalUser_(t);return null!==e?e:this.getGlobalDefault_(t)},u.prototype.getGlobalUser_=function(t){return this.user_.hasOwnProperty(t)?this.user_[t]:null},u.prototype.getGlobalDefault_=function(t){return this.global_.hasOwnProperty(t)?this.global_[t]:l.default.hasOwnProperty(t)?l.default[t]:null},u.prototype.getForAxis=function(t,e){var a,i;if("number"==typeof e)a=e,i=0===a?"y":"y2";else{if("y1"==e&&(e="y"),"y"==e)a=0;else if("y2"==e)a=1;else{if("x"!=e)throw"Unknown axis "+e;a=-1}i=e}var n=-1==a?this.xAxis_:this.yAxes_[a];if(n){var r=n.options;if(r.hasOwnProperty(t))return r[t]}if("x"!==e||"logscale"!==t){var o=this.getGlobalUser_(t);if(null!==o)return o}var s=l.default.axes[i];return s.hasOwnProperty(t)?s[t]:this.getGlobalDefault_(t)},u.prototype.getForSeries=function(t,e){if(e===this.dygraph_.getHighlightSeries()&&this.highlightSeries_.hasOwnProperty(t))return this.highlightSeries_[t];if(!this.series_.hasOwnProperty(e))throw"Unknown series: "+e;var a=this.series_[e],i=a.options;return i.hasOwnProperty(t)?i[t]:this.getForAxis(t,a.yAxis)},u.prototype.numAxes=function(){return this.yAxes_.length},u.prototype.axisForSeries=function(t){return this.series_[t].yAxis},u.prototype.axisOptions=function(t){return this.yAxes_[t].options},u.prototype.seriesForAxis=function(t){return this.yAxes_[t].series},u.prototype.seriesNames=function(){return this.labels_},void 0!==i);a.default=u,e.exports=a.default}).call(this,t("_process"))},{"./dygraph-default-attrs":10,"./dygraph-options-reference":14,"./dygraph-utils":17,_process:1}],16:[function(t,e,a){"use strict";Object.defineProperty(a,"__esModule",{value:!0});var i=t("./dygraph-utils"),n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(i),r=function(t,e,a,i,n,r){return o(t,e,a,function(t){return"logscale"!==t&&i(t)},n,r)};a.numericLinearTicks=r;var o=function(t,e,a,i,r,o){var s,l,h,u,c=i("pixelsPerLabel"),p=[];if(o)for(s=0;s=u/4){for(var v=f;v>=g;v--){var y=d[v],x=Math.log(y/t)/Math.log(e/t)*a,m={v:y};null===_?_={tickValue:y,pixel_coord:x}:Math.abs(x-_.pixel_coord)>=c?_={tickValue:y,pixel_coord:x}:m.label="",p.push(m)}p.reverse()}}if(0===p.length){var b,w,A=i("labelsKMG2");A?(b=[1,2,4,8,16,32,64,128,256],w=16):(b=[1,2,5,10,20,50,100],w=10);var O,D,E,L=Math.ceil(a/c),T=Math.abs(e-t)/L,S=Math.floor(Math.log(T)/Math.log(w)),P=Math.pow(w,S);for(l=0;lc));l++);for(D>E&&(O*=-1),s=0;s<=u;s++)h=D+s*O,p.push({v:h})}}var C=i("axisLabelFormatter");for(s=0;s=0?g(t,e,o,i,n):[]};a.dateTicker=s;var l={MILLISECONDLY:0,TWO_MILLISECONDLY:1,FIVE_MILLISECONDLY:2,TEN_MILLISECONDLY:3,FIFTY_MILLISECONDLY:4,HUNDRED_MILLISECONDLY:5,FIVE_HUNDRED_MILLISECONDLY:6,SECONDLY:7,TWO_SECONDLY:8,FIVE_SECONDLY:9,TEN_SECONDLY:10,THIRTY_SECONDLY:11,MINUTELY:12,TWO_MINUTELY:13,FIVE_MINUTELY:14,TEN_MINUTELY:15,THIRTY_MINUTELY:16,HOURLY:17,TWO_HOURLY:18,SIX_HOURLY:19,DAILY:20,TWO_DAILY:21,WEEKLY:22,MONTHLY:23,QUARTERLY:24,BIANNUAL:25,ANNUAL:26,DECADAL:27,CENTENNIAL:28,NUM_GRANULARITIES:29};a.Granularity=l;var h={DATEFIELD_Y:0,DATEFIELD_M:1,DATEFIELD_D:2,DATEFIELD_HH:3,DATEFIELD_MM:4,DATEFIELD_SS:5,DATEFIELD_MS:6,NUM_DATEFIELDS:7},u=[];u[l.MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:1,spacing:1},u[l.TWO_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:2,spacing:2},u[l.FIVE_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:5,spacing:5},u[l.TEN_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:10,spacing:10},u[l.FIFTY_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:50,spacing:50},u[l.HUNDRED_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:100,spacing:100},u[l.FIVE_HUNDRED_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:500,spacing:500},u[l.SECONDLY]={datefield:h.DATEFIELD_SS,step:1,spacing:1e3},u[l.TWO_SECONDLY]={datefield:h.DATEFIELD_SS,step:2,spacing:2e3},u[l.FIVE_SECONDLY]={datefield:h.DATEFIELD_SS,step:5,spacing:5e3},u[l.TEN_SECONDLY]={datefield:h.DATEFIELD_SS,step:10,spacing:1e4},u[l.THIRTY_SECONDLY]={datefield:h.DATEFIELD_SS,step:30,spacing:3e4},u[l.MINUTELY]={datefield:h.DATEFIELD_MM,step:1,spacing:6e4},u[l.TWO_MINUTELY]={datefield:h.DATEFIELD_MM,step:2,spacing:12e4},u[l.FIVE_MINUTELY]={datefield:h.DATEFIELD_MM,step:5,spacing:3e5},u[l.TEN_MINUTELY]={datefield:h.DATEFIELD_MM,step:10,spacing:6e5},u[l.THIRTY_MINUTELY]={datefield:h.DATEFIELD_MM,step:30,spacing:18e5},u[l.HOURLY]={datefield:h.DATEFIELD_HH,step:1,spacing:36e5},u[l.TWO_HOURLY]={datefield:h.DATEFIELD_HH,step:2,spacing:72e5},u[l.SIX_HOURLY]={datefield:h.DATEFIELD_HH,step:6,spacing:216e5},u[l.DAILY]={datefield:h.DATEFIELD_D,step:1,spacing:864e5},u[l.TWO_DAILY]={datefield:h.DATEFIELD_D,step:2,spacing:1728e5},u[l.WEEKLY]={datefield:h.DATEFIELD_D,step:7,spacing:6048e5},u[l.MONTHLY]={datefield:h.DATEFIELD_M,step:1,spacing:2629817280},u[l.QUARTERLY]={datefield:h.DATEFIELD_M,step:3,spacing:216e5*365.2524},u[l.BIANNUAL]={datefield:h.DATEFIELD_M,step:6,spacing:432e5*365.2524},u[l.ANNUAL]={datefield:h.DATEFIELD_Y,step:1,spacing:864e5*365.2524},u[l.DECADAL]={datefield:h.DATEFIELD_Y,step:10,spacing:315578073600},u[l.CENTENNIAL]={datefield:h.DATEFIELD_Y,step:100,spacing:3155780736e3};var d=function(){for(var t=[],e=-39;e<=39;e++)for(var a=Math.pow(10,e),i=1;i<=9;i++){var n=a*i;t.push(n)}return t}(),c=function(t,e,a,i){for(var n=i("pixelsPerLabel"),r=0;r=n)return r}return-1},p=function(t,e,a){var i=u[a].spacing;return Math.round(1*(e-t)/i)},g=function(t,e,a,i,r){var o=i("axisLabelFormatter"),s=i("labelsUTC"),d=s?n.DateAccessorsUTC:n.DateAccessorsLocal,c=u[a].datefield,p=u[a].step,g=u[a].spacing,f=new Date(t),_=[];_[h.DATEFIELD_Y]=d.getFullYear(f),_[h.DATEFIELD_M]=d.getMonth(f),_[h.DATEFIELD_D]=d.getDate(f),_[h.DATEFIELD_HH]=d.getHours(f),_[h.DATEFIELD_MM]=d.getMinutes(f),_[h.DATEFIELD_SS]=d.getSeconds(f),_[h.DATEFIELD_MS]=d.getMilliseconds(f);var v=_[c]%p;a==l.WEEKLY&&(v=d.getDay(f)),_[c]-=v;for(var y=c+1;y=l.DAILY||d.getHours(m)%p==0)&&x.push({v:b,label:o.call(r,m,a,i,r)}),_[c]+=p,m=d.makeDate.apply(null,_),b=m.getTime();return x};a.getDateAxis=g},{"./dygraph-utils":17}],17:[function(t,e,a){"use strict";function i(t,e,a){t.removeEventListener(e,a,!1)}function n(t){return t=t||window.event,t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.cancelBubble=!0,t.cancel=!0,t.returnValue=!1,!1}function r(t,e,a){var i,n,r;if(0===e)i=a,n=a,r=a;else{var o=Math.floor(6*t),s=6*t-o,l=a*(1-e),h=a*(1-e*s),u=a*(1-e*(1-s));switch(o){case 1:i=h,n=a,r=l;break;case 2:i=l,n=a,r=u;break;case 3:i=l,n=h,r=a;break;case 4:i=u,n=l,r=a;break;case 5:i=a,n=l,r=h;break;case 6:case 0:i=a,n=u,r=l}}return i=Math.floor(255*i+.5),n=Math.floor(255*n+.5),r=Math.floor(255*r+.5),"rgb("+i+","+n+","+r+")"}function o(t){var e=t.getBoundingClientRect(),a=window,i=document.documentElement;return{x:e.left+(a.pageXOffset||i.scrollLeft),y:e.top+(a.pageYOffset||i.scrollTop)}}function s(t){return!t.pageX||t.pageX<0?0:t.pageX}function l(t){return!t.pageY||t.pageY<0?0:t.pageY}function h(t,e){return s(t)-e.px}function u(t,e){return l(t)-e.py}function d(t){return!!t&&!isNaN(t)}function c(t,e){return!!t&&(null!==t.yval&&(null!==t.x&&void 0!==t.x&&(null!==t.y&&void 0!==t.y&&!(isNaN(t.x)||!e&&isNaN(t.y)))))}function p(t,e){var a=Math.min(Math.max(1,e||2),21);return Math.abs(t)<.001&&0!==t?t.toExponential(a-1):t.toPrecision(a)}function g(t){return t<10?"0"+t:""+t}function f(t,e,a,i){var n=g(t)+":"+g(e);if(a&&(n+=":"+g(a),i)){var r=""+i;n+="."+("000"+r).substring(r.length)}return n}function _(t,e){var a=e?tt:$,i=new Date(t),n=a.getFullYear(i),r=a.getMonth(i),o=a.getDate(i),s=a.getHours(i),l=a.getMinutes(i),h=a.getSeconds(i),u=a.getMilliseconds(i),d=""+n,c=g(r+1),p=g(o),_=3600*s+60*l+h+.001*u,v=d+"/"+c+"/"+p;return _&&(v+=" "+f(s,l,h,u)),v}function v(t,e){var a=Math.pow(10,e);return Math.round(t*a)/a}function y(t,e,a,i,n){for(var r=!0;r;){var o=t,s=e,l=a,h=i,u=n;if(r=!1,null!==h&&void 0!==h&&null!==u&&void 0!==u||(h=0,u=s.length-1),h>u)return-1;null!==l&&void 0!==l||(l=0);var d,c=function(t){return t>=0&&to){if(l>0&&(d=p-1,c(d)&&s[d]o))return p;t=o,e=s,a=l,i=p+1,n=u,r=!0,c=p=g=d=void 0}}}function x(t){var e,a;if((-1==t.search("-")||-1!=t.search("T")||-1!=t.search("Z"))&&(a=m(t))&&!isNaN(a))return a;if(-1!=t.search("-")){for(e=t.replace("-","/","g");-1!=e.search("-");)e=e.replace("-","/");a=m(e)}else 8==t.length?(e=t.substr(0,4)+"/"+t.substr(4,2)+"/"+t.substr(6,2),a=m(e)):a=m(t);return a&&!isNaN(a)||console.error("Couldn't parse "+t+" as a date"),a}function m(t){return new Date(t).getTime()}function b(t,e){if(void 0!==e&&null!==e)for(var a in e)e.hasOwnProperty(a)&&(t[a]=e[a]);return t}function w(t,e){if(void 0!==e&&null!==e)for(var a in e)e.hasOwnProperty(a)&&(null===e[a]?t[a]=null:A(e[a])?t[a]=e[a].slice():!function(t){return"object"==typeof Node?t instanceof Node:"object"==typeof t&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName}(e[a])&&"object"==typeof e[a]?("object"==typeof t[a]&&null!==t[a]||(t[a]={}),w(t[a],e[a])):t[a]=e[a]);return t}function A(t){var e=typeof t;return("object"==e||"function"==e&&"function"==typeof t.item)&&null!==t&&"number"==typeof t.length&&3!==t.nodeType}function O(t){return"object"==typeof t&&null!==t&&"function"==typeof t.getTime}function D(t){for(var e=[],a=0;a=e||et.call(window,function(){var e=(new Date).getTime(),h=e-o;n=r,r=Math.floor(h/a);var u=r-n;r+u>s||r>=s?(t(s),i()):(0!==u&&t(r),l())})}()}function C(t,e){var a={};if(t)for(var i=1;i=Math.pow(10,r)||Math.abs(t)=0;g--,c/=l)if(d>=c){i=v(t/c,n)+h[g];break}if(s){var f=String(t.toExponential()).split("e-");2===f.length&&f[1]>=3&&f[1]<=24&&(i=f[1]%3>0?v(f[0]/F(10,f[1]%3),n):Number(f[0]).toFixed(2),i+=u[Math.floor(f[1]/3)-1])}}return i}function X(t,e,a){return Y.call(this,t,a)}function V(t,e,a){var i=a("labelsUTC"),n=i?tt:$,r=n.getFullYear(t),o=n.getMonth(t),s=n.getDate(t),l=n.getHours(t),h=n.getMinutes(t),u=n.getSeconds(t),d=n.getMilliseconds(t);if(e>=G.Granularity.DECADAL)return""+r;if(e>=G.Granularity.MONTHLY)return lt[o]+" "+r;if(0===3600*l+60*h+u+.001*d||e>=G.Granularity.DAILY)return g(s)+" "+lt[o];if(eG.Granularity.MINUTELY?f(l,h,u,0):f(l,h,u,d)}function Z(t,e){return _(t,e("labelsUTC"))}Object.defineProperty(a,"__esModule",{value:!0}),a.removeEvent=i,a.cancelEvent=n,a.hsvToRGB=r,a.findPos=o,a.pageX=s,a.pageY=l,a.dragGetX_=h,a.dragGetY_=u,a.isOK=d,a.isValidPoint=c,a.floatFormat=p,a.zeropad=g,a.hmsString_=f,a.dateString_=_,a.round_=v,a.binarySearch=y,a.dateParser=x,a.dateStrToMillis=m,a.update=b,a.updateDeep=w,a.isArrayLike=A,a.isDateLike=O,a.clone=D,a.createCanvas=E,a.getContextPixelRatio=L,a.Iterator=T,a.createIterator=S,a.repeatAndCleanup=P,a.isPixelChangingOptionList=C,a.detectLineDelimiter=M,a.isNodeContainedBy=N,a.pow=F,a.toRGB_=R,a.isCanvasSupported=I,a.parseFloat_=H,a.numberValueFormatter=Y,a.numberAxisLabelFormatter=X,a.dateAxisLabelFormatter=V,a.dateValueFormatter=Z;var B=t("./dygraph-tickers"),G=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(B);a.LOG_SCALE=10;var W=Math.log(10);a.LN_TEN=W;var U=function(t){return Math.log(t)/W};a.log10=U;var z=function(t,e,a){var i=U(t),n=U(e),r=i+a*(n-i);return Math.pow(10,r)};a.logRangeFraction=z;var j=[2,2];a.DOTTED_LINE=j;var K=[7,3];a.DASHED_LINE=K;var q=[7,2,2,2];a.DOT_DASH_LINE=q;a.HORIZONTAL=1;a.VERTICAL=2;var Q=function(t){return t.getContext("2d")};a.getContext=Q;var J=function(t,e,a){t.addEventListener(e,a,!1)};a.addEvent=J;var $={getFullYear:function(t){return t.getFullYear()},getMonth:function(t){return t.getMonth()},getDate:function(t){return t.getDate()},getHours:function(t){return t.getHours()},getMinutes:function(t){return t.getMinutes()},getSeconds:function(t){return t.getSeconds()},getMilliseconds:function(t){return t.getMilliseconds()},getDay:function(t){return t.getDay()},makeDate:function(t,e,a,i,n,r,o){return new Date(t,e,a,i,n,r,o)}};a.DateAccessorsLocal=$;var tt={getFullYear:function(t){return t.getUTCFullYear()},getMonth:function(t){return t.getUTCMonth()},getDate:function(t){return t.getUTCDate()},getHours:function(t){return t.getUTCHours()},getMinutes:function(t){return t.getUTCMinutes()},getSeconds:function(t){return t.getUTCSeconds()},getMilliseconds:function(t){return t.getUTCMilliseconds()},getDay:function(t){return t.getUTCDay()},makeDate:function(t,e,a,i,n,r,o){return new Date(Date.UTC(t,e,a,i,n,r,o))}};a.DateAccessorsUTC=tt,T.prototype.next=function(){if(!this.hasNext)return null;for(var t=this.peek,e=this.nextIdx_+1,a=!1;e=0;n--){var r=i[n][0],o=i[n][1];if(o.call(r,a),a.propagationStopped)break}return a.defaultPrevented},Q.prototype.getPluginInstance_=function(t){for(var e=0;e=0;if(null===t||void 0===t)return e||a;if("y"===t)return a;throw new Error("axis parameter is ["+t+"] must be null, 'x' or 'y'.")},Q.prototype.toString=function(){var t=this.maindiv_;return"[Dygraph "+(t&&t.id?t.id:t)+"]"},Q.prototype.attr_=function(t,e){return e?this.attributes_.getForSeries(t,e):this.attributes_.get(t)},Q.prototype.getOption=function(t,e){return this.attr_(t,e)},Q.prototype.getNumericOption=function(t,e){return this.getOption(t,e)},Q.prototype.getStringOption=function(t,e){return this.getOption(t,e)},Q.prototype.getBooleanOption=function(t,e){return this.getOption(t,e)},Q.prototype.getFunctionOption=function(t,e){return this.getOption(t,e)},Q.prototype.getOptionForAxis=function(t,e){return this.attributes_.getForAxis(t,e)},Q.prototype.optionsViewForAxis_=function(t){var e=this;return function(a){var i=e.user_attrs_.axes;return i&&i[t]&&i[t].hasOwnProperty(a)?i[t][a]:("x"!==t||"logscale"!==a)&&(void 0!==e.user_attrs_[a]?e.user_attrs_[a]:(i=e.attrs_.axes,i&&i[t]&&i[t].hasOwnProperty(a)?i[t][a]:"y"==t&&e.axes_[0].hasOwnProperty(a)?e.axes_[0][a]:"y2"==t&&e.axes_[1].hasOwnProperty(a)?e.axes_[1][a]:e.attr_(a)))}},Q.prototype.rollPeriod=function(){return this.rollPeriod_},Q.prototype.xAxisRange=function(){return this.dateWindow_?this.dateWindow_:this.xAxisExtremes()},Q.prototype.xAxisExtremes=function(){var t=this.getNumericOption("xRangePad")/this.plotter_.area.w;if(0===this.numRows())return[0-t,1+t];var e=this.rawData_[0][0],a=this.rawData_[this.rawData_.length-1][0];if(t){var i=a-e;e-=i*t,a+=i*t}return[e,a]},Q.prototype.yAxisExtremes=function(){var t=this.gatherDatasets_(this.rolledSeries_,null),e=t.extremes,a=this.axes_;this.computeYAxisRanges_(e);var i=this.axes_;return this.axes_=a,i.map(function(t){return t.extremeRange})},Q.prototype.yAxisRange=function(t){if(void 0===t&&(t=0),t<0||t>=this.axes_.length)return null;var e=this.axes_[t];return[e.computedValueRange[0],e.computedValueRange[1]]},Q.prototype.yAxisRanges=function(){for(var t=[],e=0;ethis.rawData_.length?null:e<0||e>this.rawData_[t].length?null:this.rawData_[t][e]},Q.prototype.createInterface_=function(){var t=this.maindiv_;this.graphDiv=document.createElement("div"),this.graphDiv.style.textAlign="left",this.graphDiv.style.position="relative",t.appendChild(this.graphDiv),this.canvas_=x.createCanvas(),this.canvas_.style.position="absolute",this.hidden_=this.createPlotKitCanvas_(this.canvas_),this.canvas_ctx_=x.getContext(this.canvas_),this.hidden_ctx_=x.getContext(this.hidden_),this.resizeElements_(),this.graphDiv.appendChild(this.hidden_),this.graphDiv.appendChild(this.canvas_),this.mouseEventElement_=this.createMouseEventElement_(),this.layout_=new h.default(this);var e=this;this.mouseMoveHandler_=function(t){e.mouseMove_(t)},this.mouseOutHandler_=function(t){var a=t.target||t.fromElement,i=t.relatedTarget||t.toElement;x.isNodeContainedBy(a,e.graphDiv)&&!x.isNodeContainedBy(i,e.graphDiv)&&e.mouseOut_(t)},this.addAndTrackEvent(window,"mouseout",this.mouseOutHandler_),this.addAndTrackEvent(this.mouseEventElement_,"mousemove",this.mouseMoveHandler_),this.resizeHandler_||(this.resizeHandler_=function(t){e.resize()},this.addAndTrackEvent(window,"resize",this.resizeHandler_))},Q.prototype.resizeElements_=function(){this.graphDiv.style.width=this.width_+"px",this.graphDiv.style.height=this.height_+"px";var t=this.getNumericOption("pixelRatio"),e=t||x.getContextPixelRatio(this.canvas_ctx_);this.canvas_.width=this.width_*e,this.canvas_.height=this.height_*e,this.canvas_.style.width=this.width_+"px",this.canvas_.style.height=this.height_+"px",1!==e&&this.canvas_ctx_.scale(e,e);var a=t||x.getContextPixelRatio(this.hidden_ctx_);this.hidden_.width=this.width_*a,this.hidden_.height=this.height_*a,this.hidden_.style.width=this.width_+"px",this.hidden_.style.height=this.height_+"px",1!==a&&this.hidden_ctx_.scale(a,a)},Q.prototype.destroy=function(){this.canvas_ctx_.restore(),this.hidden_ctx_.restore();for(var t=this.plugins_.length-1;t>=0;t--){var e=this.plugins_.pop();e.plugin.destroy&&e.plugin.destroy()}this.removeTrackedEvents_(),x.removeEvent(window,"mouseout",this.mouseOutHandler_),x.removeEvent(this.mouseEventElement_,"mousemove",this.mouseMoveHandler_),x.removeEvent(window,"resize",this.resizeHandler_),this.resizeHandler_=null,function t(e){for(;e.hasChildNodes();)t(e.firstChild),e.removeChild(e.firstChild)}(this.maindiv_);var a=function(t){for(var e in t)"object"==typeof t[e]&&(t[e]=null)};a(this.layout_),a(this.plotter_),a(this)},Q.prototype.createPlotKitCanvas_=function(t){var e=x.createCanvas();return e.style.position="absolute",e.style.top=t.style.top,e.style.left=t.style.left, e.width=this.width_,e.height=this.height_,e.style.width=this.width_+"px",e.style.height=this.height_+"px",e},Q.prototype.createMouseEventElement_=function(){return this.canvas_},Q.prototype.setColors_=function(){var t=this.getLabels(),e=t.length-1;this.colors_=[],this.colorsMap_={};for(var a=this.getNumericOption("colorSaturation")||1,i=this.getNumericOption("colorValue")||.5,n=Math.ceil(e/2),r=this.getOption("colors"),o=this.visibility(),s=0;s=0;--u)for(var d=this.layout_.points[u],c=0;c=l.length)){var h=l[s];if(x.isValidPoint(h)){var u=h.canvasy;if(t>h.canvasx&&s+10){var p=(t-h.canvasx)/c;u+=p*(d.canvasy-h.canvasy)}}}else if(t0){var g=l[s-1];if(x.isValidPoint(g)){var c=h.canvasx-g.canvasx;if(c>0){var p=(h.canvasx-t)/c;u+=p*(g.canvasy-h.canvasy)}}}(0===r||u=0){var r=0,o=this.attr_("labels");for(e=1;er&&(r=s)}var l=this.previousVerticalX_;a.clearRect(l-r-1,0,2*r+2,this.height_)}if(this.selPoints_.length>0){var h=this.selPoints_[0].canvasx;for(a.save(),e=0;e=0){t!=this.lastRow_&&(i=!0),this.lastRow_=t;for(var n=0;n=0&&o=0&&(i=!0),this.lastRow_=-1;return this.selPoints_.length?this.lastx_=this.selPoints_[0].xval:this.lastx_=-1,void 0!==e&&(this.highlightSet_!==e&&(i=!0),this.highlightSet_=e),void 0!==a&&(this.lockedSet_=a),i&&this.updateSelection_(void 0),i},Q.prototype.mouseOut_=function(t){this.getFunctionOption("unhighlightCallback")&&this.getFunctionOption("unhighlightCallback").call(this,t),this.getBooleanOption("hideOverlayOnMouseOut")&&!this.lockedSet_&&this.clearSelection()},Q.prototype.clearSelection=function(){if(this.cascadeEvents_("deselect",{}),this.lockedSet_=!1,this.fadeLevel)return void this.animateSelection_(-1);this.canvas_ctx_.clearRect(0,0,this.width_,this.height_),this.fadeLevel=0,this.selPoints_=[],this.lastx_=-1,this.lastRow_=-1,this.highlightSet_=null},Q.prototype.getSelection=function(){if(!this.selPoints_||this.selPoints_.length<1)return-1;for(var t=0;t1&&(a=this.dataHandler_.rollingAverage(a,this.rollPeriod_,this.attributes_)),this.rolledSeries_.push(a)}this.drawGraph_();var i=new Date;this.drawingTimeMs_=i-t},Q.PointType=void 0,Q.stackPoints_=function(t,e,a,i){for(var n=null,r=null,o=null,s=-1,l=0;l=e))for(var a=e;aa[1]&&(a[1]=c),c=1;a--)if(this.visibility()[a-1]){if(e){s=t[a];var p=e[0],g=e[1];for(n=null,r=null,i=0;i=p&&null===n&&(n=i),s[i][0]<=g&&(r=i);null===n&&(n=0);for(var f=n,_=!0;_&&f>0;)f--,_=null===s[f][1];null===r&&(r=s.length-1);var v=r;for(_=!0;_&&v0;){var n=this.readyFns_.pop();n(this)}},Q.prototype.computeYAxes_=function(){var t,e,a;for(this.axes_=[],t=0;t0&&(_=0),v<0&&(v=0)),_==1/0&&(_=0),v==-1/0&&(v=1),a=v-_,0===a&&(0!==v?a=Math.abs(v):(v=1,a=1));var m=v,b=_;e&&(u?(m=v+n*a,b=_):(m=v+n*a,b=_-n*a,b<0&&_>=0&&(b=0),m>0&&v<=0&&(m=0))),h.extremeRange=[b,m]}if(h.valueRange){var w=o(h.valueRange[0])?h.extremeRange[0]:h.valueRange[0],A=o(h.valueRange[1])?h.extremeRange[1]:h.valueRange[1];h.computedValueRange=[w,A]}else h.computedValueRange=h.extremeRange;if(!e)if(u){w=h.computedValueRange[0],A=h.computedValueRange[1];var O=n/(2*n-1),D=(n-1)/(2*n-1);h.computedValueRange[0]=x.logRangeFraction(w,A,O),h.computedValueRange[1]=x.logRangeFraction(w,A,D)}else w=h.computedValueRange[0],A=h.computedValueRange[1],a=A-w,h.computedValueRange[0]=w-a*n,h.computedValueRange[1]=A+a*n;if(c){h.independentTicks=c;var E=this.optionsViewForAxis_("y"+(l?"2":"")),L=E("ticker");h.ticks=L(h.computedValueRange[0],h.computedValueRange[1],this.plotter_.area.h,E,this),r||(r=h)}}if(void 0===r)throw'Configuration Error: At least one axis has to have the "independentTicks" option activated.';for(var l=0;l0&&"e"!=t[a-1]&&"E"!=t[a-1]||t.indexOf("/")>=0||isNaN(parseFloat(t))?e=!0:8==t.length&&t>"19700101"&&t<"20371231"&&(e=!0),this.setXAxisOptions_(e)},Q.prototype.setXAxisOptions_=function(t){t?(this.attrs_.xValueParser=x.dateParser,this.attrs_.axes.x.valueFormatter=x.dateValueFormatter,this.attrs_.axes.x.ticker=v.dateTicker,this.attrs_.axes.x.axisLabelFormatter=x.dateAxisLabelFormatter):(this.attrs_.xValueParser=function(t){return parseFloat(t)},this.attrs_.axes.x.valueFormatter=function(t){return t},this.attrs_.axes.x.ticker=v.numericTicks,this.attrs_.axes.x.axisLabelFormatter=this.attrs_.axes.x.valueFormatter)},Q.prototype.parseCSV_=function(t){var e,a,i=[],n=x.detectLineDelimiter(t),r=t.split(n||"\n"),o=this.getStringOption("delimiter");-1==r[0].indexOf(o)&&r[0].indexOf("\t")>=0&&(o="\t");var s=0;"labels"in this.user_attrs_||(s=1,this.attrs_.labels=r[0].split(o),this.attributes_.reparseSeries());for(var l,h=!1,u=this.attr_("labels").length,d=!1,c=s;c0&&f[0]0;)e=String.fromCharCode(65+(t-1)%26)+e.toLowerCase(),t=Math.floor((t-1)/26);return e}(g.length),y.text="";for(var m=0;m0&&f[0]0&&this.setAnnotations(g,!0),this.attributes_.reparseSeries()},Q.prototype.cascadeDataDidUpdateEvent_=function(){this.cascadeEvents_("dataDidUpdate",{})},Q.prototype.start_=function(){var t=this.file_;if("function"==typeof t&&(t=t()),x.isArrayLike(t))this.rawData_=this.parseArray_(t),this.cascadeDataDidUpdateEvent_(),this.predraw_();else if("object"==typeof t&&"function"==typeof t.getColumnRange)this.parseDataTable_(t),this.cascadeDataDidUpdateEvent_(),this.predraw_();else if("string"==typeof t){var e=x.detectLineDelimiter(t);if(e)this.loadedEvent_(t);else{var a;a=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP");var i=this;a.onreadystatechange=function(){4==a.readyState&&(200!==a.status&&0!==a.status||i.loadedEvent_(a.responseText))},a.open("GET",t,!0),a.send(null)}}else console.error("Unknown data format: "+typeof t)},Q.prototype.updateOptions=function(t,e){void 0===e&&(e=!1);var a=t.file,i=Q.copyUserAttrs_(t);"rollPeriod"in i&&(this.rollPeriod_=i.rollPeriod),"dateWindow"in i&&(this.dateWindow_=i.dateWindow);var n=x.isPixelChangingOptionList(this.attr_("labels"),i);x.updateDeep(this.user_attrs_,i),this.attributes_.reparseSeries(),a?(this.cascadeEvents_("dataWillUpdate",{}),this.file_=a,e||this.start_()):e||(n?this.predraw_():this.renderGraph_(!1))},Q.copyUserAttrs_=function(t){var e={};for(var a in t)t.hasOwnProperty(a)&&"file"!=a&&t.hasOwnProperty(a)&&(e[a]=t[a]);return e},Q.prototype.resize=function(t,e){if(!this.resize_lock){this.resize_lock=!0,null===t!=(null===e)&&(console.warn("Dygraph.resize() should be called with zero parameters or two non-NULL parameters. Pretending it was zero."),t=e=null);var a=this.width_,i=this.height_;t?(this.maindiv_.style.width=t+"px",this.maindiv_.style.height=e+"px",this.width_=t,this.height_=e):(this.width_=this.maindiv_.clientWidth,this.height_=this.maindiv_.clientHeight),a==this.width_&&i==this.height_||(this.resizeElements_(),this.predraw_()),this.resize_lock=!1}},Q.prototype.adjustRoll=function(t){this.rollPeriod_=t,this.predraw_()},Q.prototype.visibility=function(){for(this.getOption("visibility")||(this.attrs_.visibility=[]);this.getOption("visibility").length=a.length?console.warn("Invalid series number in setVisibility: "+n):a[n]=t[n]);else for(var n=0;n=a.length?console.warn("Invalid series number in setVisibility: "+n):a[n]=t[n]:t[n]<0||t[n]>=a.length?console.warn("Invalid series number in setVisibility: "+t[n]):a[t[n]]=e;this.predraw_()},Q.prototype.size=function(){return{width:this.width_,height:this.height_}},Q.prototype.setAnnotations=function(t,e){if(this.annotations_=t,!this.layout_)return void console.warn("Tried to setAnnotations before dygraph was ready. Try setting them in a ready() block. See dygraphs.com/tests/annotation.html");this.layout_.setAnnotations(this.annotations_),e||this.predraw_()},Q.prototype.annotations=function(){return this.annotations_},Q.prototype.getLabels=function(){var t=this.attr_("labels");return t?t.slice():null},Q.prototype.indexFromSetName=function(t){return this.setIndexByName_[t]},Q.prototype.getRowForX=function(t){for(var e=0,a=this.numRows()-1;e<=a;){var i=a+e>>1,n=this.getValue(i,0);if(nt)a=i-1;else{if(e==i)return i;a=i}}return null},Q.prototype.ready=function(t){this.is_initial_draw_?this.readyFns_.push(t):t.call(this,this)},Q.prototype.addAndTrackEvent=function(t,e,a){x.addEvent(t,e,a),this.registeredEvents_.push({elem:t,type:e,fn:a})},Q.prototype.removeTrackedEvents_=function(){if(this.registeredEvents_)for(var t=0;tr.x+r.w||l.canvasyr.y+r.h)){var h=l.annotation,u=6;h.hasOwnProperty("tickHeight")&&(u=h.tickHeight);var d=document.createElement("div") ;d.style.fontSize=e.getOption("axisLabelFontSize")+"px";var c="dygraph-annotation";h.hasOwnProperty("icon")||(c+=" dygraphDefaultAnnotation dygraph-default-annotation"),h.hasOwnProperty("cssClass")&&(c+=" "+h.cssClass),d.className=c;var p=h.hasOwnProperty("width")?h.width:16,g=h.hasOwnProperty("height")?h.height:16;if(h.hasOwnProperty("icon")){var f=document.createElement("img");f.src=h.icon,f.width=p,f.height=g,d.appendChild(f)}else l.annotation.hasOwnProperty("shortText")&&d.appendChild(document.createTextNode(l.annotation.shortText));var _=l.canvasx-p/2;d.style.left=_+"px";var v=0;if(h.attachAtBottom){var y=r.y+r.h-g-u;o[_]?y-=o[_]:o[_]=0,o[_]+=u+g,v=y}else v=l.canvasy-g-u;d.style.top=v+"px",d.style.width=p+"px",d.style.height=g+"px",d.title=l.annotation.text,d.style.color=e.colorsMap_[l.name],d.style.borderColor=e.colorsMap_[l.name],h.div=d,e.addAndTrackEvent(d,"click",n("clickHandler","annotationClickHandler",l)),e.addAndTrackEvent(d,"mouseover",n("mouseOverHandler","annotationMouseOverHandler",l)),e.addAndTrackEvent(d,"mouseout",n("mouseOutHandler","annotationMouseOutHandler",l)),e.addAndTrackEvent(d,"dblclick",n("dblClickHandler","annotationDblClickHandler",l)),i.appendChild(d),this.annotations_.push(d);var x=t.drawingContext;if(x.save(),x.strokeStyle=h.hasOwnProperty("tickColor")?h.tickColor:e.colorsMap_[l.name],x.lineWidth=h.hasOwnProperty("tickWidth")?h.tickWidth:e.getOption("strokeWidth"),x.beginPath(),h.attachAtBottom){var y=v+g;x.moveTo(l.canvasx,y),x.lineTo(l.canvasx,y+u)}else x.moveTo(l.canvasx,l.canvasy),x.lineTo(l.canvasx,l.canvasy-2-u);x.closePath(),x.stroke(),x.restore()}}},i.prototype.destroy=function(){this.detachLabels()},a.default=i,e.exports=a.default},{}],21:[function(t,e,a){"use strict";Object.defineProperty(a,"__esModule",{value:!0});var i=t("../dygraph-utils"),n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(i),r=function(){this.xlabels_=[],this.ylabels_=[]};r.prototype.toString=function(){return"Axes Plugin"},r.prototype.activate=function(t){return{layout:this.layout,clearChart:this.clearChart,willDrawChart:this.willDrawChart}},r.prototype.layout=function(t){var e=t.dygraph;if(e.getOptionForAxis("drawAxis","y")){var a=e.getOptionForAxis("axisLabelWidth","y")+2*e.getOptionForAxis("axisTickSize","y");t.reserveSpaceLeft(a)}if(e.getOptionForAxis("drawAxis","x")){var i;i=e.getOption("xAxisHeight")?e.getOption("xAxisHeight"):e.getOptionForAxis("axisLabelFontSize","x")+2*e.getOptionForAxis("axisTickSize","x"),t.reserveSpaceBottom(i)}if(2==e.numAxes()){if(e.getOptionForAxis("drawAxis","y2")){var a=e.getOptionForAxis("axisLabelWidth","y2")+2*e.getOptionForAxis("axisTickSize","y2");t.reserveSpaceRight(a)}}else e.numAxes()>2&&e.error("Only two y-axes are supported at this time. (Trying to use "+e.numAxes()+")")},r.prototype.detachLabels=function(){function t(t){for(var e=0;e0){var x=r.numAxes(),m=[y("y"),y("y2")];_.yticks.forEach(function(t){if(void 0!==t.label){s=v.x;var e="y1",a=m[0];1==t.axis&&(s=v.x+v.w,-1,e="y2",a=m[1]);var n=a("axisLabelFontSize");l=v.y+t.pos*v.h,o=f(t.label,"y",2==x?e:null);var r=l-n/2;r<0&&(r=0),r+n+3>c?o.style.bottom="0":o.style.top=r+"px",0===t.axis?(o.style.left=v.x-a("axisLabelWidth")-a("axisTickSize")+"px",o.style.textAlign="right"):1==t.axis&&(o.style.left=v.x+v.w+a("axisTickSize")+"px",o.style.textAlign="left"),o.style.width=a("axisLabelWidth")+"px",u.appendChild(o),i.ylabels_.push(o)}});var b=this.ylabels_[0],w=r.getOptionForAxis("axisLabelFontSize","y");parseInt(b.style.top,10)+w>c-w&&(b.style.top=parseInt(b.style.top,10)-w/2+"px")}var A;if(r.getOption("drawAxesAtZero")){var O=r.toPercentXCoord(0);(O>1||O<0||isNaN(O))&&(O=0),A=e(v.x+O*v.w)}else A=e(v.x);h.strokeStyle=r.getOptionForAxis("axisLineColor","y"),h.lineWidth=r.getOptionForAxis("axisLineWidth","y"),h.beginPath(),h.moveTo(A,a(v.y)),h.lineTo(A,a(v.y+v.h)),h.closePath(),h.stroke(),2==r.numAxes()&&(h.strokeStyle=r.getOptionForAxis("axisLineColor","y2"),h.lineWidth=r.getOptionForAxis("axisLineWidth","y2"),h.beginPath(),h.moveTo(a(v.x+v.w),a(v.y)),h.lineTo(a(v.x+v.w),a(v.y+v.h)),h.closePath(),h.stroke())}if(r.getOptionForAxis("drawAxis","x")){if(_.xticks){var D=y("x");_.xticks.forEach(function(t){if(void 0!==t.label){s=v.x+t.pos*v.w,l=v.y+v.h,o=f(t.label,"x"),o.style.textAlign="center",o.style.top=l+D("axisTickSize")+"px";var e=s-D("axisLabelWidth")/2;e+D("axisLabelWidth")>d&&(e=d-D("axisLabelWidth"),o.style.textAlign="right"),e<0&&(e=0,o.style.textAlign="left"),o.style.left=e+"px",o.style.width=D("axisLabelWidth")+"px",u.appendChild(o),i.xlabels_.push(o)}})}h.strokeStyle=r.getOptionForAxis("axisLineColor","x"),h.lineWidth=r.getOptionForAxis("axisLineWidth","x"),h.beginPath();var E;if(r.getOption("drawAxesAtZero")){var O=r.toPercentYCoord(0,0);(O>1||O<0)&&(O=1),E=a(v.y+O*v.h)}else E=a(v.y+v.h);h.moveTo(e(v.x),E),h.lineTo(e(v.x+v.w),E),h.closePath(),h.stroke()}h.restore()}},a.default=r,e.exports=a.default},{"../dygraph-utils":17}],22:[function(t,e,a){"use strict";Object.defineProperty(a,"__esModule",{value:!0});var i=function(){this.title_div_=null,this.xlabel_div_=null,this.ylabel_div_=null,this.y2label_div_=null};i.prototype.toString=function(){return"ChartLabels Plugin"},i.prototype.activate=function(t){return{layout:this.layout,didDrawChart:this.didDrawChart}};var n=function(t){var e=document.createElement("div");return e.style.position="absolute",e.style.left=t.x+"px",e.style.top=t.y+"px",e.style.width=t.w+"px",e.style.height=t.h+"px",e};i.prototype.detachLabels_=function(){for(var t=[this.title_div_,this.xlabel_div_,this.ylabel_div_,this.y2label_div_],e=0;e=2);o=h.yticks,l.save(),o.forEach(function(t){if(t.has_tick){var r=t.axis;g[r]&&(l.save(),f[r]&&l.setLineDash&&l.setLineDash(_[r]),l.strokeStyle=c[r],l.lineWidth=p[r],i=e(u.x),n=a(u.y+t.pos*u.h),l.beginPath(),l.moveTo(i,n),l.lineTo(i+u.w,n),l.stroke(),l.restore())}}),l.restore()}if(s.getOptionForAxis("drawGrid","x")){o=h.xticks,l.save();var _=s.getOptionForAxis("gridLinePattern","x"),f=_&&_.length>=2;f&&l.setLineDash&&l.setLineDash(_),l.strokeStyle=s.getOptionForAxis("gridLineColor","x"),l.lineWidth=s.getOptionForAxis("gridLineWidth","x"),o.forEach(function(t){t.has_tick&&(i=e(u.x+t.pos*u.w),n=a(u.y+u.h),l.beginPath(),l.moveTo(i,n),l.lineTo(i,u.y),l.closePath(),l.stroke())}),f&&l.setLineDash&&l.setLineDash([]),l.restore()}},i.prototype.destroy=function(){},a.default=i,e.exports=a.default},{}],24:[function(t,e,a){"use strict";function i(t,e,a){if(!t||t.length<=1)return'
';var i,n,r,o,s,l=0,h=0,u=[];for(i=0;i<=t.length;i++)l+=t[i%t.length];if((s=Math.floor(a/(l-t[0])))>1){for(i=0;i';return d}Object.defineProperty(a,"__esModule",{value:!0});var n=t("../dygraph-utils"),r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(n),o=function(){this.legend_div_=null,this.is_generated_div_=!1};o.prototype.toString=function(){return"Legend Plugin"},o.prototype.activate=function(t){var e,a=t.getOption("labelsDiv");return a&&null!==a?e="string"==typeof a||a instanceof String?document.getElementById(a):a:(e=document.createElement("div"),e.className="dygraph-legend",t.graphDiv.appendChild(e),this.is_generated_div_=!0),this.legend_div_=e,this.one_em_width_=10,{select:this.select,deselect:this.deselect,predraw:this.predraw,didDrawChart:this.didDrawChart}};var s=function(t){var e=document.createElement("span");e.setAttribute("style","margin: 0; padding: 0 0 0 1em; border: 0;"),t.appendChild(e);var a=e.offsetWidth;return t.removeChild(e),a},l=function(t){return t.replace(/&/g,"&").replace(/"/g,""").replace(//g,">")};o.prototype.select=function(t){var e=t.selectedX,a=t.selectedPoints,i=t.selectedRow,n=t.dygraph.getOption("legend");if("never"===n)return void(this.legend_div_.style.display="none");if("follow"===n){var r=t.dygraph.plotter_.area,s=this.legend_div_.offsetWidth,l=t.dygraph.getOptionForAxis("axisLabelWidth","y"),h=a[0].x*r.w+50,u=a[0].y*r.h-50;h+s+1>r.w&&(h=h-100-s-(l-r.x)),t.dygraph.graphDiv.appendChild(this.legend_div_),this.legend_div_.style.left=l+h+"px",this.legend_div_.style.top=u+"px"}var d=o.generateLegendHTML(t.dygraph,e,a,this.one_em_width_,i);this.legend_div_.innerHTML=d,this.legend_div_.style.display=""},o.prototype.deselect=function(t){"always"!==t.dygraph.getOption("legend")&&(this.legend_div_.style.display="none");var e=s(this.legend_div_);this.one_em_width_=e;var a=o.generateLegendHTML(t.dygraph,void 0,void 0,e,null);this.legend_div_.innerHTML=a},o.prototype.didDrawChart=function(t){this.deselect(t)},o.prototype.predraw=function(t){if(this.is_generated_div_){t.dygraph.graphDiv.appendChild(this.legend_div_);var e=t.dygraph.getArea(),a=this.legend_div_.offsetWidth;this.legend_div_.style.left=e.x+e.w-a-1+"px",this.legend_div_.style.top=e.y+"px"}},o.prototype.destroy=function(){this.legend_div_=null},o.generateLegendHTML=function(t,e,a,n,s){var h={dygraph:t,x:e,series:[]},u={},d=t.getLabels();if(d)for(var c=1;c":" "),a+=""+r.dashHTML+" "+r.labelHTML+"")}return a}a=t.xHTML+":";for(var n=0;n");a+=" "+r.labelHTML+": "+r.yHTML+""}}return a},a.default=o,e.exports=a.default},{"../dygraph-utils":17}],25:[function(t,e,a){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(a,"__esModule",{value:!0});var n=t("../dygraph-utils"),r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(n),o=t("../dygraph-interaction-model"),s=i(o),l=t("../iframe-tarp"),h=i(l),u=function(){this.hasTouchInterface_="undefined"!=typeof TouchEvent,this.isMobileDevice_=/mobile|android/gi.test(navigator.appVersion),this.interfaceCreated_=!1};u.prototype.toString=function(){return"RangeSelector Plugin"},u.prototype.activate=function(t){return this.dygraph_=t,this.getOption_("showRangeSelector")&&this.createInterface_(),{layout:this.reserveSpace_,predraw:this.renderStaticLayer_,didDrawChart:this.renderInteractiveLayer_}},u.prototype.destroy=function(){this.bgcanvas_=null,this.fgcanvas_=null,this.leftZoomHandle_=null,this.rightZoomHandle_=null},u.prototype.getOption_=function(t,e){return this.dygraph_.getOption(t,e)},u.prototype.setDefaultOption_=function(t,e){this.dygraph_.attrs_[t]=e},u.prototype.createInterface_=function(){this.createCanvases_(),this.createZoomHandles_(),this.initInteraction_(),this.getOption_("animatedZooms")&&(console.warn("Animated zooms and range selector are not compatible; disabling animatedZooms."),this.dygraph_.updateOptions({animatedZooms:!1},!0)),this.interfaceCreated_=!0,this.addToGraph_()},u.prototype.addToGraph_=function(){var t=this.graphDiv_=this.dygraph_.graphDiv;t.appendChild(this.bgcanvas_),t.appendChild(this.fgcanvas_),t.appendChild(this.leftZoomHandle_),t.appendChild(this.rightZoomHandle_)},u.prototype.removeFromGraph_=function(){var t=this.graphDiv_;t.removeChild(this.bgcanvas_),t.removeChild(this.fgcanvas_),t.removeChild(this.leftZoomHandle_),t.removeChild(this.rightZoomHandle_),this.graphDiv_=null},u.prototype.reserveSpace_=function(t){this.getOption_("showRangeSelector")&&t.reserveSpaceBottom(this.getOption_("rangeSelectorHeight")+4)},u.prototype.renderStaticLayer_=function(){this.updateVisibility_()&&(this.resize_(),this.drawStaticLayer_())},u.prototype.renderInteractiveLayer_=function(){this.updateVisibility_()&&!this.isChangingRange_&&(this.placeZoomHandles_(),this.drawInteractiveLayer_())},u.prototype.updateVisibility_=function(){var t=this.getOption_("showRangeSelector");if(t)this.interfaceCreated_?this.graphDiv_&&this.graphDiv_.parentNode||this.addToGraph_():this.createInterface_();else if(this.graphDiv_){this.removeFromGraph_();var e=this.dygraph_;setTimeout(function(){e.width_=0,e.resize()},1)}return t},u.prototype.resize_=function(){function t(t,e,a,i){var n=i||r.getContextPixelRatio(e);t.style.top=a.y+"px",t.style.left=a.x+"px",t.width=a.w*n,t.height=a.h*n,t.style.width=a.w+"px",t.style.height=a.h+"px",1!=n&&e.scale(n,n)}var e=this.dygraph_.layout_.getPlotArea(),a=0;this.dygraph_.getOptionForAxis("drawAxis","x")&&(a=this.getOption_("xAxisHeight")||this.getOption_("axisLabelFontSize")+2*this.getOption_("axisTickSize")),this.canvasRect_={x:e.x,y:e.y+e.h+a+4,w:e.w,h:this.getOption_("rangeSelectorHeight")};var i=this.dygraph_.getNumericOption("pixelRatio");t(this.bgcanvas_,this.bgcanvas_ctx_,this.canvasRect_,i),t(this.fgcanvas_,this.fgcanvas_ctx_,this.canvasRect_,i)},u.prototype.createCanvases_=function(){this.bgcanvas_=r.createCanvas(),this.bgcanvas_.className="dygraph-rangesel-bgcanvas",this.bgcanvas_.style.position="absolute",this.bgcanvas_.style.zIndex=9,this.bgcanvas_ctx_=r.getContext(this.bgcanvas_),this.fgcanvas_=r.createCanvas(),this.fgcanvas_.className="dygraph-rangesel-fgcanvas",this.fgcanvas_.style.position="absolute",this.fgcanvas_.style.zIndex=9,this.fgcanvas_.style.cursor="default",this.fgcanvas_ctx_=r.getContext(this.fgcanvas_)},u.prototype.createZoomHandles_=function(){var t=new Image;t.className="dygraph-rangesel-zoomhandle",t.style.position="absolute",t.style.zIndex=10,t.style.visibility="hidden",t.style.cursor="col-resize",t.width=9,t.height=16,t.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAQCAYAAADESFVDAAAAAXNSR0IArs4c6QAAAAZiS0dEANAAzwDP4Z7KegAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9sHGw0cMqdt1UwAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAaElEQVQoz+3SsRFAQBCF4Z9WJM8KCDVwownl6YXsTmCUsyKGkZzcl7zkz3YLkypgAnreFmDEpHkIwVOMfpdi9CEEN2nGpFdwD03yEqDtOgCaun7sqSTDH32I1pQA2Pb9sZecAxc5r3IAb21d6878xsAAAAAASUVORK5CYII=",this.isMobileDevice_&&(t.width*=2,t.height*=2),this.leftZoomHandle_=t,this.rightZoomHandle_=t.cloneNode(!1)},u.prototype.initInteraction_=function(){var t,e,a,i,n,o,l,u,d,c,p,g,f,_,v=this,y=document,x=0,m=null,b=!1,w=!1,A=!this.isMobileDevice_,O=new h.default;t=function(t){var e=v.dygraph_.xAxisExtremes(),a=(e[1]-e[0])/v.canvasRect_.w;return[e[0]+(t.leftHandlePos-v.canvasRect_.x)*a,e[0]+(t.rightHandlePos-v.canvasRect_.x)*a]},e=function(t){return r.cancelEvent(t),b=!0,x=t.clientX,m=t.target?t.target:t.srcElement,"mousedown"!==t.type&&"dragstart"!==t.type||(r.addEvent(y,"mousemove",a),r.addEvent(y,"mouseup",i)),v.fgcanvas_.style.cursor="col-resize",O.cover(),!0},a=function(t){if(!b)return!1;r.cancelEvent(t);var e=t.clientX-x;if(Math.abs(e)<4)return!0;x=t.clientX;var a,i=v.getZoomHandleStatus_();m==v.leftZoomHandle_?(a=i.leftHandlePos+e,a=Math.min(a,i.rightHandlePos-m.width-3),a=Math.max(a,v.canvasRect_.x)):(a=i.rightHandlePos+e,a=Math.min(a,v.canvasRect_.x+v.canvasRect_.w),a=Math.max(a,i.leftHandlePos+m.width+3));var o=m.width/2;return m.style.left=a-o+"px",v.drawInteractiveLayer_(),A&&n(),!0},i=function(t){return!!b&&(b=!1,O.uncover(),r.removeEvent(y,"mousemove",a),r.removeEvent(y,"mouseup",i),v.fgcanvas_.style.cursor="default",A||n(),!0)},n=function(){try{var e=v.getZoomHandleStatus_();if(v.isChangingRange_=!0,e.isZoomed){var a=t(e);v.dygraph_.doZoomXDates_(a[0],a[1])}else v.dygraph_.resetZoom()}finally{v.isChangingRange_=!1}},o=function(t){var e=v.leftZoomHandle_.getBoundingClientRect(),a=e.left+e.width/2;e=v.rightZoomHandle_.getBoundingClientRect();var i=e.left+e.width/2;return t.clientX>a&&t.clientX=v.canvasRect_.x+v.canvasRect_.w?(n=v.canvasRect_.x+v.canvasRect_.w,i=n-o):(i+=e,n+=e);var s=v.leftZoomHandle_.width/2;return v.leftZoomHandle_.style.left=i-s+"px",v.rightZoomHandle_.style.left=n-s+"px",v.drawInteractiveLayer_(),A&&c(),!0},d=function(t){return!!w&&(w=!1,r.removeEvent(y,"mousemove",u),r.removeEvent(y,"mouseup",d),A||c(),!0)},c=function(){try{v.isChangingRange_=!0,v.dygraph_.dateWindow_=t(v.getZoomHandleStatus_()),v.dygraph_.drawGraph_(!1)}finally{v.isChangingRange_=!1}},p=function(t){if(!b&&!w){var e=o(t)?"move":"default";e!=v.fgcanvas_.style.cursor&&(v.fgcanvas_.style.cursor=e)}},g=function(t){"touchstart"==t.type&&1==t.targetTouches.length?e(t.targetTouches[0])&&r.cancelEvent(t):"touchmove"==t.type&&1==t.targetTouches.length?a(t.targetTouches[0])&&r.cancelEvent(t):i(t)},f=function(t){"touchstart"==t.type&&1==t.targetTouches.length?l(t.targetTouches[0])&&r.cancelEvent(t):"touchmove"==t.type&&1==t.targetTouches.length?u(t.targetTouches[0])&&r.cancelEvent(t):d(t)},_=function(t,e){for(var a=["touchstart","touchend","touchmove","touchcancel"],i=0;i1&&(g=c.rollingAverage(g,e.rollPeriod(),p)),d.push(g)}var f=[];for(t=0;t0)&&(m=Math.min(m,w),b=Math.max(b,w))}if(a)for(b=r.log10(b),b+=.25*b,m=r.log10(m),t=0;tthis.canvasRect_.x||a+1Current intensity (CO2eq./kWh)

Current RAM consumption

- +
@@ -334,4 +334,3 @@

Recommandations

- diff --git a/boagent/requirements.txt b/boagent/requirements.txt index fdf3600..be6f591 100644 --- a/boagent/requirements.txt +++ b/boagent/requirements.txt @@ -4,3 +4,4 @@ boaviztapi-sdk==0.1.2 cpuid==0.0.10 py-cpuinfo==8.0.0 dataclasses +pre_commit diff --git a/boagent/tests/test_api.py b/boagent/tests/test_api.py index 24b3ec4..b61e43f 100644 --- a/boagent/tests/test_api.py +++ b/boagent/tests/test_api.py @@ -12,7 +12,7 @@ power_file_path="./tests/mocks/power_data.json", ) -from api import app # noqa +from api import app # noqa NOW_ISO8601 = datetime.now().isoformat() NOW_ISO8601_MINUS_ONE_MINUTE = datetime.fromisoformat(NOW_ISO8601) - timedelta( @@ -23,7 +23,6 @@ class ApiEndpointsTest(TestCase): - def test_read_info(self): response = client.get("/info") assert response.status_code == 200 diff --git a/docker-compose.yaml b/docker-compose.yaml index 87e1cf9..a7105ff 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -16,7 +16,7 @@ services: depends_on: - boaviztapi - scaphandre - ports: + ports: - "8000:8000" networks: - boagent-network @@ -40,13 +40,13 @@ services: source: /sys/class/powercap target: /sys/class/powercap - "powerdata:/app/data:rw" - command: [ "--no-header", "json", "-s", "10", "--max-top-consumers", "0", "-f", "/app/data/power_data.json" ] + command: [ "--no-header", "json", "-s", "10", "--max-top-consumers", "0", "-f", "/app/data/power_data.json" ] networks: - boagent-network - + boaviztapi: image: ghcr.io/boavizta/boaviztapi:1.2.2 - ports: + ports: - "5000:5000" networks: - boagent-network diff --git a/setup.py b/setup.py index 7be9436..1673345 100644 --- a/setup.py +++ b/setup.py @@ -10,24 +10,40 @@ with open("README.md", "r") as fh: long_description = fh.read() -setup(name='boagent', - maintainer="Benoit Petit", - maintainer_email="bpetit@hubblo.org", - version=__version__, - packages=find_packages(), - include_package_data=True, - description="Monitoring agent/framework for evaluating the environmental impacts of a machine and its applications, including several to all steps of the life cycle of the machine and service, plus multiple criterias of impacts (not just CO2eq metrics / Global Warming Potential). Part of the efforts of https://boavizta.org/en and https://sdialliance.org/.", - use_pipfile=True, - long_description=long_description, - long_description_content_type="text/markdown", - url="https://github.com/Boavizta/boagent", - test_suite='tests', - setup_requires=['setuptools-pipfile'], - keywords=['carbon', 'footprint', 'environment', 'climate', 'co2', 'gwp', 'adp', 'pe', 'energy', 'boagent', 'scaphandre', 'boavizta', 'api'], - classifiers=[ - "Programming Language :: Python :: 3.9", - "Intended Audience :: Developers", - "Operating System :: OS Independent", - ], - python_requires='>=3.9', - entry_points=''' ''') +setup( + name="boagent", + maintainer="Benoit Petit", + maintainer_email="bpetit@hubblo.org", + version=__version__, + packages=find_packages(), + include_package_data=True, + description="Monitoring agent/framework for evaluating the environmental impacts of a machine and its applications, including several to all steps of the life cycle of the machine and service, plus multiple criterias of impacts (not just CO2eq metrics / Global Warming Potential). Part of the efforts of https://boavizta.org/en and https://sdialliance.org/.", + use_pipfile=True, + long_description=long_description, + long_description_content_type="text/markdown", + url="https://github.com/Boavizta/boagent", + test_suite="tests", + setup_requires=["setuptools-pipfile"], + keywords=[ + "carbon", + "footprint", + "environment", + "climate", + "co2", + "gwp", + "adp", + "pe", + "energy", + "boagent", + "scaphandre", + "boavizta", + "api", + ], + classifiers=[ + "Programming Language :: Python :: 3.9", + "Intended Audience :: Developers", + "Operating System :: OS Independent", + ], + python_requires=">=3.9", + entry_points=""" """, +) diff --git a/setup/docker-compose.yaml b/setup/docker-compose.yaml index 5678d82..ffbf2c4 100644 --- a/setup/docker-compose.yaml +++ b/setup/docker-compose.yaml @@ -12,7 +12,7 @@ services: depends_on: - boaviztapi - scaphandre - ports: + ports: - "8000:8000" networks: - boagent-network @@ -31,14 +31,14 @@ services: source: /sys/class/powercap target: /sys/class/powercap - "powerdata:/app/data:rw" - command: [ "json", "-s", "10", "-f", "/app/data/power_data.json" ] + command: [ "json", "-s", "10", "-f", "/app/data/power_data.json" ] networks: - boagent-network - + boaviztapi: #image: ghcr.io/boavizta/boaviztapi:0.1.2 image: bpetit/boaviztapi:v0.1.3 - ports: + ports: - "5000:5000" networks: - boagent-network From 8374948bb76d56af3c79b66463c521010b68f214 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 18 Mar 2024 16:47:10 +0100 Subject: [PATCH 073/227] refactor: update to BoaviztAPI Server class, update to pydantic-settings --- boagent/api/api.py | 18 +++++++++++------- boagent/api/config.py | 2 +- requirements.txt | 3 ++- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index c143e3f..54d6f6c 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -14,7 +14,6 @@ from fastapi.staticfiles import StaticFiles from fastapi.responses import HTMLResponse from boaviztapi_sdk.api.server_api import ServerApi -from boaviztapi_sdk.model.server_dto import ServerDTO from utils import ( iso8601_or_timestamp_as_timestamp, format_scaphandre_json, @@ -23,6 +22,8 @@ sort_ram, sort_disks, ) +from boaviztapi_sdk.models.server import Server + from config import settings from database import ( get_session, @@ -620,14 +621,17 @@ def query_machine_impact_data( server_impact = None if configuration: - server_dto = ServerDTO(usage=usage, configuration=configuration) - server_impact = server_api.server_impact_by_config_v1_server_post( - server_dto=server_dto + server = Server(usage=usage, configuration=configuration) + server_impact = server_api.server_impact_from_configuration_v1_server_post( + server=server ) elif model: - server_dto = ServerDTO(usage=usage, model=model) - server_impact = server_api.server_impact_by_model_v1_server_get( - server_dto=server_dto + # server = Server(usage=usage, model=model) + # This conditional was based on a previous version of BoaviztAPI, where a server model could + # be sent to /v1/server through a GET method. BoaviztAPI now expects an archetype string to + # return a prerecorded impact from an asset. + server_impact = server_api.server_impact_from_model_v1_server_get( + archetype="dellR740" ) return server_impact diff --git a/boagent/api/config.py b/boagent/api/config.py index e573d14..d11f2e0 100644 --- a/boagent/api/config.py +++ b/boagent/api/config.py @@ -1,4 +1,4 @@ -from pydantic import BaseSettings +from pydantic_settings import BaseSettings import os diff --git a/requirements.txt b/requirements.txt index 6c47315..5209c89 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ -i https://pypi.python.org/simple aiofile==3.8.1 anyio==3.6.2 ; python_full_version >= '3.6.2' -boaviztapi-sdk==0.1.2 +boaviztapi-sdk>=0.1.2 caio==0.9.8 ; python_version >= '3.5' and python_version < '4' certifi==2022.9.24 ; python_version >= '3.6' charset-normalizer==2.1.1 ; python_full_version >= '3.6.0' @@ -19,6 +19,7 @@ numpy==1.23.4 ; python_version < '3.10' pandas==1.5.1 py-cpuinfo==9.0.0 pydantic[dotenv]==1.10.2 +pydantic-settings==2.2.1 pytest==8.0.2 python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' python-dotenv==0.21.0 From 3c51abc1ba301d3049d9d448d25c5d0f4db21803 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 18 Mar 2024 17:34:15 +0100 Subject: [PATCH 074/227] fix: format for carbon aware api token setting --- boagent/api/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boagent/api/config.py b/boagent/api/config.py index d11f2e0..c5728c9 100644 --- a/boagent/api/config.py +++ b/boagent/api/config.py @@ -34,7 +34,7 @@ class Settings(BaseSettings): carbon_aware_api_endpoint: str = os.getenv( "CARBON_AWARE_API_ENDPOINT", "https://carbon-aware-api.azurewebsites.net" ) - carbon_aware_api_token: str = os.getenv("CARBON_AWARE_API_TOKEN") + carbon_aware_api_token: str = os.getenv("CARBON_AWARE_API_TOKEN", "token") azure_location: str = os.getenv("AZURE_LOCATION", "northeurope") class Config: From 39bcb0013e8801da709047084443c7da9802c30d Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 18 Mar 2024 17:35:33 +0100 Subject: [PATCH 075/227] test: plural for data keys --- boagent/api/test_api_unit.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/boagent/api/test_api_unit.py b/boagent/api/test_api_unit.py index f946a42..7e0d368 100644 --- a/boagent/api/test_api_unit.py +++ b/boagent/api/test_api_unit.py @@ -15,11 +15,9 @@ def test_read_read_hardware_data(self): build_hardware_data() data = read_hardware_data() - assert type(data) is dict - assert type(data) is dict - assert type(data["cpu"]) is list - assert type(data["ram"]) is list - assert type(data["disk"]) is list + assert type(data["cpus"]) is list + assert type(data["rams"]) is list + assert type(data["disks"]) is list @patch("api.build_hardware_data") def test_read_get_hardware_data_with_fetch_hardware_false( From 2e58a8c8435337ed2f4240de1ef81a9ceba16a4c Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 18 Mar 2024 17:36:05 +0100 Subject: [PATCH 076/227] feat: conditional for model list of length 1 --- boagent/hardware/lshw/lshw.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/boagent/hardware/lshw/lshw.py b/boagent/hardware/lshw/lshw.py index 541d334..b5e0dd0 100644 --- a/boagent/hardware/lshw/lshw.py +++ b/boagent/hardware/lshw/lshw.py @@ -210,6 +210,15 @@ def check_disk_vendor(self, model_string: str) -> str: split_model = model_string.split(" ") vendor = "" + if len(split_model) == 1: + check_string_for_numbers = bool(re.search("\\d", model_string)) + if check_string_for_numbers: + raise Exception( + "Lshw did not output an acceptable manufacturer name for this device." + ) + else: + return model_string + model_first_str = split_model[0] model_second_str = split_model[1] check_first_string_for_numbers = re.search("\\d", model_first_str) From e8b78230afeddc123f1218f35fdacb5921641138 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 18 Mar 2024 17:36:32 +0100 Subject: [PATCH 077/227] test: raise exception as context manager for checking installation of nvme-cli --- boagent/tests/test_lshw.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/boagent/tests/test_lshw.py b/boagent/tests/test_lshw.py index 795f986..f296915 100644 --- a/boagent/tests/test_lshw.py +++ b/boagent/tests/test_lshw.py @@ -142,10 +142,12 @@ def test_check_nvme_cli_is_installed_to_find_storage_and_raises_error_if_not( self, mocked_is_tool ): - with open(f"{mock_lshw_data}_disks.json", "r") as file: + with open(f"{mock_lshw_data}_disks.json", "r") as file, self.assertRaises( + Exception + ): mocked_is_tool.return_value = False data = load(file) - self.assertRaises(Exception, hw.find_storage(data)) + hw.find_storage(data) def test_read_disks_manufacturer(self): From a088dfb7ca9b4ee32f53f4f9bce83e4541ce8192 Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 19 Mar 2024 11:00:57 +0100 Subject: [PATCH 078/227] docs: comments on change in BoaviztAPI SDK, on usage of generate_machine_configuration --- boagent/api/api.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/boagent/api/api.py b/boagent/api/api.py index 54d6f6c..443060c 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -627,6 +627,7 @@ def query_machine_impact_data( ) elif model: # server = Server(usage=usage, model=model) + # TO IMPLEMENT # This conditional was based on a previous version of BoaviztAPI, where a server model could # be sent to /v1/server through a GET method. BoaviztAPI now expects an archetype string to # return a prerecorded impact from an asset. @@ -638,6 +639,7 @@ def query_machine_impact_data( def generate_machine_configuration(hardware_data) -> Dict[str, Any]: + # Either delete or transfer this logic to hardware_cli / lshw config = { "cpu": { "units": len(hardware_data["cpus"]), From 0be60df8a91164078b54c2bb05f2b650056f9dff Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 19 Mar 2024 11:02:56 +0100 Subject: [PATCH 079/227] test: import for query_machine_impact_data --- boagent/api/__init__.py | 7 ++++++- boagent/api/test_api_unit.py | 14 ++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/boagent/api/__init__.py b/boagent/api/__init__.py index 878d2c3..009b832 100644 --- a/boagent/api/__init__.py +++ b/boagent/api/__init__.py @@ -1 +1,6 @@ -from .api import build_hardware_data, read_hardware_data, get_hardware_data +from .api import ( + build_hardware_data, + read_hardware_data, + get_hardware_data, + query_machine_impact_data, +) diff --git a/boagent/api/test_api_unit.py b/boagent/api/test_api_unit.py index 7e0d368..f884b25 100644 --- a/boagent/api/test_api_unit.py +++ b/boagent/api/test_api_unit.py @@ -1,7 +1,12 @@ from unittest import TestCase from unittest.mock import patch -from api import build_hardware_data, read_hardware_data, get_hardware_data +from api import ( + build_hardware_data, + read_hardware_data, + get_hardware_data, + query_machine_impact_data, +) import os @@ -32,10 +37,15 @@ def test_read_get_hardware_data_with_fetch_hardware_false( assert type(data) is dict mocked_build_hardware.assert_not_called() - def test_tead_get_hardware_data_with_fetch_hardware_true(self): + def test_read_get_hardware_data_with_fetch_hardware_true(self): data = get_hardware_data(fetch_hardware=True) assert type(data) is dict + def test_read_query_machine_impact_data(self): + server_impact = query_machine_impact_data() + print(server_impact) + pass + def tearDown(self) -> None: os.remove("./hardware_data.json") From 85febeeaac24a4781740be5314d3c787db6b5ef1 Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 19 Mar 2024 11:03:42 +0100 Subject: [PATCH 080/227] test: refactor to show caught exception --- boagent/tests/test_lshw.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/boagent/tests/test_lshw.py b/boagent/tests/test_lshw.py index f296915..29cc626 100644 --- a/boagent/tests/test_lshw.py +++ b/boagent/tests/test_lshw.py @@ -144,11 +144,14 @@ def test_check_nvme_cli_is_installed_to_find_storage_and_raises_error_if_not( with open(f"{mock_lshw_data}_disks.json", "r") as file, self.assertRaises( Exception - ): + ) as nvme_cli_exception: mocked_is_tool.return_value = False data = load(file) hw.find_storage(data) + caught_exception = nvme_cli_exception.exception + assert str(caught_exception) == "nvme-cli >= 1.0 does not seem to be installed" + def test_read_disks_manufacturer(self): for disk in lshw_disks_data: From e02e921c39941615c27bf2987078e75698bc0ade Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 19 Mar 2024 12:44:10 +0100 Subject: [PATCH 081/227] test: format_usage_request with BoaviztAPI keys --- boagent/api/test_api_unit.py | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/boagent/api/test_api_unit.py b/boagent/api/test_api_unit.py index f884b25..b57bcc8 100644 --- a/boagent/api/test_api_unit.py +++ b/boagent/api/test_api_unit.py @@ -5,7 +5,8 @@ build_hardware_data, read_hardware_data, get_hardware_data, - query_machine_impact_data, + # query_machine_impact_data, + format_usage_request, ) import os @@ -42,10 +43,32 @@ def test_read_get_hardware_data_with_fetch_hardware_true(self): data = get_hardware_data(fetch_hardware=True) assert type(data) is dict - def test_read_query_machine_impact_data(self): - server_impact = query_machine_impact_data() - print(server_impact) - pass + # def test_read_query_machine_impact_data(self): + # server_impact = query_machine_impact_data() + # print(server_impact) + # pass + + def test_read_format_usage_request_with_host_avg_consumption_and_use_time_ratio( + self, + ): + + start_time = 1710837858 + end_time = 1710841458 + location = "FRA" + host_avg_consumption = 120 + use_time_ratio = 1 + + formatted_request = format_usage_request( + start_time=start_time, + end_time=end_time, + location=location, + host_avg_consumption=host_avg_consumption, + use_time_ratio=use_time_ratio, + ) + assert type(formatted_request) is dict + assert "avg_power" in formatted_request + assert "use_time_ratio" in formatted_request + assert "usage_location" in formatted_request def tearDown(self) -> None: os.remove("./hardware_data.json") From 72a20dec5470c31c34631cbbc437af39820b8ade Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 19 Mar 2024 12:45:15 +0100 Subject: [PATCH 082/227] feat: add use_time_ratio and calculate avg_power in usage for BoaviztAPI request --- boagent/api/api.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 443060c..f7e601b 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -548,14 +548,17 @@ def get_metrics( def format_usage_request( - start_time, end_time, host_avg_consumption=None, location=None + start_time, end_time, host_avg_consumption=None, use_time_ratio=None, location=None ): hours_use_time = (end_time - start_time) / 3600.0 kwargs_usage = {"hours_use_time": hours_use_time} if location: kwargs_usage["usage_location"] = location if host_avg_consumption: - kwargs_usage["hours_electrical_consumption"] = host_avg_consumption + avg_power = host_avg_consumption / hours_use_time + kwargs_usage["avg_power"] = avg_power + if use_time_ratio: + kwargs_usage["use_time_ratio"] = use_time_ratio return kwargs_usage @@ -648,9 +651,11 @@ def generate_machine_configuration(hardware_data) -> Dict[str, Any]: }, "ram": sort_ram(hardware_data["rams"]), "disk": sort_disks(hardware_data["disks"]), - "power_supply": hardware_data["power_supply"] - if "power_supply" in hardware_data - else {"units": 1} + "power_supply": ( + hardware_data["power_supply"] + if "power_supply" in hardware_data + else {"units": 1} + ), # TODO: if cpu is a small one, guess that power supply is light/average weight of a laptops power supply ? } return config From 1b1bd8ec7413b78043a4e16e08b90cca50ac7611 Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 19 Mar 2024 17:00:40 +0100 Subject: [PATCH 083/227] test: add compute average consumption test --- boagent/api/test_api_unit.py | 57 +++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/boagent/api/test_api_unit.py b/boagent/api/test_api_unit.py index b57bcc8..bfffff2 100644 --- a/boagent/api/test_api_unit.py +++ b/boagent/api/test_api_unit.py @@ -1,4 +1,4 @@ -from unittest import TestCase +from unittest import TestCase, TestSuite, TestLoader from unittest.mock import patch from api import ( @@ -7,17 +7,21 @@ get_hardware_data, # query_machine_impact_data, format_usage_request, + compute_average_consumption, ) + +from utils import format_scaphandre_json import os +import json -class ApiUnitTest(TestCase): - def test_read_build_hardware_data(self): +class ReadHardwareDataTest(TestCase): + def test_build_hardware_data(self): build_hardware_data() assert os.path.exists("./hardware_data.json") is True - def test_read_read_hardware_data(self): + def test_read_hardware_data(self): build_hardware_data() data = read_hardware_data() @@ -26,9 +30,7 @@ def test_read_read_hardware_data(self): assert type(data["disks"]) is list @patch("api.build_hardware_data") - def test_read_get_hardware_data_with_fetch_hardware_false( - self, mocked_build_hardware - ): + def test_get_hardware_data_with_fetch_hardware_false(self, mocked_build_hardware): # Test case where hardware_data.json is already present on the # filesystem through previous call to build_hardware_data @@ -38,7 +40,7 @@ def test_read_get_hardware_data_with_fetch_hardware_false( assert type(data) is dict mocked_build_hardware.assert_not_called() - def test_read_get_hardware_data_with_fetch_hardware_true(self): + def test_get_hardware_data_with_fetch_hardware_true(self): data = get_hardware_data(fetch_hardware=True) assert type(data) is dict @@ -48,7 +50,25 @@ def test_read_get_hardware_data_with_fetch_hardware_true(self): # print(server_impact) # pass - def test_read_format_usage_request_with_host_avg_consumption_and_use_time_ratio( + def tearDown(self) -> None: + os.remove("./hardware_data.json") + + +class FormatUsageRequestTest(TestCase): + def test_format_usage_request_with_start_and_end_times(self): + + start_time = 1710837858 + end_time = 1710841458 + + formatted_request = format_usage_request( + start_time=start_time, + end_time=end_time, + ) + + assert type(formatted_request) is dict + assert "hours_use_time" in formatted_request + + def test_format_usage_request_with_host_avg_consumption_use_time_ratio_and_location( self, ): @@ -70,5 +90,20 @@ def test_read_format_usage_request_with_host_avg_consumption_and_use_time_ratio( assert "use_time_ratio" in formatted_request assert "usage_location" in formatted_request - def tearDown(self) -> None: - os.remove("./hardware_data.json") + +class ComputeAvgConsumptionTest(TestCase): + def test_compute_average_consumption(self): + + power_data = format_scaphandre_json("./tests/mocks/power_data.json") + data = json.loads(power_data) + avg_host = compute_average_consumption(data) + + assert type(avg_host) is float + + +loader = TestLoader() +suite = TestSuite() + +suite.addTests(loader.loadTestsFromTestCase(ReadHardwareDataTest)) +suite.addTests(loader.loadTestsFromTestCase(FormatUsageRequestTest)) +suite.addTests(loader.loadTestsFromTestCase(ComputeAvgConsumptionTest)) From 8d1c31b513abfeec3da26ab13a8f9bf80c72f786 Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 19 Mar 2024 17:13:54 +0100 Subject: [PATCH 084/227] refactor: host_avg_consumption to avg_power --- boagent/api/api.py | 15 ++++++--------- boagent/api/test_api_unit.py | 4 ++-- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index f7e601b..4b6c5a4 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -415,7 +415,7 @@ def get_metrics( if measure_power: power_data = get_power_data(start_time, end_time) - host_avg_consumption = power_data["host_avg_consumption"] + avg_power = power_data["avg_power"] if "warning" in power_data: res["emissions_calculation_data"][ "energy_consumption_warning" @@ -424,9 +424,7 @@ def get_metrics( boaviztapi_data = query_machine_impact_data( model={}, configuration=hardware_data, - usage=format_usage_request( - start_time, end_time, host_avg_consumption, location - ), + usage=format_usage_request(start_time, end_time, avg_power, location), ) if measure_power: @@ -548,14 +546,13 @@ def get_metrics( def format_usage_request( - start_time, end_time, host_avg_consumption=None, use_time_ratio=None, location=None + start_time, end_time, avg_power=None, use_time_ratio=None, location=None ): hours_use_time = (end_time - start_time) / 3600.0 kwargs_usage = {"hours_use_time": hours_use_time} if location: kwargs_usage["usage_location"] = location - if host_avg_consumption: - avg_power = host_avg_consumption / hours_use_time + if avg_power: kwargs_usage["avg_power"] = avg_power if use_time_ratio: kwargs_usage["use_time_ratio"] = use_time_ratio @@ -569,7 +566,7 @@ def get_power_data(start_time, end_time): data = json.loads(formatted_scaphandre_json) res = [e for e in data if start_time <= float(e["host"]["timestamp"]) <= end_time] power_data["raw_data"] = res - power_data["host_avg_consumption"] = compute_average_consumption(res) + power_data["avg_power"] = compute_average_consumption(res) if end_time - start_time <= 3600: power_data["warning"] = ( "The time window is lower than one hour, but the energy consumption estimate is in " @@ -579,7 +576,7 @@ def get_power_data(start_time, end_time): return power_data -def compute_average_consumption(power_data): +def compute_average_consumption(power_data) -> float: # Host energy consumption total_host = 0.0 avg_host = 0.0 diff --git a/boagent/api/test_api_unit.py b/boagent/api/test_api_unit.py index bfffff2..9692be7 100644 --- a/boagent/api/test_api_unit.py +++ b/boagent/api/test_api_unit.py @@ -75,14 +75,14 @@ def test_format_usage_request_with_host_avg_consumption_use_time_ratio_and_locat start_time = 1710837858 end_time = 1710841458 location = "FRA" - host_avg_consumption = 120 + avg_power = 120 use_time_ratio = 1 formatted_request = format_usage_request( start_time=start_time, end_time=end_time, location=location, - host_avg_consumption=host_avg_consumption, + avg_power=avg_power, use_time_ratio=use_time_ratio, ) assert type(formatted_request) is dict From 5e1f160401976fd05e6a3e26e5df8a506ac8c2f6 Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 19 Mar 2024 17:35:08 +0100 Subject: [PATCH 085/227] feat: add time_workload for BoaviztAPI request, typing --- boagent/api/api.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 4b6c5a4..71a2038 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -8,7 +8,7 @@ from pytz import UTC, utc from datetime import datetime, timedelta from subprocess import run -from typing import Dict, Any, Tuple, List, Optional +from typing import Dict, Any, Tuple, List, Optional, Union from croniter import croniter from fastapi import FastAPI, Response from fastapi.staticfiles import StaticFiles @@ -546,7 +546,12 @@ def get_metrics( def format_usage_request( - start_time, end_time, avg_power=None, use_time_ratio=None, location=None + start_time: float, + end_time: float, + avg_power: Union[float, None] = None, + use_time_ratio: Union[float, None] = None, + location: Union[str, None] = None, + time_workload: Union[float, None] = None, ): hours_use_time = (end_time - start_time) / 3600.0 kwargs_usage = {"hours_use_time": hours_use_time} @@ -556,6 +561,8 @@ def format_usage_request( kwargs_usage["avg_power"] = avg_power if use_time_ratio: kwargs_usage["use_time_ratio"] = use_time_ratio + if time_workload: + kwargs_usage["time_workload"] = time_workload return kwargs_usage From 46b9b4ea1c8584d0f036436474c0c462b7c2cc6f Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 19 Mar 2024 17:35:53 +0100 Subject: [PATCH 086/227] test: format_usage_request with time workload as percentage --- boagent/api/test_api_unit.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/boagent/api/test_api_unit.py b/boagent/api/test_api_unit.py index 9692be7..0766ce2 100644 --- a/boagent/api/test_api_unit.py +++ b/boagent/api/test_api_unit.py @@ -90,6 +90,19 @@ def test_format_usage_request_with_host_avg_consumption_use_time_ratio_and_locat assert "use_time_ratio" in formatted_request assert "usage_location" in formatted_request + def test_format_usage_request_with_time_workload_as_percentage(self): + + start_time = 1710837858 + end_time = 1710841458 + time_workload = 50 + + formatted_request = format_usage_request( + start_time=start_time, end_time=end_time, time_workload=time_workload + ) + + assert type(formatted_request) is dict + assert "time_workload" in formatted_request + class ComputeAvgConsumptionTest(TestCase): def test_compute_average_consumption(self): From ae0cafaf961b4a9775f23509737dee7c1bc9cfcf Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 19 Mar 2024 17:36:27 +0100 Subject: [PATCH 087/227] refactor: iso8601 or timestamp fn returns float --- boagent/api/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boagent/api/utils.py b/boagent/api/utils.py index 1cc159d..7b4ab73 100644 --- a/boagent/api/utils.py +++ b/boagent/api/utils.py @@ -52,7 +52,7 @@ def get_boavizta_api_client(): return client -def iso8601_or_timestamp_as_timestamp(iso_time: str): +def iso8601_or_timestamp_as_timestamp(iso_time: str) -> float: """ Takes an str that's either a timestamp or an iso8601 time. Returns a float that represents a timestamp. From c66775c7459e941cba8deaec820610d04af2ac0a Mon Sep 17 00:00:00 2001 From: repair Date: Tue, 19 Mar 2024 18:01:15 +0100 Subject: [PATCH 088/227] refactor: call for format_usage_request kwargs --- boagent/api/api.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 71a2038..eae09f4 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -411,11 +411,15 @@ def get_metrics( res = {"emissions_calculation_data": {}} - host_avg_consumption = None + avg_power = None + use_time_ratio = None + time_workload = None if measure_power: power_data = get_power_data(start_time, end_time) avg_power = power_data["avg_power"] + use_time_ratio = power_data["use_time_ratio"] + time_workload = power_data["time_workload"] if "warning" in power_data: res["emissions_calculation_data"][ "energy_consumption_warning" @@ -424,7 +428,9 @@ def get_metrics( boaviztapi_data = query_machine_impact_data( model={}, configuration=hardware_data, - usage=format_usage_request(start_time, end_time, avg_power, location), + usage=format_usage_request( + start_time, end_time, avg_power, use_time_ratio, location, time_workload + ), ) if measure_power: @@ -499,7 +505,7 @@ def get_metrics( if "USAGE" in boaviztapi_data: res["emissions_calculation_data"] = { "average_power_measured": { - "value": host_avg_consumption, + "value": avg_power, "description": "Average power measured from start_time to end_time", "type": "gauge", "unit": "W", From 0c65d68d2b1c4f871edb0fe84f3cad2ac0e34c96 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 20 Mar 2024 10:57:20 +0100 Subject: [PATCH 089/227] test: get_power_data test, set setup variables --- boagent/api/__init__.py | 3 + boagent/api/test_api_unit.py | 66 ++++++++++--- boagent/tests/test_api.py | 186 ----------------------------------- 3 files changed, 57 insertions(+), 198 deletions(-) delete mode 100644 boagent/tests/test_api.py diff --git a/boagent/api/__init__.py b/boagent/api/__init__.py index 009b832..0c20788 100644 --- a/boagent/api/__init__.py +++ b/boagent/api/__init__.py @@ -1,6 +1,9 @@ from .api import ( build_hardware_data, + format_usage_request, read_hardware_data, get_hardware_data, query_machine_impact_data, + compute_average_consumption, + get_power_data, ) diff --git a/boagent/api/test_api_unit.py b/boagent/api/test_api_unit.py index 0766ce2..f7bd94b 100644 --- a/boagent/api/test_api_unit.py +++ b/boagent/api/test_api_unit.py @@ -8,6 +8,7 @@ # query_machine_impact_data, format_usage_request, compute_average_consumption, + get_power_data, ) from utils import format_scaphandre_json @@ -55,14 +56,15 @@ def tearDown(self) -> None: class FormatUsageRequestTest(TestCase): - def test_format_usage_request_with_start_and_end_times(self): + def setUp(self) -> None: + self.start_time = 1710837858 + self.end_time = 1710841458 - start_time = 1710837858 - end_time = 1710841458 + def test_format_usage_request_with_start_and_end_times(self): formatted_request = format_usage_request( - start_time=start_time, - end_time=end_time, + start_time=self.start_time, + end_time=self.end_time, ) assert type(formatted_request) is dict @@ -72,15 +74,13 @@ def test_format_usage_request_with_host_avg_consumption_use_time_ratio_and_locat self, ): - start_time = 1710837858 - end_time = 1710841458 location = "FRA" avg_power = 120 use_time_ratio = 1 formatted_request = format_usage_request( - start_time=start_time, - end_time=end_time, + start_time=self.start_time, + end_time=self.end_time, location=location, avg_power=avg_power, use_time_ratio=use_time_ratio, @@ -92,12 +92,12 @@ def test_format_usage_request_with_host_avg_consumption_use_time_ratio_and_locat def test_format_usage_request_with_time_workload_as_percentage(self): - start_time = 1710837858 - end_time = 1710841458 time_workload = 50 formatted_request = format_usage_request( - start_time=start_time, end_time=end_time, time_workload=time_workload + start_time=self.start_time, + end_time=self.end_time, + time_workload=time_workload, ) assert type(formatted_request) is dict @@ -114,9 +114,51 @@ def test_compute_average_consumption(self): assert type(avg_host) is float +class GetPowerDataTest(TestCase): + def setUp(self) -> None: + # One-hour interval + self.start_time = 1710837858 + self.end_time = 1710841458 + # Ten minutes interval + self.short_interval_start_time = 1710923675 + self.short_interval_end_time = 1710924275 + + @patch("api.format_scaphandre_json") + def test_get_power_data(self, mocked_format_scaphandre_json): + + mocked_format_scaphandre_json.return_value = open( + "./tests/mocks/formatted_scaphandre.json" + ).read() + + power_data = get_power_data(self.start_time, self.end_time) + + assert type(power_data) is dict + assert "raw_data" in power_data + assert "avg_power" in power_data + + @patch("api.format_scaphandre_json") + def test_get_power_data_with_short_time_interval( + self, mocked_format_scaphandre_json + ): + + mocked_format_scaphandre_json.return_value = open( + "./tests/mocks/formatted_scaphandre.json" + ).read() + + power_data = get_power_data( + self.short_interval_start_time, self.short_interval_end_time + ) + + assert type(power_data) is dict + assert "raw_data" in power_data + assert "avg_power" in power_data + assert "warning" in power_data + + loader = TestLoader() suite = TestSuite() suite.addTests(loader.loadTestsFromTestCase(ReadHardwareDataTest)) suite.addTests(loader.loadTestsFromTestCase(FormatUsageRequestTest)) suite.addTests(loader.loadTestsFromTestCase(ComputeAvgConsumptionTest)) +suite.addTests(loader.loadTestsFromTestCase(GetPowerDataTest)) diff --git a/boagent/tests/test_api.py b/boagent/tests/test_api.py deleted file mode 100644 index b61e43f..0000000 --- a/boagent/tests/test_api.py +++ /dev/null @@ -1,186 +0,0 @@ -from datetime import datetime, timedelta -from fastapi.testclient import TestClient -from unittest import TestCase -from pytest import mark -import config -from api.config import Settings - -# Mocks for testing environment -config.settings = Settings( - hardware_file_path="./tests/mocks/hardware_data.json", - db_path="./tests/mocks/boagent.db", - power_file_path="./tests/mocks/power_data.json", -) - -from api import app # noqa - -NOW_ISO8601 = datetime.now().isoformat() -NOW_ISO8601_MINUS_ONE_MINUTE = datetime.fromisoformat(NOW_ISO8601) - timedelta( - minutes=1 -) - -client = TestClient(app) - - -class ApiEndpointsTest(TestCase): - def test_read_info(self): - response = client.get("/info") - assert response.status_code == 200 - - def test_read_web(self): - response = client.get("/web") - assert response.status_code == 200 - - def test_read_metrics(self): - - params = { - "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", - "end_time": f"{NOW_ISO8601}", - "verbose": "false", - "location": "FRA", - "measure_power": "false", - "lifetime": 5, - "fetch_hardware": "false", - } - - response = client.get("/metrics", params=params) - assert response.status_code == 200 - - @mark.query - def test_read_query_without_measure_power_and_fetch_hardware(self): - - params = { - "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", - "end_time": f"{NOW_ISO8601}", - "verbose": "false", - "location": "FRA", - "measure_power": "false", - "lifetime": 5, - "fetch_hardware": "false", - } - - response = client.get("/query", params=params) - assert response.status_code == 200 - - @mark.query - def test_read_query_with_measure_power(self): - - params = { - "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", - "end_time": f"{NOW_ISO8601}", - "verbose": "false", - "location": "FRA", - "measure_power": "true", - "lifetime": 5, - "fetch_hardware": "false", - } - - response = client.get("/query", params=params) - assert response.status_code == 200 - - @mark.query - def test_read_query_with_fetch_hardware(self): - - params = { - "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", - "end_time": f"{NOW_ISO8601}", - "verbose": "false", - "location": "FRA", - "measure_power": "false", - "lifetime": 5, - "fetch_hardware": "true", - } - - response = client.get("query", params=params) - assert response.status_code == 200 - - @mark.query - def test_read_query_with_measure_power_and_fetch_hardware(self): - - params = { - "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", - "end_time": f"{NOW_ISO8601}", - "verbose": "false", - "location": "FRA", - "measure_power": "true", - "lifetime": 5, - "fetch_hardware": "true", - } - - response = client.get("/query", params=params) - assert response.status_code == 200 - - @mark.query - def test_read_query_with_measure_power_and_fetch_hardware_verbose(self): - - params = { - "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", - "end_time": f"{NOW_ISO8601}", - "verbose": "true", - "location": "FRA", - "measure_power": "true", - "lifetime": 5, - "fetch_hardware": "true", - } - - response = client.get("/query", params=params) - assert response.status_code == 200 - - def test_read_yearly_embedded(self): - response = client.get("/yearly_embedded") - assert response.status_code == 200 - - def test_read_last_info(self): - response = client.get("/last_info") - assert response.status_code == 200 - - def test_read_max_info(self): - response = client.get("/max_info") - assert response.status_code == 200 - - def test_read_yearly_operational(self): - """ROUTE NOT IMPLEMENTED YET""" - response = client.get("/yearly_operational") - assert response.status_code == 501 - - @mark.database - def test_read_last_data(self): - """ROUTE NOT IMPLEMENTED YET""" - - params = {"table_name": "cpu"} - response = client.get("/last_data", params=params) - assert response.status_code == 501 - - @mark.database - def test_read_update(self): - """ROUTE NOT IMPLEMENTED YET""" - response = client.get("/update") - assert response.status_code == 501 - - @mark.database - def test_read_carbon_intensity_forecast(self): - """ROUTE NOT IMPLEMENTED YET""" - params = {"since": "now", "until": "24h"} - response = client.get("/carbon_intensity_forecast", params=params) - assert response.status_code == 501 - - @mark.database - def test_read_carbon_intensity(self): - """ROUTE NOT IMPLEMENTED YET""" - params = {"since": "now", "until": "24h"} - response = client.get("/carbon_intensity", params=params) - assert response.status_code == 501 - - @mark.database - def test_impact(self): - """ROUTE NOT IMPLEMENTED YET""" - response = client.get("/impact") - assert response.status_code == 501 - - @mark.database - def test_read_csv(self): - """ROUTE NOT IMPLEMENTED YET""" - params = {"data": "power"} - - response = client.get("/csv", params=params) - assert response.status_code == 501 From 6c8232f8fc74a8f5199e9cb3c611b72d84ef484f Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 20 Mar 2024 12:22:50 +0100 Subject: [PATCH 090/227] test: get_metrics test cases --- boagent/api/__init__.py | 1 + boagent/api/test_api_unit.py | 193 +++++++++++++++++++++++++++++++++++ 2 files changed, 194 insertions(+) diff --git a/boagent/api/__init__.py b/boagent/api/__init__.py index 0c20788..25d23d8 100644 --- a/boagent/api/__init__.py +++ b/boagent/api/__init__.py @@ -6,4 +6,5 @@ query_machine_impact_data, compute_average_consumption, get_power_data, + get_metrics, ) diff --git a/boagent/api/test_api_unit.py b/boagent/api/test_api_unit.py index f7bd94b..da63afd 100644 --- a/boagent/api/test_api_unit.py +++ b/boagent/api/test_api_unit.py @@ -9,6 +9,7 @@ format_usage_request, compute_average_consumption, get_power_data, + get_metrics, ) from utils import format_scaphandre_json @@ -155,6 +156,195 @@ def test_get_power_data_with_short_time_interval( assert "warning" in power_data +class GetMetricsNotVerboseNoScaphandreTest(TestCase): + def setUp(self) -> None: + self.time_workload_as_percentage = 70 + self.time_workload_as_list_of_dicts = [ + {"time_percentage": 50, "load_percentage": 0}, + {"time_percentage": 25, "load_percentage": 60}, + {"time_percentage": 25, "load_percentage": 100}, + ] + self.start_time = 1710837858 + self.end_time = 1710841458 + self.verbose = False + self.location = "FRA" + self.measure_power = False + self.lifetime = 5.0 + self.fetch_hardware = False + + with open("./tests/mocks/boaviztapi_response_not_verbose.json", "r") as file: + self.boaviztapi_data = json.load(file) + + @patch("api.query_machine_impact_data") + def test_get_metrics_with_time_workload_as_percentage( + self, mocked_query_machine_impact_data + ): + + metrics = get_metrics( + self.start_time, + self.end_time, + self.verbose, + self.location, + self.measure_power, + self.lifetime, + self.fetch_hardware, + self.time_workload_as_percentage, + ) + + mocked_query_machine_impact_data.return_value = self.boaviztapi_data + + assert type(metrics) is dict + assert "emissions_calculation_data" in metrics + assert "embedded_emissions" in metrics + assert "embedded_abiotic_resources_depletion" in metrics + assert "embedded_primary_energy" in metrics + + @patch("api.query_machine_impact_data") + def test_get_metrics_with_time_workload_as_list_of_dicts( + self, mocked_query_machine_impact_data + ): + + metrics = get_metrics( + self.start_time, + self.end_time, + self.verbose, + self.location, + self.measure_power, + self.lifetime, + self.fetch_hardware, + self.time_workload_as_list_of_dicts, + ) + + mocked_query_machine_impact_data.return_value = self.boaviztapi_data + assert type(metrics) is dict + assert "emissions_calculation_data" in metrics + assert "embedded_emissions" in metrics + assert "embedded_abiotic_resources_depletion" in metrics + assert "embedded_primary_energy" in metrics + + +class GetMetricsVerboseNoScaphandreTest(TestCase): + def setUp(self) -> None: + self.time_workload_as_percentage = 70 + self.time_workload_as_list_of_dicts = [ + {"time_percentage": 50, "load_percentage": 0}, + {"time_percentage": 25, "load_percentage": 60}, + {"time_percentage": 25, "load_percentage": 100}, + ] + self.start_time = 1710837858 + self.end_time = 1710841458 + self.verbose = True + self.location = "FRA" + self.measure_power = False + self.lifetime = 5.0 + self.fetch_hardware = False + + with open("./tests/mocks/boaviztapi_response_verbose.json", "r") as file: + self.boaviztapi_data = json.load(file) + + @patch("api.query_machine_impact_data") + def test_get_metrics_verbose_with_time_workload_percentage( + self, mocked_query_machine_impact_data + ): + + metrics = get_metrics( + self.start_time, + self.end_time, + self.verbose, + self.location, + self.measure_power, + self.lifetime, + self.fetch_hardware, + self.time_workload_as_percentage, + ) + + mocked_query_machine_impact_data.return_value = self.boaviztapi_data + + assert type(metrics) is dict + assert "emissions_calculation_data" in metrics + assert "embedded_emissions" in metrics + assert "embedded_abiotic_resources_depletion" in metrics + assert "embedded_primary_energy" in metrics + assert "raw_data" in metrics + assert "electricity_carbon_intensity" in metrics + + @patch("api.query_machine_impact_data") + def test_get_metrics_verbose_with_time_workload_as_list_of_dicts( + self, mocked_query_machine_impact_data + ): + + metrics = get_metrics( + self.start_time, + self.end_time, + self.verbose, + self.location, + self.measure_power, + self.lifetime, + self.fetch_hardware, + self.time_workload_as_list_of_dicts, + ) + + mocked_query_machine_impact_data.return_value = self.boaviztapi_data + + assert type(metrics) is dict + assert "emissions_calculation_data" in metrics + assert "embedded_emissions" in metrics + assert "embedded_abiotic_resources_depletion" in metrics + assert "embedded_primary_energy" in metrics + assert "raw_data" in metrics + assert "electricity_carbon_intensity" in metrics + + +class GetMetricsVerboseWithScaphandreTest(TestCase): + def setUp(self) -> None: + self.start_time = 1710837858 + self.end_time = 1710841458 + self.verbose = True + self.location = "FRA" + self.measure_power = True + self.lifetime = 5.0 + self.fetch_hardware = False + + with open("./tests/mocks/boaviztapi_response_verbose.json", "r") as file: + self.boaviztapi_data = json.load(file) + + with open("./tests/mocks/formatted_scaphandre.json", "r") as file: + power_data = {} + power_data["raw_data"] = file.read() + power_data["avg_power"] = 11.86 + self.power_data = power_data + + @patch("api.query_machine_impact_data") + @patch("api.get_power_data") + def test_get_metrics_verbose_with_scaphandre( + self, mocked_query_machine_impact_data, mocked_power_data + ): + + metrics = get_metrics( + self.start_time, + self.end_time, + self.verbose, + self.location, + self.measure_power, + self.lifetime, + self.fetch_hardware, + ) + + mocked_query_machine_impact_data.return_value = self.boaviztapi_data + mocked_power_data.return_value = self.power_data + + assert type(metrics) is dict + assert "total_operational_emissions" in metrics + assert "total_operational_abiotic_resources_depletion" in metrics + assert "total_operational_primary_energy_consumed" in metrics + assert "start_time" in metrics + assert "end_time" in metrics + assert "average_power_measured" in metrics + assert "raw_data" in metrics + assert "electricity_carbon_intensity" in metrics + assert "power_data" in metrics["raw_data"] + + loader = TestLoader() suite = TestSuite() @@ -162,3 +352,6 @@ def test_get_power_data_with_short_time_interval( suite.addTests(loader.loadTestsFromTestCase(FormatUsageRequestTest)) suite.addTests(loader.loadTestsFromTestCase(ComputeAvgConsumptionTest)) suite.addTests(loader.loadTestsFromTestCase(GetPowerDataTest)) +suite.addTests(loader.loadTestsFromTestCase(GetMetricsNotVerboseNoScaphandreTest)) +suite.addTests(loader.loadTestsFromTestCase(GetMetricsVerboseNoScaphandreTest)) +suite.addTests(loader.loadTestsFromTestCase(GetMetricsVerboseWithScaphandreTest)) From 48b99254b7f9564662fb6f4f57b47a4c00a83a49 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 20 Mar 2024 12:23:17 +0100 Subject: [PATCH 091/227] feat: get_metrics with BoaviztAPI 1.2.4. response format --- boagent/api/api.py | 160 ++++++++++++++++++++++----------------------- 1 file changed, 79 insertions(+), 81 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index eae09f4..d1913c0 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -392,7 +392,8 @@ def get_metrics( location: str, measure_power: bool, lifetime: float, - fetch_hardware: bool = False, + fetch_hardware: bool, + time_workload: Union[float, list[dict[str, int]], None] = None, ): now: float = time.time() @@ -413,13 +414,11 @@ def get_metrics( avg_power = None use_time_ratio = None - time_workload = None if measure_power: power_data = get_power_data(start_time, end_time) avg_power = power_data["avg_power"] use_time_ratio = power_data["use_time_ratio"] - time_workload = power_data["time_workload"] if "warning" in power_data: res["emissions_calculation_data"][ "energy_consumption_warning" @@ -469,85 +468,84 @@ def get_metrics( "unit": "s", "long_unit": "seconds", } + res["average_power_measured"] = { + "value": avg_power, + "description": "Average power measured from start_time to end_time", + "type": "gauge", + "unit": "W", + "long_unit": "Watts", + } - if "manufacturer" in boaviztapi_data: - res["calculated_emissions"] = { - "value": boaviztapi_data["impacts"]["gwp"]["manufacturer"] * ratio - + boaviztapi_data["impacts"]["gwp"]["use"], - "description": "Total Green House Gaz emissions calculated for manufacturing and usage phases, between " - "start_time and end_time", - "type": "gauge", - "unit": "kg CO2eq", - "long_unit": "kilograms CO2 equivalent", - } - res["embedded_emissions"] = { - "value": boaviztapi_data["impacts"]["gwp"]["manufacturer"] * ratio, - "description": "Embedded carbon emissions (manufacturing phase)", - "type": "gauge", - "unit": "kg CO2eq", - "long_unit": "kilograms CO2 equivalent", - } - res["embedded_abiotic_resources_depletion"] = { - "value": boaviztapi_data["impacts"]["adp"]["manufacturer"] * ratio, - "description": "Embedded abiotic ressources consumed (manufacturing phase)", - "type": "gauge", - "unit": "kg Sbeq", - "long_unit": "kilograms ADP equivalent", - } - res["embedded_primary_energy"] = { - "value": boaviztapi_data["impacts"]["pe"]["manufacturer"] * ratio, - "description": "Embedded primary energy consumed (manufacturing phase)", - "type": "gauge", - "unit": "MJ", - "long_unit": "Mega Joules", - } + """ res["calculated_emissions"] = { + "value": boaviztapi_data["impacts"]["gwp"]["value"] * ratio + + boaviztapi_data["impacts"]["gwp"]["use"]["value"], + "description": "Total Green House Gaz emissions calculated for manufacturing and usage phases, between " + "start_time and end_time", + "type": "gauge", + "unit": "kg CO2eq", + "long_unit": "kilograms CO2 equivalent", + } """ + + res["embedded_emissions"] = { + "value": boaviztapi_data["impacts"]["gwp"]["embedded"]["value"] * ratio, + "description": "Embedded carbon emissions (manufacturing phase)", + "type": "gauge", + "unit": "kg CO2eq", + "long_unit": "kilograms CO2 equivalent", + } + res["embedded_abiotic_resources_depletion"] = { + "value": boaviztapi_data["impacts"]["adp"]["embedded"]["value"] * ratio, + "description": "Embedded abiotic ressources consumed (manufacturing phase)", + "type": "gauge", + "unit": "kg Sbeq", + "long_unit": "kilograms ADP equivalent", + } + res["embedded_primary_energy"] = { + "value": boaviztapi_data["impacts"]["pe"]["embedded"]["value"] * ratio, + "description": "Embedded primary energy consumed (manufacturing phase)", + "type": "gauge", + "unit": "MJ", + "long_unit": "Mega Joules", + } + + usage_location_status = boaviztapi_data["verbose"]["usage_location"]["status"] + + if usage_location_status == "MODIFY": + res["emissions_calculation_data"]["electricity_carbon_intensity"][ + "description" + ] += ( + "WARNING : The provided trigram doesn't match any existing country. So this result is " + "based on average European electricity mix. Be careful with this data. " + ) + elif usage_location_status == "SET": + res["emissions_calculation_data"]["electricity_carbon_intensity"][ + "description" + ] += ( + "WARNING : As no information was provided about your location, this result is based on " + "average European electricity mix. Be careful with this data. " + ) + + if verbose: + res["raw_data"] = { + "hardware_data": hardware_data, + "resources_data": "not implemented yet", + "boaviztapi_data": boaviztapi_data, + "start_time": start_time, + "end_time": end_time, + } + res["electricity_carbon_intensity"] = { + "value": boaviztapi_data["verbose"]["gwp_factor"]["value"], + "description": "Carbon intensity of the electricity mix. Mix considered : {}".format( + location + ), + "type": "gauge", + "unit": "kg CO2eq / kWh", + "long_unit": "Kilograms CO2 equivalent per KiloWattHour", + } + + if measure_power: + res["raw_data"]["power_data"] = power_data - if "USAGE" in boaviztapi_data: - res["emissions_calculation_data"] = { - "average_power_measured": { - "value": avg_power, - "description": "Average power measured from start_time to end_time", - "type": "gauge", - "unit": "W", - "long_unit": "Watts", - }, - "electricity_carbon_intensity": { - "value": boaviztapi_data["verbose"]["USAGE"]["gwp_factor"]["value"], - "description": "Carbon intensity of the electricity mix. Mix considered : {}".format( - location - ), - "type": "gauge", - "unit": "kg CO2eq / kWh", - "long_unit": "Kilograms CO2 equivalent per KiloWattHour", - }, - } - usage_location_status = boaviztapi_data["verbose"]["USAGE"][ - "usage_location" - ]["status"] - if usage_location_status == "MODIFY": - res["emissions_calculation_data"]["electricity_carbon_intensity"][ - "description" - ] += ( - "WARNING : The provided trigram doesn't match any existing country. So this result is " - "based on average European electricity mix. Be careful with this data. " - ) - elif usage_location_status == "SET": - res["emissions_calculation_data"]["electricity_carbon_intensity"][ - "description" - ] += ( - "WARNING : As no information was provided about your location, this result is based on " - "average European electricity mix. Be careful with this data. " - ) - - if verbose: - res["emissions_calculation_data"]["raw_data"] = { - "hardware_data": hardware_data, - "resources_data": "not implemented yet", - "boaviztapi_data": boaviztapi_data, - "power_data": power_data, - "start_time": start_time, - "end_time": end_time, - } return res @@ -557,7 +555,7 @@ def format_usage_request( avg_power: Union[float, None] = None, use_time_ratio: Union[float, None] = None, location: Union[str, None] = None, - time_workload: Union[float, None] = None, + time_workload: Union[float, list[dict[str, int]], None] = None, ): hours_use_time = (end_time - start_time) / 3600.0 kwargs_usage = {"hours_use_time": hours_use_time} From b3efecab806f351ae7ed6d5e25a0db9dbb70c1af Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 20 Mar 2024 16:55:41 +0100 Subject: [PATCH 092/227] refactor: remove deprecated usage_location status responses from BoaviztAPI --- boagent/api/api.py | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index d1913c0..368ec02 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -508,23 +508,6 @@ def get_metrics( "long_unit": "Mega Joules", } - usage_location_status = boaviztapi_data["verbose"]["usage_location"]["status"] - - if usage_location_status == "MODIFY": - res["emissions_calculation_data"]["electricity_carbon_intensity"][ - "description" - ] += ( - "WARNING : The provided trigram doesn't match any existing country. So this result is " - "based on average European electricity mix. Be careful with this data. " - ) - elif usage_location_status == "SET": - res["emissions_calculation_data"]["electricity_carbon_intensity"][ - "description" - ] += ( - "WARNING : As no information was provided about your location, this result is based on " - "average European electricity mix. Be careful with this data. " - ) - if verbose: res["raw_data"] = { "hardware_data": hardware_data, From f9aa697d0663ba26df7d402d9bbbc81b03f45f37 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 20 Mar 2024 16:57:14 +0100 Subject: [PATCH 093/227] test: json mocks for tests --- .../boaviztapi_response_not_verbose.json | 55 ++ .../mocks/boaviztapi_response_verbose.json | 697 ++++++++++++++++++ .../api/tests/mocks/formatted_scaphandre.json | 1 + boagent/api/tests/mocks/hardware_data.json | 197 +++++ boagent/api/tests/mocks/power_data.json | 1 + 5 files changed, 951 insertions(+) create mode 100644 boagent/api/tests/mocks/boaviztapi_response_not_verbose.json create mode 100644 boagent/api/tests/mocks/boaviztapi_response_verbose.json create mode 100644 boagent/api/tests/mocks/formatted_scaphandre.json create mode 100644 boagent/api/tests/mocks/hardware_data.json create mode 100644 boagent/api/tests/mocks/power_data.json diff --git a/boagent/api/tests/mocks/boaviztapi_response_not_verbose.json b/boagent/api/tests/mocks/boaviztapi_response_not_verbose.json new file mode 100644 index 0000000..0f74f04 --- /dev/null +++ b/boagent/api/tests/mocks/boaviztapi_response_not_verbose.json @@ -0,0 +1,55 @@ +{ + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 1200, + "min": 759.1, + "max": 1949, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 1030, + "min": 1030, + "max": 1030 + } + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.155, + "min": 0.1128, + "max": 0.2077, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 0.0005107, + "min": 0.0005107, + "max": 0.0005107 + } + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 15000, + "min": 10080, + "max": 25260, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 118700, + "min": 118700, + "max": 118700 + } + } + } +} diff --git a/boagent/api/tests/mocks/boaviztapi_response_verbose.json b/boagent/api/tests/mocks/boaviztapi_response_verbose.json new file mode 100644 index 0000000..23227d6 --- /dev/null +++ b/boagent/api/tests/mocks/boaviztapi_response_verbose.json @@ -0,0 +1,697 @@ +{ + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 1176, + "min": 1112, + "max": 1176, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 10000, + "min": 526.5, + "max": 34540 + } + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.1492, + "min": 0.1492, + "max": 0.1567, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 0.0016, + "min": 0.0003031, + "max": 0.008107 + } + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 15680, + "min": 14700, + "max": 15680, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 300000, + "min": 297.6, + "max": 14290000, + "warnings": [ + "Uncertainty from technical characteristics is very important. Results should be interpreted with caution (see min and max values)" + ] + } + } + }, + "verbose": { + "duration": { + "value": 35040, + "unit": "hours" + }, + "ASSEMBLY-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 6.68, + "min": 6.68, + "max": 6.68, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 1.41e-06, + "min": 1.41e-06, + "max": 1.41e-06, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 68.6, + "min": 68.6, + "max": 68.6, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 1 + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "CPU-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 250, + "min": 250, + "max": 250, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 12000, + "min": 701.8, + "max": 34530 + } + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.04087, + "min": 0.04087, + "max": 0.04087, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 0.002, + "min": 0.000404, + "max": 0.008103 + } + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 3428, + "min": 3428, + "max": 3428, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 400000, + "min": 396.7, + "max": 14280000, + "warnings": [ + "Uncertainty from technical characteristics is very important. Results should be interpreted with caution (see min and max values)" + ] + } + } + }, + "units": { + "value": 2, + "status": "INPUT" + }, + "core_units": { + "value": 24, + "status": "INPUT" + }, + "die_size_per_core": { + "value": 245, + "status": "INPUT", + "unit": "mm2" + }, + "die_size": { + "value": 5880, + "status": "COMPLETED", + "unit": "mm2", + "source": "die_size_per_core*core_units", + "min": 5880, + "max": 5880 + }, + "duration": { + "value": 35040, + "unit": "hours" + }, + "avg_power": { + "value": 435.4, + "status": "COMPLETED", + "unit": "W", + "min": 435.4, + "max": 435.4 + }, + "time_workload": { + "value": 70, + "status": "INPUT", + "unit": "%" + }, + "usage_location": { + "value": "EEE", + "status": "DEFAULT", + "unit": "CodSP3 - NCS Country Codes - NATO" + }, + "use_time_ratio": { + "value": 1, + "status": "ARCHETYPE", + "unit": "/1", + "min": 1, + "max": 1 + }, + "hours_life_time": { + "value": 35040, + "status": "COMPLETED", + "unit": "hours", + "source": "from device", + "min": 35040, + "max": 35040 + }, + "params": { + "value": { + "a": 171.2, + "b": 0.0354, + "c": 36.89, + "d": -10.13 + }, + "status": "ARCHETYPE" + }, + "gwp_factor": { + "value": 0.38, + "status": "DEFAULT", + "unit": "kg CO2eq/kWh", + "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", + "min": 0.023, + "max": 1.13161 + }, + "adp_factor": { + "value": 6.42317e-08, + "status": "DEFAULT", + "unit": "kg Sbeq/kWh", + "source": "ADEME Base IMPACTS ®", + "min": 1.324e-08, + "max": 2.65575e-07 + }, + "pe_factor": { + "value": 12.873, + "status": "DEFAULT", + "unit": "MJ/kWh", + "source": "ADPf / (1-%renewable_energy)", + "min": 0.013, + "max": 468.15 + } + }, + "RAM-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 534.6, + "min": 534.6, + "max": 534.6, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 17000, + "min": 1055, + "max": 51890 + } + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.0338, + "min": 0.0338, + "max": 0.0338, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 0.003, + "min": 0.0006071, + "max": 0.01218 + } + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 6745, + "min": 6745, + "max": 6745, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 1000000, + "min": 596.1, + "max": 21470000 + } + } + }, + "units": { + "value": 12, + "status": "INPUT" + }, + "capacity": { + "value": 32, + "status": "INPUT", + "unit": "GB" + }, + "density": { + "value": 1.79, + "status": "INPUT", + "unit": "GB/cm2" + }, + "duration": { + "value": 35040, + "unit": "hours" + }, + "avg_power": { + "value": 109.05599999999998, + "status": "COMPLETED", + "unit": "W", + "min": 109.05599999999998, + "max": 109.05599999999998 + }, + "time_workload": { + "value": 70, + "status": "INPUT", + "unit": "%" + }, + "usage_location": { + "value": "EEE", + "status": "DEFAULT", + "unit": "CodSP3 - NCS Country Codes - NATO" + }, + "use_time_ratio": { + "value": 1, + "status": "ARCHETYPE", + "unit": "/1", + "min": 1, + "max": 1 + }, + "hours_life_time": { + "value": 35040, + "status": "COMPLETED", + "unit": "hours", + "source": "from device", + "min": 35040, + "max": 35040 + }, + "params": { + "value": { + "a": 9.088 + }, + "status": "COMPLETED", + "source": "(ram_electrical_factor_per_go : 0.284) * (ram_capacity: 32) " + }, + "gwp_factor": { + "value": 0.38, + "status": "DEFAULT", + "unit": "kg CO2eq/kWh", + "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", + "min": 0.023, + "max": 1.13161 + }, + "adp_factor": { + "value": 6.42317e-08, + "status": "DEFAULT", + "unit": "kg Sbeq/kWh", + "source": "ADEME Base IMPACTS ®", + "min": 1.324e-08, + "max": 2.65575e-07 + }, + "pe_factor": { + "value": 12.873, + "status": "DEFAULT", + "unit": "MJ/kWh", + "source": "ADPf / (1-%renewable_energy)", + "min": 0.013, + "max": 468.15 + } + }, + "SSD-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 23.73, + "min": 23.73, + "max": 23.73, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.001061, + "min": 0.001061, + "max": 0.001061, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 292.7, + "min": 292.7, + "max": 292.7, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "INPUT" + }, + "capacity": { + "value": 400, + "status": "INPUT", + "unit": "GB" + }, + "density": { + "value": 50.6, + "status": "INPUT", + "unit": "GB/cm2" + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "POWER_SUPPLY-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 145.3, + "min": 145.3, + "max": 145.3, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.04963, + "min": 0.04963, + "max": 0.04963, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 2105, + "min": 2105, + "max": 2105, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 2, + "status": "INPUT" + }, + "unit_weight": { + "value": 2.99, + "status": "INPUT", + "unit": "kg" + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "CASE-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 150, + "min": 85.9, + "max": 150, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.0202, + "min": 0.0202, + "max": 0.02767, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 2200, + "min": 1229, + "max": 2200, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 1 + }, + "case_type": { + "value": "rack", + "status": "ARCHETYPE" + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "MOTHERBOARD-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 66.1, + "min": 66.1, + "max": 66.1, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.00369, + "min": 0.00369, + "max": 0.00369, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 836, + "min": 836, + "max": 836, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 1 + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "avg_power": { + "value": 724.1264799999999, + "status": "COMPLETED", + "unit": "W", + "min": 653.3471999999998, + "max": 871.1295999999999 + }, + "time_workload": { + "value": 70, + "status": "INPUT", + "unit": "%" + }, + "usage_location": { + "value": "FRA", + "status": "INPUT", + "unit": "CodSP3 - NCS Country Codes - NATO" + }, + "use_time_ratio": { + "value": 1, + "status": "ARCHETYPE", + "unit": "/1", + "min": 1, + "max": 1 + }, + "hours_life_time": { + "value": 35040, + "status": "COMPLETED", + "unit": "hours", + "source": "from device", + "min": 35040, + "max": 35040 + }, + "other_consumption_ratio": { + "value": 0.33, + "status": "ARCHETYPE", + "unit": "ratio /1", + "min": 0.2, + "max": 0.6 + }, + "gwp_factor": { + "value": 0.38, + "status": "DEFAULT", + "unit": "kg CO2eq/kWh", + "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", + "min": 0.023, + "max": 1.13161 + }, + "adp_factor": { + "value": 6.42317e-08, + "status": "DEFAULT", + "unit": "kg Sbeq/kWh", + "source": "ADEME Base IMPACTS ®", + "min": 1.324e-08, + "max": 2.65575e-07 + }, + "pe_factor": { + "value": 12.873, + "status": "DEFAULT", + "unit": "MJ/kWh", + "source": "ADPf / (1-%renewable_energy)", + "min": 0.013, + "max": 468.15 + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 1 + } + } +} diff --git a/boagent/api/tests/mocks/formatted_scaphandre.json b/boagent/api/tests/mocks/formatted_scaphandre.json new file mode 100644 index 0000000..55580f6 --- /dev/null +++ b/boagent/api/tests/mocks/formatted_scaphandre.json @@ -0,0 +1 @@ +[{"host":{"consumption":9510593.0,"timestamp":1709569036.7701147,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312873984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":118741.05,"timestamp":1709569036.7699473,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":67852.03,"timestamp":1709569036.7699215,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":33926.016,"timestamp":1709569036.7699084,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":33926.016,"timestamp":1709569036.7699292,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":22617.344,"timestamp":1709569036.7698824,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699177,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699306,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699432,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699645,"container":null},{"exe":"","cmdline":"/usr/libexec/gnome-terminal-server","pid":6747,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.769976,"container":null}],"sockets":[{"id":0,"consumption":2280155.0,"domains":[{"name":"uncore","consumption":4760.0,"timestamp":1709569036.687679},{"name":"core","consumption":363592.0,"timestamp":1709569036.687624},{"name":"dram","consumption":650426.0,"timestamp":1709569036.6875672}],"timestamp":1709569036.6864183}]},{"host":{"consumption":10326187.0,"timestamp":1709569038.8445754,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312808448","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":138775.89,"timestamp":1709569038.8444579,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":44155.965,"timestamp":1709569038.844482,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":37847.97,"timestamp":1709569038.8444862,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31539.975,"timestamp":1709569038.8444736,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":12615.989,"timestamp":1709569038.8444946,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.844463,"container":null},{"exe":"","cmdline":"/usr/bin/dbus-daemon--session--address=systemd:--nofork--nopidfile--systemd-activation--syslog-only","pid":1667,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.84447,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.844479,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.8444872,"container":null},{"exe":"","cmdline":"","pid":263930,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.8444917,"container":null}],"sockets":[{"id":0,"consumption":2565381.0,"domains":[{"name":"uncore","consumption":11099.0,"timestamp":1709569038.7827907},{"name":"core","consumption":519459.0,"timestamp":1709569038.7827168},{"name":"dram","consumption":699014.0,"timestamp":1709569038.7826238}],"timestamp":1709569038.7813084}]},{"host":{"consumption":11958290.0,"timestamp":1709569040.9484453,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312738816","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":196994.4,"timestamp":1709569040.9481177,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":145921.8,"timestamp":1709569040.9481637,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":131329.61,"timestamp":1709569040.948196,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":51072.625,"timestamp":1709569040.9481723,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":29184.355,"timestamp":1709569040.9481483,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":14592.178,"timestamp":1709569040.9481866,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481342,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.948174,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481745,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481938,"container":null}],"sockets":[{"id":0,"consumption":3843814.0,"domains":[{"name":"uncore","consumption":114992.0,"timestamp":1709569040.854405},{"name":"core","consumption":1617998.0,"timestamp":1709569040.854287},{"name":"dram","consumption":905649.0,"timestamp":1709569040.8541002}],"timestamp":1709569040.8530734}]},{"host":{"consumption":10766276.0,"timestamp":1709569043.045374,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312673280","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":109204.47,"timestamp":1709569043.0450184,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":96356.88,"timestamp":1709569043.0450678,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":70661.71,"timestamp":1709569043.0449176,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":51390.34,"timestamp":1709569043.045032,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":25695.17,"timestamp":1709569043.0449913,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":19271.377,"timestamp":1709569043.0450542,"container":null},{"exe":"","cmdline":"","pid":263930,"resources_usage":null,"consumption":12847.585,"timestamp":1709569043.0450523,"container":null},{"exe":"","cmdline":"/usr/libexec/ibus-engine-simple","pid":2706,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0449593,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0450757,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0451076,"container":null}],"sockets":[{"id":0,"consumption":2925740.0,"domains":[{"name":"uncore","consumption":59052.0,"timestamp":1709569042.9618628},{"name":"core","consumption":870351.0,"timestamp":1709569042.9616694},{"name":"dram","consumption":763613.0,"timestamp":1709569042.9615138}],"timestamp":1709569042.9604695}]},{"host":{"consumption":12795838.0,"timestamp":1709569045.136388,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312599552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":664518.2,"timestamp":1709569045.1362245,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":115904.33,"timestamp":1709569045.13612,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":100450.42,"timestamp":1709569045.136108,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":77269.555,"timestamp":1709569045.1361601,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":46361.73,"timestamp":1709569045.1361682,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":30907.82,"timestamp":1709569045.1361806,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":23180.865,"timestamp":1709569045.1361425,"container":null},{"exe":"","cmdline":"/usr/libexec/ibus-engine-simple","pid":2706,"resources_usage":null,"consumption":15453.91,"timestamp":1709569045.1361227,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7726.955,"timestamp":1709569045.1361263,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":7726.955,"timestamp":1709569045.1361704,"container":null}],"sockets":[{"id":0,"consumption":4255760.0,"domains":[{"name":"uncore","consumption":91691.0,"timestamp":1709569045.0613444},{"name":"core","consumption":1964961.0,"timestamp":1709569045.0612833},{"name":"dram","consumption":831560.0,"timestamp":1709569045.0612147}],"timestamp":1709569045.0603004}]},{"host":{"consumption":10793162.0,"timestamp":1709569047.2175863,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312529920","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":117387.87,"timestamp":1709569047.2174373,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":78258.57,"timestamp":1709569047.2173684,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":58693.934,"timestamp":1709569047.2174082,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":39129.285,"timestamp":1709569047.2173939,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":39129.285,"timestamp":1709569047.2174149,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":13043.097,"timestamp":1709569047.2174313,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2173736,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2174056,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.21742,"container":null},{"exe":"","cmdline":"","pid":263932,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2174532,"container":null}],"sockets":[{"id":0,"consumption":3052707.0,"domains":[{"name":"uncore","consumption":45126.0,"timestamp":1709569047.1469367},{"name":"core","consumption":1034363.0,"timestamp":1709569047.1468956},{"name":"dram","consumption":728187.0,"timestamp":1709569047.146852}],"timestamp":1709569047.1459458}]},{"host":{"consumption":17104786.0,"timestamp":1709569049.3226047,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312448000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1625531.5,"timestamp":1709569049.3221166,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID330-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{37eaeb80-2d9e-484a-af74-336f513a2f16}3065truetab","pid":271111,"resources_usage":null,"consumption":608263.4,"timestamp":1709569049.3221295,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":314618.97,"timestamp":1709569049.321927,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":125847.6,"timestamp":1709569049.3220081,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":83898.4,"timestamp":1709569049.32202,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":41949.2,"timestamp":1709569049.32197,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3219535,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3219838,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3220413,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":10487.3,"timestamp":1709569049.3219476,"container":null}],"sockets":[{"id":0,"consumption":7401117.0,"domains":[{"name":"uncore","consumption":212689.0,"timestamp":1709569049.2283125},{"name":"core","consumption":4861941.0,"timestamp":1709569049.2282119},{"name":"dram","consumption":1089513.0,"timestamp":1709569049.2281222}],"timestamp":1709569049.226694}]},{"host":{"consumption":18876486.0,"timestamp":1709569051.379631,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312312832","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1823363.4,"timestamp":1709569051.379438,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID331-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{1b207027-ae58-45d6-a5cb-ea6d45785f0c}3065truetab","pid":271887,"resources_usage":null,"consumption":911681.7,"timestamp":1709569051.37943,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":350646.78,"timestamp":1709569051.3793063,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":268829.22,"timestamp":1709569051.3793647,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":70129.36,"timestamp":1709569051.3793387,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":58441.133,"timestamp":1709569051.3793726,"container":null},{"exe":"","cmdline":"","pid":88,"resources_usage":null,"consumption":46752.906,"timestamp":1709569051.3793633,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35064.68,"timestamp":1709569051.3793492,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":23376.453,"timestamp":1709569051.379325,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":23376.453,"timestamp":1709569051.3793294,"container":null}],"sockets":[{"id":0,"consumption":8338159.0,"domains":[{"name":"uncore","consumption":243599.0,"timestamp":1709569051.3342211},{"name":"core","consumption":5475930.0,"timestamp":1709569051.3340466},{"name":"dram","consumption":1159400.0,"timestamp":1709569051.3338134}],"timestamp":1709569051.3327785}]},{"host":{"consumption":11250187.0,"timestamp":1709569053.4751475,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312394752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":309827.7,"timestamp":1709569053.4748783,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":110160.95,"timestamp":1709569053.4749343,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":61965.53,"timestamp":1709569053.4748945,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":48195.414,"timestamp":1709569053.4749434,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":41310.355,"timestamp":1709569053.4749424,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":34425.297,"timestamp":1709569053.4749196,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":13770.119,"timestamp":1709569053.4748962,"container":null},{"exe":"","cmdline":"","pid":41,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.474887,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.4748998,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.474945,"container":null}],"sockets":[{"id":0,"consumption":3172866.0,"domains":[{"name":"uncore","consumption":82698.0,"timestamp":1709569053.3911366},{"name":"core","consumption":947798.0,"timestamp":1709569053.391068},{"name":"dram","consumption":817260.0,"timestamp":1709569053.3910155}],"timestamp":1709569053.389935}]},{"host":{"consumption":11651021.0,"timestamp":1709569055.5661595,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312243200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":538284.25,"timestamp":1709569055.5659678,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":148736.44,"timestamp":1709569055.5658362,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":84992.25,"timestamp":1709569055.5658932,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42496.125,"timestamp":1709569055.565902,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28330.748,"timestamp":1709569055.5658772,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":14165.374,"timestamp":1709569055.5658662,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658436,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658581,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658886,"container":null},{"exe":"","cmdline":"","pid":23,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658937,"container":null}],"sockets":[{"id":0,"consumption":3413054.0,"domains":[{"name":"uncore","consumption":89927.0,"timestamp":1709569055.4883645},{"name":"core","consumption":1173133.0,"timestamp":1709569055.4882367},{"name":"dram","consumption":850286.0,"timestamp":1709569055.4880445}],"timestamp":1709569055.4860508}]},{"host":{"consumption":19636240.0,"timestamp":1709569057.6362855,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312181760","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1849529.5,"timestamp":1709569057.6361952,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":816675.44,"timestamp":1709569057.6361094,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":360297.97,"timestamp":1709569057.6360965,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":120099.336,"timestamp":1709569057.636142,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":96079.46,"timestamp":1709569057.6361227,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":72059.59,"timestamp":1709569057.6361485,"container":null},{"exe":"","cmdline":"","pid":88,"resources_usage":null,"consumption":60049.668,"timestamp":1709569057.6361413,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":36029.797,"timestamp":1709569057.636116,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":24019.865,"timestamp":1709569057.6361303,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID320-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{139102ea-3b73-434c-8e10-7c94bb08134f}3065truetab","pid":257812,"resources_usage":null,"consumption":12009.933,"timestamp":1709569057.6361134,"container":null}],"sockets":[{"id":0,"consumption":8953263.0,"domains":[{"name":"uncore","consumption":191909.0,"timestamp":1709569057.57598},{"name":"core","consumption":6353826.0,"timestamp":1709569057.5759137},{"name":"dram","consumption":1152379.0,"timestamp":1709569057.5758448}],"timestamp":1709569057.5751684}]},{"host":{"consumption":14328843.0,"timestamp":1709569059.7370303,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312087552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":788261.56,"timestamp":1709569059.736839,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":262753.84,"timestamp":1709569059.7367055,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":183927.69,"timestamp":1709569059.7367206,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":175169.23,"timestamp":1709569059.7367651,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":52550.773,"timestamp":1709569059.7367737,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":52550.773,"timestamp":1709569059.7367744,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35033.848,"timestamp":1709569059.7367482,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":26275.387,"timestamp":1709569059.7367373,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":17516.924,"timestamp":1709569059.7367234,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":17516.924,"timestamp":1709569059.7367277,"container":null}],"sockets":[{"id":0,"consumption":5606524.0,"domains":[{"name":"uncore","consumption":163963.0,"timestamp":1709569059.6464283},{"name":"core","consumption":3117124.0,"timestamp":1709569059.64638},{"name":"dram","consumption":1008404.0,"timestamp":1709569059.646328}],"timestamp":1709569059.6453197}]},{"host":{"consumption":10798938.0,"timestamp":1709569061.834314,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312005632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":90856.45,"timestamp":1709569061.8340003,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":90856.45,"timestamp":1709569061.8340604,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":58407.723,"timestamp":1709569061.8340156,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38938.48,"timestamp":1709569061.83407,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32448.734,"timestamp":1709569061.8340447,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340232,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340328,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340566,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.834072,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340888,"container":null}],"sockets":[{"id":0,"consumption":3002282.0,"domains":[{"name":"uncore","consumption":59301.0,"timestamp":1709569061.7501621},{"name":"core","consumption":882674.0,"timestamp":1709569061.7499254},{"name":"dram","consumption":758935.0,"timestamp":1709569061.749683}],"timestamp":1709569061.7484915}]},{"host":{"consumption":11771431.0,"timestamp":1709569063.9412537,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311923712","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":184705.62,"timestamp":1709569063.9409318,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":163393.42,"timestamp":1709569063.9409485,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":106560.94,"timestamp":1709569063.9409466,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":85248.75,"timestamp":1709569063.9409919,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":71040.625,"timestamp":1709569063.9409637,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":49728.434,"timestamp":1709569063.9410012,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28416.248,"timestamp":1709569063.9409754,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.940943,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.9409544,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.9409957,"container":null}],"sockets":[{"id":0,"consumption":3543949.0,"domains":[{"name":"uncore","consumption":120076.0,"timestamp":1709569063.8469055},{"name":"core","consumption":1209405.0,"timestamp":1709569063.8467765},{"name":"dram","consumption":826656.0,"timestamp":1709569063.8466294}],"timestamp":1709569063.8455148}]},{"host":{"consumption":10726351.0,"timestamp":1709569066.0453446,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311866368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":172799.2,"timestamp":1709569066.0451372,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":115199.48,"timestamp":1709569066.0451686,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":95999.56,"timestamp":1709569066.0450618,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":89599.59,"timestamp":1709569066.0450773,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38399.83,"timestamp":1709569066.0451465,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31999.854,"timestamp":1709569066.045109,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0450845,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.045164,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0451667,"container":null},{"exe":"","cmdline":"","pid":249501,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0451684,"container":null}],"sockets":[{"id":0,"consumption":2860620.0,"domains":[{"name":"uncore","consumption":70666.0,"timestamp":1709569065.9534726},{"name":"core","consumption":729100.0,"timestamp":1709569065.9532387},{"name":"dram","consumption":774626.0,"timestamp":1709569065.9529963}],"timestamp":1709569065.9517043}]},{"host":{"consumption":10230392.0,"timestamp":1709569068.1362233,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311792640","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":116324.03,"timestamp":1709569068.135931,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":91834.76,"timestamp":1709569068.1359856,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":48978.535,"timestamp":1709569068.13601,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":36733.902,"timestamp":1709569068.135946,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":36733.902,"timestamp":1709569068.135971,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359522,"container":null},{"exe":"","cmdline":"/usr/libexec/fwupd/fwupd","pid":2916,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359785,"container":null},{"exe":"","cmdline":"/usr/libexec/gvfs-afc-volume-monitor","pid":2457,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359835,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359892,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1360116,"container":null}],"sockets":[{"id":0,"consumption":2688432.0,"domains":[{"name":"uncore","consumption":84259.0,"timestamp":1709569068.057044},{"name":"core","consumption":588952.0,"timestamp":1709569068.0569935},{"name":"dram","consumption":772851.0,"timestamp":1709569068.0569386}],"timestamp":1709569068.0558925}]},{"host":{"consumption":11706772.0,"timestamp":1709569070.2046812,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311714816","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":165288.98,"timestamp":1709569070.204433,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":158102.52,"timestamp":1709569070.2044551,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":50305.344,"timestamp":1709569070.2044961,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":50305.344,"timestamp":1709569070.2045052,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28745.91,"timestamp":1709569070.2044826,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":14372.955,"timestamp":1709569070.204463,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2044728,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2044933,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2045171,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2045195,"container":null}],"sockets":[{"id":0,"consumption":3013910.0,"domains":[{"name":"uncore","consumption":97346.0,"timestamp":1709569070.1455407},{"name":"core","consumption":787681.0,"timestamp":1709569070.1454976},{"name":"dram","consumption":804376.0,"timestamp":1709569070.1454227}],"timestamp":1709569070.1451373}]},{"host":{"consumption":11031279.0,"timestamp":1709569072.2848258,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311690240","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":80864.6,"timestamp":1709569072.2845564,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":74125.89,"timestamp":1709569072.2845726,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":47171.02,"timestamp":1709569072.2846088,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":47171.02,"timestamp":1709569072.2846167,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":33693.586,"timestamp":1709569072.284595,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.2845688,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284578,"container":null},{"exe":"","cmdline":"/usr/sbin/irqbalance--foreground","pid":584,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284602,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284612,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.2846181,"container":null}],"sockets":[{"id":0,"consumption":3685854.0,"domains":[{"name":"uncore","consumption":70979.0,"timestamp":1709569072.2161698},{"name":"core","consumption":1516305.0,"timestamp":1709569072.2159224},{"name":"dram","consumption":774430.0,"timestamp":1709569072.2156763}],"timestamp":1709569072.2141333}]},{"host":{"consumption":10188085.0,"timestamp":1709569074.3809662,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311583744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":129274.79,"timestamp":1709569074.3807373,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":123118.86,"timestamp":1709569074.3806627,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":67715.37,"timestamp":1709569074.3807063,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":61559.43,"timestamp":1709569074.3806434,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":36935.652,"timestamp":1709569074.380661,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":36935.652,"timestamp":1709569074.3807158,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":30779.715,"timestamp":1709569074.3806891,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.380702,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.3807323,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.3807428,"container":null}],"sockets":[{"id":0,"consumption":2669277.0,"domains":[{"name":"uncore","consumption":2377.0,"timestamp":1709569074.2956257},{"name":"core","consumption":635943.0,"timestamp":1709569074.295518},{"name":"dram","consumption":693138.0,"timestamp":1709569074.2953844}],"timestamp":1709569074.2940917}]},{"host":{"consumption":10273173.0,"timestamp":1709569076.4840806,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311133184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":192311.81,"timestamp":1709569076.4837523,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":62036.066,"timestamp":1709569076.4836805,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":62036.066,"timestamp":1709569076.4836984,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":49628.85,"timestamp":1709569076.4837635,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31018.033,"timestamp":1709569076.4837308,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":12407.213,"timestamp":1709569076.4837837,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837067,"container":null},{"exe":"","cmdline":"","pid":52,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837546,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837568,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837873,"container":null}],"sockets":[{"id":0,"consumption":2682165.0,"domains":[{"name":"uncore","consumption":34426.0,"timestamp":1709569076.3929577},{"name":"core","consumption":624540.0,"timestamp":1709569076.3927567},{"name":"dram","consumption":717227.0,"timestamp":1709569076.392554}],"timestamp":1709569076.3915682}]},{"host":{"consumption":9607585.0,"timestamp":1709569078.5887036,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311055360","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":126189.17,"timestamp":1709569078.5884168,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":120453.305,"timestamp":1709569078.5883787,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":34415.23,"timestamp":1709569078.5883904,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28679.357,"timestamp":1709569078.588356,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5883718,"container":null},{"exe":"","cmdline":"/snap/snap-store/959/usr/bin/snap-store--gapplication-service","pid":2654,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.588389,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5883996,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.588423,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5884507,"container":null},{"exe":"","cmdline":"","pid":263932,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5884538,"container":null}],"sockets":[{"id":0,"consumption":2308325.0,"domains":[{"name":"uncore","consumption":0.0,"timestamp":1709569078.4969332},{"name":"core","consumption":349548.0,"timestamp":1709569078.49682},{"name":"dram","consumption":659184.0,"timestamp":1709569078.496608}],"timestamp":1709569078.495577}]},{"host":{"consumption":11781116.0,"timestamp":1709569080.690352,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310977536","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":183528.48,"timestamp":1709569080.6900492,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":127058.164,"timestamp":1709569080.689976,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":49411.51,"timestamp":1709569080.6899953,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42352.727,"timestamp":1709569080.6900613,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28235.15,"timestamp":1709569080.690028,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900034,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.690054,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900635,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900702,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900811,"container":null}],"sockets":[{"id":0,"consumption":3656251.0,"domains":[{"name":"uncore","consumption":100027.0,"timestamp":1709569080.6002367},{"name":"core","consumption":1471737.0,"timestamp":1709569080.6002066},{"name":"dram","consumption":835779.0,"timestamp":1709569080.6001685}],"timestamp":1709569080.5997374}]},{"host":{"consumption":10751426.0,"timestamp":1709569082.7966828,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310912000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":129223.875,"timestamp":1709569082.7962778,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":129223.875,"timestamp":1709569082.796353,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":45228.355,"timestamp":1709569082.796296,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38767.16,"timestamp":1709569082.796366,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32305.969,"timestamp":1709569082.7963324,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":19383.58,"timestamp":1709569082.7963855,"container":null},{"exe":"","cmdline":"/usr/libexec/xdg-desktop-portal","pid":2741,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.796281,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.7962918,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.796305,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.7963483,"container":null}],"sockets":[{"id":0,"consumption":2932212.0,"domains":[{"name":"uncore","consumption":108001.0,"timestamp":1709569082.703656},{"name":"core","consumption":754167.0,"timestamp":1709569082.7034225},{"name":"dram","consumption":809091.0,"timestamp":1709569082.7031865}],"timestamp":1709569082.701941}]},{"host":{"consumption":11675751.0,"timestamp":1709569084.8753462,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310842368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":162752.89,"timestamp":1709569084.8750737,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":120295.625,"timestamp":1709569084.875089,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":84914.555,"timestamp":1709569084.8751278,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":56609.703,"timestamp":1709569084.8750875,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42457.277,"timestamp":1709569084.8751369,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35381.062,"timestamp":1709569084.8751128,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":14152.426,"timestamp":1709569084.8750942,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.875102,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.8751385,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.8751504,"container":null}],"sockets":[{"id":0,"consumption":3311707.0,"domains":[{"name":"uncore","consumption":114419.0,"timestamp":1709569084.8064413},{"name":"core","consumption":1057562.0,"timestamp":1709569084.806423},{"name":"dram","consumption":842802.0,"timestamp":1709569084.8063824}],"timestamp":1709569084.8060837}]},{"host":{"consumption":10690528.0,"timestamp":1709569086.9738417,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310768640","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":162470.03,"timestamp":1709569086.9735067,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":142973.62,"timestamp":1709569086.9735715,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":64988.016,"timestamp":1709569086.9735236,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":45491.605,"timestamp":1709569086.973582,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32494.008,"timestamp":1709569086.973554,"container":null},{"exe":"","cmdline":"","pid":41,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735167,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.973531,"container":null},{"exe":"","cmdline":"/usr/bin/containerd-shim-runc-v2-namespacemoby-id4daf484270eace43a1e866a0d0d3505b7601e702300946af07a68e2493d97644-address/run/containerd/containerd.sock","pid":240526,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735382,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735672,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.973575,"container":null}],"sockets":[{"id":0,"consumption":2990252.0,"domains":[{"name":"uncore","consumption":115894.0,"timestamp":1709569086.8877308},{"name":"core","consumption":789509.0,"timestamp":1709569086.8874633},{"name":"dram","consumption":821831.0,"timestamp":1709569086.887196}],"timestamp":1709569086.8857727}]},{"host":{"consumption":10444900.0,"timestamp":1709569089.0750725,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310703104","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":120566.9,"timestamp":1709569089.0747454,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":107875.65,"timestamp":1709569089.0748055,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":57110.637,"timestamp":1709569089.0747604,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":44419.383,"timestamp":1709569089.0748153,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":25382.504,"timestamp":1709569089.0747883,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":19036.877,"timestamp":1709569089.0748348,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0747678,"container":null},{"exe":"","cmdline":"","pid":269914,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0747864,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0748093,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.074817,"container":null}],"sockets":[{"id":0,"consumption":2727262.0,"domains":[{"name":"uncore","consumption":84809.0,"timestamp":1709569088.9848561},{"name":"core","consumption":582620.0,"timestamp":1709569088.9847484},{"name":"dram","consumption":778216.0,"timestamp":1709569088.9846327}],"timestamp":1709569088.9836576}]},{"host":{"consumption":10307967.0,"timestamp":1709569091.1843927,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310633472","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":123745.1,"timestamp":1709569091.1839895,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":111370.59,"timestamp":1709569091.1840603,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":68059.81,"timestamp":1709569091.184008,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":43310.79,"timestamp":1709569091.1840723,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":30936.275,"timestamp":1709569091.1840403,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.184004,"container":null},{"exe":"","cmdline":"@dbus-daemon--system--address=systemd:--nofork--nopidfile--systemd-activation--syslog-only","pid":574,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840155,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840165,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840816,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840973,"container":null}],"sockets":[{"id":0,"consumption":2666511.0,"domains":[{"name":"uncore","consumption":67738.0,"timestamp":1709569091.0878828},{"name":"core","consumption":528703.0,"timestamp":1709569091.087651},{"name":"dram","consumption":755137.0,"timestamp":1709569091.087412}],"timestamp":1709569091.086237}]},{"host":{"consumption":10513871.0,"timestamp":1709569093.2920067,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310567936","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":188533.25,"timestamp":1709569093.2917347,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":113119.95,"timestamp":1709569093.2916732,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":56559.977,"timestamp":1709569093.2917452,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":43991.09,"timestamp":1709569093.2916896,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":37706.652,"timestamp":1709569093.2917178,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":18853.326,"timestamp":1709569093.2917445,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":12568.884,"timestamp":1709569093.2916968,"container":null},{"exe":"","cmdline":"","pid":269914,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.2917151,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.2917309,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.291747,"container":null}],"sockets":[{"id":0,"consumption":2745264.0,"domains":[{"name":"uncore","consumption":91976.0,"timestamp":1709569093.198776},{"name":"core","consumption":632737.0,"timestamp":1709569093.1986213},{"name":"dram","consumption":772951.0,"timestamp":1709569093.1985009}],"timestamp":1709569093.1971552}]}] diff --git a/boagent/api/tests/mocks/hardware_data.json b/boagent/api/tests/mocks/hardware_data.json new file mode 100644 index 0000000..e3c9fd7 --- /dev/null +++ b/boagent/api/tests/mocks/hardware_data.json @@ -0,0 +1,197 @@ +{ + "disks": [ + { + "capacity": 238, + "manufacturer": "toshiba", + "type": "ssd" + } + ], + "cpus": [ + { + "vendor": "GenuineIntel", + "name": "Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz", + "microarch": [ + "kabylake", + "" + ], + "vector_instructions": { + "sse": "Yes", + "sse2": "Yes", + "sse3": "Yes", + "ssse3": "Yes", + "sse4.1": "Yes", + "sse4.2": "Yes", + "sse4a": "--", + "avx": "Yes", + "avx2": "--", + "bmi1": "--", + "bmi2": "--" + }, + "cpu_info": { + "python_version": "3.10.12.final.0 (64 bit)", + "cpuinfo_version": [ + 9, + 0, + 0 + ], + "cpuinfo_version_string": "9.0.0", + "arch": "X86_64", + "bits": 64, + "count": 8, + "arch_string_raw": "x86_64", + "vendor_id_raw": "GenuineIntel", + "brand_raw": "Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz", + "hz_advertised_friendly": "1.8000 GHz", + "hz_actual_friendly": "400.0000 MHz", + "hz_advertised": [ + 1800000000, + 0 + ], + "hz_actual": [ + 400000000, + 0 + ], + "stepping": 12, + "model": 142, + "family": 6, + "flags": [ + "3dnowprefetch", + "abm", + "acpi", + "adx", + "aes", + "aperfmperf", + "apic", + "arat", + "arch_capabilities", + "arch_perfmon", + "art", + "avx", + "avx2", + "bmi1", + "bmi2", + "bts", + "clflush", + "clflushopt", + "cmov", + "constant_tsc", + "cpuid", + "cpuid_fault", + "cx16", + "cx8", + "de", + "ds_cpl", + "dtes64", + "dtherm", + "dts", + "epb", + "ept", + "ept_ad", + "erms", + "est", + "f16c", + "flexpriority", + "flush_l1d", + "fma", + "fpu", + "fsgsbase", + "fxsr", + "ht", + "hwp", + "hwp_act_window", + "hwp_epp", + "hwp_notify", + "ibpb", + "ibrs", + "ibrs_enhanced", + "ida", + "intel_pt", + "invpcid", + "invpcid_single", + "lahf_lm", + "lm", + "mca", + "mce", + "md_clear", + "mmx", + "monitor", + "movbe", + "mpx", + "msr", + "mtrr", + "nonstop_tsc", + "nopl", + "nx", + "osxsave", + "pae", + "pat", + "pbe", + "pcid", + "pclmulqdq", + "pdcm", + "pdpe1gb", + "pebs", + "pge", + "pln", + "pni", + "popcnt", + "pse", + "pse36", + "pts", + "rdrand", + "rdrnd", + "rdseed", + "rdtscp", + "rep_good", + "sdbg", + "sep", + "sgx", + "smap", + "smep", + "ss", + "ssbd", + "sse", + "sse2", + "sse4_1", + "sse4_2", + "ssse3", + "stibp", + "syscall", + "tm", + "tm2", + "tpr_shadow", + "tsc", + "tsc_adjust", + "tsc_deadline_timer", + "tscdeadline", + "vme", + "vmx", + "vnmi", + "vpid", + "x2apic", + "xgetbv1", + "xsave", + "xsavec", + "xsaveopt", + "xsaves", + "xtopology", + "xtpr" + ], + "l3_cache_size": 8388608, + "l2_cache_size": 1048576, + "l1_data_cache_size": 131072, + "l1_instruction_cache_size": 131072, + "l2_cache_line_size": 256, + "l2_cache_associativity": 6 + }, + "core_units": 8, + "family": "kabylake" + } + ], + "rams": [ + { + "capacity": 7 + } + ], + "mother_board": {} +} diff --git a/boagent/api/tests/mocks/power_data.json b/boagent/api/tests/mocks/power_data.json new file mode 100644 index 0000000..bcf7f1f --- /dev/null +++ b/boagent/api/tests/mocks/power_data.json @@ -0,0 +1 @@ +{"host":{"consumption":9510593.0,"timestamp":1709569036.7701147,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312873984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":118741.05,"timestamp":1709569036.7699473,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":67852.03,"timestamp":1709569036.7699215,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":33926.016,"timestamp":1709569036.7699084,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":33926.016,"timestamp":1709569036.7699292,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":22617.344,"timestamp":1709569036.7698824,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699177,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699306,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699432,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699645,"container":null},{"exe":"","cmdline":"/usr/libexec/gnome-terminal-server","pid":6747,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.769976,"container":null}],"sockets":[{"id":0,"consumption":2280155.0,"domains":[{"name":"uncore","consumption":4760.0,"timestamp":1709569036.687679},{"name":"core","consumption":363592.0,"timestamp":1709569036.687624},{"name":"dram","consumption":650426.0,"timestamp":1709569036.6875672}],"timestamp":1709569036.6864183}]}{"host":{"consumption":10326187.0,"timestamp":1709569038.8445754,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312808448","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":138775.89,"timestamp":1709569038.8444579,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":44155.965,"timestamp":1709569038.844482,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":37847.97,"timestamp":1709569038.8444862,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31539.975,"timestamp":1709569038.8444736,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":12615.989,"timestamp":1709569038.8444946,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.844463,"container":null},{"exe":"","cmdline":"/usr/bin/dbus-daemon--session--address=systemd:--nofork--nopidfile--systemd-activation--syslog-only","pid":1667,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.84447,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.844479,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.8444872,"container":null},{"exe":"","cmdline":"","pid":263930,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.8444917,"container":null}],"sockets":[{"id":0,"consumption":2565381.0,"domains":[{"name":"uncore","consumption":11099.0,"timestamp":1709569038.7827907},{"name":"core","consumption":519459.0,"timestamp":1709569038.7827168},{"name":"dram","consumption":699014.0,"timestamp":1709569038.7826238}],"timestamp":1709569038.7813084}]}{"host":{"consumption":11958290.0,"timestamp":1709569040.9484453,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312738816","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":196994.4,"timestamp":1709569040.9481177,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":145921.8,"timestamp":1709569040.9481637,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":131329.61,"timestamp":1709569040.948196,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":51072.625,"timestamp":1709569040.9481723,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":29184.355,"timestamp":1709569040.9481483,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":14592.178,"timestamp":1709569040.9481866,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481342,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.948174,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481745,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481938,"container":null}],"sockets":[{"id":0,"consumption":3843814.0,"domains":[{"name":"uncore","consumption":114992.0,"timestamp":1709569040.854405},{"name":"core","consumption":1617998.0,"timestamp":1709569040.854287},{"name":"dram","consumption":905649.0,"timestamp":1709569040.8541002}],"timestamp":1709569040.8530734}]}{"host":{"consumption":10766276.0,"timestamp":1709569043.045374,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312673280","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":109204.47,"timestamp":1709569043.0450184,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":96356.88,"timestamp":1709569043.0450678,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":70661.71,"timestamp":1709569043.0449176,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":51390.34,"timestamp":1709569043.045032,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":25695.17,"timestamp":1709569043.0449913,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":19271.377,"timestamp":1709569043.0450542,"container":null},{"exe":"","cmdline":"","pid":263930,"resources_usage":null,"consumption":12847.585,"timestamp":1709569043.0450523,"container":null},{"exe":"","cmdline":"/usr/libexec/ibus-engine-simple","pid":2706,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0449593,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0450757,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0451076,"container":null}],"sockets":[{"id":0,"consumption":2925740.0,"domains":[{"name":"uncore","consumption":59052.0,"timestamp":1709569042.9618628},{"name":"core","consumption":870351.0,"timestamp":1709569042.9616694},{"name":"dram","consumption":763613.0,"timestamp":1709569042.9615138}],"timestamp":1709569042.9604695}]}{"host":{"consumption":12795838.0,"timestamp":1709569045.136388,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312599552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":664518.2,"timestamp":1709569045.1362245,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":115904.33,"timestamp":1709569045.13612,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":100450.42,"timestamp":1709569045.136108,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":77269.555,"timestamp":1709569045.1361601,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":46361.73,"timestamp":1709569045.1361682,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":30907.82,"timestamp":1709569045.1361806,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":23180.865,"timestamp":1709569045.1361425,"container":null},{"exe":"","cmdline":"/usr/libexec/ibus-engine-simple","pid":2706,"resources_usage":null,"consumption":15453.91,"timestamp":1709569045.1361227,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7726.955,"timestamp":1709569045.1361263,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":7726.955,"timestamp":1709569045.1361704,"container":null}],"sockets":[{"id":0,"consumption":4255760.0,"domains":[{"name":"uncore","consumption":91691.0,"timestamp":1709569045.0613444},{"name":"core","consumption":1964961.0,"timestamp":1709569045.0612833},{"name":"dram","consumption":831560.0,"timestamp":1709569045.0612147}],"timestamp":1709569045.0603004}]}{"host":{"consumption":10793162.0,"timestamp":1709569047.2175863,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312529920","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":117387.87,"timestamp":1709569047.2174373,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":78258.57,"timestamp":1709569047.2173684,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":58693.934,"timestamp":1709569047.2174082,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":39129.285,"timestamp":1709569047.2173939,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":39129.285,"timestamp":1709569047.2174149,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":13043.097,"timestamp":1709569047.2174313,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2173736,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2174056,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.21742,"container":null},{"exe":"","cmdline":"","pid":263932,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2174532,"container":null}],"sockets":[{"id":0,"consumption":3052707.0,"domains":[{"name":"uncore","consumption":45126.0,"timestamp":1709569047.1469367},{"name":"core","consumption":1034363.0,"timestamp":1709569047.1468956},{"name":"dram","consumption":728187.0,"timestamp":1709569047.146852}],"timestamp":1709569047.1459458}]}{"host":{"consumption":17104786.0,"timestamp":1709569049.3226047,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312448000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1625531.5,"timestamp":1709569049.3221166,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID330-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{37eaeb80-2d9e-484a-af74-336f513a2f16}3065truetab","pid":271111,"resources_usage":null,"consumption":608263.4,"timestamp":1709569049.3221295,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":314618.97,"timestamp":1709569049.321927,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":125847.6,"timestamp":1709569049.3220081,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":83898.4,"timestamp":1709569049.32202,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":41949.2,"timestamp":1709569049.32197,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3219535,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3219838,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3220413,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":10487.3,"timestamp":1709569049.3219476,"container":null}],"sockets":[{"id":0,"consumption":7401117.0,"domains":[{"name":"uncore","consumption":212689.0,"timestamp":1709569049.2283125},{"name":"core","consumption":4861941.0,"timestamp":1709569049.2282119},{"name":"dram","consumption":1089513.0,"timestamp":1709569049.2281222}],"timestamp":1709569049.226694}]}{"host":{"consumption":18876486.0,"timestamp":1709569051.379631,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312312832","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1823363.4,"timestamp":1709569051.379438,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID331-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{1b207027-ae58-45d6-a5cb-ea6d45785f0c}3065truetab","pid":271887,"resources_usage":null,"consumption":911681.7,"timestamp":1709569051.37943,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":350646.78,"timestamp":1709569051.3793063,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":268829.22,"timestamp":1709569051.3793647,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":70129.36,"timestamp":1709569051.3793387,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":58441.133,"timestamp":1709569051.3793726,"container":null},{"exe":"","cmdline":"","pid":88,"resources_usage":null,"consumption":46752.906,"timestamp":1709569051.3793633,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35064.68,"timestamp":1709569051.3793492,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":23376.453,"timestamp":1709569051.379325,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":23376.453,"timestamp":1709569051.3793294,"container":null}],"sockets":[{"id":0,"consumption":8338159.0,"domains":[{"name":"uncore","consumption":243599.0,"timestamp":1709569051.3342211},{"name":"core","consumption":5475930.0,"timestamp":1709569051.3340466},{"name":"dram","consumption":1159400.0,"timestamp":1709569051.3338134}],"timestamp":1709569051.3327785}]}{"host":{"consumption":11250187.0,"timestamp":1709569053.4751475,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312394752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":309827.7,"timestamp":1709569053.4748783,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":110160.95,"timestamp":1709569053.4749343,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":61965.53,"timestamp":1709569053.4748945,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":48195.414,"timestamp":1709569053.4749434,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":41310.355,"timestamp":1709569053.4749424,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":34425.297,"timestamp":1709569053.4749196,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":13770.119,"timestamp":1709569053.4748962,"container":null},{"exe":"","cmdline":"","pid":41,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.474887,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.4748998,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.474945,"container":null}],"sockets":[{"id":0,"consumption":3172866.0,"domains":[{"name":"uncore","consumption":82698.0,"timestamp":1709569053.3911366},{"name":"core","consumption":947798.0,"timestamp":1709569053.391068},{"name":"dram","consumption":817260.0,"timestamp":1709569053.3910155}],"timestamp":1709569053.389935}]}{"host":{"consumption":11651021.0,"timestamp":1709569055.5661595,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312243200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":538284.25,"timestamp":1709569055.5659678,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":148736.44,"timestamp":1709569055.5658362,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":84992.25,"timestamp":1709569055.5658932,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42496.125,"timestamp":1709569055.565902,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28330.748,"timestamp":1709569055.5658772,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":14165.374,"timestamp":1709569055.5658662,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658436,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658581,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658886,"container":null},{"exe":"","cmdline":"","pid":23,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658937,"container":null}],"sockets":[{"id":0,"consumption":3413054.0,"domains":[{"name":"uncore","consumption":89927.0,"timestamp":1709569055.4883645},{"name":"core","consumption":1173133.0,"timestamp":1709569055.4882367},{"name":"dram","consumption":850286.0,"timestamp":1709569055.4880445}],"timestamp":1709569055.4860508}]}{"host":{"consumption":19636240.0,"timestamp":1709569057.6362855,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312181760","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1849529.5,"timestamp":1709569057.6361952,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":816675.44,"timestamp":1709569057.6361094,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":360297.97,"timestamp":1709569057.6360965,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":120099.336,"timestamp":1709569057.636142,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":96079.46,"timestamp":1709569057.6361227,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":72059.59,"timestamp":1709569057.6361485,"container":null},{"exe":"","cmdline":"","pid":88,"resources_usage":null,"consumption":60049.668,"timestamp":1709569057.6361413,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":36029.797,"timestamp":1709569057.636116,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":24019.865,"timestamp":1709569057.6361303,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID320-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{139102ea-3b73-434c-8e10-7c94bb08134f}3065truetab","pid":257812,"resources_usage":null,"consumption":12009.933,"timestamp":1709569057.6361134,"container":null}],"sockets":[{"id":0,"consumption":8953263.0,"domains":[{"name":"uncore","consumption":191909.0,"timestamp":1709569057.57598},{"name":"core","consumption":6353826.0,"timestamp":1709569057.5759137},{"name":"dram","consumption":1152379.0,"timestamp":1709569057.5758448}],"timestamp":1709569057.5751684}]}{"host":{"consumption":14328843.0,"timestamp":1709569059.7370303,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312087552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":788261.56,"timestamp":1709569059.736839,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":262753.84,"timestamp":1709569059.7367055,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":183927.69,"timestamp":1709569059.7367206,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":175169.23,"timestamp":1709569059.7367651,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":52550.773,"timestamp":1709569059.7367737,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":52550.773,"timestamp":1709569059.7367744,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35033.848,"timestamp":1709569059.7367482,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":26275.387,"timestamp":1709569059.7367373,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":17516.924,"timestamp":1709569059.7367234,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":17516.924,"timestamp":1709569059.7367277,"container":null}],"sockets":[{"id":0,"consumption":5606524.0,"domains":[{"name":"uncore","consumption":163963.0,"timestamp":1709569059.6464283},{"name":"core","consumption":3117124.0,"timestamp":1709569059.64638},{"name":"dram","consumption":1008404.0,"timestamp":1709569059.646328}],"timestamp":1709569059.6453197}]}{"host":{"consumption":10798938.0,"timestamp":1709569061.834314,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312005632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":90856.45,"timestamp":1709569061.8340003,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":90856.45,"timestamp":1709569061.8340604,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":58407.723,"timestamp":1709569061.8340156,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38938.48,"timestamp":1709569061.83407,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32448.734,"timestamp":1709569061.8340447,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340232,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340328,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340566,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.834072,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340888,"container":null}],"sockets":[{"id":0,"consumption":3002282.0,"domains":[{"name":"uncore","consumption":59301.0,"timestamp":1709569061.7501621},{"name":"core","consumption":882674.0,"timestamp":1709569061.7499254},{"name":"dram","consumption":758935.0,"timestamp":1709569061.749683}],"timestamp":1709569061.7484915}]}{"host":{"consumption":11771431.0,"timestamp":1709569063.9412537,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311923712","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":184705.62,"timestamp":1709569063.9409318,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":163393.42,"timestamp":1709569063.9409485,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":106560.94,"timestamp":1709569063.9409466,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":85248.75,"timestamp":1709569063.9409919,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":71040.625,"timestamp":1709569063.9409637,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":49728.434,"timestamp":1709569063.9410012,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28416.248,"timestamp":1709569063.9409754,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.940943,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.9409544,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.9409957,"container":null}],"sockets":[{"id":0,"consumption":3543949.0,"domains":[{"name":"uncore","consumption":120076.0,"timestamp":1709569063.8469055},{"name":"core","consumption":1209405.0,"timestamp":1709569063.8467765},{"name":"dram","consumption":826656.0,"timestamp":1709569063.8466294}],"timestamp":1709569063.8455148}]}{"host":{"consumption":10726351.0,"timestamp":1709569066.0453446,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311866368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":172799.2,"timestamp":1709569066.0451372,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":115199.48,"timestamp":1709569066.0451686,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":95999.56,"timestamp":1709569066.0450618,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":89599.59,"timestamp":1709569066.0450773,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38399.83,"timestamp":1709569066.0451465,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31999.854,"timestamp":1709569066.045109,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0450845,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.045164,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0451667,"container":null},{"exe":"","cmdline":"","pid":249501,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0451684,"container":null}],"sockets":[{"id":0,"consumption":2860620.0,"domains":[{"name":"uncore","consumption":70666.0,"timestamp":1709569065.9534726},{"name":"core","consumption":729100.0,"timestamp":1709569065.9532387},{"name":"dram","consumption":774626.0,"timestamp":1709569065.9529963}],"timestamp":1709569065.9517043}]}{"host":{"consumption":10230392.0,"timestamp":1709569068.1362233,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311792640","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":116324.03,"timestamp":1709569068.135931,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":91834.76,"timestamp":1709569068.1359856,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":48978.535,"timestamp":1709569068.13601,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":36733.902,"timestamp":1709569068.135946,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":36733.902,"timestamp":1709569068.135971,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359522,"container":null},{"exe":"","cmdline":"/usr/libexec/fwupd/fwupd","pid":2916,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359785,"container":null},{"exe":"","cmdline":"/usr/libexec/gvfs-afc-volume-monitor","pid":2457,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359835,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359892,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1360116,"container":null}],"sockets":[{"id":0,"consumption":2688432.0,"domains":[{"name":"uncore","consumption":84259.0,"timestamp":1709569068.057044},{"name":"core","consumption":588952.0,"timestamp":1709569068.0569935},{"name":"dram","consumption":772851.0,"timestamp":1709569068.0569386}],"timestamp":1709569068.0558925}]}{"host":{"consumption":11706772.0,"timestamp":1709569070.2046812,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311714816","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":165288.98,"timestamp":1709569070.204433,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":158102.52,"timestamp":1709569070.2044551,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":50305.344,"timestamp":1709569070.2044961,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":50305.344,"timestamp":1709569070.2045052,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28745.91,"timestamp":1709569070.2044826,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":14372.955,"timestamp":1709569070.204463,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2044728,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2044933,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2045171,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2045195,"container":null}],"sockets":[{"id":0,"consumption":3013910.0,"domains":[{"name":"uncore","consumption":97346.0,"timestamp":1709569070.1455407},{"name":"core","consumption":787681.0,"timestamp":1709569070.1454976},{"name":"dram","consumption":804376.0,"timestamp":1709569070.1454227}],"timestamp":1709569070.1451373}]}{"host":{"consumption":11031279.0,"timestamp":1709569072.2848258,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311690240","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":80864.6,"timestamp":1709569072.2845564,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":74125.89,"timestamp":1709569072.2845726,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":47171.02,"timestamp":1709569072.2846088,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":47171.02,"timestamp":1709569072.2846167,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":33693.586,"timestamp":1709569072.284595,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.2845688,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284578,"container":null},{"exe":"","cmdline":"/usr/sbin/irqbalance--foreground","pid":584,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284602,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284612,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.2846181,"container":null}],"sockets":[{"id":0,"consumption":3685854.0,"domains":[{"name":"uncore","consumption":70979.0,"timestamp":1709569072.2161698},{"name":"core","consumption":1516305.0,"timestamp":1709569072.2159224},{"name":"dram","consumption":774430.0,"timestamp":1709569072.2156763}],"timestamp":1709569072.2141333}]}{"host":{"consumption":10188085.0,"timestamp":1709569074.3809662,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311583744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":129274.79,"timestamp":1709569074.3807373,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":123118.86,"timestamp":1709569074.3806627,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":67715.37,"timestamp":1709569074.3807063,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":61559.43,"timestamp":1709569074.3806434,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":36935.652,"timestamp":1709569074.380661,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":36935.652,"timestamp":1709569074.3807158,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":30779.715,"timestamp":1709569074.3806891,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.380702,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.3807323,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.3807428,"container":null}],"sockets":[{"id":0,"consumption":2669277.0,"domains":[{"name":"uncore","consumption":2377.0,"timestamp":1709569074.2956257},{"name":"core","consumption":635943.0,"timestamp":1709569074.295518},{"name":"dram","consumption":693138.0,"timestamp":1709569074.2953844}],"timestamp":1709569074.2940917}]}{"host":{"consumption":10273173.0,"timestamp":1709569076.4840806,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311133184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":192311.81,"timestamp":1709569076.4837523,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":62036.066,"timestamp":1709569076.4836805,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":62036.066,"timestamp":1709569076.4836984,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":49628.85,"timestamp":1709569076.4837635,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31018.033,"timestamp":1709569076.4837308,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":12407.213,"timestamp":1709569076.4837837,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837067,"container":null},{"exe":"","cmdline":"","pid":52,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837546,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837568,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837873,"container":null}],"sockets":[{"id":0,"consumption":2682165.0,"domains":[{"name":"uncore","consumption":34426.0,"timestamp":1709569076.3929577},{"name":"core","consumption":624540.0,"timestamp":1709569076.3927567},{"name":"dram","consumption":717227.0,"timestamp":1709569076.392554}],"timestamp":1709569076.3915682}]}{"host":{"consumption":9607585.0,"timestamp":1709569078.5887036,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311055360","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":126189.17,"timestamp":1709569078.5884168,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":120453.305,"timestamp":1709569078.5883787,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":34415.23,"timestamp":1709569078.5883904,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28679.357,"timestamp":1709569078.588356,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5883718,"container":null},{"exe":"","cmdline":"/snap/snap-store/959/usr/bin/snap-store--gapplication-service","pid":2654,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.588389,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5883996,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.588423,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5884507,"container":null},{"exe":"","cmdline":"","pid":263932,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5884538,"container":null}],"sockets":[{"id":0,"consumption":2308325.0,"domains":[{"name":"uncore","consumption":0.0,"timestamp":1709569078.4969332},{"name":"core","consumption":349548.0,"timestamp":1709569078.49682},{"name":"dram","consumption":659184.0,"timestamp":1709569078.496608}],"timestamp":1709569078.495577}]}{"host":{"consumption":11781116.0,"timestamp":1709569080.690352,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310977536","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":183528.48,"timestamp":1709569080.6900492,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":127058.164,"timestamp":1709569080.689976,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":49411.51,"timestamp":1709569080.6899953,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42352.727,"timestamp":1709569080.6900613,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28235.15,"timestamp":1709569080.690028,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900034,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.690054,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900635,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900702,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900811,"container":null}],"sockets":[{"id":0,"consumption":3656251.0,"domains":[{"name":"uncore","consumption":100027.0,"timestamp":1709569080.6002367},{"name":"core","consumption":1471737.0,"timestamp":1709569080.6002066},{"name":"dram","consumption":835779.0,"timestamp":1709569080.6001685}],"timestamp":1709569080.5997374}]}{"host":{"consumption":10751426.0,"timestamp":1709569082.7966828,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310912000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":129223.875,"timestamp":1709569082.7962778,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":129223.875,"timestamp":1709569082.796353,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":45228.355,"timestamp":1709569082.796296,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38767.16,"timestamp":1709569082.796366,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32305.969,"timestamp":1709569082.7963324,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":19383.58,"timestamp":1709569082.7963855,"container":null},{"exe":"","cmdline":"/usr/libexec/xdg-desktop-portal","pid":2741,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.796281,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.7962918,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.796305,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.7963483,"container":null}],"sockets":[{"id":0,"consumption":2932212.0,"domains":[{"name":"uncore","consumption":108001.0,"timestamp":1709569082.703656},{"name":"core","consumption":754167.0,"timestamp":1709569082.7034225},{"name":"dram","consumption":809091.0,"timestamp":1709569082.7031865}],"timestamp":1709569082.701941}]}{"host":{"consumption":11675751.0,"timestamp":1709569084.8753462,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310842368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":162752.89,"timestamp":1709569084.8750737,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":120295.625,"timestamp":1709569084.875089,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":84914.555,"timestamp":1709569084.8751278,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":56609.703,"timestamp":1709569084.8750875,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42457.277,"timestamp":1709569084.8751369,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35381.062,"timestamp":1709569084.8751128,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":14152.426,"timestamp":1709569084.8750942,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.875102,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.8751385,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.8751504,"container":null}],"sockets":[{"id":0,"consumption":3311707.0,"domains":[{"name":"uncore","consumption":114419.0,"timestamp":1709569084.8064413},{"name":"core","consumption":1057562.0,"timestamp":1709569084.806423},{"name":"dram","consumption":842802.0,"timestamp":1709569084.8063824}],"timestamp":1709569084.8060837}]}{"host":{"consumption":10690528.0,"timestamp":1709569086.9738417,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310768640","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":162470.03,"timestamp":1709569086.9735067,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":142973.62,"timestamp":1709569086.9735715,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":64988.016,"timestamp":1709569086.9735236,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":45491.605,"timestamp":1709569086.973582,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32494.008,"timestamp":1709569086.973554,"container":null},{"exe":"","cmdline":"","pid":41,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735167,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.973531,"container":null},{"exe":"","cmdline":"/usr/bin/containerd-shim-runc-v2-namespacemoby-id4daf484270eace43a1e866a0d0d3505b7601e702300946af07a68e2493d97644-address/run/containerd/containerd.sock","pid":240526,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735382,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735672,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.973575,"container":null}],"sockets":[{"id":0,"consumption":2990252.0,"domains":[{"name":"uncore","consumption":115894.0,"timestamp":1709569086.8877308},{"name":"core","consumption":789509.0,"timestamp":1709569086.8874633},{"name":"dram","consumption":821831.0,"timestamp":1709569086.887196}],"timestamp":1709569086.8857727}]}{"host":{"consumption":10444900.0,"timestamp":1709569089.0750725,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310703104","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":120566.9,"timestamp":1709569089.0747454,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":107875.65,"timestamp":1709569089.0748055,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":57110.637,"timestamp":1709569089.0747604,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":44419.383,"timestamp":1709569089.0748153,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":25382.504,"timestamp":1709569089.0747883,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":19036.877,"timestamp":1709569089.0748348,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0747678,"container":null},{"exe":"","cmdline":"","pid":269914,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0747864,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0748093,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.074817,"container":null}],"sockets":[{"id":0,"consumption":2727262.0,"domains":[{"name":"uncore","consumption":84809.0,"timestamp":1709569088.9848561},{"name":"core","consumption":582620.0,"timestamp":1709569088.9847484},{"name":"dram","consumption":778216.0,"timestamp":1709569088.9846327}],"timestamp":1709569088.9836576}]}{"host":{"consumption":10307967.0,"timestamp":1709569091.1843927,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310633472","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":123745.1,"timestamp":1709569091.1839895,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":111370.59,"timestamp":1709569091.1840603,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":68059.81,"timestamp":1709569091.184008,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":43310.79,"timestamp":1709569091.1840723,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":30936.275,"timestamp":1709569091.1840403,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.184004,"container":null},{"exe":"","cmdline":"@dbus-daemon--system--address=systemd:--nofork--nopidfile--systemd-activation--syslog-only","pid":574,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840155,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840165,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840816,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840973,"container":null}],"sockets":[{"id":0,"consumption":2666511.0,"domains":[{"name":"uncore","consumption":67738.0,"timestamp":1709569091.0878828},{"name":"core","consumption":528703.0,"timestamp":1709569091.087651},{"name":"dram","consumption":755137.0,"timestamp":1709569091.087412}],"timestamp":1709569091.086237}]}{"host":{"consumption":10513871.0,"timestamp":1709569093.2920067,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310567936","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":188533.25,"timestamp":1709569093.2917347,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":113119.95,"timestamp":1709569093.2916732,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":56559.977,"timestamp":1709569093.2917452,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":43991.09,"timestamp":1709569093.2916896,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":37706.652,"timestamp":1709569093.2917178,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":18853.326,"timestamp":1709569093.2917445,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":12568.884,"timestamp":1709569093.2916968,"container":null},{"exe":"","cmdline":"","pid":269914,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.2917151,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.2917309,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.291747,"container":null}],"sockets":[{"id":0,"consumption":2745264.0,"domains":[{"name":"uncore","consumption":91976.0,"timestamp":1709569093.198776},{"name":"core","consumption":632737.0,"timestamp":1709569093.1986213},{"name":"dram","consumption":772951.0,"timestamp":1709569093.1985009}],"timestamp":1709569093.1971552}]} From c9fadc9ab5fd5b1a7a6b30ddb6806922ec3d8078 Mon Sep 17 00:00:00 2001 From: repair Date: Wed, 20 Mar 2024 17:41:03 +0100 Subject: [PATCH 094/227] refactor: typing in query and get_metrics --- boagent/api/api.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 368ec02..0a9b5d6 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -8,7 +8,8 @@ from pytz import UTC, utc from datetime import datetime, timedelta from subprocess import run -from typing import Dict, Any, Tuple, List, Optional, Union +from typing import Dict, TypedDict, Any, Tuple, List, Optional, Union +from pydantic import BaseModel from croniter import croniter from fastapi import FastAPI, Response from fastapi.staticfiles import StaticFiles @@ -48,6 +49,15 @@ CARBON_AWARE_API_TOKEN = settings.carbon_aware_api_token +class TimeWorkloadDict(TypedDict): + time_percentage: float + load_percentage: float + + +class TimeWorkloadList(BaseModel): + time_workload: list[TimeWorkloadDict] + + def configure_static(app): app.mount("/assets", StaticFiles(directory=ASSETS_PATH), name="assets") @@ -204,10 +214,11 @@ async def query( start_time: str = "0.0", end_time: str = "0.0", verbose: bool = False, - location: str = None, + location: Union[str, None] = None, measure_power: bool = True, lifetime: float = DEFAULT_LIFETIME, fetch_hardware: bool = False, + time_workload: Union[float, list[dict[str, float]], None] = None, ): """ start_time: Start time for evaluation. Accepts either UNIX Timestamp or ISO8601 date format. \n @@ -217,6 +228,8 @@ async def query( measure_power: Get electricity consumption metrics from Scaphandre or not.\n lifetime: Full lifetime of the machine to consider.\n fetch_hardware: Regenerate hardware.json file with current machine hardware or not.\n + time_workload: Workload percentage for CPU and RAM. Can be a float or a list of dictionaries with format + {"time_percentage": float, "load_percentage": float} """ return get_metrics( iso8601_or_timestamp_as_timestamp(start_time), @@ -226,6 +239,7 @@ async def query( measure_power, lifetime, fetch_hardware, + time_workload, ) @@ -389,11 +403,11 @@ def get_metrics( start_time: float, end_time: float, verbose: bool, - location: str, + location: Union[str, None], measure_power: bool, lifetime: float, fetch_hardware: bool, - time_workload: Union[float, list[dict[str, int]], None] = None, + time_workload: Union[float, list[dict[str, float]], None] = None, ): now: float = time.time() From 45164186ea26849ce3f5af72395fe52dab68c000 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 21 Mar 2024 17:23:55 +0100 Subject: [PATCH 095/227] refactor: repo structure with tests directory and api modules --- boagent/api/api.py | 18 +- boagent/api/config/__init__.py | 1 + boagent/api/{ => config}/config.py | 4 +- boagent/api/database/__init__.py | 7 + boagent/api/{ => database}/database.py | 4 +- .../boaviztapi_response_not_verbose.json | 55 -- .../mocks/boaviztapi_response_verbose.json | 697 ------------------ .../api/tests/mocks/formatted_scaphandre.json | 1 - boagent/api/utils/__init__.py | 9 + boagent/api/{ => utils}/utils.py | 2 +- boagent/hardware/__init__.py | 1 + boagent/hardware/hardware_cli.py | 2 +- boagent/tests/__init__.py | 0 .../{ => tests}/api/test_api_integration.py | 0 boagent/{ => tests}/api/test_api_unit.py | 50 +- boagent/tests/hardware/test_hardwarecli.py | 43 ++ boagent/tests/hardware/test_lshw.py | 188 +++++ 17 files changed, 293 insertions(+), 789 deletions(-) create mode 100644 boagent/api/config/__init__.py rename boagent/api/{ => config}/config.py (92%) create mode 100644 boagent/api/database/__init__.py rename boagent/api/{ => database}/database.py (99%) delete mode 100644 boagent/api/tests/mocks/boaviztapi_response_not_verbose.json delete mode 100644 boagent/api/tests/mocks/boaviztapi_response_verbose.json delete mode 100644 boagent/api/tests/mocks/formatted_scaphandre.json create mode 100644 boagent/api/utils/__init__.py rename boagent/api/{ => utils}/utils.py (99%) create mode 100644 boagent/hardware/__init__.py create mode 100644 boagent/tests/__init__.py rename boagent/{ => tests}/api/test_api_integration.py (100%) rename boagent/{ => tests}/api/test_api_unit.py (87%) create mode 100644 boagent/tests/hardware/test_hardwarecli.py create mode 100644 boagent/tests/hardware/test_lshw.py diff --git a/boagent/api/api.py b/boagent/api/api.py index 0a9b5d6..8f60308 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -8,14 +8,14 @@ from pytz import UTC, utc from datetime import datetime, timedelta from subprocess import run -from typing import Dict, TypedDict, Any, Tuple, List, Optional, Union +from typing import Dict, Any, Tuple, List, Optional, Union from pydantic import BaseModel from croniter import croniter from fastapi import FastAPI, Response from fastapi.staticfiles import StaticFiles from fastapi.responses import HTMLResponse from boaviztapi_sdk.api.server_api import ServerApi -from utils import ( +from api.utils import ( iso8601_or_timestamp_as_timestamp, format_scaphandre_json, format_prometheus_output, @@ -25,8 +25,8 @@ ) from boaviztapi_sdk.models.server import Server -from config import settings -from database import ( +from api.config import settings +from api.database import ( get_session, select_metric, get_most_recent_data, @@ -49,13 +49,13 @@ CARBON_AWARE_API_TOKEN = settings.carbon_aware_api_token -class TimeWorkloadDict(TypedDict): - time_percentage: float - load_percentage: float +# class TimeWorkloadDict(TypedDict): +# time_percentage: float +# load_percentage: float -class TimeWorkloadList(BaseModel): - time_workload: list[TimeWorkloadDict] +# class TimeWorkloadList(BaseModel): +# time_workload: list[TimeWorkloadDict] def configure_static(app): diff --git a/boagent/api/config/__init__.py b/boagent/api/config/__init__.py new file mode 100644 index 0000000..0f25140 --- /dev/null +++ b/boagent/api/config/__init__.py @@ -0,0 +1 @@ +from .config import settings diff --git a/boagent/api/config.py b/boagent/api/config/config.py similarity index 92% rename from boagent/api/config.py rename to boagent/api/config/config.py index c5728c9..95ce71e 100644 --- a/boagent/api/config.py +++ b/boagent/api/config/config.py @@ -26,11 +26,11 @@ class Settings(BaseSettings): default_lifetime: float = os.getenv("DEFAULT_LIFETIME", 5.0) hardware_file_path: str = os.getenv("HARDWARE_FILE_PATH", "./hardware_data.json") power_file_path: str = os.getenv("POWER_FILE_PATH", "./power_data.json") - hardware_cli: str = os.getenv("HARDWARE_CLI", "../hardware/hardware_cli.py") + hardware_cli: str = os.getenv("HARDWARE_CLI", "./hardware/hardware_cli.py") boaviztapi_endpoint: str = os.getenv("BOAVIZTAPI_ENDPOINT", "http://localhost:5000") db_path: str = os.getenv("BOAGENT_DB_PATH", "../../db/boagent.db") public_path: str = os.getenv("BOAGENT_PUBLIC_PATH", "../public") - assets_path: str = os.getenv("BOAGENT_ASSETS_PATH", "../public/assets") + assets_path: str = os.getenv("BOAGENT_ASSETS_PATH", "./public/assets/") carbon_aware_api_endpoint: str = os.getenv( "CARBON_AWARE_API_ENDPOINT", "https://carbon-aware-api.azurewebsites.net" ) diff --git a/boagent/api/database/__init__.py b/boagent/api/database/__init__.py new file mode 100644 index 0000000..471c82d --- /dev/null +++ b/boagent/api/database/__init__.py @@ -0,0 +1,7 @@ +from .database import ( + get_session, + select_metric, + get_most_recent_data, + get_max, + new_highlight_spikes +) diff --git a/boagent/api/database.py b/boagent/api/database/database.py similarity index 99% rename from boagent/api/database.py rename to boagent/api/database/database.py index aa87672..a2bf0b9 100644 --- a/boagent/api/database.py +++ b/boagent/api/database/database.py @@ -7,8 +7,8 @@ from sqlalchemy import Column, DateTime, Integer, Float, insert, select, inspect from sqlalchemy.engine import Engine, create_engine from sqlalchemy.orm import Session, declarative_base, declared_attr -from config import settings -from utils import filter_date_range +from api.config import settings +from api.utils import filter_date_range DB_PATH = settings.db_path diff --git a/boagent/api/tests/mocks/boaviztapi_response_not_verbose.json b/boagent/api/tests/mocks/boaviztapi_response_not_verbose.json deleted file mode 100644 index 0f74f04..0000000 --- a/boagent/api/tests/mocks/boaviztapi_response_not_verbose.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "impacts": { - "gwp": { - "unit": "kgCO2eq", - "description": "Total climate change", - "embedded": { - "value": 1200, - "min": 759.1, - "max": 1949, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": { - "value": 1030, - "min": 1030, - "max": 1030 - } - }, - "adp": { - "unit": "kgSbeq", - "description": "Use of minerals and fossil ressources", - "embedded": { - "value": 0.155, - "min": 0.1128, - "max": 0.2077, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": { - "value": 0.0005107, - "min": 0.0005107, - "max": 0.0005107 - } - }, - "pe": { - "unit": "MJ", - "description": "Consumption of primary energy", - "embedded": { - "value": 15000, - "min": 10080, - "max": 25260, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": { - "value": 118700, - "min": 118700, - "max": 118700 - } - } - } -} diff --git a/boagent/api/tests/mocks/boaviztapi_response_verbose.json b/boagent/api/tests/mocks/boaviztapi_response_verbose.json deleted file mode 100644 index 23227d6..0000000 --- a/boagent/api/tests/mocks/boaviztapi_response_verbose.json +++ /dev/null @@ -1,697 +0,0 @@ -{ - "impacts": { - "gwp": { - "unit": "kgCO2eq", - "description": "Total climate change", - "embedded": { - "value": 1176, - "min": 1112, - "max": 1176, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": { - "value": 10000, - "min": 526.5, - "max": 34540 - } - }, - "adp": { - "unit": "kgSbeq", - "description": "Use of minerals and fossil ressources", - "embedded": { - "value": 0.1492, - "min": 0.1492, - "max": 0.1567, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": { - "value": 0.0016, - "min": 0.0003031, - "max": 0.008107 - } - }, - "pe": { - "unit": "MJ", - "description": "Consumption of primary energy", - "embedded": { - "value": 15680, - "min": 14700, - "max": 15680, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": { - "value": 300000, - "min": 297.6, - "max": 14290000, - "warnings": [ - "Uncertainty from technical characteristics is very important. Results should be interpreted with caution (see min and max values)" - ] - } - } - }, - "verbose": { - "duration": { - "value": 35040, - "unit": "hours" - }, - "ASSEMBLY-1": { - "impacts": { - "gwp": { - "unit": "kgCO2eq", - "description": "Total climate change", - "embedded": { - "value": 6.68, - "min": 6.68, - "max": 6.68, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": "not implemented" - }, - "adp": { - "unit": "kgSbeq", - "description": "Use of minerals and fossil ressources", - "embedded": { - "value": 1.41e-06, - "min": 1.41e-06, - "max": 1.41e-06, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": "not implemented" - }, - "pe": { - "unit": "MJ", - "description": "Consumption of primary energy", - "embedded": { - "value": 68.6, - "min": 68.6, - "max": 68.6, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": "not implemented" - } - }, - "units": { - "value": 1, - "status": "ARCHETYPE", - "min": 1, - "max": 1 - }, - "duration": { - "value": 35040, - "unit": "hours" - } - }, - "CPU-1": { - "impacts": { - "gwp": { - "unit": "kgCO2eq", - "description": "Total climate change", - "embedded": { - "value": 250, - "min": 250, - "max": 250, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": { - "value": 12000, - "min": 701.8, - "max": 34530 - } - }, - "adp": { - "unit": "kgSbeq", - "description": "Use of minerals and fossil ressources", - "embedded": { - "value": 0.04087, - "min": 0.04087, - "max": 0.04087, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": { - "value": 0.002, - "min": 0.000404, - "max": 0.008103 - } - }, - "pe": { - "unit": "MJ", - "description": "Consumption of primary energy", - "embedded": { - "value": 3428, - "min": 3428, - "max": 3428, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": { - "value": 400000, - "min": 396.7, - "max": 14280000, - "warnings": [ - "Uncertainty from technical characteristics is very important. Results should be interpreted with caution (see min and max values)" - ] - } - } - }, - "units": { - "value": 2, - "status": "INPUT" - }, - "core_units": { - "value": 24, - "status": "INPUT" - }, - "die_size_per_core": { - "value": 245, - "status": "INPUT", - "unit": "mm2" - }, - "die_size": { - "value": 5880, - "status": "COMPLETED", - "unit": "mm2", - "source": "die_size_per_core*core_units", - "min": 5880, - "max": 5880 - }, - "duration": { - "value": 35040, - "unit": "hours" - }, - "avg_power": { - "value": 435.4, - "status": "COMPLETED", - "unit": "W", - "min": 435.4, - "max": 435.4 - }, - "time_workload": { - "value": 70, - "status": "INPUT", - "unit": "%" - }, - "usage_location": { - "value": "EEE", - "status": "DEFAULT", - "unit": "CodSP3 - NCS Country Codes - NATO" - }, - "use_time_ratio": { - "value": 1, - "status": "ARCHETYPE", - "unit": "/1", - "min": 1, - "max": 1 - }, - "hours_life_time": { - "value": 35040, - "status": "COMPLETED", - "unit": "hours", - "source": "from device", - "min": 35040, - "max": 35040 - }, - "params": { - "value": { - "a": 171.2, - "b": 0.0354, - "c": 36.89, - "d": -10.13 - }, - "status": "ARCHETYPE" - }, - "gwp_factor": { - "value": 0.38, - "status": "DEFAULT", - "unit": "kg CO2eq/kWh", - "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", - "min": 0.023, - "max": 1.13161 - }, - "adp_factor": { - "value": 6.42317e-08, - "status": "DEFAULT", - "unit": "kg Sbeq/kWh", - "source": "ADEME Base IMPACTS ®", - "min": 1.324e-08, - "max": 2.65575e-07 - }, - "pe_factor": { - "value": 12.873, - "status": "DEFAULT", - "unit": "MJ/kWh", - "source": "ADPf / (1-%renewable_energy)", - "min": 0.013, - "max": 468.15 - } - }, - "RAM-1": { - "impacts": { - "gwp": { - "unit": "kgCO2eq", - "description": "Total climate change", - "embedded": { - "value": 534.6, - "min": 534.6, - "max": 534.6, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": { - "value": 17000, - "min": 1055, - "max": 51890 - } - }, - "adp": { - "unit": "kgSbeq", - "description": "Use of minerals and fossil ressources", - "embedded": { - "value": 0.0338, - "min": 0.0338, - "max": 0.0338, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": { - "value": 0.003, - "min": 0.0006071, - "max": 0.01218 - } - }, - "pe": { - "unit": "MJ", - "description": "Consumption of primary energy", - "embedded": { - "value": 6745, - "min": 6745, - "max": 6745, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": { - "value": 1000000, - "min": 596.1, - "max": 21470000 - } - } - }, - "units": { - "value": 12, - "status": "INPUT" - }, - "capacity": { - "value": 32, - "status": "INPUT", - "unit": "GB" - }, - "density": { - "value": 1.79, - "status": "INPUT", - "unit": "GB/cm2" - }, - "duration": { - "value": 35040, - "unit": "hours" - }, - "avg_power": { - "value": 109.05599999999998, - "status": "COMPLETED", - "unit": "W", - "min": 109.05599999999998, - "max": 109.05599999999998 - }, - "time_workload": { - "value": 70, - "status": "INPUT", - "unit": "%" - }, - "usage_location": { - "value": "EEE", - "status": "DEFAULT", - "unit": "CodSP3 - NCS Country Codes - NATO" - }, - "use_time_ratio": { - "value": 1, - "status": "ARCHETYPE", - "unit": "/1", - "min": 1, - "max": 1 - }, - "hours_life_time": { - "value": 35040, - "status": "COMPLETED", - "unit": "hours", - "source": "from device", - "min": 35040, - "max": 35040 - }, - "params": { - "value": { - "a": 9.088 - }, - "status": "COMPLETED", - "source": "(ram_electrical_factor_per_go : 0.284) * (ram_capacity: 32) " - }, - "gwp_factor": { - "value": 0.38, - "status": "DEFAULT", - "unit": "kg CO2eq/kWh", - "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", - "min": 0.023, - "max": 1.13161 - }, - "adp_factor": { - "value": 6.42317e-08, - "status": "DEFAULT", - "unit": "kg Sbeq/kWh", - "source": "ADEME Base IMPACTS ®", - "min": 1.324e-08, - "max": 2.65575e-07 - }, - "pe_factor": { - "value": 12.873, - "status": "DEFAULT", - "unit": "MJ/kWh", - "source": "ADPf / (1-%renewable_energy)", - "min": 0.013, - "max": 468.15 - } - }, - "SSD-1": { - "impacts": { - "gwp": { - "unit": "kgCO2eq", - "description": "Total climate change", - "embedded": { - "value": 23.73, - "min": 23.73, - "max": 23.73, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": "not implemented" - }, - "adp": { - "unit": "kgSbeq", - "description": "Use of minerals and fossil ressources", - "embedded": { - "value": 0.001061, - "min": 0.001061, - "max": 0.001061, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": "not implemented" - }, - "pe": { - "unit": "MJ", - "description": "Consumption of primary energy", - "embedded": { - "value": 292.7, - "min": 292.7, - "max": 292.7, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": "not implemented" - } - }, - "units": { - "value": 1, - "status": "INPUT" - }, - "capacity": { - "value": 400, - "status": "INPUT", - "unit": "GB" - }, - "density": { - "value": 50.6, - "status": "INPUT", - "unit": "GB/cm2" - }, - "duration": { - "value": 35040, - "unit": "hours" - } - }, - "POWER_SUPPLY-1": { - "impacts": { - "gwp": { - "unit": "kgCO2eq", - "description": "Total climate change", - "embedded": { - "value": 145.3, - "min": 145.3, - "max": 145.3, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": "not implemented" - }, - "adp": { - "unit": "kgSbeq", - "description": "Use of minerals and fossil ressources", - "embedded": { - "value": 0.04963, - "min": 0.04963, - "max": 0.04963, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": "not implemented" - }, - "pe": { - "unit": "MJ", - "description": "Consumption of primary energy", - "embedded": { - "value": 2105, - "min": 2105, - "max": 2105, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": "not implemented" - } - }, - "units": { - "value": 2, - "status": "INPUT" - }, - "unit_weight": { - "value": 2.99, - "status": "INPUT", - "unit": "kg" - }, - "duration": { - "value": 35040, - "unit": "hours" - } - }, - "CASE-1": { - "impacts": { - "gwp": { - "unit": "kgCO2eq", - "description": "Total climate change", - "embedded": { - "value": 150, - "min": 85.9, - "max": 150, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": "not implemented" - }, - "adp": { - "unit": "kgSbeq", - "description": "Use of minerals and fossil ressources", - "embedded": { - "value": 0.0202, - "min": 0.0202, - "max": 0.02767, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": "not implemented" - }, - "pe": { - "unit": "MJ", - "description": "Consumption of primary energy", - "embedded": { - "value": 2200, - "min": 1229, - "max": 2200, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": "not implemented" - } - }, - "units": { - "value": 1, - "status": "ARCHETYPE", - "min": 1, - "max": 1 - }, - "case_type": { - "value": "rack", - "status": "ARCHETYPE" - }, - "duration": { - "value": 35040, - "unit": "hours" - } - }, - "MOTHERBOARD-1": { - "impacts": { - "gwp": { - "unit": "kgCO2eq", - "description": "Total climate change", - "embedded": { - "value": 66.1, - "min": 66.1, - "max": 66.1, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": "not implemented" - }, - "adp": { - "unit": "kgSbeq", - "description": "Use of minerals and fossil ressources", - "embedded": { - "value": 0.00369, - "min": 0.00369, - "max": 0.00369, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": "not implemented" - }, - "pe": { - "unit": "MJ", - "description": "Consumption of primary energy", - "embedded": { - "value": 836, - "min": 836, - "max": 836, - "warnings": [ - "End of life is not included in the calculation" - ] - }, - "use": "not implemented" - } - }, - "units": { - "value": 1, - "status": "ARCHETYPE", - "min": 1, - "max": 1 - }, - "duration": { - "value": 35040, - "unit": "hours" - } - }, - "avg_power": { - "value": 724.1264799999999, - "status": "COMPLETED", - "unit": "W", - "min": 653.3471999999998, - "max": 871.1295999999999 - }, - "time_workload": { - "value": 70, - "status": "INPUT", - "unit": "%" - }, - "usage_location": { - "value": "FRA", - "status": "INPUT", - "unit": "CodSP3 - NCS Country Codes - NATO" - }, - "use_time_ratio": { - "value": 1, - "status": "ARCHETYPE", - "unit": "/1", - "min": 1, - "max": 1 - }, - "hours_life_time": { - "value": 35040, - "status": "COMPLETED", - "unit": "hours", - "source": "from device", - "min": 35040, - "max": 35040 - }, - "other_consumption_ratio": { - "value": 0.33, - "status": "ARCHETYPE", - "unit": "ratio /1", - "min": 0.2, - "max": 0.6 - }, - "gwp_factor": { - "value": 0.38, - "status": "DEFAULT", - "unit": "kg CO2eq/kWh", - "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", - "min": 0.023, - "max": 1.13161 - }, - "adp_factor": { - "value": 6.42317e-08, - "status": "DEFAULT", - "unit": "kg Sbeq/kWh", - "source": "ADEME Base IMPACTS ®", - "min": 1.324e-08, - "max": 2.65575e-07 - }, - "pe_factor": { - "value": 12.873, - "status": "DEFAULT", - "unit": "MJ/kWh", - "source": "ADPf / (1-%renewable_energy)", - "min": 0.013, - "max": 468.15 - }, - "units": { - "value": 1, - "status": "ARCHETYPE", - "min": 1, - "max": 1 - } - } -} diff --git a/boagent/api/tests/mocks/formatted_scaphandre.json b/boagent/api/tests/mocks/formatted_scaphandre.json deleted file mode 100644 index 55580f6..0000000 --- a/boagent/api/tests/mocks/formatted_scaphandre.json +++ /dev/null @@ -1 +0,0 @@ -[{"host":{"consumption":9510593.0,"timestamp":1709569036.7701147,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312873984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":118741.05,"timestamp":1709569036.7699473,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":67852.03,"timestamp":1709569036.7699215,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":33926.016,"timestamp":1709569036.7699084,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":33926.016,"timestamp":1709569036.7699292,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":22617.344,"timestamp":1709569036.7698824,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699177,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699306,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699432,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699645,"container":null},{"exe":"","cmdline":"/usr/libexec/gnome-terminal-server","pid":6747,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.769976,"container":null}],"sockets":[{"id":0,"consumption":2280155.0,"domains":[{"name":"uncore","consumption":4760.0,"timestamp":1709569036.687679},{"name":"core","consumption":363592.0,"timestamp":1709569036.687624},{"name":"dram","consumption":650426.0,"timestamp":1709569036.6875672}],"timestamp":1709569036.6864183}]},{"host":{"consumption":10326187.0,"timestamp":1709569038.8445754,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312808448","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":138775.89,"timestamp":1709569038.8444579,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":44155.965,"timestamp":1709569038.844482,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":37847.97,"timestamp":1709569038.8444862,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31539.975,"timestamp":1709569038.8444736,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":12615.989,"timestamp":1709569038.8444946,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.844463,"container":null},{"exe":"","cmdline":"/usr/bin/dbus-daemon--session--address=systemd:--nofork--nopidfile--systemd-activation--syslog-only","pid":1667,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.84447,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.844479,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.8444872,"container":null},{"exe":"","cmdline":"","pid":263930,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.8444917,"container":null}],"sockets":[{"id":0,"consumption":2565381.0,"domains":[{"name":"uncore","consumption":11099.0,"timestamp":1709569038.7827907},{"name":"core","consumption":519459.0,"timestamp":1709569038.7827168},{"name":"dram","consumption":699014.0,"timestamp":1709569038.7826238}],"timestamp":1709569038.7813084}]},{"host":{"consumption":11958290.0,"timestamp":1709569040.9484453,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312738816","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":196994.4,"timestamp":1709569040.9481177,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":145921.8,"timestamp":1709569040.9481637,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":131329.61,"timestamp":1709569040.948196,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":51072.625,"timestamp":1709569040.9481723,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":29184.355,"timestamp":1709569040.9481483,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":14592.178,"timestamp":1709569040.9481866,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481342,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.948174,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481745,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481938,"container":null}],"sockets":[{"id":0,"consumption":3843814.0,"domains":[{"name":"uncore","consumption":114992.0,"timestamp":1709569040.854405},{"name":"core","consumption":1617998.0,"timestamp":1709569040.854287},{"name":"dram","consumption":905649.0,"timestamp":1709569040.8541002}],"timestamp":1709569040.8530734}]},{"host":{"consumption":10766276.0,"timestamp":1709569043.045374,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312673280","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":109204.47,"timestamp":1709569043.0450184,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":96356.88,"timestamp":1709569043.0450678,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":70661.71,"timestamp":1709569043.0449176,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":51390.34,"timestamp":1709569043.045032,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":25695.17,"timestamp":1709569043.0449913,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":19271.377,"timestamp":1709569043.0450542,"container":null},{"exe":"","cmdline":"","pid":263930,"resources_usage":null,"consumption":12847.585,"timestamp":1709569043.0450523,"container":null},{"exe":"","cmdline":"/usr/libexec/ibus-engine-simple","pid":2706,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0449593,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0450757,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0451076,"container":null}],"sockets":[{"id":0,"consumption":2925740.0,"domains":[{"name":"uncore","consumption":59052.0,"timestamp":1709569042.9618628},{"name":"core","consumption":870351.0,"timestamp":1709569042.9616694},{"name":"dram","consumption":763613.0,"timestamp":1709569042.9615138}],"timestamp":1709569042.9604695}]},{"host":{"consumption":12795838.0,"timestamp":1709569045.136388,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312599552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":664518.2,"timestamp":1709569045.1362245,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":115904.33,"timestamp":1709569045.13612,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":100450.42,"timestamp":1709569045.136108,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":77269.555,"timestamp":1709569045.1361601,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":46361.73,"timestamp":1709569045.1361682,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":30907.82,"timestamp":1709569045.1361806,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":23180.865,"timestamp":1709569045.1361425,"container":null},{"exe":"","cmdline":"/usr/libexec/ibus-engine-simple","pid":2706,"resources_usage":null,"consumption":15453.91,"timestamp":1709569045.1361227,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7726.955,"timestamp":1709569045.1361263,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":7726.955,"timestamp":1709569045.1361704,"container":null}],"sockets":[{"id":0,"consumption":4255760.0,"domains":[{"name":"uncore","consumption":91691.0,"timestamp":1709569045.0613444},{"name":"core","consumption":1964961.0,"timestamp":1709569045.0612833},{"name":"dram","consumption":831560.0,"timestamp":1709569045.0612147}],"timestamp":1709569045.0603004}]},{"host":{"consumption":10793162.0,"timestamp":1709569047.2175863,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312529920","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":117387.87,"timestamp":1709569047.2174373,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":78258.57,"timestamp":1709569047.2173684,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":58693.934,"timestamp":1709569047.2174082,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":39129.285,"timestamp":1709569047.2173939,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":39129.285,"timestamp":1709569047.2174149,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":13043.097,"timestamp":1709569047.2174313,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2173736,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2174056,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.21742,"container":null},{"exe":"","cmdline":"","pid":263932,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2174532,"container":null}],"sockets":[{"id":0,"consumption":3052707.0,"domains":[{"name":"uncore","consumption":45126.0,"timestamp":1709569047.1469367},{"name":"core","consumption":1034363.0,"timestamp":1709569047.1468956},{"name":"dram","consumption":728187.0,"timestamp":1709569047.146852}],"timestamp":1709569047.1459458}]},{"host":{"consumption":17104786.0,"timestamp":1709569049.3226047,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312448000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1625531.5,"timestamp":1709569049.3221166,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID330-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{37eaeb80-2d9e-484a-af74-336f513a2f16}3065truetab","pid":271111,"resources_usage":null,"consumption":608263.4,"timestamp":1709569049.3221295,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":314618.97,"timestamp":1709569049.321927,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":125847.6,"timestamp":1709569049.3220081,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":83898.4,"timestamp":1709569049.32202,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":41949.2,"timestamp":1709569049.32197,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3219535,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3219838,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3220413,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":10487.3,"timestamp":1709569049.3219476,"container":null}],"sockets":[{"id":0,"consumption":7401117.0,"domains":[{"name":"uncore","consumption":212689.0,"timestamp":1709569049.2283125},{"name":"core","consumption":4861941.0,"timestamp":1709569049.2282119},{"name":"dram","consumption":1089513.0,"timestamp":1709569049.2281222}],"timestamp":1709569049.226694}]},{"host":{"consumption":18876486.0,"timestamp":1709569051.379631,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312312832","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1823363.4,"timestamp":1709569051.379438,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID331-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{1b207027-ae58-45d6-a5cb-ea6d45785f0c}3065truetab","pid":271887,"resources_usage":null,"consumption":911681.7,"timestamp":1709569051.37943,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":350646.78,"timestamp":1709569051.3793063,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":268829.22,"timestamp":1709569051.3793647,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":70129.36,"timestamp":1709569051.3793387,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":58441.133,"timestamp":1709569051.3793726,"container":null},{"exe":"","cmdline":"","pid":88,"resources_usage":null,"consumption":46752.906,"timestamp":1709569051.3793633,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35064.68,"timestamp":1709569051.3793492,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":23376.453,"timestamp":1709569051.379325,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":23376.453,"timestamp":1709569051.3793294,"container":null}],"sockets":[{"id":0,"consumption":8338159.0,"domains":[{"name":"uncore","consumption":243599.0,"timestamp":1709569051.3342211},{"name":"core","consumption":5475930.0,"timestamp":1709569051.3340466},{"name":"dram","consumption":1159400.0,"timestamp":1709569051.3338134}],"timestamp":1709569051.3327785}]},{"host":{"consumption":11250187.0,"timestamp":1709569053.4751475,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312394752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":309827.7,"timestamp":1709569053.4748783,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":110160.95,"timestamp":1709569053.4749343,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":61965.53,"timestamp":1709569053.4748945,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":48195.414,"timestamp":1709569053.4749434,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":41310.355,"timestamp":1709569053.4749424,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":34425.297,"timestamp":1709569053.4749196,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":13770.119,"timestamp":1709569053.4748962,"container":null},{"exe":"","cmdline":"","pid":41,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.474887,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.4748998,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.474945,"container":null}],"sockets":[{"id":0,"consumption":3172866.0,"domains":[{"name":"uncore","consumption":82698.0,"timestamp":1709569053.3911366},{"name":"core","consumption":947798.0,"timestamp":1709569053.391068},{"name":"dram","consumption":817260.0,"timestamp":1709569053.3910155}],"timestamp":1709569053.389935}]},{"host":{"consumption":11651021.0,"timestamp":1709569055.5661595,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312243200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":538284.25,"timestamp":1709569055.5659678,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":148736.44,"timestamp":1709569055.5658362,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":84992.25,"timestamp":1709569055.5658932,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42496.125,"timestamp":1709569055.565902,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28330.748,"timestamp":1709569055.5658772,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":14165.374,"timestamp":1709569055.5658662,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658436,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658581,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658886,"container":null},{"exe":"","cmdline":"","pid":23,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658937,"container":null}],"sockets":[{"id":0,"consumption":3413054.0,"domains":[{"name":"uncore","consumption":89927.0,"timestamp":1709569055.4883645},{"name":"core","consumption":1173133.0,"timestamp":1709569055.4882367},{"name":"dram","consumption":850286.0,"timestamp":1709569055.4880445}],"timestamp":1709569055.4860508}]},{"host":{"consumption":19636240.0,"timestamp":1709569057.6362855,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312181760","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1849529.5,"timestamp":1709569057.6361952,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":816675.44,"timestamp":1709569057.6361094,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":360297.97,"timestamp":1709569057.6360965,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":120099.336,"timestamp":1709569057.636142,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":96079.46,"timestamp":1709569057.6361227,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":72059.59,"timestamp":1709569057.6361485,"container":null},{"exe":"","cmdline":"","pid":88,"resources_usage":null,"consumption":60049.668,"timestamp":1709569057.6361413,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":36029.797,"timestamp":1709569057.636116,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":24019.865,"timestamp":1709569057.6361303,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID320-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{139102ea-3b73-434c-8e10-7c94bb08134f}3065truetab","pid":257812,"resources_usage":null,"consumption":12009.933,"timestamp":1709569057.6361134,"container":null}],"sockets":[{"id":0,"consumption":8953263.0,"domains":[{"name":"uncore","consumption":191909.0,"timestamp":1709569057.57598},{"name":"core","consumption":6353826.0,"timestamp":1709569057.5759137},{"name":"dram","consumption":1152379.0,"timestamp":1709569057.5758448}],"timestamp":1709569057.5751684}]},{"host":{"consumption":14328843.0,"timestamp":1709569059.7370303,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312087552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":788261.56,"timestamp":1709569059.736839,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":262753.84,"timestamp":1709569059.7367055,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":183927.69,"timestamp":1709569059.7367206,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":175169.23,"timestamp":1709569059.7367651,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":52550.773,"timestamp":1709569059.7367737,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":52550.773,"timestamp":1709569059.7367744,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35033.848,"timestamp":1709569059.7367482,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":26275.387,"timestamp":1709569059.7367373,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":17516.924,"timestamp":1709569059.7367234,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":17516.924,"timestamp":1709569059.7367277,"container":null}],"sockets":[{"id":0,"consumption":5606524.0,"domains":[{"name":"uncore","consumption":163963.0,"timestamp":1709569059.6464283},{"name":"core","consumption":3117124.0,"timestamp":1709569059.64638},{"name":"dram","consumption":1008404.0,"timestamp":1709569059.646328}],"timestamp":1709569059.6453197}]},{"host":{"consumption":10798938.0,"timestamp":1709569061.834314,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312005632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":90856.45,"timestamp":1709569061.8340003,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":90856.45,"timestamp":1709569061.8340604,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":58407.723,"timestamp":1709569061.8340156,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38938.48,"timestamp":1709569061.83407,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32448.734,"timestamp":1709569061.8340447,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340232,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340328,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340566,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.834072,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340888,"container":null}],"sockets":[{"id":0,"consumption":3002282.0,"domains":[{"name":"uncore","consumption":59301.0,"timestamp":1709569061.7501621},{"name":"core","consumption":882674.0,"timestamp":1709569061.7499254},{"name":"dram","consumption":758935.0,"timestamp":1709569061.749683}],"timestamp":1709569061.7484915}]},{"host":{"consumption":11771431.0,"timestamp":1709569063.9412537,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311923712","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":184705.62,"timestamp":1709569063.9409318,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":163393.42,"timestamp":1709569063.9409485,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":106560.94,"timestamp":1709569063.9409466,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":85248.75,"timestamp":1709569063.9409919,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":71040.625,"timestamp":1709569063.9409637,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":49728.434,"timestamp":1709569063.9410012,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28416.248,"timestamp":1709569063.9409754,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.940943,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.9409544,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.9409957,"container":null}],"sockets":[{"id":0,"consumption":3543949.0,"domains":[{"name":"uncore","consumption":120076.0,"timestamp":1709569063.8469055},{"name":"core","consumption":1209405.0,"timestamp":1709569063.8467765},{"name":"dram","consumption":826656.0,"timestamp":1709569063.8466294}],"timestamp":1709569063.8455148}]},{"host":{"consumption":10726351.0,"timestamp":1709569066.0453446,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311866368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":172799.2,"timestamp":1709569066.0451372,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":115199.48,"timestamp":1709569066.0451686,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":95999.56,"timestamp":1709569066.0450618,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":89599.59,"timestamp":1709569066.0450773,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38399.83,"timestamp":1709569066.0451465,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31999.854,"timestamp":1709569066.045109,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0450845,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.045164,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0451667,"container":null},{"exe":"","cmdline":"","pid":249501,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0451684,"container":null}],"sockets":[{"id":0,"consumption":2860620.0,"domains":[{"name":"uncore","consumption":70666.0,"timestamp":1709569065.9534726},{"name":"core","consumption":729100.0,"timestamp":1709569065.9532387},{"name":"dram","consumption":774626.0,"timestamp":1709569065.9529963}],"timestamp":1709569065.9517043}]},{"host":{"consumption":10230392.0,"timestamp":1709569068.1362233,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311792640","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":116324.03,"timestamp":1709569068.135931,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":91834.76,"timestamp":1709569068.1359856,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":48978.535,"timestamp":1709569068.13601,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":36733.902,"timestamp":1709569068.135946,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":36733.902,"timestamp":1709569068.135971,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359522,"container":null},{"exe":"","cmdline":"/usr/libexec/fwupd/fwupd","pid":2916,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359785,"container":null},{"exe":"","cmdline":"/usr/libexec/gvfs-afc-volume-monitor","pid":2457,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359835,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359892,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1360116,"container":null}],"sockets":[{"id":0,"consumption":2688432.0,"domains":[{"name":"uncore","consumption":84259.0,"timestamp":1709569068.057044},{"name":"core","consumption":588952.0,"timestamp":1709569068.0569935},{"name":"dram","consumption":772851.0,"timestamp":1709569068.0569386}],"timestamp":1709569068.0558925}]},{"host":{"consumption":11706772.0,"timestamp":1709569070.2046812,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311714816","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":165288.98,"timestamp":1709569070.204433,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":158102.52,"timestamp":1709569070.2044551,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":50305.344,"timestamp":1709569070.2044961,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":50305.344,"timestamp":1709569070.2045052,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28745.91,"timestamp":1709569070.2044826,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":14372.955,"timestamp":1709569070.204463,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2044728,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2044933,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2045171,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2045195,"container":null}],"sockets":[{"id":0,"consumption":3013910.0,"domains":[{"name":"uncore","consumption":97346.0,"timestamp":1709569070.1455407},{"name":"core","consumption":787681.0,"timestamp":1709569070.1454976},{"name":"dram","consumption":804376.0,"timestamp":1709569070.1454227}],"timestamp":1709569070.1451373}]},{"host":{"consumption":11031279.0,"timestamp":1709569072.2848258,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311690240","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":80864.6,"timestamp":1709569072.2845564,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":74125.89,"timestamp":1709569072.2845726,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":47171.02,"timestamp":1709569072.2846088,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":47171.02,"timestamp":1709569072.2846167,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":33693.586,"timestamp":1709569072.284595,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.2845688,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284578,"container":null},{"exe":"","cmdline":"/usr/sbin/irqbalance--foreground","pid":584,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284602,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284612,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.2846181,"container":null}],"sockets":[{"id":0,"consumption":3685854.0,"domains":[{"name":"uncore","consumption":70979.0,"timestamp":1709569072.2161698},{"name":"core","consumption":1516305.0,"timestamp":1709569072.2159224},{"name":"dram","consumption":774430.0,"timestamp":1709569072.2156763}],"timestamp":1709569072.2141333}]},{"host":{"consumption":10188085.0,"timestamp":1709569074.3809662,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311583744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":129274.79,"timestamp":1709569074.3807373,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":123118.86,"timestamp":1709569074.3806627,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":67715.37,"timestamp":1709569074.3807063,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":61559.43,"timestamp":1709569074.3806434,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":36935.652,"timestamp":1709569074.380661,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":36935.652,"timestamp":1709569074.3807158,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":30779.715,"timestamp":1709569074.3806891,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.380702,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.3807323,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.3807428,"container":null}],"sockets":[{"id":0,"consumption":2669277.0,"domains":[{"name":"uncore","consumption":2377.0,"timestamp":1709569074.2956257},{"name":"core","consumption":635943.0,"timestamp":1709569074.295518},{"name":"dram","consumption":693138.0,"timestamp":1709569074.2953844}],"timestamp":1709569074.2940917}]},{"host":{"consumption":10273173.0,"timestamp":1709569076.4840806,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311133184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":192311.81,"timestamp":1709569076.4837523,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":62036.066,"timestamp":1709569076.4836805,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":62036.066,"timestamp":1709569076.4836984,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":49628.85,"timestamp":1709569076.4837635,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31018.033,"timestamp":1709569076.4837308,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":12407.213,"timestamp":1709569076.4837837,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837067,"container":null},{"exe":"","cmdline":"","pid":52,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837546,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837568,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837873,"container":null}],"sockets":[{"id":0,"consumption":2682165.0,"domains":[{"name":"uncore","consumption":34426.0,"timestamp":1709569076.3929577},{"name":"core","consumption":624540.0,"timestamp":1709569076.3927567},{"name":"dram","consumption":717227.0,"timestamp":1709569076.392554}],"timestamp":1709569076.3915682}]},{"host":{"consumption":9607585.0,"timestamp":1709569078.5887036,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311055360","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":126189.17,"timestamp":1709569078.5884168,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":120453.305,"timestamp":1709569078.5883787,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":34415.23,"timestamp":1709569078.5883904,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28679.357,"timestamp":1709569078.588356,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5883718,"container":null},{"exe":"","cmdline":"/snap/snap-store/959/usr/bin/snap-store--gapplication-service","pid":2654,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.588389,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5883996,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.588423,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5884507,"container":null},{"exe":"","cmdline":"","pid":263932,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5884538,"container":null}],"sockets":[{"id":0,"consumption":2308325.0,"domains":[{"name":"uncore","consumption":0.0,"timestamp":1709569078.4969332},{"name":"core","consumption":349548.0,"timestamp":1709569078.49682},{"name":"dram","consumption":659184.0,"timestamp":1709569078.496608}],"timestamp":1709569078.495577}]},{"host":{"consumption":11781116.0,"timestamp":1709569080.690352,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310977536","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":183528.48,"timestamp":1709569080.6900492,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":127058.164,"timestamp":1709569080.689976,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":49411.51,"timestamp":1709569080.6899953,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42352.727,"timestamp":1709569080.6900613,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28235.15,"timestamp":1709569080.690028,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900034,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.690054,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900635,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900702,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900811,"container":null}],"sockets":[{"id":0,"consumption":3656251.0,"domains":[{"name":"uncore","consumption":100027.0,"timestamp":1709569080.6002367},{"name":"core","consumption":1471737.0,"timestamp":1709569080.6002066},{"name":"dram","consumption":835779.0,"timestamp":1709569080.6001685}],"timestamp":1709569080.5997374}]},{"host":{"consumption":10751426.0,"timestamp":1709569082.7966828,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310912000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":129223.875,"timestamp":1709569082.7962778,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":129223.875,"timestamp":1709569082.796353,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":45228.355,"timestamp":1709569082.796296,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38767.16,"timestamp":1709569082.796366,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32305.969,"timestamp":1709569082.7963324,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":19383.58,"timestamp":1709569082.7963855,"container":null},{"exe":"","cmdline":"/usr/libexec/xdg-desktop-portal","pid":2741,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.796281,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.7962918,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.796305,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.7963483,"container":null}],"sockets":[{"id":0,"consumption":2932212.0,"domains":[{"name":"uncore","consumption":108001.0,"timestamp":1709569082.703656},{"name":"core","consumption":754167.0,"timestamp":1709569082.7034225},{"name":"dram","consumption":809091.0,"timestamp":1709569082.7031865}],"timestamp":1709569082.701941}]},{"host":{"consumption":11675751.0,"timestamp":1709569084.8753462,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310842368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":162752.89,"timestamp":1709569084.8750737,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":120295.625,"timestamp":1709569084.875089,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":84914.555,"timestamp":1709569084.8751278,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":56609.703,"timestamp":1709569084.8750875,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42457.277,"timestamp":1709569084.8751369,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35381.062,"timestamp":1709569084.8751128,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":14152.426,"timestamp":1709569084.8750942,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.875102,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.8751385,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.8751504,"container":null}],"sockets":[{"id":0,"consumption":3311707.0,"domains":[{"name":"uncore","consumption":114419.0,"timestamp":1709569084.8064413},{"name":"core","consumption":1057562.0,"timestamp":1709569084.806423},{"name":"dram","consumption":842802.0,"timestamp":1709569084.8063824}],"timestamp":1709569084.8060837}]},{"host":{"consumption":10690528.0,"timestamp":1709569086.9738417,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310768640","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":162470.03,"timestamp":1709569086.9735067,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":142973.62,"timestamp":1709569086.9735715,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":64988.016,"timestamp":1709569086.9735236,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":45491.605,"timestamp":1709569086.973582,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32494.008,"timestamp":1709569086.973554,"container":null},{"exe":"","cmdline":"","pid":41,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735167,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.973531,"container":null},{"exe":"","cmdline":"/usr/bin/containerd-shim-runc-v2-namespacemoby-id4daf484270eace43a1e866a0d0d3505b7601e702300946af07a68e2493d97644-address/run/containerd/containerd.sock","pid":240526,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735382,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735672,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.973575,"container":null}],"sockets":[{"id":0,"consumption":2990252.0,"domains":[{"name":"uncore","consumption":115894.0,"timestamp":1709569086.8877308},{"name":"core","consumption":789509.0,"timestamp":1709569086.8874633},{"name":"dram","consumption":821831.0,"timestamp":1709569086.887196}],"timestamp":1709569086.8857727}]},{"host":{"consumption":10444900.0,"timestamp":1709569089.0750725,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310703104","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":120566.9,"timestamp":1709569089.0747454,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":107875.65,"timestamp":1709569089.0748055,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":57110.637,"timestamp":1709569089.0747604,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":44419.383,"timestamp":1709569089.0748153,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":25382.504,"timestamp":1709569089.0747883,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":19036.877,"timestamp":1709569089.0748348,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0747678,"container":null},{"exe":"","cmdline":"","pid":269914,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0747864,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0748093,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.074817,"container":null}],"sockets":[{"id":0,"consumption":2727262.0,"domains":[{"name":"uncore","consumption":84809.0,"timestamp":1709569088.9848561},{"name":"core","consumption":582620.0,"timestamp":1709569088.9847484},{"name":"dram","consumption":778216.0,"timestamp":1709569088.9846327}],"timestamp":1709569088.9836576}]},{"host":{"consumption":10307967.0,"timestamp":1709569091.1843927,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310633472","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":123745.1,"timestamp":1709569091.1839895,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":111370.59,"timestamp":1709569091.1840603,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":68059.81,"timestamp":1709569091.184008,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":43310.79,"timestamp":1709569091.1840723,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":30936.275,"timestamp":1709569091.1840403,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.184004,"container":null},{"exe":"","cmdline":"@dbus-daemon--system--address=systemd:--nofork--nopidfile--systemd-activation--syslog-only","pid":574,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840155,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840165,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840816,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840973,"container":null}],"sockets":[{"id":0,"consumption":2666511.0,"domains":[{"name":"uncore","consumption":67738.0,"timestamp":1709569091.0878828},{"name":"core","consumption":528703.0,"timestamp":1709569091.087651},{"name":"dram","consumption":755137.0,"timestamp":1709569091.087412}],"timestamp":1709569091.086237}]},{"host":{"consumption":10513871.0,"timestamp":1709569093.2920067,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310567936","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":188533.25,"timestamp":1709569093.2917347,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":113119.95,"timestamp":1709569093.2916732,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":56559.977,"timestamp":1709569093.2917452,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":43991.09,"timestamp":1709569093.2916896,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":37706.652,"timestamp":1709569093.2917178,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":18853.326,"timestamp":1709569093.2917445,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":12568.884,"timestamp":1709569093.2916968,"container":null},{"exe":"","cmdline":"","pid":269914,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.2917151,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.2917309,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.291747,"container":null}],"sockets":[{"id":0,"consumption":2745264.0,"domains":[{"name":"uncore","consumption":91976.0,"timestamp":1709569093.198776},{"name":"core","consumption":632737.0,"timestamp":1709569093.1986213},{"name":"dram","consumption":772951.0,"timestamp":1709569093.1985009}],"timestamp":1709569093.1971552}]}] diff --git a/boagent/api/utils/__init__.py b/boagent/api/utils/__init__.py new file mode 100644 index 0000000..347a83f --- /dev/null +++ b/boagent/api/utils/__init__.py @@ -0,0 +1,9 @@ +from .utils import ( + iso8601_or_timestamp_as_timestamp, + filter_date_range, + format_scaphandre_json, + format_prometheus_output, + get_boavizta_api_client, + sort_ram, + sort_disks +) diff --git a/boagent/api/utils.py b/boagent/api/utils/utils.py similarity index 99% rename from boagent/api/utils.py rename to boagent/api/utils/utils.py index 7b4ab73..bf704fc 100644 --- a/boagent/api/utils.py +++ b/boagent/api/utils/utils.py @@ -1,7 +1,7 @@ from datetime import datetime from boaviztapi_sdk import ApiClient, Configuration from dateutil import parser -from config import settings +from api.config import settings from os import PathLike BOAVIZTAPI_ENDPOINT = settings.boaviztapi_endpoint diff --git a/boagent/hardware/__init__.py b/boagent/hardware/__init__.py new file mode 100644 index 0000000..81d4b53 --- /dev/null +++ b/boagent/hardware/__init__.py @@ -0,0 +1 @@ +from .hardware_cli import main, get_ram, get_cpus, get_disks diff --git a/boagent/hardware/hardware_cli.py b/boagent/hardware/hardware_cli.py index acd350f..aec341f 100755 --- a/boagent/hardware/hardware_cli.py +++ b/boagent/hardware/hardware_cli.py @@ -3,7 +3,7 @@ import click import json import sys -from lshw import Lshw +from hardware.lshw import Lshw # from disk import search_physical_drives # from cpu import get_cpus diff --git a/boagent/tests/__init__.py b/boagent/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/boagent/api/test_api_integration.py b/boagent/tests/api/test_api_integration.py similarity index 100% rename from boagent/api/test_api_integration.py rename to boagent/tests/api/test_api_integration.py diff --git a/boagent/api/test_api_unit.py b/boagent/tests/api/test_api_unit.py similarity index 87% rename from boagent/api/test_api_unit.py rename to boagent/tests/api/test_api_unit.py index da63afd..8aee5cb 100644 --- a/boagent/api/test_api_unit.py +++ b/boagent/tests/api/test_api_unit.py @@ -1,7 +1,7 @@ from unittest import TestCase, TestSuite, TestLoader from unittest.mock import patch -from api import ( +from api.api import ( build_hardware_data, read_hardware_data, get_hardware_data, @@ -12,11 +12,20 @@ get_metrics, ) -from utils import format_scaphandre_json +from api.utils import format_scaphandre_json import os import json +current_dir = os.path.dirname(__file__) +mock_power_data = os.path.join(f"{current_dir}", "../mocks/power_data.json") +mock_hardware_data = os.path.join(f"{current_dir}", "../mocks/hardware_data.json") +mock_boaviztapi_response_not_verbose = os.path.join(f"{current_dir}", "../mocks/boaviztapi_response_not_verbose.json") +mock_boaviztapi_response_verbose = os.path.join(f"{current_dir}", "../mocks/boaviztapi_response_verbose.json") +mock_formatted_scaphandre = os.path.join(f"{current_dir}", "../mocks/formatted_scaphandre.json") +hardware_cli = os.path.join(f"{current_dir}", "") + + class ReadHardwareDataTest(TestCase): def test_build_hardware_data(self): @@ -106,9 +115,10 @@ def test_format_usage_request_with_time_workload_as_percentage(self): class ComputeAvgConsumptionTest(TestCase): + def test_compute_average_consumption(self): - power_data = format_scaphandre_json("./tests/mocks/power_data.json") + power_data = format_scaphandre_json(f"{mock_power_data}") data = json.loads(power_data) avg_host = compute_average_consumption(data) @@ -124,12 +134,12 @@ def setUp(self) -> None: self.short_interval_start_time = 1710923675 self.short_interval_end_time = 1710924275 - @patch("api.format_scaphandre_json") + self.formatted_scaphandre = f"{mock_formatted_scaphandre}" + + @patch("api.api.format_scaphandre_json") def test_get_power_data(self, mocked_format_scaphandre_json): - mocked_format_scaphandre_json.return_value = open( - "./tests/mocks/formatted_scaphandre.json" - ).read() + mocked_format_scaphandre_json.return_value = open(mock_formatted_scaphandre, "r").read() power_data = get_power_data(self.start_time, self.end_time) @@ -137,14 +147,12 @@ def test_get_power_data(self, mocked_format_scaphandre_json): assert "raw_data" in power_data assert "avg_power" in power_data - @patch("api.format_scaphandre_json") + @patch("api.api.format_scaphandre_json") def test_get_power_data_with_short_time_interval( self, mocked_format_scaphandre_json ): - mocked_format_scaphandre_json.return_value = open( - "./tests/mocks/formatted_scaphandre.json" - ).read() + mocked_format_scaphandre_json.return_value = open(mock_formatted_scaphandre, "r").read() power_data = get_power_data( self.short_interval_start_time, self.short_interval_end_time @@ -172,10 +180,10 @@ def setUp(self) -> None: self.lifetime = 5.0 self.fetch_hardware = False - with open("./tests/mocks/boaviztapi_response_not_verbose.json", "r") as file: + with open(mock_boaviztapi_response_not_verbose, "r") as file: self.boaviztapi_data = json.load(file) - @patch("api.query_machine_impact_data") + @patch("api.api.query_machine_impact_data") def test_get_metrics_with_time_workload_as_percentage( self, mocked_query_machine_impact_data ): @@ -199,7 +207,7 @@ def test_get_metrics_with_time_workload_as_percentage( assert "embedded_abiotic_resources_depletion" in metrics assert "embedded_primary_energy" in metrics - @patch("api.query_machine_impact_data") + @patch("api.api.query_machine_impact_data") def test_get_metrics_with_time_workload_as_list_of_dicts( self, mocked_query_machine_impact_data ): @@ -239,10 +247,10 @@ def setUp(self) -> None: self.lifetime = 5.0 self.fetch_hardware = False - with open("./tests/mocks/boaviztapi_response_verbose.json", "r") as file: + with open(mock_boaviztapi_response_verbose, "r") as file: self.boaviztapi_data = json.load(file) - @patch("api.query_machine_impact_data") + @patch("api.api.query_machine_impact_data") def test_get_metrics_verbose_with_time_workload_percentage( self, mocked_query_machine_impact_data ): @@ -268,7 +276,7 @@ def test_get_metrics_verbose_with_time_workload_percentage( assert "raw_data" in metrics assert "electricity_carbon_intensity" in metrics - @patch("api.query_machine_impact_data") + @patch("api.api.query_machine_impact_data") def test_get_metrics_verbose_with_time_workload_as_list_of_dicts( self, mocked_query_machine_impact_data ): @@ -305,17 +313,17 @@ def setUp(self) -> None: self.lifetime = 5.0 self.fetch_hardware = False - with open("./tests/mocks/boaviztapi_response_verbose.json", "r") as file: + with open(mock_boaviztapi_response_verbose, "r") as file: self.boaviztapi_data = json.load(file) - with open("./tests/mocks/formatted_scaphandre.json", "r") as file: + with open(mock_formatted_scaphandre, "r") as file: power_data = {} power_data["raw_data"] = file.read() power_data["avg_power"] = 11.86 self.power_data = power_data - @patch("api.query_machine_impact_data") - @patch("api.get_power_data") + @patch("api.api.query_machine_impact_data") + @patch("api.api.get_power_data") def test_get_metrics_verbose_with_scaphandre( self, mocked_query_machine_impact_data, mocked_power_data ): diff --git a/boagent/tests/hardware/test_hardwarecli.py b/boagent/tests/hardware/test_hardwarecli.py new file mode 100644 index 0000000..cd7000f --- /dev/null +++ b/boagent/tests/hardware/test_hardwarecli.py @@ -0,0 +1,43 @@ +from unittest import TestCase +from os.path import exists +from hardware.hardware_cli import main, get_cpus, get_ram, get_disks +from click.testing import CliRunner + + +class HardwarecliTest(TestCase): + def test_read_hardware_cli_cpus(self): + + cpus = get_cpus() + assert type(cpus) is list + + def test_read_hardware_cli_ram(self): + + ram = get_ram() + assert type(ram) is list + + def test_read_hardware_cli_disks(self): + + disks = get_disks() + assert type(disks) is list + + def test_write_hardware_json_file_from_hardware_cli_with_output_file_flag_on(self): + + runner = CliRunner() + with runner.isolated_filesystem(): + result_file_path = "hardware_data.json" + + result = runner.invoke(main, ["--output-file", f"./{result_file_path}"]) + assert exists(f"./{result_file_path}") is True + + assert result.exit_code == 0 + + def test_read_stdout_from_hardware_cli(self): + + runner = CliRunner() + + result = runner.invoke(main) + + assert result.exit_code == 0 + assert result.output.count("disk") >= 1 + assert result.output.count("ram") >= 1 + assert result.output.count("cpu") >= 1 diff --git a/boagent/tests/hardware/test_lshw.py b/boagent/tests/hardware/test_lshw.py new file mode 100644 index 0000000..5c23e32 --- /dev/null +++ b/boagent/tests/hardware/test_lshw.py @@ -0,0 +1,188 @@ +from unittest import TestCase +from hardware.lshw.lshw import Lshw +from unittest.mock import patch +from json import load +from os import path + +current_dir = path.dirname(__file__) +mock_lshw_data = path.join(f"{current_dir}", "../mocks/sudo_lshw_data") + +hw = Lshw() + +lshw_cpus_data = hw.cpus +lshw_disks_data = hw.disks +lshw_ram_data = hw.memories + + +class LshwTest(TestCase): + def test_read_get_hw_linux_cpu(self): + cpu_data = hw.get_hw_linux("cpu") + + assert type(cpu_data) is list + + def test_read_get_hw_linux_storage(self): + storage_data = hw.get_hw_linux("storage") + + assert type(storage_data) is list + + def test_read_get_hw_linux_memory(self): + memory_data = hw.get_hw_linux("memory") + + assert type(memory_data) is list + + def test_read_cpus_vendor(self): + + for cpu in lshw_cpus_data: + assert "vendor" in cpu + assert type(cpu["vendor"]) is str + + def test_read_cpus_name(self): + + for cpu in lshw_cpus_data: + assert "name" in cpu + assert type(cpu["name"]) is str + + def test_read_cpus_core_units(self): + + for cpu in lshw_cpus_data: + assert "core_units" in cpu + assert type(cpu["core_units"]) is str + + def test_read_cpus_units(self): + + for cpu in lshw_cpus_data: + assert "units" in cpu + assert type(cpu["units"]) is int + + def test_read_check_disk_vendor_with_correct_model(self): + + model = "LENOVO 123456154" + result = hw.check_disk_vendor(model) + + assert result == "LENOVO" + + def test_read_check_disk_vendor_with_incorrect_model(self): + + model = "12345121 LENOVO" + result = hw.check_disk_vendor(model) + + assert result == "LENOVO" + + def test_read_check_disk_vendor_with_one_correct_string_in_model(self): + + model = "LENOVO" + result = hw.check_disk_vendor(model) + + assert result == "LENOVO" + + def test_read_check_disk_vendor_with_one_incorrect_string_in_model(self): + + model = "12345211" + with self.assertRaises(Exception): + hw.check_disk_vendor(model) + + def test_read_check_disk_vendor_with_multiple_strings_in_model(self): + + model = "LENOVO 123456 MODEL" + result = hw.check_disk_vendor(model) + + assert result == "LENOVO" + + def test_read_disks_type(self): + + for disk in lshw_disks_data: + assert "type" in disk + assert type(disk["type"]) is str + assert ( + disk["type"] == "ssd" + or disk["type"] == "hdd" + or disk["type"] == "usb" + or disk["type"] == "unknown" + ) + + def test_read_disk_dev_name(self): + + for disk in lshw_disks_data: + assert "logicalname" in disk + assert type(disk["logicalname"]) is str + + @patch("hardware.lshw.Lshw.get_rotational_int") + def test_check_disk_type_is_ssd(self, mocked_get_rotational): + + dev_logicalname = "/dev/ssdonsata" + mocked_get_rotational.return_value = 0 + + disk_type = hw.get_disk_type(dev_logicalname) + assert disk_type == "ssd" + + @patch("hardware.lshw.Lshw.get_rotational_int") + def test_check_disk_type_is_hdd(self, mocked_get_rotational): + + dev_logicalname = "/dev/sdaex" + mocked_get_rotational.return_value = 1 + + disk_type = hw.get_disk_type(dev_logicalname) + assert disk_type == "hdd" + + def test_int_for_get_rotational_int_when_file_not_found(self): + + dev_erroneous_name = "/dev/thisnameleadstonorotational" + rotational_int = hw.get_rotational_int(dev_erroneous_name) + + self.assertEqual(rotational_int, 2) + + def test_read_disk_type_when_dev_path_not_found(self): + + dev_erroneous_name = "/dev/thisnamedoesntexist" + disk_type = hw.get_disk_type(dev_erroneous_name) + assert disk_type == "unknown" + + @patch("hardware.lshw.lshw.is_tool") + def test_check_nvme_cli_is_installed_to_find_storage_and_raises_error_if_not( + self, mocked_is_tool + ): + + with open(f"{mock_lshw_data}_disks.json", "r") as file, self.assertRaises( + Exception + ) as nvme_cli_exception: + mocked_is_tool.return_value = False + data = load(file) + hw.find_storage(data) + + caught_exception = nvme_cli_exception.exception + assert str(caught_exception) == "nvme-cli >= 1.0 does not seem to be installed" + + def test_read_disks_manufacturer(self): + + for disk in lshw_disks_data: + assert "manufacturer" in disk + assert type(disk["manufacturer"]) is str + + def test_read_disks_capacity(self): + + for disk in lshw_disks_data: + assert "capacity" in disk + assert type(disk["capacity"]) is int + + def test_read_disks_units(self): + + for disk in lshw_disks_data: + assert "units" in disk + assert type(disk["units"]) is int + + def test_read_ram_manufacturer(self): + + for ram in lshw_ram_data: + assert "manufacturer" in ram + assert type(ram["manufacturer"]) is str + + def test_read_ram_capacity(self): + + for ram in lshw_ram_data[1:]: + assert "capacity" in ram + assert type(ram["capacity"]) is int + + def test_read_ram_units(self): + + assert "units" in lshw_ram_data[0] + assert type(lshw_ram_data[0]["units"]) is int From bb538267df34a971d2780aa31a5b797537d77ab0 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 21 Mar 2024 17:25:14 +0100 Subject: [PATCH 096/227] refactor: moved test_lshw file in hardware --- boagent/tests/test_lshw.py | 188 ------------------------------------- 1 file changed, 188 deletions(-) delete mode 100644 boagent/tests/test_lshw.py diff --git a/boagent/tests/test_lshw.py b/boagent/tests/test_lshw.py deleted file mode 100644 index 29cc626..0000000 --- a/boagent/tests/test_lshw.py +++ /dev/null @@ -1,188 +0,0 @@ -from unittest import TestCase -from hardware.lshw.lshw import Lshw -from unittest.mock import patch -from json import load -from os import path - -current_dir = path.dirname(__file__) -mock_lshw_data = path.join(f"{current_dir}", "./mocks/sudo_lshw_data") - -hw = Lshw() - -lshw_cpus_data = hw.cpus -lshw_disks_data = hw.disks -lshw_ram_data = hw.memories - - -class LshwTest(TestCase): - def test_read_get_hw_linux_cpu(self): - cpu_data = hw.get_hw_linux("cpu") - - assert type(cpu_data) is list - - def test_read_get_hw_linux_storage(self): - storage_data = hw.get_hw_linux("storage") - - assert type(storage_data) is list - - def test_read_get_hw_linux_memory(self): - memory_data = hw.get_hw_linux("memory") - - assert type(memory_data) is list - - def test_read_cpus_vendor(self): - - for cpu in lshw_cpus_data: - assert "vendor" in cpu - assert type(cpu["vendor"]) is str - - def test_read_cpus_name(self): - - for cpu in lshw_cpus_data: - assert "name" in cpu - assert type(cpu["name"]) is str - - def test_read_cpus_core_units(self): - - for cpu in lshw_cpus_data: - assert "core_units" in cpu - assert type(cpu["core_units"]) is str - - def test_read_cpus_units(self): - - for cpu in lshw_cpus_data: - assert "units" in cpu - assert type(cpu["units"]) is int - - def test_read_check_disk_vendor_with_correct_model(self): - - model = "LENOVO 123456154" - result = hw.check_disk_vendor(model) - - assert result == "LENOVO" - - def test_read_check_disk_vendor_with_incorrect_model(self): - - model = "12345121 LENOVO" - result = hw.check_disk_vendor(model) - - assert result == "LENOVO" - - def test_read_check_disk_vendor_with_one_correct_string_in_model(self): - - model = "LENOVO" - result = hw.check_disk_vendor(model) - - assert result == "LENOVO" - - def test_read_check_disk_vendor_with_one_incorrect_string_in_model(self): - - model = "12345211" - with self.assertRaises(Exception): - hw.check_disk_vendor(model) - - def test_read_check_disk_vendor_with_multiple_strings_in_model(self): - - model = "LENOVO 123456 MODEL" - result = hw.check_disk_vendor(model) - - assert result == "LENOVO" - - def test_read_disks_type(self): - - for disk in lshw_disks_data: - assert "type" in disk - assert type(disk["type"]) is str - assert ( - disk["type"] == "ssd" - or disk["type"] == "hdd" - or disk["type"] == "usb" - or disk["type"] == "unknown" - ) - - def test_read_disk_dev_name(self): - - for disk in lshw_disks_data: - assert "logicalname" in disk - assert type(disk["logicalname"]) is str - - @patch("hardware.lshw.Lshw.get_rotational_int") - def test_check_disk_type_is_ssd(self, mocked_get_rotational): - - dev_logicalname = "/dev/ssdonsata" - mocked_get_rotational.return_value = 0 - - disk_type = hw.get_disk_type(dev_logicalname) - assert disk_type == "ssd" - - @patch("hardware.lshw.Lshw.get_rotational_int") - def test_check_disk_type_is_hdd(self, mocked_get_rotational): - - dev_logicalname = "/dev/sdaex" - mocked_get_rotational.return_value = 1 - - disk_type = hw.get_disk_type(dev_logicalname) - assert disk_type == "hdd" - - def test_int_for_get_rotational_int_when_file_not_found(self): - - dev_erroneous_name = "/dev/thisnameleadstonorotational" - rotational_int = hw.get_rotational_int(dev_erroneous_name) - - self.assertEqual(rotational_int, 2) - - def test_read_disk_type_when_dev_path_not_found(self): - - dev_erroneous_name = "/dev/thisnamedoesntexist" - disk_type = hw.get_disk_type(dev_erroneous_name) - assert disk_type == "unknown" - - @patch("hardware.lshw.lshw.is_tool") - def test_check_nvme_cli_is_installed_to_find_storage_and_raises_error_if_not( - self, mocked_is_tool - ): - - with open(f"{mock_lshw_data}_disks.json", "r") as file, self.assertRaises( - Exception - ) as nvme_cli_exception: - mocked_is_tool.return_value = False - data = load(file) - hw.find_storage(data) - - caught_exception = nvme_cli_exception.exception - assert str(caught_exception) == "nvme-cli >= 1.0 does not seem to be installed" - - def test_read_disks_manufacturer(self): - - for disk in lshw_disks_data: - assert "manufacturer" in disk - assert type(disk["manufacturer"]) is str - - def test_read_disks_capacity(self): - - for disk in lshw_disks_data: - assert "capacity" in disk - assert type(disk["capacity"]) is int - - def test_read_disks_units(self): - - for disk in lshw_disks_data: - assert "units" in disk - assert type(disk["units"]) is int - - def test_read_ram_manufacturer(self): - - for ram in lshw_ram_data: - assert "manufacturer" in ram - assert type(ram["manufacturer"]) is str - - def test_read_ram_capacity(self): - - for ram in lshw_ram_data[1:]: - assert "capacity" in ram - assert type(ram["capacity"]) is int - - def test_read_ram_units(self): - - assert "units" in lshw_ram_data[0] - assert type(lshw_ram_data[0]["units"]) is int From 0ab925c239aaea1346a8fc88dac82c1f8a55cefb Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 21 Mar 2024 17:59:09 +0100 Subject: [PATCH 097/227] fix: modules importations --- boagent/api/api.py | 6 +- boagent/api/config/config.py | 2 +- boagent/api/database/database.py | 4 +- boagent/api/tests/mocks/hardware_data.json | 197 --------------------- boagent/api/tests/mocks/power_data.json | 1 - boagent/api/utils/utils.py | 2 +- 6 files changed, 7 insertions(+), 205 deletions(-) delete mode 100644 boagent/api/tests/mocks/hardware_data.json delete mode 100644 boagent/api/tests/mocks/power_data.json diff --git a/boagent/api/api.py b/boagent/api/api.py index 8f60308..cb3b7f8 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -15,7 +15,7 @@ from fastapi.staticfiles import StaticFiles from fastapi.responses import HTMLResponse from boaviztapi_sdk.api.server_api import ServerApi -from api.utils import ( +from utils import ( iso8601_or_timestamp_as_timestamp, format_scaphandre_json, format_prometheus_output, @@ -25,8 +25,8 @@ ) from boaviztapi_sdk.models.server import Server -from api.config import settings -from api.database import ( +from config import settings +from database import ( get_session, select_metric, get_most_recent_data, diff --git a/boagent/api/config/config.py b/boagent/api/config/config.py index 95ce71e..661869b 100644 --- a/boagent/api/config/config.py +++ b/boagent/api/config/config.py @@ -30,7 +30,7 @@ class Settings(BaseSettings): boaviztapi_endpoint: str = os.getenv("BOAVIZTAPI_ENDPOINT", "http://localhost:5000") db_path: str = os.getenv("BOAGENT_DB_PATH", "../../db/boagent.db") public_path: str = os.getenv("BOAGENT_PUBLIC_PATH", "../public") - assets_path: str = os.getenv("BOAGENT_ASSETS_PATH", "./public/assets/") + assets_path: str = os.getenv("BOAGENT_ASSETS_PATH", "../public/assets/") carbon_aware_api_endpoint: str = os.getenv( "CARBON_AWARE_API_ENDPOINT", "https://carbon-aware-api.azurewebsites.net" ) diff --git a/boagent/api/database/database.py b/boagent/api/database/database.py index a2bf0b9..aa87672 100644 --- a/boagent/api/database/database.py +++ b/boagent/api/database/database.py @@ -7,8 +7,8 @@ from sqlalchemy import Column, DateTime, Integer, Float, insert, select, inspect from sqlalchemy.engine import Engine, create_engine from sqlalchemy.orm import Session, declarative_base, declared_attr -from api.config import settings -from api.utils import filter_date_range +from config import settings +from utils import filter_date_range DB_PATH = settings.db_path diff --git a/boagent/api/tests/mocks/hardware_data.json b/boagent/api/tests/mocks/hardware_data.json deleted file mode 100644 index e3c9fd7..0000000 --- a/boagent/api/tests/mocks/hardware_data.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "disks": [ - { - "capacity": 238, - "manufacturer": "toshiba", - "type": "ssd" - } - ], - "cpus": [ - { - "vendor": "GenuineIntel", - "name": "Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz", - "microarch": [ - "kabylake", - "" - ], - "vector_instructions": { - "sse": "Yes", - "sse2": "Yes", - "sse3": "Yes", - "ssse3": "Yes", - "sse4.1": "Yes", - "sse4.2": "Yes", - "sse4a": "--", - "avx": "Yes", - "avx2": "--", - "bmi1": "--", - "bmi2": "--" - }, - "cpu_info": { - "python_version": "3.10.12.final.0 (64 bit)", - "cpuinfo_version": [ - 9, - 0, - 0 - ], - "cpuinfo_version_string": "9.0.0", - "arch": "X86_64", - "bits": 64, - "count": 8, - "arch_string_raw": "x86_64", - "vendor_id_raw": "GenuineIntel", - "brand_raw": "Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz", - "hz_advertised_friendly": "1.8000 GHz", - "hz_actual_friendly": "400.0000 MHz", - "hz_advertised": [ - 1800000000, - 0 - ], - "hz_actual": [ - 400000000, - 0 - ], - "stepping": 12, - "model": 142, - "family": 6, - "flags": [ - "3dnowprefetch", - "abm", - "acpi", - "adx", - "aes", - "aperfmperf", - "apic", - "arat", - "arch_capabilities", - "arch_perfmon", - "art", - "avx", - "avx2", - "bmi1", - "bmi2", - "bts", - "clflush", - "clflushopt", - "cmov", - "constant_tsc", - "cpuid", - "cpuid_fault", - "cx16", - "cx8", - "de", - "ds_cpl", - "dtes64", - "dtherm", - "dts", - "epb", - "ept", - "ept_ad", - "erms", - "est", - "f16c", - "flexpriority", - "flush_l1d", - "fma", - "fpu", - "fsgsbase", - "fxsr", - "ht", - "hwp", - "hwp_act_window", - "hwp_epp", - "hwp_notify", - "ibpb", - "ibrs", - "ibrs_enhanced", - "ida", - "intel_pt", - "invpcid", - "invpcid_single", - "lahf_lm", - "lm", - "mca", - "mce", - "md_clear", - "mmx", - "monitor", - "movbe", - "mpx", - "msr", - "mtrr", - "nonstop_tsc", - "nopl", - "nx", - "osxsave", - "pae", - "pat", - "pbe", - "pcid", - "pclmulqdq", - "pdcm", - "pdpe1gb", - "pebs", - "pge", - "pln", - "pni", - "popcnt", - "pse", - "pse36", - "pts", - "rdrand", - "rdrnd", - "rdseed", - "rdtscp", - "rep_good", - "sdbg", - "sep", - "sgx", - "smap", - "smep", - "ss", - "ssbd", - "sse", - "sse2", - "sse4_1", - "sse4_2", - "ssse3", - "stibp", - "syscall", - "tm", - "tm2", - "tpr_shadow", - "tsc", - "tsc_adjust", - "tsc_deadline_timer", - "tscdeadline", - "vme", - "vmx", - "vnmi", - "vpid", - "x2apic", - "xgetbv1", - "xsave", - "xsavec", - "xsaveopt", - "xsaves", - "xtopology", - "xtpr" - ], - "l3_cache_size": 8388608, - "l2_cache_size": 1048576, - "l1_data_cache_size": 131072, - "l1_instruction_cache_size": 131072, - "l2_cache_line_size": 256, - "l2_cache_associativity": 6 - }, - "core_units": 8, - "family": "kabylake" - } - ], - "rams": [ - { - "capacity": 7 - } - ], - "mother_board": {} -} diff --git a/boagent/api/tests/mocks/power_data.json b/boagent/api/tests/mocks/power_data.json deleted file mode 100644 index bcf7f1f..0000000 --- a/boagent/api/tests/mocks/power_data.json +++ /dev/null @@ -1 +0,0 @@ -{"host":{"consumption":9510593.0,"timestamp":1709569036.7701147,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312873984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":118741.05,"timestamp":1709569036.7699473,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":67852.03,"timestamp":1709569036.7699215,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":33926.016,"timestamp":1709569036.7699084,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":33926.016,"timestamp":1709569036.7699292,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":22617.344,"timestamp":1709569036.7698824,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699177,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699306,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699432,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699645,"container":null},{"exe":"","cmdline":"/usr/libexec/gnome-terminal-server","pid":6747,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.769976,"container":null}],"sockets":[{"id":0,"consumption":2280155.0,"domains":[{"name":"uncore","consumption":4760.0,"timestamp":1709569036.687679},{"name":"core","consumption":363592.0,"timestamp":1709569036.687624},{"name":"dram","consumption":650426.0,"timestamp":1709569036.6875672}],"timestamp":1709569036.6864183}]}{"host":{"consumption":10326187.0,"timestamp":1709569038.8445754,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312808448","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":138775.89,"timestamp":1709569038.8444579,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":44155.965,"timestamp":1709569038.844482,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":37847.97,"timestamp":1709569038.8444862,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31539.975,"timestamp":1709569038.8444736,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":12615.989,"timestamp":1709569038.8444946,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.844463,"container":null},{"exe":"","cmdline":"/usr/bin/dbus-daemon--session--address=systemd:--nofork--nopidfile--systemd-activation--syslog-only","pid":1667,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.84447,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.844479,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.8444872,"container":null},{"exe":"","cmdline":"","pid":263930,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.8444917,"container":null}],"sockets":[{"id":0,"consumption":2565381.0,"domains":[{"name":"uncore","consumption":11099.0,"timestamp":1709569038.7827907},{"name":"core","consumption":519459.0,"timestamp":1709569038.7827168},{"name":"dram","consumption":699014.0,"timestamp":1709569038.7826238}],"timestamp":1709569038.7813084}]}{"host":{"consumption":11958290.0,"timestamp":1709569040.9484453,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312738816","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":196994.4,"timestamp":1709569040.9481177,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":145921.8,"timestamp":1709569040.9481637,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":131329.61,"timestamp":1709569040.948196,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":51072.625,"timestamp":1709569040.9481723,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":29184.355,"timestamp":1709569040.9481483,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":14592.178,"timestamp":1709569040.9481866,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481342,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.948174,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481745,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481938,"container":null}],"sockets":[{"id":0,"consumption":3843814.0,"domains":[{"name":"uncore","consumption":114992.0,"timestamp":1709569040.854405},{"name":"core","consumption":1617998.0,"timestamp":1709569040.854287},{"name":"dram","consumption":905649.0,"timestamp":1709569040.8541002}],"timestamp":1709569040.8530734}]}{"host":{"consumption":10766276.0,"timestamp":1709569043.045374,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312673280","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":109204.47,"timestamp":1709569043.0450184,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":96356.88,"timestamp":1709569043.0450678,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":70661.71,"timestamp":1709569043.0449176,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":51390.34,"timestamp":1709569043.045032,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":25695.17,"timestamp":1709569043.0449913,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":19271.377,"timestamp":1709569043.0450542,"container":null},{"exe":"","cmdline":"","pid":263930,"resources_usage":null,"consumption":12847.585,"timestamp":1709569043.0450523,"container":null},{"exe":"","cmdline":"/usr/libexec/ibus-engine-simple","pid":2706,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0449593,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0450757,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0451076,"container":null}],"sockets":[{"id":0,"consumption":2925740.0,"domains":[{"name":"uncore","consumption":59052.0,"timestamp":1709569042.9618628},{"name":"core","consumption":870351.0,"timestamp":1709569042.9616694},{"name":"dram","consumption":763613.0,"timestamp":1709569042.9615138}],"timestamp":1709569042.9604695}]}{"host":{"consumption":12795838.0,"timestamp":1709569045.136388,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312599552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":664518.2,"timestamp":1709569045.1362245,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":115904.33,"timestamp":1709569045.13612,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":100450.42,"timestamp":1709569045.136108,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":77269.555,"timestamp":1709569045.1361601,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":46361.73,"timestamp":1709569045.1361682,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":30907.82,"timestamp":1709569045.1361806,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":23180.865,"timestamp":1709569045.1361425,"container":null},{"exe":"","cmdline":"/usr/libexec/ibus-engine-simple","pid":2706,"resources_usage":null,"consumption":15453.91,"timestamp":1709569045.1361227,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7726.955,"timestamp":1709569045.1361263,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":7726.955,"timestamp":1709569045.1361704,"container":null}],"sockets":[{"id":0,"consumption":4255760.0,"domains":[{"name":"uncore","consumption":91691.0,"timestamp":1709569045.0613444},{"name":"core","consumption":1964961.0,"timestamp":1709569045.0612833},{"name":"dram","consumption":831560.0,"timestamp":1709569045.0612147}],"timestamp":1709569045.0603004}]}{"host":{"consumption":10793162.0,"timestamp":1709569047.2175863,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312529920","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":117387.87,"timestamp":1709569047.2174373,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":78258.57,"timestamp":1709569047.2173684,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":58693.934,"timestamp":1709569047.2174082,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":39129.285,"timestamp":1709569047.2173939,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":39129.285,"timestamp":1709569047.2174149,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":13043.097,"timestamp":1709569047.2174313,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2173736,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2174056,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.21742,"container":null},{"exe":"","cmdline":"","pid":263932,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2174532,"container":null}],"sockets":[{"id":0,"consumption":3052707.0,"domains":[{"name":"uncore","consumption":45126.0,"timestamp":1709569047.1469367},{"name":"core","consumption":1034363.0,"timestamp":1709569047.1468956},{"name":"dram","consumption":728187.0,"timestamp":1709569047.146852}],"timestamp":1709569047.1459458}]}{"host":{"consumption":17104786.0,"timestamp":1709569049.3226047,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312448000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1625531.5,"timestamp":1709569049.3221166,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID330-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{37eaeb80-2d9e-484a-af74-336f513a2f16}3065truetab","pid":271111,"resources_usage":null,"consumption":608263.4,"timestamp":1709569049.3221295,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":314618.97,"timestamp":1709569049.321927,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":125847.6,"timestamp":1709569049.3220081,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":83898.4,"timestamp":1709569049.32202,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":41949.2,"timestamp":1709569049.32197,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3219535,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3219838,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3220413,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":10487.3,"timestamp":1709569049.3219476,"container":null}],"sockets":[{"id":0,"consumption":7401117.0,"domains":[{"name":"uncore","consumption":212689.0,"timestamp":1709569049.2283125},{"name":"core","consumption":4861941.0,"timestamp":1709569049.2282119},{"name":"dram","consumption":1089513.0,"timestamp":1709569049.2281222}],"timestamp":1709569049.226694}]}{"host":{"consumption":18876486.0,"timestamp":1709569051.379631,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312312832","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1823363.4,"timestamp":1709569051.379438,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID331-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{1b207027-ae58-45d6-a5cb-ea6d45785f0c}3065truetab","pid":271887,"resources_usage":null,"consumption":911681.7,"timestamp":1709569051.37943,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":350646.78,"timestamp":1709569051.3793063,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":268829.22,"timestamp":1709569051.3793647,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":70129.36,"timestamp":1709569051.3793387,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":58441.133,"timestamp":1709569051.3793726,"container":null},{"exe":"","cmdline":"","pid":88,"resources_usage":null,"consumption":46752.906,"timestamp":1709569051.3793633,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35064.68,"timestamp":1709569051.3793492,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":23376.453,"timestamp":1709569051.379325,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":23376.453,"timestamp":1709569051.3793294,"container":null}],"sockets":[{"id":0,"consumption":8338159.0,"domains":[{"name":"uncore","consumption":243599.0,"timestamp":1709569051.3342211},{"name":"core","consumption":5475930.0,"timestamp":1709569051.3340466},{"name":"dram","consumption":1159400.0,"timestamp":1709569051.3338134}],"timestamp":1709569051.3327785}]}{"host":{"consumption":11250187.0,"timestamp":1709569053.4751475,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312394752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":309827.7,"timestamp":1709569053.4748783,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":110160.95,"timestamp":1709569053.4749343,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":61965.53,"timestamp":1709569053.4748945,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":48195.414,"timestamp":1709569053.4749434,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":41310.355,"timestamp":1709569053.4749424,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":34425.297,"timestamp":1709569053.4749196,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":13770.119,"timestamp":1709569053.4748962,"container":null},{"exe":"","cmdline":"","pid":41,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.474887,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.4748998,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.474945,"container":null}],"sockets":[{"id":0,"consumption":3172866.0,"domains":[{"name":"uncore","consumption":82698.0,"timestamp":1709569053.3911366},{"name":"core","consumption":947798.0,"timestamp":1709569053.391068},{"name":"dram","consumption":817260.0,"timestamp":1709569053.3910155}],"timestamp":1709569053.389935}]}{"host":{"consumption":11651021.0,"timestamp":1709569055.5661595,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312243200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":538284.25,"timestamp":1709569055.5659678,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":148736.44,"timestamp":1709569055.5658362,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":84992.25,"timestamp":1709569055.5658932,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42496.125,"timestamp":1709569055.565902,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28330.748,"timestamp":1709569055.5658772,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":14165.374,"timestamp":1709569055.5658662,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658436,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658581,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658886,"container":null},{"exe":"","cmdline":"","pid":23,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658937,"container":null}],"sockets":[{"id":0,"consumption":3413054.0,"domains":[{"name":"uncore","consumption":89927.0,"timestamp":1709569055.4883645},{"name":"core","consumption":1173133.0,"timestamp":1709569055.4882367},{"name":"dram","consumption":850286.0,"timestamp":1709569055.4880445}],"timestamp":1709569055.4860508}]}{"host":{"consumption":19636240.0,"timestamp":1709569057.6362855,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312181760","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1849529.5,"timestamp":1709569057.6361952,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":816675.44,"timestamp":1709569057.6361094,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":360297.97,"timestamp":1709569057.6360965,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":120099.336,"timestamp":1709569057.636142,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":96079.46,"timestamp":1709569057.6361227,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":72059.59,"timestamp":1709569057.6361485,"container":null},{"exe":"","cmdline":"","pid":88,"resources_usage":null,"consumption":60049.668,"timestamp":1709569057.6361413,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":36029.797,"timestamp":1709569057.636116,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":24019.865,"timestamp":1709569057.6361303,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID320-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{139102ea-3b73-434c-8e10-7c94bb08134f}3065truetab","pid":257812,"resources_usage":null,"consumption":12009.933,"timestamp":1709569057.6361134,"container":null}],"sockets":[{"id":0,"consumption":8953263.0,"domains":[{"name":"uncore","consumption":191909.0,"timestamp":1709569057.57598},{"name":"core","consumption":6353826.0,"timestamp":1709569057.5759137},{"name":"dram","consumption":1152379.0,"timestamp":1709569057.5758448}],"timestamp":1709569057.5751684}]}{"host":{"consumption":14328843.0,"timestamp":1709569059.7370303,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312087552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":788261.56,"timestamp":1709569059.736839,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":262753.84,"timestamp":1709569059.7367055,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":183927.69,"timestamp":1709569059.7367206,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":175169.23,"timestamp":1709569059.7367651,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":52550.773,"timestamp":1709569059.7367737,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":52550.773,"timestamp":1709569059.7367744,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35033.848,"timestamp":1709569059.7367482,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":26275.387,"timestamp":1709569059.7367373,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":17516.924,"timestamp":1709569059.7367234,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":17516.924,"timestamp":1709569059.7367277,"container":null}],"sockets":[{"id":0,"consumption":5606524.0,"domains":[{"name":"uncore","consumption":163963.0,"timestamp":1709569059.6464283},{"name":"core","consumption":3117124.0,"timestamp":1709569059.64638},{"name":"dram","consumption":1008404.0,"timestamp":1709569059.646328}],"timestamp":1709569059.6453197}]}{"host":{"consumption":10798938.0,"timestamp":1709569061.834314,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312005632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":90856.45,"timestamp":1709569061.8340003,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":90856.45,"timestamp":1709569061.8340604,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":58407.723,"timestamp":1709569061.8340156,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38938.48,"timestamp":1709569061.83407,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32448.734,"timestamp":1709569061.8340447,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340232,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340328,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340566,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.834072,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340888,"container":null}],"sockets":[{"id":0,"consumption":3002282.0,"domains":[{"name":"uncore","consumption":59301.0,"timestamp":1709569061.7501621},{"name":"core","consumption":882674.0,"timestamp":1709569061.7499254},{"name":"dram","consumption":758935.0,"timestamp":1709569061.749683}],"timestamp":1709569061.7484915}]}{"host":{"consumption":11771431.0,"timestamp":1709569063.9412537,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311923712","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":184705.62,"timestamp":1709569063.9409318,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":163393.42,"timestamp":1709569063.9409485,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":106560.94,"timestamp":1709569063.9409466,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":85248.75,"timestamp":1709569063.9409919,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":71040.625,"timestamp":1709569063.9409637,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":49728.434,"timestamp":1709569063.9410012,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28416.248,"timestamp":1709569063.9409754,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.940943,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.9409544,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.9409957,"container":null}],"sockets":[{"id":0,"consumption":3543949.0,"domains":[{"name":"uncore","consumption":120076.0,"timestamp":1709569063.8469055},{"name":"core","consumption":1209405.0,"timestamp":1709569063.8467765},{"name":"dram","consumption":826656.0,"timestamp":1709569063.8466294}],"timestamp":1709569063.8455148}]}{"host":{"consumption":10726351.0,"timestamp":1709569066.0453446,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311866368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":172799.2,"timestamp":1709569066.0451372,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":115199.48,"timestamp":1709569066.0451686,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":95999.56,"timestamp":1709569066.0450618,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":89599.59,"timestamp":1709569066.0450773,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38399.83,"timestamp":1709569066.0451465,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31999.854,"timestamp":1709569066.045109,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0450845,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.045164,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0451667,"container":null},{"exe":"","cmdline":"","pid":249501,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0451684,"container":null}],"sockets":[{"id":0,"consumption":2860620.0,"domains":[{"name":"uncore","consumption":70666.0,"timestamp":1709569065.9534726},{"name":"core","consumption":729100.0,"timestamp":1709569065.9532387},{"name":"dram","consumption":774626.0,"timestamp":1709569065.9529963}],"timestamp":1709569065.9517043}]}{"host":{"consumption":10230392.0,"timestamp":1709569068.1362233,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311792640","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":116324.03,"timestamp":1709569068.135931,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":91834.76,"timestamp":1709569068.1359856,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":48978.535,"timestamp":1709569068.13601,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":36733.902,"timestamp":1709569068.135946,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":36733.902,"timestamp":1709569068.135971,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359522,"container":null},{"exe":"","cmdline":"/usr/libexec/fwupd/fwupd","pid":2916,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359785,"container":null},{"exe":"","cmdline":"/usr/libexec/gvfs-afc-volume-monitor","pid":2457,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359835,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359892,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1360116,"container":null}],"sockets":[{"id":0,"consumption":2688432.0,"domains":[{"name":"uncore","consumption":84259.0,"timestamp":1709569068.057044},{"name":"core","consumption":588952.0,"timestamp":1709569068.0569935},{"name":"dram","consumption":772851.0,"timestamp":1709569068.0569386}],"timestamp":1709569068.0558925}]}{"host":{"consumption":11706772.0,"timestamp":1709569070.2046812,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311714816","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":165288.98,"timestamp":1709569070.204433,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":158102.52,"timestamp":1709569070.2044551,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":50305.344,"timestamp":1709569070.2044961,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":50305.344,"timestamp":1709569070.2045052,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28745.91,"timestamp":1709569070.2044826,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":14372.955,"timestamp":1709569070.204463,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2044728,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2044933,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2045171,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2045195,"container":null}],"sockets":[{"id":0,"consumption":3013910.0,"domains":[{"name":"uncore","consumption":97346.0,"timestamp":1709569070.1455407},{"name":"core","consumption":787681.0,"timestamp":1709569070.1454976},{"name":"dram","consumption":804376.0,"timestamp":1709569070.1454227}],"timestamp":1709569070.1451373}]}{"host":{"consumption":11031279.0,"timestamp":1709569072.2848258,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311690240","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":80864.6,"timestamp":1709569072.2845564,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":74125.89,"timestamp":1709569072.2845726,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":47171.02,"timestamp":1709569072.2846088,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":47171.02,"timestamp":1709569072.2846167,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":33693.586,"timestamp":1709569072.284595,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.2845688,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284578,"container":null},{"exe":"","cmdline":"/usr/sbin/irqbalance--foreground","pid":584,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284602,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284612,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.2846181,"container":null}],"sockets":[{"id":0,"consumption":3685854.0,"domains":[{"name":"uncore","consumption":70979.0,"timestamp":1709569072.2161698},{"name":"core","consumption":1516305.0,"timestamp":1709569072.2159224},{"name":"dram","consumption":774430.0,"timestamp":1709569072.2156763}],"timestamp":1709569072.2141333}]}{"host":{"consumption":10188085.0,"timestamp":1709569074.3809662,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311583744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":129274.79,"timestamp":1709569074.3807373,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":123118.86,"timestamp":1709569074.3806627,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":67715.37,"timestamp":1709569074.3807063,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":61559.43,"timestamp":1709569074.3806434,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":36935.652,"timestamp":1709569074.380661,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":36935.652,"timestamp":1709569074.3807158,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":30779.715,"timestamp":1709569074.3806891,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.380702,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.3807323,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.3807428,"container":null}],"sockets":[{"id":0,"consumption":2669277.0,"domains":[{"name":"uncore","consumption":2377.0,"timestamp":1709569074.2956257},{"name":"core","consumption":635943.0,"timestamp":1709569074.295518},{"name":"dram","consumption":693138.0,"timestamp":1709569074.2953844}],"timestamp":1709569074.2940917}]}{"host":{"consumption":10273173.0,"timestamp":1709569076.4840806,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311133184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":192311.81,"timestamp":1709569076.4837523,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":62036.066,"timestamp":1709569076.4836805,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":62036.066,"timestamp":1709569076.4836984,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":49628.85,"timestamp":1709569076.4837635,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31018.033,"timestamp":1709569076.4837308,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":12407.213,"timestamp":1709569076.4837837,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837067,"container":null},{"exe":"","cmdline":"","pid":52,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837546,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837568,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837873,"container":null}],"sockets":[{"id":0,"consumption":2682165.0,"domains":[{"name":"uncore","consumption":34426.0,"timestamp":1709569076.3929577},{"name":"core","consumption":624540.0,"timestamp":1709569076.3927567},{"name":"dram","consumption":717227.0,"timestamp":1709569076.392554}],"timestamp":1709569076.3915682}]}{"host":{"consumption":9607585.0,"timestamp":1709569078.5887036,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311055360","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":126189.17,"timestamp":1709569078.5884168,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":120453.305,"timestamp":1709569078.5883787,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":34415.23,"timestamp":1709569078.5883904,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28679.357,"timestamp":1709569078.588356,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5883718,"container":null},{"exe":"","cmdline":"/snap/snap-store/959/usr/bin/snap-store--gapplication-service","pid":2654,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.588389,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5883996,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.588423,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5884507,"container":null},{"exe":"","cmdline":"","pid":263932,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5884538,"container":null}],"sockets":[{"id":0,"consumption":2308325.0,"domains":[{"name":"uncore","consumption":0.0,"timestamp":1709569078.4969332},{"name":"core","consumption":349548.0,"timestamp":1709569078.49682},{"name":"dram","consumption":659184.0,"timestamp":1709569078.496608}],"timestamp":1709569078.495577}]}{"host":{"consumption":11781116.0,"timestamp":1709569080.690352,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310977536","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":183528.48,"timestamp":1709569080.6900492,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":127058.164,"timestamp":1709569080.689976,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":49411.51,"timestamp":1709569080.6899953,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42352.727,"timestamp":1709569080.6900613,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28235.15,"timestamp":1709569080.690028,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900034,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.690054,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900635,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900702,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900811,"container":null}],"sockets":[{"id":0,"consumption":3656251.0,"domains":[{"name":"uncore","consumption":100027.0,"timestamp":1709569080.6002367},{"name":"core","consumption":1471737.0,"timestamp":1709569080.6002066},{"name":"dram","consumption":835779.0,"timestamp":1709569080.6001685}],"timestamp":1709569080.5997374}]}{"host":{"consumption":10751426.0,"timestamp":1709569082.7966828,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310912000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":129223.875,"timestamp":1709569082.7962778,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":129223.875,"timestamp":1709569082.796353,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":45228.355,"timestamp":1709569082.796296,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38767.16,"timestamp":1709569082.796366,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32305.969,"timestamp":1709569082.7963324,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":19383.58,"timestamp":1709569082.7963855,"container":null},{"exe":"","cmdline":"/usr/libexec/xdg-desktop-portal","pid":2741,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.796281,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.7962918,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.796305,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.7963483,"container":null}],"sockets":[{"id":0,"consumption":2932212.0,"domains":[{"name":"uncore","consumption":108001.0,"timestamp":1709569082.703656},{"name":"core","consumption":754167.0,"timestamp":1709569082.7034225},{"name":"dram","consumption":809091.0,"timestamp":1709569082.7031865}],"timestamp":1709569082.701941}]}{"host":{"consumption":11675751.0,"timestamp":1709569084.8753462,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310842368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":162752.89,"timestamp":1709569084.8750737,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":120295.625,"timestamp":1709569084.875089,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":84914.555,"timestamp":1709569084.8751278,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":56609.703,"timestamp":1709569084.8750875,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42457.277,"timestamp":1709569084.8751369,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35381.062,"timestamp":1709569084.8751128,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":14152.426,"timestamp":1709569084.8750942,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.875102,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.8751385,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.8751504,"container":null}],"sockets":[{"id":0,"consumption":3311707.0,"domains":[{"name":"uncore","consumption":114419.0,"timestamp":1709569084.8064413},{"name":"core","consumption":1057562.0,"timestamp":1709569084.806423},{"name":"dram","consumption":842802.0,"timestamp":1709569084.8063824}],"timestamp":1709569084.8060837}]}{"host":{"consumption":10690528.0,"timestamp":1709569086.9738417,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310768640","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":162470.03,"timestamp":1709569086.9735067,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":142973.62,"timestamp":1709569086.9735715,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":64988.016,"timestamp":1709569086.9735236,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":45491.605,"timestamp":1709569086.973582,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32494.008,"timestamp":1709569086.973554,"container":null},{"exe":"","cmdline":"","pid":41,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735167,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.973531,"container":null},{"exe":"","cmdline":"/usr/bin/containerd-shim-runc-v2-namespacemoby-id4daf484270eace43a1e866a0d0d3505b7601e702300946af07a68e2493d97644-address/run/containerd/containerd.sock","pid":240526,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735382,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735672,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.973575,"container":null}],"sockets":[{"id":0,"consumption":2990252.0,"domains":[{"name":"uncore","consumption":115894.0,"timestamp":1709569086.8877308},{"name":"core","consumption":789509.0,"timestamp":1709569086.8874633},{"name":"dram","consumption":821831.0,"timestamp":1709569086.887196}],"timestamp":1709569086.8857727}]}{"host":{"consumption":10444900.0,"timestamp":1709569089.0750725,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310703104","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":120566.9,"timestamp":1709569089.0747454,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":107875.65,"timestamp":1709569089.0748055,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":57110.637,"timestamp":1709569089.0747604,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":44419.383,"timestamp":1709569089.0748153,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":25382.504,"timestamp":1709569089.0747883,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":19036.877,"timestamp":1709569089.0748348,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0747678,"container":null},{"exe":"","cmdline":"","pid":269914,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0747864,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0748093,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.074817,"container":null}],"sockets":[{"id":0,"consumption":2727262.0,"domains":[{"name":"uncore","consumption":84809.0,"timestamp":1709569088.9848561},{"name":"core","consumption":582620.0,"timestamp":1709569088.9847484},{"name":"dram","consumption":778216.0,"timestamp":1709569088.9846327}],"timestamp":1709569088.9836576}]}{"host":{"consumption":10307967.0,"timestamp":1709569091.1843927,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310633472","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":123745.1,"timestamp":1709569091.1839895,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":111370.59,"timestamp":1709569091.1840603,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":68059.81,"timestamp":1709569091.184008,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":43310.79,"timestamp":1709569091.1840723,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":30936.275,"timestamp":1709569091.1840403,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.184004,"container":null},{"exe":"","cmdline":"@dbus-daemon--system--address=systemd:--nofork--nopidfile--systemd-activation--syslog-only","pid":574,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840155,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840165,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840816,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840973,"container":null}],"sockets":[{"id":0,"consumption":2666511.0,"domains":[{"name":"uncore","consumption":67738.0,"timestamp":1709569091.0878828},{"name":"core","consumption":528703.0,"timestamp":1709569091.087651},{"name":"dram","consumption":755137.0,"timestamp":1709569091.087412}],"timestamp":1709569091.086237}]}{"host":{"consumption":10513871.0,"timestamp":1709569093.2920067,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310567936","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":188533.25,"timestamp":1709569093.2917347,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":113119.95,"timestamp":1709569093.2916732,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":56559.977,"timestamp":1709569093.2917452,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":43991.09,"timestamp":1709569093.2916896,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":37706.652,"timestamp":1709569093.2917178,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":18853.326,"timestamp":1709569093.2917445,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":12568.884,"timestamp":1709569093.2916968,"container":null},{"exe":"","cmdline":"","pid":269914,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.2917151,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.2917309,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.291747,"container":null}],"sockets":[{"id":0,"consumption":2745264.0,"domains":[{"name":"uncore","consumption":91976.0,"timestamp":1709569093.198776},{"name":"core","consumption":632737.0,"timestamp":1709569093.1986213},{"name":"dram","consumption":772951.0,"timestamp":1709569093.1985009}],"timestamp":1709569093.1971552}]} diff --git a/boagent/api/utils/utils.py b/boagent/api/utils/utils.py index bf704fc..7b4ab73 100644 --- a/boagent/api/utils/utils.py +++ b/boagent/api/utils/utils.py @@ -1,7 +1,7 @@ from datetime import datetime from boaviztapi_sdk import ApiClient, Configuration from dateutil import parser -from api.config import settings +from config import settings from os import PathLike BOAVIZTAPI_ENDPOINT = settings.boaviztapi_endpoint From c7aa1fa4130ff662f5001b155ab7627e6e4e7b03 Mon Sep 17 00:00:00 2001 From: repair Date: Mon, 25 Mar 2024 10:08:38 +0100 Subject: [PATCH 098/227] config: Dockerfile entrypoint & api module importations --- Dockerfile | 2 +- boagent/api/api.py | 16 ++------- boagent/api/config/config.py | 4 +-- boagent/api/database/database.py | 4 +-- boagent/api/utils/utils.py | 2 +- requirements.txt | 59 +++++++++++++++++++++----------- 6 files changed, 48 insertions(+), 39 deletions(-) diff --git a/Dockerfile b/Dockerfile index e89d36d..025cefa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,4 +28,4 @@ COPY . . EXPOSE 8000 -ENTRYPOINT [ "/bin/bash", "-c", "cd boagent/api && uvicorn --reload api:app --host 0.0.0.0" ] +ENTRYPOINT [ "/bin/bash", "-c", "cd boagent/ && uvicorn --reload api.api:app --host 0.0.0.0" ] diff --git a/boagent/api/api.py b/boagent/api/api.py index cb3b7f8..b84804b 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -9,13 +9,12 @@ from datetime import datetime, timedelta from subprocess import run from typing import Dict, Any, Tuple, List, Optional, Union -from pydantic import BaseModel from croniter import croniter from fastapi import FastAPI, Response from fastapi.staticfiles import StaticFiles from fastapi.responses import HTMLResponse from boaviztapi_sdk.api.server_api import ServerApi -from utils import ( +from api.utils import ( iso8601_or_timestamp_as_timestamp, format_scaphandre_json, format_prometheus_output, @@ -25,8 +24,8 @@ ) from boaviztapi_sdk.models.server import Server -from config import settings -from database import ( +from api.config import settings +from api.database import ( get_session, select_metric, get_most_recent_data, @@ -49,15 +48,6 @@ CARBON_AWARE_API_TOKEN = settings.carbon_aware_api_token -# class TimeWorkloadDict(TypedDict): -# time_percentage: float -# load_percentage: float - - -# class TimeWorkloadList(BaseModel): -# time_workload: list[TimeWorkloadDict] - - def configure_static(app): app.mount("/assets", StaticFiles(directory=ASSETS_PATH), name="assets") diff --git a/boagent/api/config/config.py b/boagent/api/config/config.py index 661869b..d304ffc 100644 --- a/boagent/api/config/config.py +++ b/boagent/api/config/config.py @@ -29,8 +29,8 @@ class Settings(BaseSettings): hardware_cli: str = os.getenv("HARDWARE_CLI", "./hardware/hardware_cli.py") boaviztapi_endpoint: str = os.getenv("BOAVIZTAPI_ENDPOINT", "http://localhost:5000") db_path: str = os.getenv("BOAGENT_DB_PATH", "../../db/boagent.db") - public_path: str = os.getenv("BOAGENT_PUBLIC_PATH", "../public") - assets_path: str = os.getenv("BOAGENT_ASSETS_PATH", "../public/assets/") + public_path: str = os.getenv("BOAGENT_PUBLIC_PATH", "./public") + assets_path: str = os.getenv("BOAGENT_ASSETS_PATH", "./public/assets/") carbon_aware_api_endpoint: str = os.getenv( "CARBON_AWARE_API_ENDPOINT", "https://carbon-aware-api.azurewebsites.net" ) diff --git a/boagent/api/database/database.py b/boagent/api/database/database.py index aa87672..a2bf0b9 100644 --- a/boagent/api/database/database.py +++ b/boagent/api/database/database.py @@ -7,8 +7,8 @@ from sqlalchemy import Column, DateTime, Integer, Float, insert, select, inspect from sqlalchemy.engine import Engine, create_engine from sqlalchemy.orm import Session, declarative_base, declared_attr -from config import settings -from utils import filter_date_range +from api.config import settings +from api.utils import filter_date_range DB_PATH = settings.db_path diff --git a/boagent/api/utils/utils.py b/boagent/api/utils/utils.py index 7b4ab73..bf704fc 100644 --- a/boagent/api/utils/utils.py +++ b/boagent/api/utils/utils.py @@ -1,7 +1,7 @@ from datetime import datetime from boaviztapi_sdk import ApiClient, Configuration from dateutil import parser -from config import settings +from api.config import settings from os import PathLike BOAVIZTAPI_ENDPOINT = settings.boaviztapi_endpoint diff --git a/requirements.txt b/requirements.txt index 5209c89..c8d4fc6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,34 +1,53 @@ --i https://pypi.python.org/simple aiofile==3.8.1 -anyio==3.6.2 ; python_full_version >= '3.6.2' -boaviztapi-sdk>=0.1.2 -caio==0.9.8 ; python_version >= '3.5' and python_version < '4' -certifi==2022.9.24 ; python_version >= '3.6' -charset-normalizer==2.1.1 ; python_full_version >= '3.6.0' -click==8.1.3 ; python_version >= '3.7' +annotated-types==0.6.0 +anyio==3.6.2 +asgiref==3.7.2 +boaviztapi-sdk==1.2.4 +caio==0.9.8 +certifi==2022.9.24 +cfgv==3.4.0 +charset-normalizer==2.1.1 +click==8.1.3 cpuid==0.0.10 cpuid-native==0.0.7 croniter==1.3.7 dataclasses==0.6 -fastapi==0.85.1 -greenlet==1.1.3.post0 ; python_version >= '3' and platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32'))))) -h11==0.14.0 ; python_version >= '3.7' -idna==3.4 ; python_version >= '3.5' +distlib==0.3.8 +exceptiongroup==1.2.0 +fastapi==0.110.0 +filelock==3.13.1 +greenlet==1.1.3.post0 +h11==0.14.0 +httpcore==1.0.4 +httpx==0.27.0 +identify==2.5.35 +idna==3.4 +iniconfig==2.0.0 mangum==0.16.0 -numpy==1.23.4 ; python_version < '3.10' +nodeenv==1.8.0 +numpy==1.26.4 +packaging==23.2 pandas==1.5.1 +platformdirs==4.2.0 +pluggy==1.4.0 +pre-commit==3.6.2 py-cpuinfo==9.0.0 -pydantic[dotenv]==1.10.2 +pydantic==2.6.4 pydantic-settings==2.2.1 +pydantic_core==2.16.3 pytest==8.0.2 -python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +python-dateutil==2.8.2 python-dotenv==0.21.0 pytz==2022.5 +PyYAML==6.0.1 requests==2.28.1 -six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -sniffio==1.3.0 ; python_version >= '3.7' -sqlalchemy==1.4.42 -starlette==0.20.4 ; python_version >= '3.7' -typing-extensions==4.4.0 ; python_version < '3.10' -urllib3==1.26.12 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' and python_version < '4' +six==1.16.0 +sniffio==1.3.0 +SQLAlchemy==1.4.42 +starlette==0.36.3 +tomli==2.0.1 +typing_extensions==4.9.0 +tzdata==2024.1 +urllib3==1.26.12 uvicorn==0.19.0 +virtualenv==20.25.1 From 62cea428bda677c3b187cddfd2031bd8870ddc60 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 9 Apr 2024 19:42:25 +0200 Subject: [PATCH 099/227] tests: mocks for tests --- .gitignore | 1 - boagent/tests/api/test_api_unit.py | 5 +- .../boaviztapi_response_not_verbose.json | 55 + .../mocks/boaviztapi_response_verbose.json | 697 +++++++ boagent/tests/mocks/formatted_scaphandre.json | 1 + boagent/tests/mocks/hardware_data.json | 219 +++ boagent/tests/mocks/power_data.json | 1 + boagent/tests/mocks/sudo_lshw_data.json | 1711 +++++++++++++++++ boagent/tests/mocks/sudo_lshw_data_disks.json | 244 +++ 9 files changed, 2931 insertions(+), 3 deletions(-) create mode 100644 boagent/tests/mocks/boaviztapi_response_not_verbose.json create mode 100644 boagent/tests/mocks/boaviztapi_response_verbose.json create mode 100644 boagent/tests/mocks/formatted_scaphandre.json create mode 100644 boagent/tests/mocks/hardware_data.json create mode 100644 boagent/tests/mocks/power_data.json create mode 100644 boagent/tests/mocks/sudo_lshw_data.json create mode 100644 boagent/tests/mocks/sudo_lshw_data_disks.json diff --git a/.gitignore b/.gitignore index b6924cc..a680567 100644 --- a/.gitignore +++ b/.gitignore @@ -137,7 +137,6 @@ dmypy.json .idea/ .vscode/ -*.json *.db *.svg *.csv diff --git a/boagent/tests/api/test_api_unit.py b/boagent/tests/api/test_api_unit.py index 8aee5cb..3907b23 100644 --- a/boagent/tests/api/test_api_unit.py +++ b/boagent/tests/api/test_api_unit.py @@ -24,13 +24,14 @@ mock_boaviztapi_response_verbose = os.path.join(f"{current_dir}", "../mocks/boaviztapi_response_verbose.json") mock_formatted_scaphandre = os.path.join(f"{current_dir}", "../mocks/formatted_scaphandre.json") hardware_cli = os.path.join(f"{current_dir}", "") +hardware_data = os.path.join(f"{current_dir}", "../../hardware/hardware_data.json") class ReadHardwareDataTest(TestCase): def test_build_hardware_data(self): build_hardware_data() - assert os.path.exists("./hardware_data.json") is True + assert os.path.exists(hardware_data) is True def test_read_hardware_data(self): @@ -62,7 +63,7 @@ def test_get_hardware_data_with_fetch_hardware_true(self): # pass def tearDown(self) -> None: - os.remove("./hardware_data.json") + os.remove(hardware_data) class FormatUsageRequestTest(TestCase): diff --git a/boagent/tests/mocks/boaviztapi_response_not_verbose.json b/boagent/tests/mocks/boaviztapi_response_not_verbose.json new file mode 100644 index 0000000..0f74f04 --- /dev/null +++ b/boagent/tests/mocks/boaviztapi_response_not_verbose.json @@ -0,0 +1,55 @@ +{ + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 1200, + "min": 759.1, + "max": 1949, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 1030, + "min": 1030, + "max": 1030 + } + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.155, + "min": 0.1128, + "max": 0.2077, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 0.0005107, + "min": 0.0005107, + "max": 0.0005107 + } + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 15000, + "min": 10080, + "max": 25260, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 118700, + "min": 118700, + "max": 118700 + } + } + } +} diff --git a/boagent/tests/mocks/boaviztapi_response_verbose.json b/boagent/tests/mocks/boaviztapi_response_verbose.json new file mode 100644 index 0000000..23227d6 --- /dev/null +++ b/boagent/tests/mocks/boaviztapi_response_verbose.json @@ -0,0 +1,697 @@ +{ + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 1176, + "min": 1112, + "max": 1176, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 10000, + "min": 526.5, + "max": 34540 + } + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.1492, + "min": 0.1492, + "max": 0.1567, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 0.0016, + "min": 0.0003031, + "max": 0.008107 + } + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 15680, + "min": 14700, + "max": 15680, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 300000, + "min": 297.6, + "max": 14290000, + "warnings": [ + "Uncertainty from technical characteristics is very important. Results should be interpreted with caution (see min and max values)" + ] + } + } + }, + "verbose": { + "duration": { + "value": 35040, + "unit": "hours" + }, + "ASSEMBLY-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 6.68, + "min": 6.68, + "max": 6.68, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 1.41e-06, + "min": 1.41e-06, + "max": 1.41e-06, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 68.6, + "min": 68.6, + "max": 68.6, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 1 + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "CPU-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 250, + "min": 250, + "max": 250, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 12000, + "min": 701.8, + "max": 34530 + } + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.04087, + "min": 0.04087, + "max": 0.04087, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 0.002, + "min": 0.000404, + "max": 0.008103 + } + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 3428, + "min": 3428, + "max": 3428, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 400000, + "min": 396.7, + "max": 14280000, + "warnings": [ + "Uncertainty from technical characteristics is very important. Results should be interpreted with caution (see min and max values)" + ] + } + } + }, + "units": { + "value": 2, + "status": "INPUT" + }, + "core_units": { + "value": 24, + "status": "INPUT" + }, + "die_size_per_core": { + "value": 245, + "status": "INPUT", + "unit": "mm2" + }, + "die_size": { + "value": 5880, + "status": "COMPLETED", + "unit": "mm2", + "source": "die_size_per_core*core_units", + "min": 5880, + "max": 5880 + }, + "duration": { + "value": 35040, + "unit": "hours" + }, + "avg_power": { + "value": 435.4, + "status": "COMPLETED", + "unit": "W", + "min": 435.4, + "max": 435.4 + }, + "time_workload": { + "value": 70, + "status": "INPUT", + "unit": "%" + }, + "usage_location": { + "value": "EEE", + "status": "DEFAULT", + "unit": "CodSP3 - NCS Country Codes - NATO" + }, + "use_time_ratio": { + "value": 1, + "status": "ARCHETYPE", + "unit": "/1", + "min": 1, + "max": 1 + }, + "hours_life_time": { + "value": 35040, + "status": "COMPLETED", + "unit": "hours", + "source": "from device", + "min": 35040, + "max": 35040 + }, + "params": { + "value": { + "a": 171.2, + "b": 0.0354, + "c": 36.89, + "d": -10.13 + }, + "status": "ARCHETYPE" + }, + "gwp_factor": { + "value": 0.38, + "status": "DEFAULT", + "unit": "kg CO2eq/kWh", + "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", + "min": 0.023, + "max": 1.13161 + }, + "adp_factor": { + "value": 6.42317e-08, + "status": "DEFAULT", + "unit": "kg Sbeq/kWh", + "source": "ADEME Base IMPACTS ®", + "min": 1.324e-08, + "max": 2.65575e-07 + }, + "pe_factor": { + "value": 12.873, + "status": "DEFAULT", + "unit": "MJ/kWh", + "source": "ADPf / (1-%renewable_energy)", + "min": 0.013, + "max": 468.15 + } + }, + "RAM-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 534.6, + "min": 534.6, + "max": 534.6, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 17000, + "min": 1055, + "max": 51890 + } + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.0338, + "min": 0.0338, + "max": 0.0338, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 0.003, + "min": 0.0006071, + "max": 0.01218 + } + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 6745, + "min": 6745, + "max": 6745, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 1000000, + "min": 596.1, + "max": 21470000 + } + } + }, + "units": { + "value": 12, + "status": "INPUT" + }, + "capacity": { + "value": 32, + "status": "INPUT", + "unit": "GB" + }, + "density": { + "value": 1.79, + "status": "INPUT", + "unit": "GB/cm2" + }, + "duration": { + "value": 35040, + "unit": "hours" + }, + "avg_power": { + "value": 109.05599999999998, + "status": "COMPLETED", + "unit": "W", + "min": 109.05599999999998, + "max": 109.05599999999998 + }, + "time_workload": { + "value": 70, + "status": "INPUT", + "unit": "%" + }, + "usage_location": { + "value": "EEE", + "status": "DEFAULT", + "unit": "CodSP3 - NCS Country Codes - NATO" + }, + "use_time_ratio": { + "value": 1, + "status": "ARCHETYPE", + "unit": "/1", + "min": 1, + "max": 1 + }, + "hours_life_time": { + "value": 35040, + "status": "COMPLETED", + "unit": "hours", + "source": "from device", + "min": 35040, + "max": 35040 + }, + "params": { + "value": { + "a": 9.088 + }, + "status": "COMPLETED", + "source": "(ram_electrical_factor_per_go : 0.284) * (ram_capacity: 32) " + }, + "gwp_factor": { + "value": 0.38, + "status": "DEFAULT", + "unit": "kg CO2eq/kWh", + "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", + "min": 0.023, + "max": 1.13161 + }, + "adp_factor": { + "value": 6.42317e-08, + "status": "DEFAULT", + "unit": "kg Sbeq/kWh", + "source": "ADEME Base IMPACTS ®", + "min": 1.324e-08, + "max": 2.65575e-07 + }, + "pe_factor": { + "value": 12.873, + "status": "DEFAULT", + "unit": "MJ/kWh", + "source": "ADPf / (1-%renewable_energy)", + "min": 0.013, + "max": 468.15 + } + }, + "SSD-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 23.73, + "min": 23.73, + "max": 23.73, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.001061, + "min": 0.001061, + "max": 0.001061, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 292.7, + "min": 292.7, + "max": 292.7, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "INPUT" + }, + "capacity": { + "value": 400, + "status": "INPUT", + "unit": "GB" + }, + "density": { + "value": 50.6, + "status": "INPUT", + "unit": "GB/cm2" + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "POWER_SUPPLY-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 145.3, + "min": 145.3, + "max": 145.3, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.04963, + "min": 0.04963, + "max": 0.04963, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 2105, + "min": 2105, + "max": 2105, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 2, + "status": "INPUT" + }, + "unit_weight": { + "value": 2.99, + "status": "INPUT", + "unit": "kg" + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "CASE-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 150, + "min": 85.9, + "max": 150, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.0202, + "min": 0.0202, + "max": 0.02767, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 2200, + "min": 1229, + "max": 2200, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 1 + }, + "case_type": { + "value": "rack", + "status": "ARCHETYPE" + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "MOTHERBOARD-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 66.1, + "min": 66.1, + "max": 66.1, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.00369, + "min": 0.00369, + "max": 0.00369, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 836, + "min": 836, + "max": 836, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 1 + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "avg_power": { + "value": 724.1264799999999, + "status": "COMPLETED", + "unit": "W", + "min": 653.3471999999998, + "max": 871.1295999999999 + }, + "time_workload": { + "value": 70, + "status": "INPUT", + "unit": "%" + }, + "usage_location": { + "value": "FRA", + "status": "INPUT", + "unit": "CodSP3 - NCS Country Codes - NATO" + }, + "use_time_ratio": { + "value": 1, + "status": "ARCHETYPE", + "unit": "/1", + "min": 1, + "max": 1 + }, + "hours_life_time": { + "value": 35040, + "status": "COMPLETED", + "unit": "hours", + "source": "from device", + "min": 35040, + "max": 35040 + }, + "other_consumption_ratio": { + "value": 0.33, + "status": "ARCHETYPE", + "unit": "ratio /1", + "min": 0.2, + "max": 0.6 + }, + "gwp_factor": { + "value": 0.38, + "status": "DEFAULT", + "unit": "kg CO2eq/kWh", + "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", + "min": 0.023, + "max": 1.13161 + }, + "adp_factor": { + "value": 6.42317e-08, + "status": "DEFAULT", + "unit": "kg Sbeq/kWh", + "source": "ADEME Base IMPACTS ®", + "min": 1.324e-08, + "max": 2.65575e-07 + }, + "pe_factor": { + "value": 12.873, + "status": "DEFAULT", + "unit": "MJ/kWh", + "source": "ADPf / (1-%renewable_energy)", + "min": 0.013, + "max": 468.15 + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 1 + } + } +} diff --git a/boagent/tests/mocks/formatted_scaphandre.json b/boagent/tests/mocks/formatted_scaphandre.json new file mode 100644 index 0000000..55580f6 --- /dev/null +++ b/boagent/tests/mocks/formatted_scaphandre.json @@ -0,0 +1 @@ +[{"host":{"consumption":9510593.0,"timestamp":1709569036.7701147,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312873984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":118741.05,"timestamp":1709569036.7699473,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":67852.03,"timestamp":1709569036.7699215,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":33926.016,"timestamp":1709569036.7699084,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":33926.016,"timestamp":1709569036.7699292,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":22617.344,"timestamp":1709569036.7698824,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699177,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699306,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699432,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699645,"container":null},{"exe":"","cmdline":"/usr/libexec/gnome-terminal-server","pid":6747,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.769976,"container":null}],"sockets":[{"id":0,"consumption":2280155.0,"domains":[{"name":"uncore","consumption":4760.0,"timestamp":1709569036.687679},{"name":"core","consumption":363592.0,"timestamp":1709569036.687624},{"name":"dram","consumption":650426.0,"timestamp":1709569036.6875672}],"timestamp":1709569036.6864183}]},{"host":{"consumption":10326187.0,"timestamp":1709569038.8445754,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312808448","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":138775.89,"timestamp":1709569038.8444579,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":44155.965,"timestamp":1709569038.844482,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":37847.97,"timestamp":1709569038.8444862,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31539.975,"timestamp":1709569038.8444736,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":12615.989,"timestamp":1709569038.8444946,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.844463,"container":null},{"exe":"","cmdline":"/usr/bin/dbus-daemon--session--address=systemd:--nofork--nopidfile--systemd-activation--syslog-only","pid":1667,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.84447,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.844479,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.8444872,"container":null},{"exe":"","cmdline":"","pid":263930,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.8444917,"container":null}],"sockets":[{"id":0,"consumption":2565381.0,"domains":[{"name":"uncore","consumption":11099.0,"timestamp":1709569038.7827907},{"name":"core","consumption":519459.0,"timestamp":1709569038.7827168},{"name":"dram","consumption":699014.0,"timestamp":1709569038.7826238}],"timestamp":1709569038.7813084}]},{"host":{"consumption":11958290.0,"timestamp":1709569040.9484453,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312738816","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":196994.4,"timestamp":1709569040.9481177,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":145921.8,"timestamp":1709569040.9481637,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":131329.61,"timestamp":1709569040.948196,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":51072.625,"timestamp":1709569040.9481723,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":29184.355,"timestamp":1709569040.9481483,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":14592.178,"timestamp":1709569040.9481866,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481342,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.948174,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481745,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481938,"container":null}],"sockets":[{"id":0,"consumption":3843814.0,"domains":[{"name":"uncore","consumption":114992.0,"timestamp":1709569040.854405},{"name":"core","consumption":1617998.0,"timestamp":1709569040.854287},{"name":"dram","consumption":905649.0,"timestamp":1709569040.8541002}],"timestamp":1709569040.8530734}]},{"host":{"consumption":10766276.0,"timestamp":1709569043.045374,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312673280","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":109204.47,"timestamp":1709569043.0450184,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":96356.88,"timestamp":1709569043.0450678,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":70661.71,"timestamp":1709569043.0449176,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":51390.34,"timestamp":1709569043.045032,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":25695.17,"timestamp":1709569043.0449913,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":19271.377,"timestamp":1709569043.0450542,"container":null},{"exe":"","cmdline":"","pid":263930,"resources_usage":null,"consumption":12847.585,"timestamp":1709569043.0450523,"container":null},{"exe":"","cmdline":"/usr/libexec/ibus-engine-simple","pid":2706,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0449593,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0450757,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0451076,"container":null}],"sockets":[{"id":0,"consumption":2925740.0,"domains":[{"name":"uncore","consumption":59052.0,"timestamp":1709569042.9618628},{"name":"core","consumption":870351.0,"timestamp":1709569042.9616694},{"name":"dram","consumption":763613.0,"timestamp":1709569042.9615138}],"timestamp":1709569042.9604695}]},{"host":{"consumption":12795838.0,"timestamp":1709569045.136388,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312599552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":664518.2,"timestamp":1709569045.1362245,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":115904.33,"timestamp":1709569045.13612,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":100450.42,"timestamp":1709569045.136108,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":77269.555,"timestamp":1709569045.1361601,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":46361.73,"timestamp":1709569045.1361682,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":30907.82,"timestamp":1709569045.1361806,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":23180.865,"timestamp":1709569045.1361425,"container":null},{"exe":"","cmdline":"/usr/libexec/ibus-engine-simple","pid":2706,"resources_usage":null,"consumption":15453.91,"timestamp":1709569045.1361227,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7726.955,"timestamp":1709569045.1361263,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":7726.955,"timestamp":1709569045.1361704,"container":null}],"sockets":[{"id":0,"consumption":4255760.0,"domains":[{"name":"uncore","consumption":91691.0,"timestamp":1709569045.0613444},{"name":"core","consumption":1964961.0,"timestamp":1709569045.0612833},{"name":"dram","consumption":831560.0,"timestamp":1709569045.0612147}],"timestamp":1709569045.0603004}]},{"host":{"consumption":10793162.0,"timestamp":1709569047.2175863,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312529920","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":117387.87,"timestamp":1709569047.2174373,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":78258.57,"timestamp":1709569047.2173684,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":58693.934,"timestamp":1709569047.2174082,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":39129.285,"timestamp":1709569047.2173939,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":39129.285,"timestamp":1709569047.2174149,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":13043.097,"timestamp":1709569047.2174313,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2173736,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2174056,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.21742,"container":null},{"exe":"","cmdline":"","pid":263932,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2174532,"container":null}],"sockets":[{"id":0,"consumption":3052707.0,"domains":[{"name":"uncore","consumption":45126.0,"timestamp":1709569047.1469367},{"name":"core","consumption":1034363.0,"timestamp":1709569047.1468956},{"name":"dram","consumption":728187.0,"timestamp":1709569047.146852}],"timestamp":1709569047.1459458}]},{"host":{"consumption":17104786.0,"timestamp":1709569049.3226047,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312448000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1625531.5,"timestamp":1709569049.3221166,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID330-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{37eaeb80-2d9e-484a-af74-336f513a2f16}3065truetab","pid":271111,"resources_usage":null,"consumption":608263.4,"timestamp":1709569049.3221295,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":314618.97,"timestamp":1709569049.321927,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":125847.6,"timestamp":1709569049.3220081,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":83898.4,"timestamp":1709569049.32202,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":41949.2,"timestamp":1709569049.32197,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3219535,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3219838,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3220413,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":10487.3,"timestamp":1709569049.3219476,"container":null}],"sockets":[{"id":0,"consumption":7401117.0,"domains":[{"name":"uncore","consumption":212689.0,"timestamp":1709569049.2283125},{"name":"core","consumption":4861941.0,"timestamp":1709569049.2282119},{"name":"dram","consumption":1089513.0,"timestamp":1709569049.2281222}],"timestamp":1709569049.226694}]},{"host":{"consumption":18876486.0,"timestamp":1709569051.379631,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312312832","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1823363.4,"timestamp":1709569051.379438,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID331-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{1b207027-ae58-45d6-a5cb-ea6d45785f0c}3065truetab","pid":271887,"resources_usage":null,"consumption":911681.7,"timestamp":1709569051.37943,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":350646.78,"timestamp":1709569051.3793063,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":268829.22,"timestamp":1709569051.3793647,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":70129.36,"timestamp":1709569051.3793387,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":58441.133,"timestamp":1709569051.3793726,"container":null},{"exe":"","cmdline":"","pid":88,"resources_usage":null,"consumption":46752.906,"timestamp":1709569051.3793633,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35064.68,"timestamp":1709569051.3793492,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":23376.453,"timestamp":1709569051.379325,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":23376.453,"timestamp":1709569051.3793294,"container":null}],"sockets":[{"id":0,"consumption":8338159.0,"domains":[{"name":"uncore","consumption":243599.0,"timestamp":1709569051.3342211},{"name":"core","consumption":5475930.0,"timestamp":1709569051.3340466},{"name":"dram","consumption":1159400.0,"timestamp":1709569051.3338134}],"timestamp":1709569051.3327785}]},{"host":{"consumption":11250187.0,"timestamp":1709569053.4751475,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312394752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":309827.7,"timestamp":1709569053.4748783,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":110160.95,"timestamp":1709569053.4749343,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":61965.53,"timestamp":1709569053.4748945,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":48195.414,"timestamp":1709569053.4749434,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":41310.355,"timestamp":1709569053.4749424,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":34425.297,"timestamp":1709569053.4749196,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":13770.119,"timestamp":1709569053.4748962,"container":null},{"exe":"","cmdline":"","pid":41,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.474887,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.4748998,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.474945,"container":null}],"sockets":[{"id":0,"consumption":3172866.0,"domains":[{"name":"uncore","consumption":82698.0,"timestamp":1709569053.3911366},{"name":"core","consumption":947798.0,"timestamp":1709569053.391068},{"name":"dram","consumption":817260.0,"timestamp":1709569053.3910155}],"timestamp":1709569053.389935}]},{"host":{"consumption":11651021.0,"timestamp":1709569055.5661595,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312243200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":538284.25,"timestamp":1709569055.5659678,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":148736.44,"timestamp":1709569055.5658362,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":84992.25,"timestamp":1709569055.5658932,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42496.125,"timestamp":1709569055.565902,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28330.748,"timestamp":1709569055.5658772,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":14165.374,"timestamp":1709569055.5658662,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658436,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658581,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658886,"container":null},{"exe":"","cmdline":"","pid":23,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658937,"container":null}],"sockets":[{"id":0,"consumption":3413054.0,"domains":[{"name":"uncore","consumption":89927.0,"timestamp":1709569055.4883645},{"name":"core","consumption":1173133.0,"timestamp":1709569055.4882367},{"name":"dram","consumption":850286.0,"timestamp":1709569055.4880445}],"timestamp":1709569055.4860508}]},{"host":{"consumption":19636240.0,"timestamp":1709569057.6362855,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312181760","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1849529.5,"timestamp":1709569057.6361952,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":816675.44,"timestamp":1709569057.6361094,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":360297.97,"timestamp":1709569057.6360965,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":120099.336,"timestamp":1709569057.636142,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":96079.46,"timestamp":1709569057.6361227,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":72059.59,"timestamp":1709569057.6361485,"container":null},{"exe":"","cmdline":"","pid":88,"resources_usage":null,"consumption":60049.668,"timestamp":1709569057.6361413,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":36029.797,"timestamp":1709569057.636116,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":24019.865,"timestamp":1709569057.6361303,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID320-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{139102ea-3b73-434c-8e10-7c94bb08134f}3065truetab","pid":257812,"resources_usage":null,"consumption":12009.933,"timestamp":1709569057.6361134,"container":null}],"sockets":[{"id":0,"consumption":8953263.0,"domains":[{"name":"uncore","consumption":191909.0,"timestamp":1709569057.57598},{"name":"core","consumption":6353826.0,"timestamp":1709569057.5759137},{"name":"dram","consumption":1152379.0,"timestamp":1709569057.5758448}],"timestamp":1709569057.5751684}]},{"host":{"consumption":14328843.0,"timestamp":1709569059.7370303,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312087552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":788261.56,"timestamp":1709569059.736839,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":262753.84,"timestamp":1709569059.7367055,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":183927.69,"timestamp":1709569059.7367206,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":175169.23,"timestamp":1709569059.7367651,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":52550.773,"timestamp":1709569059.7367737,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":52550.773,"timestamp":1709569059.7367744,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35033.848,"timestamp":1709569059.7367482,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":26275.387,"timestamp":1709569059.7367373,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":17516.924,"timestamp":1709569059.7367234,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":17516.924,"timestamp":1709569059.7367277,"container":null}],"sockets":[{"id":0,"consumption":5606524.0,"domains":[{"name":"uncore","consumption":163963.0,"timestamp":1709569059.6464283},{"name":"core","consumption":3117124.0,"timestamp":1709569059.64638},{"name":"dram","consumption":1008404.0,"timestamp":1709569059.646328}],"timestamp":1709569059.6453197}]},{"host":{"consumption":10798938.0,"timestamp":1709569061.834314,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312005632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":90856.45,"timestamp":1709569061.8340003,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":90856.45,"timestamp":1709569061.8340604,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":58407.723,"timestamp":1709569061.8340156,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38938.48,"timestamp":1709569061.83407,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32448.734,"timestamp":1709569061.8340447,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340232,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340328,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340566,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.834072,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340888,"container":null}],"sockets":[{"id":0,"consumption":3002282.0,"domains":[{"name":"uncore","consumption":59301.0,"timestamp":1709569061.7501621},{"name":"core","consumption":882674.0,"timestamp":1709569061.7499254},{"name":"dram","consumption":758935.0,"timestamp":1709569061.749683}],"timestamp":1709569061.7484915}]},{"host":{"consumption":11771431.0,"timestamp":1709569063.9412537,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311923712","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":184705.62,"timestamp":1709569063.9409318,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":163393.42,"timestamp":1709569063.9409485,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":106560.94,"timestamp":1709569063.9409466,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":85248.75,"timestamp":1709569063.9409919,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":71040.625,"timestamp":1709569063.9409637,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":49728.434,"timestamp":1709569063.9410012,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28416.248,"timestamp":1709569063.9409754,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.940943,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.9409544,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.9409957,"container":null}],"sockets":[{"id":0,"consumption":3543949.0,"domains":[{"name":"uncore","consumption":120076.0,"timestamp":1709569063.8469055},{"name":"core","consumption":1209405.0,"timestamp":1709569063.8467765},{"name":"dram","consumption":826656.0,"timestamp":1709569063.8466294}],"timestamp":1709569063.8455148}]},{"host":{"consumption":10726351.0,"timestamp":1709569066.0453446,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311866368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":172799.2,"timestamp":1709569066.0451372,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":115199.48,"timestamp":1709569066.0451686,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":95999.56,"timestamp":1709569066.0450618,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":89599.59,"timestamp":1709569066.0450773,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38399.83,"timestamp":1709569066.0451465,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31999.854,"timestamp":1709569066.045109,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0450845,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.045164,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0451667,"container":null},{"exe":"","cmdline":"","pid":249501,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0451684,"container":null}],"sockets":[{"id":0,"consumption":2860620.0,"domains":[{"name":"uncore","consumption":70666.0,"timestamp":1709569065.9534726},{"name":"core","consumption":729100.0,"timestamp":1709569065.9532387},{"name":"dram","consumption":774626.0,"timestamp":1709569065.9529963}],"timestamp":1709569065.9517043}]},{"host":{"consumption":10230392.0,"timestamp":1709569068.1362233,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311792640","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":116324.03,"timestamp":1709569068.135931,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":91834.76,"timestamp":1709569068.1359856,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":48978.535,"timestamp":1709569068.13601,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":36733.902,"timestamp":1709569068.135946,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":36733.902,"timestamp":1709569068.135971,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359522,"container":null},{"exe":"","cmdline":"/usr/libexec/fwupd/fwupd","pid":2916,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359785,"container":null},{"exe":"","cmdline":"/usr/libexec/gvfs-afc-volume-monitor","pid":2457,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359835,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359892,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1360116,"container":null}],"sockets":[{"id":0,"consumption":2688432.0,"domains":[{"name":"uncore","consumption":84259.0,"timestamp":1709569068.057044},{"name":"core","consumption":588952.0,"timestamp":1709569068.0569935},{"name":"dram","consumption":772851.0,"timestamp":1709569068.0569386}],"timestamp":1709569068.0558925}]},{"host":{"consumption":11706772.0,"timestamp":1709569070.2046812,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311714816","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":165288.98,"timestamp":1709569070.204433,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":158102.52,"timestamp":1709569070.2044551,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":50305.344,"timestamp":1709569070.2044961,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":50305.344,"timestamp":1709569070.2045052,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28745.91,"timestamp":1709569070.2044826,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":14372.955,"timestamp":1709569070.204463,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2044728,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2044933,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2045171,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2045195,"container":null}],"sockets":[{"id":0,"consumption":3013910.0,"domains":[{"name":"uncore","consumption":97346.0,"timestamp":1709569070.1455407},{"name":"core","consumption":787681.0,"timestamp":1709569070.1454976},{"name":"dram","consumption":804376.0,"timestamp":1709569070.1454227}],"timestamp":1709569070.1451373}]},{"host":{"consumption":11031279.0,"timestamp":1709569072.2848258,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311690240","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":80864.6,"timestamp":1709569072.2845564,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":74125.89,"timestamp":1709569072.2845726,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":47171.02,"timestamp":1709569072.2846088,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":47171.02,"timestamp":1709569072.2846167,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":33693.586,"timestamp":1709569072.284595,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.2845688,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284578,"container":null},{"exe":"","cmdline":"/usr/sbin/irqbalance--foreground","pid":584,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284602,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284612,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.2846181,"container":null}],"sockets":[{"id":0,"consumption":3685854.0,"domains":[{"name":"uncore","consumption":70979.0,"timestamp":1709569072.2161698},{"name":"core","consumption":1516305.0,"timestamp":1709569072.2159224},{"name":"dram","consumption":774430.0,"timestamp":1709569072.2156763}],"timestamp":1709569072.2141333}]},{"host":{"consumption":10188085.0,"timestamp":1709569074.3809662,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311583744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":129274.79,"timestamp":1709569074.3807373,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":123118.86,"timestamp":1709569074.3806627,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":67715.37,"timestamp":1709569074.3807063,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":61559.43,"timestamp":1709569074.3806434,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":36935.652,"timestamp":1709569074.380661,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":36935.652,"timestamp":1709569074.3807158,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":30779.715,"timestamp":1709569074.3806891,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.380702,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.3807323,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.3807428,"container":null}],"sockets":[{"id":0,"consumption":2669277.0,"domains":[{"name":"uncore","consumption":2377.0,"timestamp":1709569074.2956257},{"name":"core","consumption":635943.0,"timestamp":1709569074.295518},{"name":"dram","consumption":693138.0,"timestamp":1709569074.2953844}],"timestamp":1709569074.2940917}]},{"host":{"consumption":10273173.0,"timestamp":1709569076.4840806,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311133184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":192311.81,"timestamp":1709569076.4837523,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":62036.066,"timestamp":1709569076.4836805,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":62036.066,"timestamp":1709569076.4836984,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":49628.85,"timestamp":1709569076.4837635,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31018.033,"timestamp":1709569076.4837308,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":12407.213,"timestamp":1709569076.4837837,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837067,"container":null},{"exe":"","cmdline":"","pid":52,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837546,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837568,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837873,"container":null}],"sockets":[{"id":0,"consumption":2682165.0,"domains":[{"name":"uncore","consumption":34426.0,"timestamp":1709569076.3929577},{"name":"core","consumption":624540.0,"timestamp":1709569076.3927567},{"name":"dram","consumption":717227.0,"timestamp":1709569076.392554}],"timestamp":1709569076.3915682}]},{"host":{"consumption":9607585.0,"timestamp":1709569078.5887036,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311055360","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":126189.17,"timestamp":1709569078.5884168,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":120453.305,"timestamp":1709569078.5883787,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":34415.23,"timestamp":1709569078.5883904,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28679.357,"timestamp":1709569078.588356,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5883718,"container":null},{"exe":"","cmdline":"/snap/snap-store/959/usr/bin/snap-store--gapplication-service","pid":2654,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.588389,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5883996,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.588423,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5884507,"container":null},{"exe":"","cmdline":"","pid":263932,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5884538,"container":null}],"sockets":[{"id":0,"consumption":2308325.0,"domains":[{"name":"uncore","consumption":0.0,"timestamp":1709569078.4969332},{"name":"core","consumption":349548.0,"timestamp":1709569078.49682},{"name":"dram","consumption":659184.0,"timestamp":1709569078.496608}],"timestamp":1709569078.495577}]},{"host":{"consumption":11781116.0,"timestamp":1709569080.690352,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310977536","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":183528.48,"timestamp":1709569080.6900492,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":127058.164,"timestamp":1709569080.689976,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":49411.51,"timestamp":1709569080.6899953,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42352.727,"timestamp":1709569080.6900613,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28235.15,"timestamp":1709569080.690028,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900034,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.690054,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900635,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900702,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900811,"container":null}],"sockets":[{"id":0,"consumption":3656251.0,"domains":[{"name":"uncore","consumption":100027.0,"timestamp":1709569080.6002367},{"name":"core","consumption":1471737.0,"timestamp":1709569080.6002066},{"name":"dram","consumption":835779.0,"timestamp":1709569080.6001685}],"timestamp":1709569080.5997374}]},{"host":{"consumption":10751426.0,"timestamp":1709569082.7966828,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310912000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":129223.875,"timestamp":1709569082.7962778,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":129223.875,"timestamp":1709569082.796353,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":45228.355,"timestamp":1709569082.796296,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38767.16,"timestamp":1709569082.796366,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32305.969,"timestamp":1709569082.7963324,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":19383.58,"timestamp":1709569082.7963855,"container":null},{"exe":"","cmdline":"/usr/libexec/xdg-desktop-portal","pid":2741,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.796281,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.7962918,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.796305,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.7963483,"container":null}],"sockets":[{"id":0,"consumption":2932212.0,"domains":[{"name":"uncore","consumption":108001.0,"timestamp":1709569082.703656},{"name":"core","consumption":754167.0,"timestamp":1709569082.7034225},{"name":"dram","consumption":809091.0,"timestamp":1709569082.7031865}],"timestamp":1709569082.701941}]},{"host":{"consumption":11675751.0,"timestamp":1709569084.8753462,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310842368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":162752.89,"timestamp":1709569084.8750737,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":120295.625,"timestamp":1709569084.875089,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":84914.555,"timestamp":1709569084.8751278,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":56609.703,"timestamp":1709569084.8750875,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42457.277,"timestamp":1709569084.8751369,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35381.062,"timestamp":1709569084.8751128,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":14152.426,"timestamp":1709569084.8750942,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.875102,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.8751385,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.8751504,"container":null}],"sockets":[{"id":0,"consumption":3311707.0,"domains":[{"name":"uncore","consumption":114419.0,"timestamp":1709569084.8064413},{"name":"core","consumption":1057562.0,"timestamp":1709569084.806423},{"name":"dram","consumption":842802.0,"timestamp":1709569084.8063824}],"timestamp":1709569084.8060837}]},{"host":{"consumption":10690528.0,"timestamp":1709569086.9738417,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310768640","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":162470.03,"timestamp":1709569086.9735067,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":142973.62,"timestamp":1709569086.9735715,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":64988.016,"timestamp":1709569086.9735236,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":45491.605,"timestamp":1709569086.973582,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32494.008,"timestamp":1709569086.973554,"container":null},{"exe":"","cmdline":"","pid":41,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735167,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.973531,"container":null},{"exe":"","cmdline":"/usr/bin/containerd-shim-runc-v2-namespacemoby-id4daf484270eace43a1e866a0d0d3505b7601e702300946af07a68e2493d97644-address/run/containerd/containerd.sock","pid":240526,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735382,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735672,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.973575,"container":null}],"sockets":[{"id":0,"consumption":2990252.0,"domains":[{"name":"uncore","consumption":115894.0,"timestamp":1709569086.8877308},{"name":"core","consumption":789509.0,"timestamp":1709569086.8874633},{"name":"dram","consumption":821831.0,"timestamp":1709569086.887196}],"timestamp":1709569086.8857727}]},{"host":{"consumption":10444900.0,"timestamp":1709569089.0750725,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310703104","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":120566.9,"timestamp":1709569089.0747454,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":107875.65,"timestamp":1709569089.0748055,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":57110.637,"timestamp":1709569089.0747604,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":44419.383,"timestamp":1709569089.0748153,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":25382.504,"timestamp":1709569089.0747883,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":19036.877,"timestamp":1709569089.0748348,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0747678,"container":null},{"exe":"","cmdline":"","pid":269914,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0747864,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0748093,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.074817,"container":null}],"sockets":[{"id":0,"consumption":2727262.0,"domains":[{"name":"uncore","consumption":84809.0,"timestamp":1709569088.9848561},{"name":"core","consumption":582620.0,"timestamp":1709569088.9847484},{"name":"dram","consumption":778216.0,"timestamp":1709569088.9846327}],"timestamp":1709569088.9836576}]},{"host":{"consumption":10307967.0,"timestamp":1709569091.1843927,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310633472","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":123745.1,"timestamp":1709569091.1839895,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":111370.59,"timestamp":1709569091.1840603,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":68059.81,"timestamp":1709569091.184008,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":43310.79,"timestamp":1709569091.1840723,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":30936.275,"timestamp":1709569091.1840403,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.184004,"container":null},{"exe":"","cmdline":"@dbus-daemon--system--address=systemd:--nofork--nopidfile--systemd-activation--syslog-only","pid":574,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840155,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840165,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840816,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840973,"container":null}],"sockets":[{"id":0,"consumption":2666511.0,"domains":[{"name":"uncore","consumption":67738.0,"timestamp":1709569091.0878828},{"name":"core","consumption":528703.0,"timestamp":1709569091.087651},{"name":"dram","consumption":755137.0,"timestamp":1709569091.087412}],"timestamp":1709569091.086237}]},{"host":{"consumption":10513871.0,"timestamp":1709569093.2920067,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310567936","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":188533.25,"timestamp":1709569093.2917347,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":113119.95,"timestamp":1709569093.2916732,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":56559.977,"timestamp":1709569093.2917452,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":43991.09,"timestamp":1709569093.2916896,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":37706.652,"timestamp":1709569093.2917178,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":18853.326,"timestamp":1709569093.2917445,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":12568.884,"timestamp":1709569093.2916968,"container":null},{"exe":"","cmdline":"","pid":269914,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.2917151,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.2917309,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.291747,"container":null}],"sockets":[{"id":0,"consumption":2745264.0,"domains":[{"name":"uncore","consumption":91976.0,"timestamp":1709569093.198776},{"name":"core","consumption":632737.0,"timestamp":1709569093.1986213},{"name":"dram","consumption":772951.0,"timestamp":1709569093.1985009}],"timestamp":1709569093.1971552}]}] diff --git a/boagent/tests/mocks/hardware_data.json b/boagent/tests/mocks/hardware_data.json new file mode 100644 index 0000000..1e9bae9 --- /dev/null +++ b/boagent/tests/mocks/hardware_data.json @@ -0,0 +1,219 @@ +{ + "disks": [ + { + "capacity": 476, + "manufacturer": "samsung", + "type": "ssd" + } + ], + "cpus": [ + { + "vendor": "AuthenticAMD", + "name": "AMD Ryzen 5 5600H with Radeon Graphics \u0000", + "microarch": [ + "x86_64", + "" + ], + "vector_instructions": { + "sse": "Yes", + "sse2": "Yes", + "sse3": "Yes", + "ssse3": "Yes", + "sse4.1": "Yes", + "sse4.2": "Yes", + "sse4a": "Yes", + "avx": "Yes", + "avx2": "--", + "bmi1": "--", + "bmi2": "--" + }, + "cpu_info": { + "python_version": "3.10.12.final.0 (64 bit)", + "cpuinfo_version": [ + 9, + 0, + 0 + ], + "cpuinfo_version_string": "9.0.0", + "arch": "X86_64", + "bits": 64, + "count": 12, + "arch_string_raw": "x86_64", + "vendor_id_raw": "AuthenticAMD", + "brand_raw": "AMD Ryzen 5 5600H with Radeon Graphics", + "hz_advertised_friendly": "4.2383 GHz", + "hz_actual_friendly": "4.2383 GHz", + "hz_advertised": [ + 4238303000, + 0 + ], + "hz_actual": [ + 4238303000, + 0 + ], + "model": 80, + "family": 25, + "flags": [ + "3dnowprefetch", + "abm", + "adx", + "aes", + "aperfmperf", + "apic", + "arat", + "avic", + "avx", + "avx2", + "bmi1", + "bmi2", + "bpext", + "cat_l3", + "cdp_l3", + "clflush", + "clflushopt", + "clwb", + "clzero", + "cmov", + "cmp_legacy", + "constant_tsc", + "cpb", + "cppc", + "cpuid", + "cqm", + "cqm_llc", + "cqm_mbm_local", + "cqm_mbm_total", + "cqm_occup_llc", + "cr8_legacy", + "cx16", + "cx8", + "dbx", + "de", + "decodeassists", + "erms", + "extapic", + "extd_apicid", + "f16c", + "flushbyasid", + "fma", + "fpu", + "fsgsbase", + "fsrm", + "fxsr", + "fxsr_opt", + "ht", + "hw_pstate", + "ibpb", + "ibrs", + "ibs", + "invpcid", + "irperf", + "lahf_lm", + "lbrv", + "lm", + "mba", + "mca", + "mce", + "misalignsse", + "mmx", + "mmxext", + "monitor", + "movbe", + "msr", + "mtrr", + "mwaitx", + "nonstop_tsc", + "nopl", + "npt", + "nrip_save", + "nx", + "ospke", + "osvw", + "osxsave", + "overflow_recov", + "pae", + "pat", + "pausefilter", + "pci_l2i", + "pclmulqdq", + "pdpe1gb", + "perfctr_core", + "perfctr_llc", + "perfctr_nb", + "pfthreshold", + "pge", + "pku", + "pni", + "popcnt", + "pqe", + "pqm", + "pse", + "pse36", + "rapl", + "rdpid", + "rdpru", + "rdrand", + "rdrnd", + "rdseed", + "rdt_a", + "rdtscp", + "rep_good", + "sep", + "sha", + "sha_ni", + "skinit", + "smap", + "smca", + "smep", + "ssbd", + "sse", + "sse2", + "sse4_1", + "sse4_2", + "sse4a", + "ssse3", + "stibp", + "succor", + "svm", + "svm_lock", + "syscall", + "tce", + "topoext", + "tsc", + "tsc_scale", + "umip", + "v_spec_ctrl", + "v_vmsave_vmload", + "vaes", + "vgif", + "vmcb_clean", + "vme", + "vmmcall", + "vpclmulqdq", + "wbnoinvd", + "wdt", + "xgetbv1", + "xsave", + "xsavec", + "xsaveerptr", + "xsaveopt", + "xsaves" + ], + "l3_cache_size": 524288, + "l2_cache_size": 3145728, + "l1_data_cache_size": 196608, + "l1_instruction_cache_size": 196608, + "l2_cache_line_size": 512, + "l2_cache_associativity": 6 + }, + "core_units": 12, + "family": "X86_64" + } + ], + "rams": [ + { + "capacity": 5 + } + ], + "mother_board": {} +} \ No newline at end of file diff --git a/boagent/tests/mocks/power_data.json b/boagent/tests/mocks/power_data.json new file mode 100644 index 0000000..3ea2511 --- /dev/null +++ b/boagent/tests/mocks/power_data.json @@ -0,0 +1 @@ +{"host":{"consumption":3497087.0,"timestamp":1709233432.2454963,"components":{"disks":[{"disk_type":"Unknown","disk_mount_point":"/var/lib/docker/overlay2/aba8612d08b66793c43d595cf34214586e7164ec614567be94eb1d9a4dce8692/merged","disk_is_removable":false,"disk_file_system":"overlay","disk_total_bytes":"153681051648","disk_available_bytes":"10897473536","disk_name":"overlay"}]}},"consumers":[{"exe":"/home/virgilisdead/scaphandre/scaphandre/target/debug/scaphandre","cmdline":"./scaphandrejson-t15-fpower_data.json","pid":530234,"resources_usage":null,"consumption":17299.137,"timestamp":1709233432.2441494,"container":null},{"exe":"/snap/firefox/3836/usr/lib/firefox/firefox","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen43591-prefMapSize239302-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{5a0d652d-0e4f-488b-b82f-eb8d726a9349}509764truetab","pid":510101,"resources_usage":null,"consumption":13307.028,"timestamp":1709233432.2443242,"container":null},{"exe":"/snap/firefox/3836/usr/lib/firefox/firefox","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID10-isForBrowser-prefsLen31854-prefMapSize239302-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{763c4727-4311-4de1-bd5e-2321685c6208}509764truetab","pid":510529,"resources_usage":null,"consumption":11976.325,"timestamp":1709233432.2445002,"container":null},{"exe":"/snap/firefox/3836/usr/lib/firefox/firefox","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":509764,"resources_usage":null,"consumption":9314.921,"timestamp":1709233432.2442775,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1796,"resources_usage":null,"consumption":6653.514,"timestamp":1709233432.2442486,"container":null},{"exe":"/snap/firefox/3836/usr/lib/firefox/firefox","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID31-isForBrowser-prefsLen31963-prefMapSize239302-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{6a6e9316-ec9f-4e43-a5cb-feb3e0371baf}509764truetab","pid":516970,"resources_usage":null,"consumption":2661.4058,"timestamp":1709233432.2441854,"container":null},{"exe":"/usr/local/bin/python3.10","cmdline":"/usr/local/bin/python/usr/local/bin/uvicorn--reloadapi:app--host0.0.0.0","pid":465590,"resources_usage":null,"consumption":2661.4058,"timestamp":1709233432.2443135,"container":null},{"exe":"/snap/firefox/3836/usr/lib/firefox/firefox","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID40-isForBrowser-prefsLen31963-prefMapSize239302-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3d11513d-dd7b-4b18-a55a-64a3590eae4f}509764truetab","pid":522676,"resources_usage":null,"consumption":2661.4058,"timestamp":1709233432.2444696,"container":null},{"exe":"/usr/lib/xorg/Xorg","cmdline":"/usr/lib/xorg/Xorgvt2-displayfd3-auth/run/user/1000/gdm/Xauthority-nolistentcp-backgroundnone-noreset-keeptty-novtswitch-verbose3","pid":1884,"resources_usage":null,"consumption":1330.7029,"timestamp":1709233432.2442987,"container":null},{"exe":"/usr/libexec/gnome-terminal-server","cmdline":"/usr/libexec/gnome-terminal-server","pid":8177,"resources_usage":null,"consumption":1330.7029,"timestamp":1709233432.244377,"container":null}],"sockets":[{"id":0,"consumption":3827866.0,"domains":[{"name":"core","consumption":182602.0,"timestamp":1709233432.2048552}],"timestamp":1709233432.203906}]} diff --git a/boagent/tests/mocks/sudo_lshw_data.json b/boagent/tests/mocks/sudo_lshw_data.json new file mode 100644 index 0000000..1804eaa --- /dev/null +++ b/boagent/tests/mocks/sudo_lshw_data.json @@ -0,0 +1,1711 @@ +{ + "id" : "virgilisdead-pc", + "class" : "system", + "claimed" : true, + "handle" : "DMI:0001", + "description" : "Notebook", + "product" : "82K2 (LENOVO_MT_82K2_BU_idea_FM_IdeaPad Gaming 3 15ACH6)", + "vendor" : "LENOVO", + "version" : "IdeaPad Gaming 3 15ACH6", + "serial" : "MP23P74B", + "width" : 64, + "configuration" : { + "administrator_password" : "disabled", + "boot" : "normal", + "chassis" : "notebook", + "family" : "IdeaPad Gaming 3 15ACH6", + "frontpanel_password" : "disabled", + "keyboard_password" : "disabled", + "power-on_password" : "disabled", + "sku" : "LENOVO_MT_82K2_BU_idea_FM_IdeaPad Gaming 3 15ACH6", + "uuid" : "8cb50a19-1d29-11ec-810d-7c8ae1a30239" + }, + "capabilities" : { + "smbios-3.3.0" : "SMBIOS version 3.3.0", + "dmi-3.3.0" : "DMI version 3.3.0", + "smp" : "Symmetric Multi-Processing", + "vsyscall32" : "32-bit processes" + }, + "children" : [ { + "id" : "core", + "class" : "bus", + "claimed" : true, + "handle" : "DMI:0002", + "description" : "Motherboard", + "product" : "LNVNB161216", + "vendor" : "LENOVO", + "physid" : "0", + "version" : "SDK0J40700 WIN", + "serial" : "MP23P74B", + "slot" : "Base Board Chassis Location", + "children" : [ { + "id" : "firmware", + "class" : "memory", + "claimed" : true, + "description" : "BIOS", + "vendor" : "LENOVO", + "physid" : "0", + "version" : "H3CN32WW(V2.02)", + "date" : "02/23/2022", + "units" : "bytes", + "size" : 131072, + "capacity" : 16777216, + "capabilities" : { + "pci" : "PCI bus", + "upgrade" : "BIOS EEPROM can be upgraded", + "shadowing" : "BIOS shadowing", + "cdboot" : "Booting from CD-ROM/DVD", + "bootselect" : "Selectable boot path", + "edd" : "Enhanced Disk Drive extensions", + "int13floppynec" : "NEC 9800 floppy", + "int13floppytoshiba" : "Toshiba floppy", + "int13floppy360" : "5.25\" 360KB floppy", + "int13floppy1200" : "5.25\" 1.2MB floppy", + "int13floppy720" : "3.5\" 720KB floppy", + "int13floppy2880" : "3.5\" 2.88MB floppy", + "int9keyboard" : "i8042 keyboard controller", + "int10video" : "INT10 CGA/Mono video", + "acpi" : "ACPI", + "usb" : "USB legacy emulation", + "biosbootspecification" : "BIOS boot specification", + "uefi" : "UEFI specification is supported" + } + }, + { + "id" : "cpu", + "class" : "processor", + "claimed" : true, + "handle" : "DMI:0004", + "description" : "CPU", + "product" : "AMD Ryzen 5 5600H with Radeon Graphics", + "vendor" : "Advanced Micro Devices [AMD]", + "physid" : "4", + "businfo" : "cpu@0", + "version" : "25.80.0", + "serial" : "Unknown", + "slot" : "FP6", + "units" : "Hz", + "size" : 400000000, + "capacity" : 4280000000, + "width" : 64, + "clock" : 100000000, + "configuration" : { + "cores" : "6", + "enabledcores" : "6", + "microcode" : "173015052", + "threads" : "12" + }, + "capabilities" : { + "lm" : "64bits extensions (x86-64)", + "fpu" : "mathematical co-processor", + "fpu_exception" : "FPU exceptions reporting", + "wp" : true, + "vme" : "virtual mode extensions", + "de" : "debugging extensions", + "pse" : "page size extensions", + "tsc" : "time stamp counter", + "msr" : "model-specific registers", + "pae" : "4GB+ memory addressing (Physical Address Extension)", + "mce" : "machine check exceptions", + "cx8" : "compare and exchange 8-byte", + "apic" : "on-chip advanced programmable interrupt controller (APIC)", + "sep" : "fast system calls", + "mtrr" : "memory type range registers", + "pge" : "page global enable", + "mca" : "machine check architecture", + "cmov" : "conditional move instruction", + "pat" : "page attribute table", + "pse36" : "36-bit page size extensions", + "clflush" : true, + "mmx" : "multimedia extensions (MMX)", + "fxsr" : "fast floating point save/restore", + "sse" : "streaming SIMD extensions (SSE)", + "sse2" : "streaming SIMD extensions (SSE2)", + "ht" : "HyperThreading", + "syscall" : "fast system calls", + "nx" : "no-execute bit (NX)", + "mmxext" : "multimedia extensions (MMXExt)", + "fxsr_opt" : true, + "pdpe1gb" : true, + "rdtscp" : true, + "x86-64" : "64bits extensions (x86-64)", + "constant_tsc" : true, + "rep_good" : true, + "nopl" : true, + "nonstop_tsc" : true, + "cpuid" : true, + "extd_apicid" : true, + "aperfmperf" : true, + "rapl" : true, + "pni" : true, + "pclmulqdq" : true, + "monitor" : true, + "ssse3" : true, + "fma" : true, + "cx16" : true, + "sse4_1" : true, + "sse4_2" : true, + "movbe" : true, + "popcnt" : true, + "aes" : true, + "xsave" : true, + "avx" : true, + "f16c" : true, + "rdrand" : true, + "lahf_lm" : true, + "cmp_legacy" : true, + "svm" : true, + "extapic" : true, + "cr8_legacy" : true, + "abm" : true, + "sse4a" : true, + "misalignsse" : true, + "3dnowprefetch" : true, + "osvw" : true, + "ibs" : true, + "skinit" : true, + "wdt" : true, + "tce" : true, + "topoext" : true, + "perfctr_core" : true, + "perfctr_nb" : true, + "bpext" : true, + "perfctr_llc" : true, + "mwaitx" : true, + "cpb" : true, + "cat_l3" : true, + "cdp_l3" : true, + "hw_pstate" : true, + "ssbd" : true, + "mba" : true, + "ibrs" : true, + "ibpb" : true, + "stibp" : true, + "vmmcall" : true, + "fsgsbase" : true, + "bmi1" : true, + "avx2" : true, + "smep" : true, + "bmi2" : true, + "erms" : true, + "invpcid" : true, + "cqm" : true, + "rdt_a" : true, + "rdseed" : true, + "adx" : true, + "smap" : true, + "clflushopt" : true, + "clwb" : true, + "sha_ni" : true, + "xsaveopt" : true, + "xsavec" : true, + "xgetbv1" : true, + "xsaves" : true, + "cqm_llc" : true, + "cqm_occup_llc" : true, + "cqm_mbm_total" : true, + "cqm_mbm_local" : true, + "clzero" : true, + "irperf" : true, + "xsaveerptr" : true, + "rdpru" : true, + "wbnoinvd" : true, + "cppc" : true, + "arat" : true, + "npt" : true, + "lbrv" : true, + "svm_lock" : true, + "nrip_save" : true, + "tsc_scale" : true, + "vmcb_clean" : true, + "flushbyasid" : true, + "decodeassists" : true, + "pausefilter" : true, + "pfthreshold" : true, + "avic" : true, + "v_vmsave_vmload" : true, + "vgif" : true, + "v_spec_ctrl" : true, + "umip" : true, + "pku" : true, + "ospke" : true, + "vaes" : true, + "vpclmulqdq" : true, + "rdpid" : true, + "overflow_recov" : true, + "succor" : true, + "smca" : true, + "fsrm" : true, + "cpufreq" : "CPU Frequency scaling" + }, + "children" : [ { + "id" : "cache:0", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0005", + "description" : "L1 cache", + "physid" : "5", + "slot" : "L1 - Cache", + "units" : "bytes", + "size" : 393216, + "capacity" : 393216, + "clock" : 1000000000, + "configuration" : { + "level" : "1" + }, + "capabilities" : { + "pipeline-burst" : "Pipeline burst", + "internal" : "Internal", + "write-back" : "Write-back", + "unified" : "Unified cache" + } + }, + { + "id" : "cache:1", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0006", + "description" : "L2 cache", + "physid" : "6", + "slot" : "L2 - Cache", + "units" : "bytes", + "size" : 3145728, + "capacity" : 3145728, + "clock" : 1000000000, + "configuration" : { + "level" : "2" + }, + "capabilities" : { + "pipeline-burst" : "Pipeline burst", + "internal" : "Internal", + "write-back" : "Write-back", + "unified" : "Unified cache" + } + }, + { + "id" : "cache:2", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0007", + "description" : "L3 cache", + "physid" : "7", + "slot" : "L3 - Cache", + "units" : "bytes", + "size" : 16777216, + "capacity" : 16777216, + "clock" : 1000000000, + "configuration" : { + "level" : "3" + }, + "capabilities" : { + "pipeline-burst" : "Pipeline burst", + "internal" : "Internal", + "write-back" : "Write-back", + "unified" : "Unified cache" + } + }] + }, + { + "id" : "memory", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0022", + "description" : "System Memory", + "physid" : "22", + "slot" : "System board or motherboard", + "units" : "bytes", + "size" : 8589934592, + "children" : [ { + "id" : "bank:0", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0023", + "description" : "SODIMM DDR4 Synchronous Unbuffered (Unregistered) 3200 MHz (0,3 ns)", + "product" : "M471A1G44AB0-CWE", + "vendor" : "Samsung", + "physid" : "0", + "serial" : "46F1CB37", + "slot" : "DIMM 0", + "units" : "bytes", + "size" : 8589934592, + "width" : 64, + "clock" : 3200000000 + }, + { + "id" : "bank:1", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0024", + "description" : "[empty]", + "product" : "Unknown", + "vendor" : "Unknown", + "physid" : "1", + "serial" : "Unknown", + "slot" : "DIMM 0" + }] + }, + { + "id" : "pci:0", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:00", + "description" : "Host bridge", + "product" : "Renoir/Cezanne Root Complex", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "100", + "businfo" : "pci@0000:00:00.0", + "version" : "00", + "width" : 32, + "clock" : 33000000, + "children" : [ { + "id" : "generic", + "class" : "generic", + "handle" : "PCI:0000:00:00.2", + "description" : "IOMMU", + "product" : "Renoir/Cezanne IOMMU", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "0.2", + "businfo" : "pci@0000:00:00.2", + "version" : "00", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "msi" : "Message Signalled Interrupts", + "ht" : "HyperTransport", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "pci:0", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:01", + "description" : "PCI bridge", + "product" : "Renoir PCIe GPP Bridge", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "1.1", + "businfo" : "pci@0000:00:01.1", + "version" : "00", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pm" : "Power Management", + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "ht" : "HyperTransport", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "display", + "class" : "display", + "claimed" : true, + "handle" : "PCI:0000:01:00.0", + "description" : "3D controller", + "product" : "TU117M [GeForce GTX 1650 Mobile / Max-Q]", + "vendor" : "NVIDIA Corporation", + "physid" : "0", + "businfo" : "pci@0000:01:00.0", + "logicalname" : "/dev/fb0", + "dev" : "29:0", + "version" : "a1", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "depth" : "32", + "driver" : "nvidia", + "latency" : "0", + "mode" : "1920x1080", + "visual" : "truecolor", + "xres" : "1920", + "yres" : "1080" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "rom" : "extension ROM", + "fb" : true + } + }] + }, + { + "id" : "pci:1", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:02", + "description" : "PCI bridge", + "product" : "Renoir/Cezanne PCIe GPP Bridge", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "1.2", + "businfo" : "pci@0000:00:01.2", + "version" : "00", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pm" : "Power Management", + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "ht" : "HyperTransport", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "network", + "class" : "network", + "claimed" : true, + "handle" : "PCI:0000:02:00.0", + "description" : "Ethernet interface", + "product" : "RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller", + "vendor" : "Realtek Semiconductor Co., Ltd.", + "physid" : "0", + "businfo" : "pci@0000:02:00.0", + "logicalname" : "enp2s0", + "version" : "15", + "serial" : "7c:8a:e1:a3:02:39", + "units" : "bit/s", + "size" : 1000000000, + "capacity" : 1000000000, + "width" : 64, + "clock" : 33000000, + "configuration" : { + "autonegotiation" : "on", + "broadcast" : "yes", + "driver" : "r8169", + "driverversion" : "6.5.0-25-generic", + "duplex" : "full", + "firmware" : "rtl8168h-2_0.0.2 02/26/15", + "ip" : "192.168.1.165", + "latency" : "0", + "link" : "yes", + "multicast" : "yes", + "port" : "twisted pair", + "speed" : "1Gbit/s" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "msix" : "MSI-X", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "ethernet" : true, + "physical" : "Physical interface", + "tp" : "twisted pair", + "mii" : "Media Independent Interface", + "10bt" : "10Mbit/s", + "10bt-fd" : "10Mbit/s (full duplex)", + "100bt" : "100Mbit/s", + "100bt-fd" : "100Mbit/s (full duplex)", + "1000bt-fd" : "1Gbit/s (full duplex)", + "autonegotiation" : "Auto-negotiation" + } + }] + }, + { + "id" : "pci:2", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:03", + "description" : "PCI bridge", + "product" : "Renoir/Cezanne PCIe GPP Bridge", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "1.3", + "businfo" : "pci@0000:00:01.3", + "version" : "00", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pm" : "Power Management", + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "ht" : "HyperTransport", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "network", + "class" : "network", + "disabled" : true, + "claimed" : true, + "handle" : "PCI:0000:03:00.0", + "description" : "Wireless interface", + "product" : "MT7921 802.11ax PCI Express Wireless Network Adapter", + "vendor" : "MEDIATEK Corp.", + "physid" : "0", + "businfo" : "pci@0000:03:00.0", + "logicalname" : "wlo1", + "version" : "00", + "serial" : "b4:b5:b6:79:22:17", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "broadcast" : "yes", + "driver" : "mt7921e", + "driverversion" : "6.5.0-25-generic", + "firmware" : "____010000-20231109190959", + "latency" : "0", + "link" : "no", + "multicast" : "yes", + "wireless" : "IEEE 802.11" + }, + "capabilities" : { + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "ethernet" : true, + "physical" : "Physical interface", + "wireless" : "Wireless-LAN" + } + }] + }, + { + "id" : "pci:3", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:04", + "description" : "PCI bridge", + "product" : "Renoir/Cezanne PCIe GPP Bridge", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "2.2", + "businfo" : "pci@0000:00:02.2", + "version" : "00", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pm" : "Power Management", + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "ht" : "HyperTransport", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "nvme", + "class" : "storage", + "claimed" : true, + "handle" : "PCI:0000:04:00.0", + "description" : "NVMe device", + "product" : "SAMSUNG MZALQ512HBLU-00BL2", + "vendor" : "Samsung Electronics Co Ltd", + "physid" : "0", + "businfo" : "pci@0000:04:00.0", + "logicalname" : "/dev/nvme0", + "version" : "7L2QFXM7", + "serial" : "S65DNE2R576016", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "nvme", + "latency" : "0", + "nqn" : "nqn.1994-11.com.samsung:nvme:PM991a:M.2:S65DNE2R576016", + "state" : "live" + }, + "capabilities" : { + "nvme" : true, + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "msix" : "MSI-X", + "nvm_express" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "namespace:0", + "class" : "disk", + "claimed" : true, + "description" : "NVMe disk", + "physid" : "0", + "logicalname" : "hwmon3" + }, + { + "id" : "namespace:1", + "class" : "disk", + "claimed" : true, + "description" : "NVMe disk", + "physid" : "2", + "logicalname" : "/dev/ng0n1" + }, + { + "id" : "namespace:2", + "class" : "disk", + "claimed" : true, + "handle" : "GUID:1fecaa97-f09a-488d-b516-3b68bbb28ae4", + "description" : "NVMe disk", + "physid" : "1", + "businfo" : "nvme@0:1", + "logicalname" : "/dev/nvme0n1", + "units" : "bytes", + "size" : 512110190592, + "configuration" : { + "guid" : "1fecaa97-f09a-488d-b516-3b68bbb28ae4", + "logicalsectorsize" : "512", + "sectorsize" : "512", + "wwid" : "eui.002538d511132cc1" + }, + "capabilities" : { + "gpt-1.00" : "GUID Partition Table version 1.00", + "partitioned" : "Partitioned disk", + "partitioned:gpt" : "GUID partition table" + }, + "children" : [ { + "id" : "volume:0", + "class" : "volume", + "claimed" : true, + "handle" : "GUID:917ce9be-0205-4dc9-8a19-b3c9bcbdc615", + "description" : "Windows FAT volume", + "vendor" : "MSDOS5.0", + "physid" : "1", + "businfo" : "nvme@0:1,1", + "logicalname" : ["/dev/nvme0n1p1", "/boot/efi"], + "dev" : "259:1", + "version" : "FAT32", + "serial" : "046d-f274", + "size" : 267912192, + "capacity" : 272629248, + "configuration" : { + "FATs" : "2", + "filesystem" : "fat", + "label" : "SYSTEM_DRV", + "mount.fstype" : "vfat", + "mount.options" : "rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro", + "name" : "EFI system partition", + "state" : "mounted" + }, + "capabilities" : { + "boot" : "Contains boot code", + "fat" : "Windows FAT", + "initialized" : "initialized volume" + } + }, + { + "id" : "volume:1", + "class" : "volume", + "claimed" : true, + "handle" : "GUID:f2a882c8-e020-440e-9358-ace449ad1f40", + "description" : "EXT4 volume", + "vendor" : "Linux", + "physid" : "3", + "businfo" : "nvme@0:1,3", + "logicalname" : "/dev/nvme0n1p3", + "dev" : "259:2", + "version" : "1.0", + "serial" : "970ce5ee-c264-43f9-8f23-7fede276bab0", + "size" : 176741679104, + "configuration" : { + "created" : "2023-08-18 13:59:07", + "filesystem" : "ext4", + "lastmountpoint" : "/media/virgilisdead/970ce5ee-c264-43f9-8f23-7fede276bab0", + "modified" : "2024-02-25 22:06:18", + "mounted" : "2024-02-25 14:12:18", + "state" : "clean" + }, + "capabilities" : { + "journaled" : true, + "extended_attributes" : "Extended Attributes", + "large_files" : "4GB+ files", + "huge_files" : "16TB+ files", + "dir_nlink" : "directories with 65000+ subdirs", + "64bit" : "64bit filesystem", + "extents" : "extent-based allocation", + "ext4" : true, + "ext2" : "EXT2/EXT3", + "initialized" : "initialized volume" + } + }, + { + "id" : "volume:2", + "class" : "volume", + "claimed" : true, + "handle" : "GUID:ec13037f-c71f-459b-b81a-e569e040f3ce", + "description" : "Windows NTFS volume", + "vendor" : "Windows", + "physid" : "4", + "businfo" : "nvme@0:1,4", + "logicalname" : "/dev/nvme0n1p4", + "dev" : "259:3", + "version" : "3.1", + "serial" : "aa3d2e93-fda9-784b-8bcc-aee2e9a65a9f", + "size" : 1021312512, + "capacity" : 1048575488, + "configuration" : { + "clustersize" : "4096", + "created" : "2021-10-11 12:04:53", + "filesystem" : "ntfs", + "label" : "WINRE_DRV", + "name" : "Basic data partition", + "state" : "clean" + }, + "capabilities" : { + "boot" : "Contains boot code", + "precious" : "This partition is required for the platform to function", + "ntfs" : "Windows NTFS", + "initialized" : "initialized volume" + } + }, + { + "id" : "volume:3", + "class" : "volume", + "claimed" : true, + "handle" : "GUID:c969a0be-bf01-4ba4-8533-3b63829a7e57", + "description" : "EXT4 volume", + "vendor" : "Linux", + "physid" : "5", + "businfo" : "nvme@0:1,5", + "logicalname" : ["/dev/nvme0n1p5", "/", "/var/snap/firefox/common/host-hunspell"], + "dev" : "259:4", + "version" : "1.0", + "serial" : "55ecc6fa-6ec8-48e8-9987-392fe7e08612", + "size" : 157286400000, + "configuration" : { + "created" : "2023-02-25 18:27:04", + "filesystem" : "ext4", + "lastmountpoint" : "/", + "modified" : "2024-03-14 12:41:36", + "mount.fstype" : "ext4", + "mount.options" : "ro,noexec,noatime,errors=remount-ro,stripe=32", + "mounted" : "2024-03-14 12:41:36", + "state" : "mounted" + }, + "capabilities" : { + "journaled" : true, + "extended_attributes" : "Extended Attributes", + "large_files" : "4GB+ files", + "huge_files" : "16TB+ files", + "dir_nlink" : "directories with 65000+ subdirs", + "recover" : "needs recovery", + "64bit" : "64bit filesystem", + "extents" : "extent-based allocation", + "ext4" : true, + "ext2" : "EXT2/EXT3", + "initialized" : "initialized volume" + } + }] + }] + }] + }, + { + "id" : "pci:4", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:05", + "description" : "PCI bridge", + "product" : "Renoir Internal PCIe GPP Bridge to Bus", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "8.1", + "businfo" : "pci@0000:00:08.1", + "version" : "00", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pm" : "Power Management", + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "display", + "class" : "display", + "claimed" : true, + "handle" : "PCI:0000:05:00.0", + "description" : "VGA compatible controller", + "product" : "Cezanne", + "vendor" : "Advanced Micro Devices, Inc. [AMD/ATI]", + "physid" : "0", + "businfo" : "pci@0000:05:00.0", + "logicalname" : "/dev/fb0", + "version" : "c6", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "depth" : "32", + "driver" : "amdgpu", + "latency" : "0", + "resolution" : "1920,1080" + }, + "capabilities" : { + "pm" : "Power Management", + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "msix" : "MSI-X", + "vga_controller" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "fb" : "framebuffer" + } + }, + { + "id" : "multimedia:0", + "class" : "multimedia", + "claimed" : true, + "handle" : "PCI:0000:05:00.1", + "description" : "Audio device", + "product" : "Renoir Radeon High Definition Audio Controller", + "vendor" : "Advanced Micro Devices, Inc. [AMD/ATI]", + "physid" : "0.1", + "businfo" : "pci@0000:05:00.1", + "logicalname" : ["card0", "/dev/snd/controlC0", "/dev/snd/hwC0D0", "/dev/snd/pcmC0D3p"], + "version" : "00", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "snd_hda_intel", + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "input", + "class" : "input", + "claimed" : true, + "product" : "HD-Audio Generic HDMI/DP,pcm=3", + "physid" : "0", + "logicalname" : ["input15", "/dev/input/event11"] + }] + }, + { + "id" : "generic", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:05:00.2", + "description" : "Encryption controller", + "product" : "Family 17h (Models 10h-1fh) Platform Security Processor", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "0.2", + "businfo" : "pci@0000:05:00.2", + "version" : "00", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "ccp", + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "msix" : "MSI-X", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "usb:0", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:05:00.3", + "description" : "USB controller", + "product" : "Renoir/Cezanne USB 3.1", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "0.3", + "businfo" : "pci@0000:05:00.3", + "version" : "00", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "xhci_hcd", + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "msix" : "MSI-X", + "xhci" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "usbhost:0", + "class" : "bus", + "claimed" : true, + "handle" : "USB:1:1", + "product" : "xHCI Host Controller", + "vendor" : "Linux 6.5.0-25-generic xhci-hcd", + "physid" : "0", + "businfo" : "usb@1", + "logicalname" : "usb1", + "version" : "6.05", + "configuration" : { + "driver" : "hub", + "slots" : "4", + "speed" : "480Mbit/s" + }, + "capabilities" : { + "usb-2.00" : "USB 2.0" + }, + "children" : [ { + "id" : "usb:0", + "class" : "input", + "claimed" : true, + "handle" : "USB:1:4", + "description" : "Mouse", + "product" : "Corsair CORSAIR M55 RGB PRO Gaming Mouse", + "vendor" : "Corsair", + "physid" : "2", + "businfo" : "usb@1:2", + "logicalname" : ["input20", "/dev/input/event15", "/dev/input/js0", "/dev/input/mouse2", "input21", "/dev/input/event16", "input21::capslock", "input21::numlock", "input21::scrolllock"], + "version" : "4.05", + "serial" : "17006026AF37A1085B5EC8E1F5001BC1", + "configuration" : { + "driver" : "usbhid", + "maxpower" : "500mA", + "speed" : "12Mbit/s" + }, + "capabilities" : { + "usb-2.00" : "USB 2.0", + "usb" : "USB" + } + }, + { + "id" : "usb:1", + "class" : "multimedia", + "claimed" : true, + "handle" : "USB:1:2", + "description" : "Video", + "product" : "Integrated Camera", + "vendor" : "SunplusIT Inc", + "physid" : "3", + "businfo" : "usb@1:3", + "version" : "56.15", + "configuration" : { + "driver" : "uvcvideo", + "maxpower" : "500mA", + "speed" : "480Mbit/s" + }, + "capabilities" : { + "usb-2.01" : true + } + }, + { + "id" : "usb:2", + "class" : "communication", + "claimed" : true, + "handle" : "USB:1:3", + "description" : "Bluetooth wireless interface", + "product" : "Wireless_Device", + "vendor" : "MediaTek Inc.", + "physid" : "4", + "businfo" : "usb@1:4", + "version" : "1.00", + "serial" : "000000000", + "configuration" : { + "driver" : "btusb", + "maxpower" : "100mA", + "speed" : "480Mbit/s" + }, + "capabilities" : { + "usb-2.10" : true, + "bluetooth" : "Bluetooth wireless radio" + } + }] + }, + { + "id" : "usbhost:1", + "class" : "bus", + "claimed" : true, + "handle" : "USB:2:1", + "product" : "xHCI Host Controller", + "vendor" : "Linux 6.5.0-25-generic xhci-hcd", + "physid" : "1", + "businfo" : "usb@2", + "logicalname" : "usb2", + "version" : "6.05", + "configuration" : { + "driver" : "hub", + "slots" : "2", + "speed" : "10000Mbit/s" + }, + "capabilities" : { + "usb-3.10" : true + } + }] + }, + { + "id" : "usb:1", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:05:00.4", + "description" : "USB controller", + "product" : "Renoir/Cezanne USB 3.1", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "0.4", + "businfo" : "pci@0000:05:00.4", + "version" : "00", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "xhci_hcd", + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "msix" : "MSI-X", + "xhci" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "usbhost:0", + "class" : "bus", + "claimed" : true, + "handle" : "USB:3:1", + "product" : "xHCI Host Controller", + "vendor" : "Linux 6.5.0-25-generic xhci-hcd", + "physid" : "0", + "businfo" : "usb@3", + "logicalname" : "usb3", + "version" : "6.05", + "configuration" : { + "driver" : "hub", + "slots" : "4", + "speed" : "480Mbit/s" + }, + "capabilities" : { + "usb-2.00" : "USB 2.0" + }, + "children" : [ { + "id" : "usb", + "class" : "input", + "claimed" : true, + "handle" : "USB:3:2", + "description" : "Keyboard", + "product" : "ITE Tech. Inc. ITE Device(8176) Keyboard", + "vendor" : "ITE Tech. Inc.", + "physid" : "3", + "businfo" : "usb@3:3", + "logicalname" : ["input10", "/dev/input/event9", "input9", "/dev/input/event8", "input9::capslock", "input9::compose", "input9::kana", "input9::numlock", "input9::scrolllock"], + "version" : "16.00", + "configuration" : { + "driver" : "usbhid", + "maxpower" : "100mA", + "speed" : "12Mbit/s" + }, + "capabilities" : { + "usb-2.01" : true, + "usb" : "USB" + } + }] + }, + { + "id" : "usbhost:1", + "class" : "bus", + "claimed" : true, + "handle" : "USB:4:1", + "product" : "xHCI Host Controller", + "vendor" : "Linux 6.5.0-25-generic xhci-hcd", + "physid" : "1", + "businfo" : "usb@4", + "logicalname" : "usb4", + "version" : "6.05", + "configuration" : { + "driver" : "hub", + "slots" : "2", + "speed" : "10000Mbit/s" + }, + "capabilities" : { + "usb-3.10" : true + }, + "children" : [ { + "id" : "usb", + "class" : "storage", + "claimed" : true, + "handle" : "SCSI:00", + "description" : "Mass storage device", + "product" : "STORE N GO", + "vendor" : "Verbatim", + "physid" : "2", + "businfo" : "usb@4:2", + "logicalname" : "scsi0", + "version" : "0.02", + "serial" : "22113084010903", + "configuration" : { + "driver" : "usb-storage", + "maxpower" : "800mA", + "speed" : "5000Mbit/s" + }, + "capabilities" : { + "usb-3.20" : true, + "scsi" : "SCSI", + "emulated" : "Emulated device", + "scsi-host" : "SCSI host adapter" + }, + "children" : [ { + "id" : "disk", + "class" : "disk", + "claimed" : true, + "handle" : "SCSI:00:00:00:00", + "description" : "SCSI Disk", + "product" : "STORE N GO", + "vendor" : "Verbatim", + "physid" : "0.0.0", + "businfo" : "scsi@0:0.0.0", + "logicalname" : "/dev/sda", + "dev" : "8:0", + "version" : "8.01", + "units" : "bytes", + "size" : 62495129600, + "configuration" : { + "ansiversion" : "6", + "logicalsectorsize" : "512", + "sectorsize" : "512" + }, + "capabilities" : { + "removable" : "support is removable" + }, + "children" : [ { + "id" : "medium", + "class" : "disk", + "claimed" : true, + "physid" : "0", + "logicalname" : "/dev/sda", + "dev" : "8:0", + "units" : "bytes", + "size" : 62495129600, + "configuration" : { + "signature" : "5cfcc5eb" + }, + "capabilities" : { + "partitioned" : "Partitioned disk", + "partitioned:dos" : "MS-DOS partition table" + }, + "children" : [ { + "id" : "volume:0", + "class" : "volume", + "claimed" : true, + "description" : "Linux filesystem partition", + "physid" : "1", + "logicalname" : "/dev/sda1", + "dev" : "8:1", + "serial" : "7bd79485-e171-4527-a9d1-43da13de02c9", + "size" : 29497491456, + "capacity" : 29497491456, + "width" : 297265464, + "configuration" : { + "bits" : "13182167352", + "filesystem" : "luks", + "hash" : "sha256", + "version" : "2" + }, + "capabilities" : { + "primary" : "Primary partition", + "encrypted" : "Encrypted volume", + "luks" : "Linux Unified Key Setup", + "initialized" : "initialized volume" + } + }, + { + "id" : "volume:1", + "class" : "volume", + "claimed" : true, + "description" : "Windows NTFS volume", + "physid" : "2", + "logicalname" : ["/dev/sda2", "/media/virgilisdead/USB-NT"], + "dev" : "8:2", + "version" : "3.1", + "serial" : "777b-c522", + "size" : 32992394752, + "capacity" : 32996589568, + "configuration" : { + "clustersize" : "4096", + "created" : "2023-12-06 08:39:55", + "filesystem" : "ntfs", + "label" : "USB-NT", + "mount.fstype" : "ntfs3", + "mount.options" : "rw,nosuid,nodev,relatime,uid=1000,gid=1000,windows_names,iocharset=utf8", + "state" : "mounted" + }, + "capabilities" : { + "primary" : "Primary partition", + "ntfs" : "Windows NTFS", + "initialized" : "initialized volume" + } + }] + }] + }] + }] + }] + }, + { + "id" : "multimedia:1", + "class" : "multimedia", + "handle" : "PCI:0000:05:00.5", + "description" : "Multimedia controller", + "product" : "Raven/Raven2/FireFlight/Renoir Audio Processor", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "0.5", + "businfo" : "pci@0000:05:00.5", + "version" : "01", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "multimedia:2", + "class" : "multimedia", + "claimed" : true, + "handle" : "PCI:0000:05:00.6", + "description" : "Audio device", + "product" : "Family 17h (Models 10h-1fh) HD Audio Controller", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "0.6", + "businfo" : "pci@0000:05:00.6", + "logicalname" : ["card1", "/dev/snd/controlC1", "/dev/snd/hwC1D0", "/dev/snd/pcmC1D0c", "/dev/snd/pcmC1D0p"], + "version" : "00", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "snd_hda_intel", + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "input:0", + "class" : "input", + "claimed" : true, + "product" : "HD-Audio Generic Mic", + "physid" : "0", + "logicalname" : ["input16", "/dev/input/event12"] + }, + { + "id" : "input:1", + "class" : "input", + "claimed" : true, + "product" : "HD-Audio Generic Headphone", + "physid" : "1", + "logicalname" : ["input17", "/dev/input/event13"] + }] + }] + }, + { + "id" : "serial", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:00:14.0", + "description" : "SMBus", + "product" : "FCH SMBus Controller", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "14", + "businfo" : "pci@0000:00:14.0", + "version" : "51", + "width" : 32, + "clock" : 66000000, + "configuration" : { + "driver" : "piix4_smbus", + "latency" : "0" + } + }, + { + "id" : "isa", + "class" : "bridge", + "claimed" : true, + "handle" : "PCI:0000:00:14.3", + "description" : "ISA bridge", + "product" : "FCH LPC Bridge", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "14.3", + "businfo" : "pci@0000:00:14.3", + "version" : "51", + "width" : 32, + "clock" : 66000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "isa" : true, + "bus_master" : "bus mastering" + }, + "children" : [ { + "id" : "pnp00:00", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "0", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:01", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0b00", + "physid" : "1", + "configuration" : { + "driver" : "rtc_cmos" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:02", + "class" : "generic", + "claimed" : true, + "product" : "PnP device FUJ7401", + "physid" : "2", + "configuration" : { + "driver" : "i8042 kbd" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:03", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "3", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:04", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c01", + "physid" : "4", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "input", + "class" : "input", + "claimed" : true, + "product" : "Ideapad extra buttons", + "physid" : "5", + "logicalname" : ["input11", "/dev/input/event10"], + "capabilities" : { + "platform" : true + } + }] + }] + }, + { + "id" : "pci:1", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:00", + "description" : "Host bridge", + "product" : "Renoir PCIe Dummy Host Bridge", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "101", + "businfo" : "pci@0000:00:01.0", + "version" : "00", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:2", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:00", + "description" : "Host bridge", + "product" : "Renoir PCIe Dummy Host Bridge", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "102", + "businfo" : "pci@0000:00:02.0", + "version" : "00", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:3", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:00", + "description" : "Host bridge", + "product" : "Renoir PCIe Dummy Host Bridge", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "103", + "businfo" : "pci@0000:00:08.0", + "version" : "00", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:4", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:00", + "description" : "Host bridge", + "product" : "Cezanne Data Fabric; Function 0", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "104", + "businfo" : "pci@0000:00:18.0", + "version" : "00", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:5", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:00", + "description" : "Host bridge", + "product" : "Cezanne Data Fabric; Function 1", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "105", + "businfo" : "pci@0000:00:18.1", + "version" : "00", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:6", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:00", + "description" : "Host bridge", + "product" : "Cezanne Data Fabric; Function 2", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "106", + "businfo" : "pci@0000:00:18.2", + "version" : "00", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:7", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:00", + "description" : "Host bridge", + "product" : "Cezanne Data Fabric; Function 3", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "107", + "businfo" : "pci@0000:00:18.3", + "version" : "00", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "k10temp" + } + }, + { + "id" : "pci:8", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:00", + "description" : "Host bridge", + "product" : "Cezanne Data Fabric; Function 4", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "108", + "businfo" : "pci@0000:00:18.4", + "version" : "00", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:9", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:00", + "description" : "Host bridge", + "product" : "Cezanne Data Fabric; Function 5", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "109", + "businfo" : "pci@0000:00:18.5", + "version" : "00", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:10", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:00", + "description" : "Host bridge", + "product" : "Cezanne Data Fabric; Function 6", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "10a", + "businfo" : "pci@0000:00:18.6", + "version" : "00", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:11", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:00", + "description" : "Host bridge", + "product" : "Cezanne Data Fabric; Function 7", + "vendor" : "Advanced Micro Devices, Inc. [AMD]", + "physid" : "10b", + "businfo" : "pci@0000:00:18.7", + "version" : "00", + "width" : 32, + "clock" : 33000000 + }] + }, + { + "id" : "battery", + "class" : "power", + "claimed" : true, + "handle" : "DMI:002B", + "description" : "Zinc Air Battery", + "product" : "CRB Battery 0", + "vendor" : "-Virtual Battery 0-", + "physid" : "1", + "version" : "08/08/2010", + "serial" : "Battery 0", + "slot" : "Fake" + }, + { + "id" : "input:0", + "class" : "input", + "claimed" : true, + "product" : "Lid Switch", + "physid" : "2", + "logicalname" : ["input0", "/dev/input/event0"], + "capabilities" : { + "platform" : true + } + }, + { + "id" : "input:1", + "class" : "input", + "claimed" : true, + "product" : "Sleep Button", + "physid" : "3", + "logicalname" : ["input1", "/dev/input/event1"], + "capabilities" : { + "platform" : true + } + }, + { + "id" : "input:2", + "class" : "input", + "claimed" : true, + "product" : "MSFT0002:00 04F3:31AD Mouse", + "physid" : "4", + "logicalname" : ["input12", "/dev/input/event5", "/dev/input/mouse0"], + "capabilities" : { + "i2c" : "I²C bus" + } + }, + { + "id" : "input:3", + "class" : "input", + "claimed" : true, + "product" : "MSFT0002:00 04F3:31AD Touchpad", + "physid" : "5", + "logicalname" : ["input14", "/dev/input/event6", "/dev/input/mouse1"], + "capabilities" : { + "i2c" : "I²C bus" + } + }, + { + "id" : "input:4", + "class" : "input", + "claimed" : true, + "product" : "Power Button", + "physid" : "6", + "logicalname" : ["input2", "/dev/input/event2"], + "capabilities" : { + "platform" : true + } + }, + { + "id" : "input:5", + "class" : "input", + "claimed" : true, + "product" : "Power Button", + "physid" : "7", + "logicalname" : ["input3", "/dev/input/event3"], + "capabilities" : { + "platform" : true + } + }, + { + "id" : "input:6", + "class" : "input", + "claimed" : true, + "product" : "AT Translated Set 2 keyboard", + "physid" : "8", + "logicalname" : ["input4", "/dev/input/event4", "input4::capslock", "input4::numlock", "input4::scrolllock"], + "capabilities" : { + "i8042" : "i8042 PC AT keyboard controller" + } + }, + { + "id" : "input:7", + "class" : "input", + "claimed" : true, + "product" : "Video Bus", + "physid" : "9", + "logicalname" : ["input8", "/dev/input/event7"], + "capabilities" : { + "platform" : true + } + }] +} diff --git a/boagent/tests/mocks/sudo_lshw_data_disks.json b/boagent/tests/mocks/sudo_lshw_data_disks.json new file mode 100644 index 0000000..4d72169 --- /dev/null +++ b/boagent/tests/mocks/sudo_lshw_data_disks.json @@ -0,0 +1,244 @@ +{ + "id": "pci:3", + "class": "bridge", + "claimed": true, + "handle": "PCIBUS:0000:04", + "description": "PCI bridge", + "product": "Renoir/Cezanne PCIe GPP Bridge", + "vendor": "Advanced Micro Devices, Inc. [AMD]", + "physid": "2.2", + "businfo": "pci@0000:00:02.2", + "version": "00", + "width": 32, + "clock": 33000000, + "configuration": { + "driver": "pcieport" + }, + "capabilities": { + "pci": true, + "pm": "Power Management", + "pciexpress": "PCI Express", + "msi": "Message Signalled Interrupts", + "ht": "HyperTransport", + "normal_decode": true, + "bus_master": "bus mastering", + "cap_list": "PCI capabilities listing" + }, + "children": [ + { + "id": "nvme", + "class": "storage", + "claimed": true, + "handle": "PCI:0000:04:00.0", + "description": "NVMe device", + "product": "SAMSUNG MZALQ512HBLU-00BL2", + "vendor": "Samsung Electronics Co Ltd", + "physid": "0", + "businfo": "pci@0000:04:00.0", + "logicalname": "/dev/nvme0", + "version": "7L2QFXM7", + "serial": "S65DNE2R576016", + "width": 64, + "clock": 33000000, + "configuration": { + "driver": "nvme", + "latency": "0", + "nqn": "nqn.1994-11.com.samsung:nvme:PM991a:M.2:S65DNE2R576016", + "state": "live" + }, + "capabilities": { + "nvme": true, + "pm": "Power Management", + "msi": "Message Signalled Interrupts", + "pciexpress": "PCI Express", + "msix": "MSI-X", + "nvm_express": true, + "bus_master": "bus mastering", + "cap_list": "PCI capabilities listing" + }, + "children": [ + { + "id": "namespace:0", + "class": "disk", + "claimed": true, + "description": "NVMe disk", + "physid": "0", + "logicalname": "hwmon3" + }, + { + "id": "namespace:1", + "class": "disk", + "claimed": true, + "description": "NVMe disk", + "physid": "2", + "logicalname": "/dev/ng0n1" + }, + { + "id": "namespace:2", + "class": "disk", + "claimed": true, + "handle": "GUID:1fecaa97-f09a-488d-b516-3b68bbb28ae4", + "description": "NVMe disk", + "physid": "1", + "businfo": "nvme@0:1", + "logicalname": "/dev/nvme0n1", + "units": "bytes", + "size": 512110190592, + "configuration": { + "guid": "1fecaa97-f09a-488d-b516-3b68bbb28ae4", + "logicalsectorsize": "512", + "sectorsize": "512", + "wwid": "eui.002538d511132cc1" + }, + "capabilities": { + "gpt-1.00": "GUID Partition Table version 1.00", + "partitioned": "Partitioned disk", + "partitioned:gpt": "GUID partition table" + }, + "children": [ + { + "id": "volume:0", + "class": "volume", + "claimed": true, + "handle": "GUID:917ce9be-0205-4dc9-8a19-b3c9bcbdc615", + "description": "Windows FAT volume", + "vendor": "MSDOS5.0", + "physid": "1", + "businfo": "nvme@0:1,1", + "logicalname": [ + "/dev/nvme0n1p1", + "/boot/efi" + ], + "dev": "259:1", + "version": "FAT32", + "serial": "046d-f274", + "size": 267912192, + "capacity": 272629248, + "configuration": { + "FATs": "2", + "filesystem": "fat", + "label": "SYSTEM_DRV", + "mount.fstype": "vfat", + "mount.options": "rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro", + "name": "EFI system partition", + "state": "mounted" + }, + "capabilities": { + "boot": "Contains boot code", + "fat": "Windows FAT", + "initialized": "initialized volume" + } + }, + { + "id": "volume:1", + "class": "volume", + "claimed": true, + "handle": "GUID:f2a882c8-e020-440e-9358-ace449ad1f40", + "description": "EXT4 volume", + "vendor": "Linux", + "physid": "3", + "businfo": "nvme@0:1,3", + "logicalname": "/dev/nvme0n1p3", + "dev": "259:2", + "version": "1.0", + "serial": "970ce5ee-c264-43f9-8f23-7fede276bab0", + "size": 176741679104, + "configuration": { + "created": "2023-08-18 13:59:07", + "filesystem": "ext4", + "lastmountpoint": "/media/virgilisdead/970ce5ee-c264-43f9-8f23-7fede276bab0", + "modified": "2024-02-25 22:06:18", + "mounted": "2024-02-25 14:12:18", + "state": "clean" + }, + "capabilities": { + "journaled": true, + "extended_attributes": "Extended Attributes", + "large_files": "4GB+ files", + "huge_files": "16TB+ files", + "dir_nlink": "directories with 65000+ subdirs", + "64bit": "64bit filesystem", + "extents": "extent-based allocation", + "ext4": true, + "ext2": "EXT2/EXT3", + "initialized": "initialized volume" + } + }, + { + "id": "volume:2", + "class": "volume", + "claimed": true, + "handle": "GUID:ec13037f-c71f-459b-b81a-e569e040f3ce", + "description": "Windows NTFS volume", + "vendor": "Windows", + "physid": "4", + "businfo": "nvme@0:1,4", + "logicalname": "/dev/nvme0n1p4", + "dev": "259:3", + "version": "3.1", + "serial": "aa3d2e93-fda9-784b-8bcc-aee2e9a65a9f", + "size": 1021312512, + "capacity": 1048575488, + "configuration": { + "clustersize": "4096", + "created": "2021-10-11 12:04:53", + "filesystem": "ntfs", + "label": "WINRE_DRV", + "name": "Basic data partition", + "state": "clean" + }, + "capabilities": { + "boot": "Contains boot code", + "precious": "This partition is required for the platform to function", + "ntfs": "Windows NTFS", + "initialized": "initialized volume" + } + }, + { + "id": "volume:3", + "class": "volume", + "claimed": true, + "handle": "GUID:c969a0be-bf01-4ba4-8533-3b63829a7e57", + "description": "EXT4 volume", + "vendor": "Linux", + "physid": "5", + "businfo": "nvme@0:1,5", + "logicalname": [ + "/dev/nvme0n1p5", + "/", + "/var/snap/firefox/common/host-hunspell" + ], + "dev": "259:4", + "version": "1.0", + "serial": "55ecc6fa-6ec8-48e8-9987-392fe7e08612", + "size": 157286400000, + "configuration": { + "created": "2023-02-25 18:27:04", + "filesystem": "ext4", + "lastmountpoint": "/", + "modified": "2024-03-14 12:41:36", + "mount.fstype": "ext4", + "mount.options": "ro,noexec,noatime,errors=remount-ro,stripe=32", + "mounted": "2024-03-14 12:41:36", + "state": "mounted" + }, + "capabilities": { + "journaled": true, + "extended_attributes": "Extended Attributes", + "large_files": "4GB+ files", + "huge_files": "16TB+ files", + "dir_nlink": "directories with 65000+ subdirs", + "recover": "needs recovery", + "64bit": "64bit filesystem", + "extents": "extent-based allocation", + "ext4": true, + "ext2": "EXT2/EXT3", + "initialized": "initialized volume" + } + } + ] + } + ] + } + ] +} From 285e8389b0b8790ec5225d3e1a2fc0c1f6a1545e Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 9 Apr 2024 19:46:15 +0200 Subject: [PATCH 100/227] config: uvicorn start command modified to reflect module import --- boagent/hardware/hardware_cli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boagent/hardware/hardware_cli.py b/boagent/hardware/hardware_cli.py index aec341f..acd350f 100755 --- a/boagent/hardware/hardware_cli.py +++ b/boagent/hardware/hardware_cli.py @@ -3,7 +3,7 @@ import click import json import sys -from hardware.lshw import Lshw +from lshw import Lshw # from disk import search_physical_drives # from cpu import get_cpus From 96cfc8944ca14b0700565e5439f568099d7426a9 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 9 Apr 2024 19:49:04 +0200 Subject: [PATCH 101/227] config: update requirements --- requirements.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/requirements.txt b/requirements.txt index c8d4fc6..08a7141 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,6 +11,7 @@ click==8.1.3 cpuid==0.0.10 cpuid-native==0.0.7 croniter==1.3.7 +Cython==0.29.37 dataclasses==0.6 distlib==0.3.8 exceptiongroup==1.2.0 @@ -35,9 +36,11 @@ py-cpuinfo==9.0.0 pydantic==2.6.4 pydantic-settings==2.2.1 pydantic_core==2.16.3 +pynetbox==6.1.2 pytest==8.0.2 python-dateutil==2.8.2 python-dotenv==0.21.0 +python-slugify==8.0.1 pytz==2022.5 PyYAML==6.0.1 requests==2.28.1 From f14007a094141fc654102d39d93796cf230e25e4 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 10 Apr 2024 10:54:25 +0200 Subject: [PATCH 102/227] test: setting tests directory at boagent root --- boagent/api/api.py | 9 +- boagent/api/config/__init__.py | 1 - boagent/api/config/config.py | 44 - boagent/api/utils/__init__.py | 9 - boagent/api/utils/utils.py | 156 - boagent/hardware/__init__.py | 1 - boagent/hardware/cpu.py | 4 +- boagent/hardware/hardware_cli.py | 2 +- boagent/hardware/lshw/__init__.py | 1 - boagent/hardware/lshw/lshw.py | 267 -- {boagent/tests => tests}/__init__.py | 0 .../api/test_api_integration.py | 2 +- {boagent/tests => tests}/api/test_api_unit.py | 53 +- .../hardware/test_hardwarecli.py | 2 +- .../tests => tests}/hardware/test_lshw.py | 8 +- .../boaviztapi_response_not_verbose.json | 0 .../mocks/boaviztapi_response_verbose.json | 0 .../mocks/formatted_scaphandre.json | 0 .../tests => tests}/mocks/hardware_data.json | 2 +- tests/mocks/hubblo-ci-01_lshw.json | 2577 +++++++++++++++++ tests/mocks/lshw_data.json | 1137 ++++++++ tests/mocks/lshw_data_sudo.json | 1752 +++++++++++ tests/mocks/nvme_data.json | 17 + tests/mocks/nvme_data_sudo.json | 17 + .../tests => tests}/mocks/power_data.json | 0 .../tests => tests}/mocks/sudo_lshw_data.json | 0 .../mocks/sudo_lshw_data_disks.json | 0 tests/mocks/sync-ce-re_lshw.json | 1395 +++++++++ 28 files changed, 6943 insertions(+), 513 deletions(-) delete mode 100644 boagent/api/config/__init__.py delete mode 100644 boagent/api/config/config.py delete mode 100644 boagent/api/utils/__init__.py delete mode 100644 boagent/api/utils/utils.py delete mode 100644 boagent/hardware/lshw/__init__.py delete mode 100644 boagent/hardware/lshw/lshw.py rename {boagent/tests => tests}/__init__.py (100%) rename {boagent/tests => tests}/api/test_api_integration.py (99%) rename {boagent/tests => tests}/api/test_api_unit.py (89%) rename {boagent/tests => tests}/hardware/test_hardwarecli.py (93%) rename {boagent/tests => tests}/hardware/test_lshw.py (96%) rename {boagent/tests => tests}/mocks/boaviztapi_response_not_verbose.json (100%) rename {boagent/tests => tests}/mocks/boaviztapi_response_verbose.json (100%) rename {boagent/tests => tests}/mocks/formatted_scaphandre.json (100%) rename {boagent/tests => tests}/mocks/hardware_data.json (99%) create mode 100644 tests/mocks/hubblo-ci-01_lshw.json create mode 100644 tests/mocks/lshw_data.json create mode 100644 tests/mocks/lshw_data_sudo.json create mode 100644 tests/mocks/nvme_data.json create mode 100644 tests/mocks/nvme_data_sudo.json rename {boagent/tests => tests}/mocks/power_data.json (100%) rename {boagent/tests => tests}/mocks/sudo_lshw_data.json (100%) rename {boagent/tests => tests}/mocks/sudo_lshw_data_disks.json (100%) create mode 100644 tests/mocks/sync-ce-re_lshw.json diff --git a/boagent/api/api.py b/boagent/api/api.py index b84804b..3da6d20 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -14,7 +14,8 @@ from fastapi.staticfiles import StaticFiles from fastapi.responses import HTMLResponse from boaviztapi_sdk.api.server_api import ServerApi -from api.utils import ( +from boaviztapi_sdk.models.server import Server +from .utils import ( iso8601_or_timestamp_as_timestamp, format_scaphandre_json, format_prometheus_output, @@ -22,10 +23,10 @@ sort_ram, sort_disks, ) -from boaviztapi_sdk.models.server import Server -from api.config import settings -from api.database import ( +from .config import settings + +from .database import ( get_session, select_metric, get_most_recent_data, diff --git a/boagent/api/config/__init__.py b/boagent/api/config/__init__.py deleted file mode 100644 index 0f25140..0000000 --- a/boagent/api/config/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .config import settings diff --git a/boagent/api/config/config.py b/boagent/api/config/config.py deleted file mode 100644 index d304ffc..0000000 --- a/boagent/api/config/config.py +++ /dev/null @@ -1,44 +0,0 @@ -from pydantic_settings import BaseSettings -import os - - -class Settings(BaseSettings): - PROJECT_NAME: str = "boagent" - PROJECT_VERSION: str = "0.1.0" - PROJECT_DESCRIPTION: str = "Boagent is a local API and monitoring agent to help you estimate the environmental impact of your machine, including software activity and hardware embodied impacts." - TAGS_METADATA: list = [ - {"name": "info", "description": "Returns runtime configuration of Boagent."}, - {"name": "web", "description": "Web UI to explore Boagent metrics."}, - { - "name": "csv", - "description": "Internal route. Generates and returns a CSV-formatted dataset with metrics needed by the webUI", - }, - { - "name": "metrics", - "description": "Returns metrics as a Prometheus HTTP exporter.", - }, - { - "name": "query", - "description": "This is the main route. Returns metrics in JSON format.", - }, - ] - seconds_in_one_year: int = 31536000 - default_lifetime: float = os.getenv("DEFAULT_LIFETIME", 5.0) - hardware_file_path: str = os.getenv("HARDWARE_FILE_PATH", "./hardware_data.json") - power_file_path: str = os.getenv("POWER_FILE_PATH", "./power_data.json") - hardware_cli: str = os.getenv("HARDWARE_CLI", "./hardware/hardware_cli.py") - boaviztapi_endpoint: str = os.getenv("BOAVIZTAPI_ENDPOINT", "http://localhost:5000") - db_path: str = os.getenv("BOAGENT_DB_PATH", "../../db/boagent.db") - public_path: str = os.getenv("BOAGENT_PUBLIC_PATH", "./public") - assets_path: str = os.getenv("BOAGENT_ASSETS_PATH", "./public/assets/") - carbon_aware_api_endpoint: str = os.getenv( - "CARBON_AWARE_API_ENDPOINT", "https://carbon-aware-api.azurewebsites.net" - ) - carbon_aware_api_token: str = os.getenv("CARBON_AWARE_API_TOKEN", "token") - azure_location: str = os.getenv("AZURE_LOCATION", "northeurope") - - class Config: - env_file = ".env" - - -settings = Settings() diff --git a/boagent/api/utils/__init__.py b/boagent/api/utils/__init__.py deleted file mode 100644 index 347a83f..0000000 --- a/boagent/api/utils/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -from .utils import ( - iso8601_or_timestamp_as_timestamp, - filter_date_range, - format_scaphandre_json, - format_prometheus_output, - get_boavizta_api_client, - sort_ram, - sort_disks -) diff --git a/boagent/api/utils/utils.py b/boagent/api/utils/utils.py deleted file mode 100644 index bf704fc..0000000 --- a/boagent/api/utils/utils.py +++ /dev/null @@ -1,156 +0,0 @@ -from datetime import datetime -from boaviztapi_sdk import ApiClient, Configuration -from dateutil import parser -from api.config import settings -from os import PathLike - -BOAVIZTAPI_ENDPOINT = settings.boaviztapi_endpoint - - -def sort_ram(items: list): - hash_map = {} - for r in items: - if "manufacturer" in r: - if "{}:{}".format(r["capacity"], r["manufacturer"]) in hash_map: - hash_map["{}:{}".format(r["capacity"], r["manufacturer"])]["units"] += 1 - else: - hash_map["{}:{}".format(r["capacity"], r["manufacturer"])] = { - "units": 1, - "manufacturer": r["manufacturer"], - "capacity": r["capacity"], - } - else: - hash_map["{}".format(r["capacity"])] = { - "units": 1, - "capacity": r["capacity"], - } - return [v for k, v in hash_map.items()] - - -def sort_disks(items: list): - hash_map = {} - for r in items: - if "{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"]) in hash_map: - hash_map["{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"])][ - "units" - ] += 1 - else: - hash_map["{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"])] = { - "units": 1, - "manufacturer": r["manufacturer"], - "capacity": r["capacity"], - "type": r["type"], - } - return [v for k, v in hash_map.items()] - - -def get_boavizta_api_client(): - config = Configuration( - host=BOAVIZTAPI_ENDPOINT, - ) - client = ApiClient(configuration=config, pool_threads=2) - return client - - -def iso8601_or_timestamp_as_timestamp(iso_time: str) -> float: - """ - Takes an str that's either a timestamp or an iso8601 - time. Returns a float that represents a timestamp. - """ - if iso_time == "0.0" or iso_time == "0": - return float(iso_time) - else: - dt = None - try: - dt = parser.parse(iso_time) - print("{} is an iso 8601 datetime".format(iso_time)) - except Exception as e: - print("{} is not an iso 8601 datetime".format(iso_time)) - print("Exception : {}".format(e)) - try: - dt = datetime.fromtimestamp(int(round(float(iso_time)))) - print("{} is a timestamp".format(iso_time)) - except Exception as e: - print("{} is not a timestamp".format(iso_time)) - print("Exception : {}".format(e)) - print("Parser would give : {}".format(parser.parse(iso_time))) - finally: - if dt: - return dt.timestamp() - else: - return float(iso_time) - - -def format_prometheus_output(res): - response = "" - for k, v in res.items(): - if "value" in v and "type" in v: - if "description" not in v: - v["description"] = "TODO: define me" - response += format_prometheus_metric( - k, - "{}. {}".format( - v["description"], "In {} ({}).".format(v["long_unit"], v["unit"]) - ), - v["type"], - v["value"], - ) - # response += format_prometheus_metric("energy_consumption", "Energy consumed in the evaluation time window (evaluated at least for an hour, be careful if the time windows is lower than 1 hour), in Wh", "counter", res["emissions_calculation_data"]["energy_consumption"]) - else: - for x, y in v.items(): - if "value" in y and "type" in y: - if "description" not in y: - y["description"] = "TODO: define me" - response += format_prometheus_metric( - "{}_{}".format(k, x), - "{}. {}".format( - y["description"], - "In {} ({}).".format(y["long_unit"], y["unit"]), - ), - y["type"], - y["value"], - ) - - return response - - -def format_prometheus_metric( - metric_name, metric_description, metric_type, metric_value -): - response = """# HELP {} {} -# TYPE {} {} -{} {} -""".format( - metric_name, - metric_description, - metric_name, - metric_type, - metric_name, - metric_value, - ) - return response - - -def filter_date_range(data: list, start_date: datetime, stop_date: datetime) -> list: - - lower_index = 0 - upper_index = 0 - - start = datetime.timestamp(start_date) - end = datetime.timestamp(stop_date) - - for d in data: - if d["timestamp"] < start: - lower_index += 1 - if d["timestamp"] < end: - upper_index += 1 - - return data[lower_index:upper_index] - - -def format_scaphandre_json(file: str | PathLike) -> str: - with open(file, "r") as fd: - formatted_scaphandre_json = f"[{fd.read()}]".replace( - '{"host"', ',{"host"' - ).replace(',{"host"', '{"host"', 1) - return formatted_scaphandre_json diff --git a/boagent/hardware/__init__.py b/boagent/hardware/__init__.py index 81d4b53..e69de29 100644 --- a/boagent/hardware/__init__.py +++ b/boagent/hardware/__init__.py @@ -1 +0,0 @@ -from .hardware_cli import main, get_ram, get_cpus, get_disks diff --git a/boagent/hardware/cpu.py b/boagent/hardware/cpu.py index 8d11c22..79a64f7 100644 --- a/boagent/hardware/cpu.py +++ b/boagent/hardware/cpu.py @@ -2,11 +2,11 @@ from cpuid import cpuid, cpu_microarchitecture from typing import TypeAlias -from lshw import LSHW +from .lshw import Lshw CpuInfo: TypeAlias = list[dict[str, str | tuple | dict[str, str] | dict]] -lshw_data = LSHW() +lshw_data = Lshw() """ def get_socket_number_linux(location: str = "/sys/devices/system/node/possible") -> int: with open(location, 'r') as f: diff --git a/boagent/hardware/hardware_cli.py b/boagent/hardware/hardware_cli.py index acd350f..fc2c0d2 100755 --- a/boagent/hardware/hardware_cli.py +++ b/boagent/hardware/hardware_cli.py @@ -3,7 +3,7 @@ import click import json import sys -from lshw import Lshw +from .lshw import Lshw # from disk import search_physical_drives # from cpu import get_cpus diff --git a/boagent/hardware/lshw/__init__.py b/boagent/hardware/lshw/__init__.py deleted file mode 100644 index 1512487..0000000 --- a/boagent/hardware/lshw/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .lshw import Lshw diff --git a/boagent/hardware/lshw/lshw.py b/boagent/hardware/lshw/lshw.py deleted file mode 100644 index b5e0dd0..0000000 --- a/boagent/hardware/lshw/lshw.py +++ /dev/null @@ -1,267 +0,0 @@ -from shutil import which -import subprocess -import logging -import json -import sys -import re -import os - -# Commented elements only available when runnning `lshw` as `sudo`. - -SYS_BLOCK_PATH = "/sys/block" - - -def is_tool(name): - """Check whether `name` is on PATH and marked as executable""" - return which(name) is not None - - -class Lshw: - def __init__(self): - if not is_tool("lshw"): - logging.error("lshw does not seem to be installed") - sys.exit(1) - - data = subprocess.getoutput("sudo lshw -quiet -json 2> /dev/null") - json_data = json.loads(data) - # Starting from version 02.18, `lshw -json` wraps its result in a list - # rather than returning directly a dictionary - if isinstance(json_data, list): - self.hw_info = json_data[0] - else: - self.hw_info = json_data - self.info = {} - self.memories = [] - # self.interfaces = [] - self.cpus = [] - self.power = [] - self.disks = [] - self.gpus = [] - # self.vendor = self.hw_info["vendor"] - # self.product = self.hw_info["product"] - # self.chassis_serial = self.hw_info["serial"] - self.motherboard_serial = self.hw_info["children"][0].get("serial", "No S/N") - self.motherboard = self.hw_info["children"][0].get("product", "Motherboard") - - for k in self.hw_info["children"]: - if k["class"] == "power": - # self.power[k["id"]] = k - self.power.append(k) - - if "children" in k: - for j in k["children"]: - if j["class"] == "generic": - continue - - if j["class"] == "storage": - self.find_storage(j) - - if j["class"] == "memory": - self.find_memories(j) - - if j["class"] == "processor": - self.find_cpus(j) - - if j["class"] == "bridge": - self.walk_bridge(j) - - def get_hw_linux(self, hwclass): - if hwclass == "cpu": - return self.cpus - if hwclass == "gpu": - return self.gpus - """ if hwclass == "network": - return self.interfaces """ - if hwclass == "storage": - return self.disks - if hwclass == "memory": - return self.memories - - """ - def find_network(self, obj): - # Some interfaces do not have device (logical) name (eth0, for - # instance), such as not connected network mezzanine cards in blade - # servers. In such situations, the card will be named `unknown[0-9]`. - unkn_intfs = [] - for i in self.interfaces: - # newer versions of lshw can return a list of names, see issue #227 - if not isinstance(i["name"], list): - if i["name"].startswith("unknown"): - unkn_intfs.push(i) - else: - for j in i["name"]: - if j.startswith("unknown"): - unkn_intfs.push(j) - - unkn_name = "unknown{}".format(len(unkn_intfs)) - self.interfaces.append( - { - "name": obj.get("logicalname", unkn_name), - "macaddress": obj.get("serial", ""), - "serial": obj.get("serial", ""), - "product": obj["product"], - "vendor": obj["vendor"], - "description": obj["description"], - } - ) - """ - - def find_storage(self, obj): - if "children" in obj: - for device in obj["children"]: - if "vendor" in device and "size" in device: - d = { - "units": +1, - "manufacturer": self.check_disk_vendor( - device["vendor"] - ).lower(), - "capacity": device["size"], - "logicalname": device["logicalname"], - "type": self.get_disk_type(device["logicalname"]), - } - self.disks.append(d) - if "nvme" in obj["configuration"]["driver"]: - if not is_tool("nvme"): - logging.error("nvme-cli >= 1.0 does not seem to be installed") - raise Exception("nvme-cli >= 1.0 does not seem to be installed") - try: - nvme = json.loads( - subprocess.check_output( - ["sudo", "nvme", "-list", "-o", "json"], encoding="utf8" - ) - ) - for device in nvme["Devices"]: - d = { - "units": +1, - "logicalname": device["DevicePath"], - "manufacturer": self.check_disk_vendor( - device["ModelNumber"] - ).lower(), - "type": "ssd", - } - if "UsedSize" in device: - d["capacity"] = device["UsedSize"] // 1073741824 - if "UsedBytes" in device: - d["capacity"] = device["UsedBytes"] // 1073741824 - self.disks.append(d) - except Exception: - pass - - def find_cpus(self, obj): - if "product" in obj: - self.cpus.append( - { - "units": +1, - "name": obj["product"], - "vendor": obj["vendor"], - "core_units": obj["configuration"]["cores"], - # "description": obj["description"], - # "location": obj["slot"], - } - ) - - def find_memories(self, obj): - if "children" not in obj: - # print("not a DIMM memory.") - return - - for dimm in obj["children"]: - if "empty" in dimm["description"]: - continue - - self.memories.append( - { - "units": +1, - "manufacturer": dimm.get("vendor", "N/A"), - "capacity": dimm.get("size", 0) // 2**20 // 1024, - } - ) - - def find_gpus(self, obj): - if "product" in obj: - self.gpus.append( - { - "product": obj["product"], - "vendor": obj["vendor"], - "description": obj["description"], - } - ) - - def walk_bridge(self, obj): - if "children" not in obj: - return - - for bus in obj["children"]: - if bus["class"] == "storage": - self.find_storage(bus) - if bus["class"] == "display": - self.find_gpus(bus) - - if "children" in bus: - for b in bus["children"]: - if b["class"] == "storage": - self.find_storage(b) - # if b["class"] == "network": - # self.find_network(b) - if b["class"] == "display": - self.find_gpus(b) - - def check_disk_vendor(self, model_string: str) -> str: - split_model = model_string.split(" ") - vendor = "" - - if len(split_model) == 1: - check_string_for_numbers = bool(re.search("\\d", model_string)) - if check_string_for_numbers: - raise Exception( - "Lshw did not output an acceptable manufacturer name for this device." - ) - else: - return model_string - - model_first_str = split_model[0] - model_second_str = split_model[1] - check_first_string_for_numbers = re.search("\\d", model_first_str) - result = bool(check_first_string_for_numbers) - - if result: - vendor = model_second_str - return vendor - else: - vendor = model_first_str - return vendor - - def get_disk_type(self, dev_path: str) -> str: - - rotational = self.get_rotational_int(dev_path) - - if rotational == 0: - return "ssd" - if rotational == 1: - return "hdd" - if rotational == 2: - return "unknown" - return "unknown" - - def get_rotational_int(self, dev_path: str) -> int: - - device = dev_path.removeprefix("/dev") - - try: - rotational_fp = os.path.realpath( - f"{SYS_BLOCK_PATH}{device}/queue/rotational", strict=True - ) - print(rotational_fp) - - except OSError: - print("Rotational file was not found") - return 2 - else: - with open(rotational_fp, "r") as file: - rotational_int = int(file.read()) - return rotational_int - - -""" -if __name__ == "__main__": - pass """ diff --git a/boagent/tests/__init__.py b/tests/__init__.py similarity index 100% rename from boagent/tests/__init__.py rename to tests/__init__.py diff --git a/boagent/tests/api/test_api_integration.py b/tests/api/test_api_integration.py similarity index 99% rename from boagent/tests/api/test_api_integration.py rename to tests/api/test_api_integration.py index 0b1eec5..afbb30f 100644 --- a/boagent/tests/api/test_api_integration.py +++ b/tests/api/test_api_integration.py @@ -2,7 +2,7 @@ from fastapi.testclient import TestClient from unittest import TestCase from pytest import mark -from config import Settings +from boagent.api.config import Settings # Mocks for testing environment settings = Settings( diff --git a/boagent/tests/api/test_api_unit.py b/tests/api/test_api_unit.py similarity index 89% rename from boagent/tests/api/test_api_unit.py rename to tests/api/test_api_unit.py index 3907b23..ace15cf 100644 --- a/boagent/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -1,7 +1,10 @@ +import os +import json + from unittest import TestCase, TestSuite, TestLoader from unittest.mock import patch -from api.api import ( +from boagent.api.api import ( build_hardware_data, read_hardware_data, get_hardware_data, @@ -12,21 +15,28 @@ get_metrics, ) -from api.utils import format_scaphandre_json -import os -import json +from boagent.api.utils import format_scaphandre_json current_dir = os.path.dirname(__file__) mock_power_data = os.path.join(f"{current_dir}", "../mocks/power_data.json") mock_hardware_data = os.path.join(f"{current_dir}", "../mocks/hardware_data.json") -mock_boaviztapi_response_not_verbose = os.path.join(f"{current_dir}", "../mocks/boaviztapi_response_not_verbose.json") -mock_boaviztapi_response_verbose = os.path.join(f"{current_dir}", "../mocks/boaviztapi_response_verbose.json") -mock_formatted_scaphandre = os.path.join(f"{current_dir}", "../mocks/formatted_scaphandre.json") +mock_boaviztapi_response_not_verbose = os.path.join( + f"{current_dir}", "../mocks/boaviztapi_response_not_verbose.json" +) +mock_boaviztapi_response_verbose = os.path.join( + f"{current_dir}", "../mocks/boaviztapi_response_verbose.json" +) +mock_formatted_scaphandre = os.path.join( + f"{current_dir}", "../mocks/formatted_scaphandre.json" +) hardware_cli = os.path.join(f"{current_dir}", "") -hardware_data = os.path.join(f"{current_dir}", "../../hardware/hardware_data.json") +hardware_data = os.path.join( + f"{current_dir}", "../../boagent/hardware/hardware_data.json" +) +@patch("boagent.api.build_hardware_data") class ReadHardwareDataTest(TestCase): def test_build_hardware_data(self): @@ -41,7 +51,7 @@ def test_read_hardware_data(self): assert type(data["rams"]) is list assert type(data["disks"]) is list - @patch("api.build_hardware_data") + @patch("boagent.api.build_hardware_data") def test_get_hardware_data_with_fetch_hardware_false(self, mocked_build_hardware): # Test case where hardware_data.json is already present on the @@ -116,7 +126,6 @@ def test_format_usage_request_with_time_workload_as_percentage(self): class ComputeAvgConsumptionTest(TestCase): - def test_compute_average_consumption(self): power_data = format_scaphandre_json(f"{mock_power_data}") @@ -137,10 +146,12 @@ def setUp(self) -> None: self.formatted_scaphandre = f"{mock_formatted_scaphandre}" - @patch("api.api.format_scaphandre_json") + @patch("boagent.api.api.format_scaphandre_json") def test_get_power_data(self, mocked_format_scaphandre_json): - mocked_format_scaphandre_json.return_value = open(mock_formatted_scaphandre, "r").read() + mocked_format_scaphandre_json.return_value = open( + mock_formatted_scaphandre, "r" + ).read() power_data = get_power_data(self.start_time, self.end_time) @@ -148,12 +159,14 @@ def test_get_power_data(self, mocked_format_scaphandre_json): assert "raw_data" in power_data assert "avg_power" in power_data - @patch("api.api.format_scaphandre_json") + @patch("boagent.api.api.format_scaphandre_json") def test_get_power_data_with_short_time_interval( self, mocked_format_scaphandre_json ): - mocked_format_scaphandre_json.return_value = open(mock_formatted_scaphandre, "r").read() + mocked_format_scaphandre_json.return_value = open( + mock_formatted_scaphandre, "r" + ).read() power_data = get_power_data( self.short_interval_start_time, self.short_interval_end_time @@ -184,7 +197,7 @@ def setUp(self) -> None: with open(mock_boaviztapi_response_not_verbose, "r") as file: self.boaviztapi_data = json.load(file) - @patch("api.api.query_machine_impact_data") + @patch("boagent.api.api.query_machine_impact_data") def test_get_metrics_with_time_workload_as_percentage( self, mocked_query_machine_impact_data ): @@ -208,7 +221,7 @@ def test_get_metrics_with_time_workload_as_percentage( assert "embedded_abiotic_resources_depletion" in metrics assert "embedded_primary_energy" in metrics - @patch("api.api.query_machine_impact_data") + @patch("boagent.api.api.query_machine_impact_data") def test_get_metrics_with_time_workload_as_list_of_dicts( self, mocked_query_machine_impact_data ): @@ -251,7 +264,7 @@ def setUp(self) -> None: with open(mock_boaviztapi_response_verbose, "r") as file: self.boaviztapi_data = json.load(file) - @patch("api.api.query_machine_impact_data") + @patch("boagent.api.api.query_machine_impact_data") def test_get_metrics_verbose_with_time_workload_percentage( self, mocked_query_machine_impact_data ): @@ -277,7 +290,7 @@ def test_get_metrics_verbose_with_time_workload_percentage( assert "raw_data" in metrics assert "electricity_carbon_intensity" in metrics - @patch("api.api.query_machine_impact_data") + @patch("boagent.api.api.query_machine_impact_data") def test_get_metrics_verbose_with_time_workload_as_list_of_dicts( self, mocked_query_machine_impact_data ): @@ -323,8 +336,8 @@ def setUp(self) -> None: power_data["avg_power"] = 11.86 self.power_data = power_data - @patch("api.api.query_machine_impact_data") - @patch("api.api.get_power_data") + @patch("boagent.api.api.query_machine_impact_data") + @patch("boagent.api.api.get_power_data") def test_get_metrics_verbose_with_scaphandre( self, mocked_query_machine_impact_data, mocked_power_data ): diff --git a/boagent/tests/hardware/test_hardwarecli.py b/tests/hardware/test_hardwarecli.py similarity index 93% rename from boagent/tests/hardware/test_hardwarecli.py rename to tests/hardware/test_hardwarecli.py index cd7000f..51c6a5f 100644 --- a/boagent/tests/hardware/test_hardwarecli.py +++ b/tests/hardware/test_hardwarecli.py @@ -1,6 +1,6 @@ from unittest import TestCase from os.path import exists -from hardware.hardware_cli import main, get_cpus, get_ram, get_disks +from boagent.hardware.hardware_cli import main, get_cpus, get_ram, get_disks from click.testing import CliRunner diff --git a/boagent/tests/hardware/test_lshw.py b/tests/hardware/test_lshw.py similarity index 96% rename from boagent/tests/hardware/test_lshw.py rename to tests/hardware/test_lshw.py index 5c23e32..f34214c 100644 --- a/boagent/tests/hardware/test_lshw.py +++ b/tests/hardware/test_lshw.py @@ -1,5 +1,5 @@ from unittest import TestCase -from hardware.lshw.lshw import Lshw +from boagent.hardware.lshw import Lshw from unittest.mock import patch from json import load from os import path @@ -106,7 +106,7 @@ def test_read_disk_dev_name(self): assert "logicalname" in disk assert type(disk["logicalname"]) is str - @patch("hardware.lshw.Lshw.get_rotational_int") + @patch("boagent.hardware.lshw.Lshw.get_rotational_int") def test_check_disk_type_is_ssd(self, mocked_get_rotational): dev_logicalname = "/dev/ssdonsata" @@ -115,7 +115,7 @@ def test_check_disk_type_is_ssd(self, mocked_get_rotational): disk_type = hw.get_disk_type(dev_logicalname) assert disk_type == "ssd" - @patch("hardware.lshw.Lshw.get_rotational_int") + @patch("boagent.hardware.lshw.Lshw.get_rotational_int") def test_check_disk_type_is_hdd(self, mocked_get_rotational): dev_logicalname = "/dev/sdaex" @@ -137,7 +137,7 @@ def test_read_disk_type_when_dev_path_not_found(self): disk_type = hw.get_disk_type(dev_erroneous_name) assert disk_type == "unknown" - @patch("hardware.lshw.lshw.is_tool") + @patch("boagent.hardware.lshw.is_tool") def test_check_nvme_cli_is_installed_to_find_storage_and_raises_error_if_not( self, mocked_is_tool ): diff --git a/boagent/tests/mocks/boaviztapi_response_not_verbose.json b/tests/mocks/boaviztapi_response_not_verbose.json similarity index 100% rename from boagent/tests/mocks/boaviztapi_response_not_verbose.json rename to tests/mocks/boaviztapi_response_not_verbose.json diff --git a/boagent/tests/mocks/boaviztapi_response_verbose.json b/tests/mocks/boaviztapi_response_verbose.json similarity index 100% rename from boagent/tests/mocks/boaviztapi_response_verbose.json rename to tests/mocks/boaviztapi_response_verbose.json diff --git a/boagent/tests/mocks/formatted_scaphandre.json b/tests/mocks/formatted_scaphandre.json similarity index 100% rename from boagent/tests/mocks/formatted_scaphandre.json rename to tests/mocks/formatted_scaphandre.json diff --git a/boagent/tests/mocks/hardware_data.json b/tests/mocks/hardware_data.json similarity index 99% rename from boagent/tests/mocks/hardware_data.json rename to tests/mocks/hardware_data.json index 1e9bae9..de474fd 100644 --- a/boagent/tests/mocks/hardware_data.json +++ b/tests/mocks/hardware_data.json @@ -216,4 +216,4 @@ } ], "mother_board": {} -} \ No newline at end of file +} diff --git a/tests/mocks/hubblo-ci-01_lshw.json b/tests/mocks/hubblo-ci-01_lshw.json new file mode 100644 index 0000000..d2974e8 --- /dev/null +++ b/tests/mocks/hubblo-ci-01_lshw.json @@ -0,0 +1,2577 @@ +[ +{ + "id" : "hubblo-ci-01", + "class" : "system", + "claimed" : true, + "handle" : "DMI:0001", + "description" : "Computer", + "product" : "SYS-5038MD-H24TRF-OS012 (To be filled by O.E.M.)", + "vendor" : "Supermicro", + "version" : "0123456789", + "serial" : "E229246X7800249", + "width" : 64, + "configuration" : { + "boot" : "normal", + "family" : "To be filled by O.E.M.", + "sku" : "To be filled by O.E.M.", + "uuid" : "00000000-0000-0000-0000-AC1F6B2152A2" + }, + "capabilities" : { + "smbios-2.8" : "SMBIOS version 2.8", + "dmi-2.8" : "DMI version 2.8", + "smp" : "Symmetric Multi-Processing", + "vsyscall32" : "32-bit processes" + } { + "id" : "core", + "class" : "bus", + "claimed" : true, + "handle" : "DMI:0002", + "description" : "Motherboard", + "product" : "X10SDE-DF", + "vendor" : "Supermicro", + "physid" : "0", + "version" : "1.01", + "serial" : "VM174S002908", + "slot" : "To be filled by O.E.M." { + "id" : "firmware", + "class" : "memory", + "claimed" : true, + "description" : "BIOS", + "vendor" : "American Megatrends Inc.", + "physid" : "0", + "version" : "2.0", + "date" : "06/13/2018", + "units" : "bytes", + "size" : 65536, + "capacity" : 16777216, + "capabilities" : { + "pci" : "PCI bus", + "upgrade" : "BIOS EEPROM can be upgraded", + "shadowing" : "BIOS shadowing", + "cdboot" : "Booting from CD-ROM/DVD", + "bootselect" : "Selectable boot path", + "socketedrom" : "BIOS ROM is socketed", + "edd" : "Enhanced Disk Drive extensions", + "int13floppy1200" : "5.25\" 1.2MB floppy", + "int13floppy720" : "3.5\" 720KB floppy", + "int13floppy2880" : "3.5\" 2.88MB floppy", + "int5printscreen" : "Print Screen key", + "int9keyboard" : "i8042 keyboard controller", + "int14serial" : "INT14 serial line control", + "int17printer" : "INT17 printer control", + "acpi" : "ACPI", + "usb" : "USB legacy emulation", + "biosbootspecification" : "BIOS boot specification", + "uefi" : "UEFI specification is supported" + } + }, + { + "id" : "memory", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0011", + "description" : "System Memory", + "physid" : "11", + "slot" : "System board or motherboard", + "units" : "bytes", + "size" : 34359738368, + "configuration" : { + "errordetection" : "multi-bit-ecc" + }, + "capabilities" : { + "ecc" : "Multi-bit error-correcting code (ECC)" + } { + "id" : "bank:0", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0013", + "description" : "DIMM DDR4 Synchronous 2400 MHz (0.4 ns)", + "product" : "18ADF2G72AZ-2G3B1", + "vendor" : "Micron", + "physid" : "0", + "serial" : "1743274D", + "slot" : "P2-DIMMA1", + "units" : "bytes", + "size" : 17179869184, + "width" : 64, + "clock" : 2400000000 + }, + { + "id" : "bank:1", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0015", + "description" : "DIMM DDR4 Synchronous [empty]", + "product" : "NO DIMM", + "vendor" : "NO DIMM", + "physid" : "1", + "serial" : "NO DIMM", + "slot" : "P2-DIMMA2" + }, + { + "id" : "bank:2", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0016", + "description" : "DIMM DDR4 Synchronous 2400 MHz (0.4 ns)", + "product" : "18ADF2G72AZ-2G3B1", + "vendor" : "Micron", + "physid" : "2", + "serial" : "174329B5", + "slot" : "P2-DIMMB1", + "units" : "bytes", + "size" : 17179869184, + "width" : 64, + "clock" : 2400000000 + }, + { + "id" : "bank:3", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0018", + "description" : "DIMM DDR4 Synchronous [empty]", + "product" : "NO DIMM", + "vendor" : "NO DIMM", + "physid" : "3", + "serial" : "NO DIMM", + "slot" : "P2-DIMMB2" + }, + + }, + { + "id" : "cache:0", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:001A", + "description" : "L2 cache", + "physid" : "1a", + "slot" : "L1 Cache", + "units" : "bytes", + "size" : 393216, + "capacity" : 393216, + "configuration" : { + "level" : "2" + }, + "capabilities" : { + "internal" : "Internal", + "write-back" : "Write-back" + } + }, + { + "id" : "cache:1", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:001B", + "description" : "L3 cache", + "physid" : "1b", + "slot" : "L2 Cache", + "units" : "bytes", + "size" : 1572864, + "capacity" : 1572864, + "configuration" : { + "level" : "3" + }, + "capabilities" : { + "internal" : "Internal", + "write-back" : "Write-back", + "unified" : "Unified cache" + } + }, + { + "id" : "cache:2", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:001C", + "description" : "L4 cache", + "physid" : "1c", + "slot" : "L3 Cache", + "units" : "bytes", + "size" : 9437184, + "capacity" : 9437184, + "configuration" : { + "level" : "4" + }, + "capabilities" : { + "internal" : "Internal", + "write-back" : "Write-back", + "unified" : "Unified cache" + } + }, + { + "id" : "cpu", + "class" : "processor", + "claimed" : true, + "handle" : "DMI:001D", + "description" : "CPU", + "product" : "Intel(R) Xeon(R) CPU D-1531 @ 2.20GHz", + "vendor" : "Intel Corp.", + "physid" : "1d", + "businfo" : "cpu@0", + "version" : "Intel(R) Xeon(R) CPU D-1531 @ 2.20GHz", + "slot" : "CPU1", + "units" : "Hz", + "size" : 2312462000, + "capacity" : 4000000000, + "width" : 64, + "clock" : 100000000, + "configuration" : { + "cores" : "6", + "enabledcores" : "6", + "threads" : "12" + }, + "capabilities" : { + "lm" : "64bits extensions (x86-64)", + "fpu" : "mathematical co-processor", + "fpu_exception" : "FPU exceptions reporting", + "wp" : true, + "vme" : "virtual mode extensions", + "de" : "debugging extensions", + "pse" : "page size extensions", + "tsc" : "time stamp counter", + "msr" : "model-specific registers", + "pae" : "4GB+ memory addressing (Physical Address Extension)", + "mce" : "machine check exceptions", + "cx8" : "compare and exchange 8-byte", + "apic" : "on-chip advanced programmable interrupt controller (APIC)", + "sep" : "fast system calls", + "mtrr" : "memory type range registers", + "pge" : "page global enable", + "mca" : "machine check architecture", + "cmov" : "conditional move instruction", + "pat" : "page attribute table", + "pse36" : "36-bit page size extensions", + "clflush" : true, + "dts" : "debug trace and EMON store MSRs", + "acpi" : "thermal control (ACPI)", + "mmx" : "multimedia extensions (MMX)", + "fxsr" : "fast floating point save/restore", + "sse" : "streaming SIMD extensions (SSE)", + "sse2" : "streaming SIMD extensions (SSE2)", + "ss" : "self-snoop", + "ht" : "HyperThreading", + "tm" : "thermal interrupt and status", + "pbe" : "pending break event", + "syscall" : "fast system calls", + "nx" : "no-execute bit (NX)", + "pdpe1gb" : true, + "rdtscp" : true, + "x86-64" : "64bits extensions (x86-64)", + "constant_tsc" : true, + "arch_perfmon" : true, + "pebs" : true, + "bts" : true, + "rep_good" : true, + "nopl" : true, + "xtopology" : true, + "nonstop_tsc" : true, + "cpuid" : true, + "aperfmperf" : true, + "pni" : true, + "pclmulqdq" : true, + "dtes64" : true, + "monitor" : true, + "ds_cpl" : true, + "vmx" : true, + "smx" : true, + "est" : true, + "tm2" : true, + "ssse3" : true, + "sdbg" : true, + "fma" : true, + "cx16" : true, + "xtpr" : true, + "pdcm" : true, + "pcid" : true, + "dca" : true, + "sse4_1" : true, + "sse4_2" : true, + "x2apic" : true, + "movbe" : true, + "popcnt" : true, + "tsc_deadline_timer" : true, + "aes" : true, + "xsave" : true, + "avx" : true, + "f16c" : true, + "rdrand" : true, + "lahf_lm" : true, + "abm" : true, + "3dnowprefetch" : true, + "cpuid_fault" : true, + "epb" : true, + "cat_l3" : true, + "cdp_l3" : true, + "invpcid_single" : true, + "pti" : true, + "intel_ppin" : true, + "ssbd" : true, + "ibrs" : true, + "ibpb" : true, + "stibp" : true, + "tpr_shadow" : true, + "vnmi" : true, + "flexpriority" : true, + "ept" : true, + "vpid" : true, + "ept_ad" : true, + "fsgsbase" : true, + "tsc_adjust" : true, + "bmi1" : true, + "hle" : true, + "avx2" : true, + "smep" : true, + "bmi2" : true, + "erms" : true, + "invpcid" : true, + "rtm" : true, + "cqm" : true, + "rdt_a" : true, + "rdseed" : true, + "adx" : true, + "smap" : true, + "intel_pt" : true, + "xsaveopt" : true, + "cqm_llc" : true, + "cqm_occup_llc" : true, + "cqm_mbm_total" : true, + "cqm_mbm_local" : true, + "dtherm" : true, + "ida" : true, + "arat" : true, + "pln" : true, + "pts" : true, + "hwp" : true, + "flush_l1d" : true, + "cpufreq" : "CPU Frequency scaling" + } + }, + { + "id" : "pci", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:00", + "description" : "Host bridge", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DMI2", + "vendor" : "Intel Corporation", + "physid" : "100", + "businfo" : "pci@0000:00:00.0", + "version" : "03", + "width" : 32, + "clock" : 33000000 { + "id" : "pci:0", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:01", + "description" : "PCI bridge", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 2", + "vendor" : "Intel Corporation", + "physid" : "2", + "businfo" : "pci@0000:00:02.0", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "pm" : "Power Management", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } { + "id" : "generic:0", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:01:00.0", + "description" : "System peripheral", + "product" : "Xeon Processor D Family QuickData Technology Register DMA Channel 0", + "vendor" : "Intel Corporation", + "physid" : "0", + "businfo" : "pci@0000:01:00.0", + "version" : "00", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "ioatdma", + "latency" : "0" + }, + "capabilities" : { + "pciexpress" : "PCI Express", + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "msix" : "MSI-X", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:1", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:01:00.1", + "description" : "System peripheral", + "product" : "Xeon Processor D Family QuickData Technology Register DMA Channel 1", + "vendor" : "Intel Corporation", + "physid" : "0.1", + "businfo" : "pci@0000:01:00.1", + "version" : "00", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "ioatdma", + "latency" : "0" + }, + "capabilities" : { + "pciexpress" : "PCI Express", + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "msix" : "MSI-X", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:2", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:01:00.2", + "description" : "System peripheral", + "product" : "Xeon Processor D Family QuickData Technology Register DMA Channel 2", + "vendor" : "Intel Corporation", + "physid" : "0.2", + "businfo" : "pci@0000:01:00.2", + "version" : "00", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "ioatdma", + "latency" : "0" + }, + "capabilities" : { + "pciexpress" : "PCI Express", + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "msix" : "MSI-X", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:3", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:01:00.3", + "description" : "System peripheral", + "product" : "Xeon Processor D Family QuickData Technology Register DMA Channel 3", + "vendor" : "Intel Corporation", + "physid" : "0.3", + "businfo" : "pci@0000:01:00.3", + "version" : "00", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "ioatdma", + "latency" : "0" + }, + "capabilities" : { + "pciexpress" : "PCI Express", + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "msix" : "MSI-X", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + + }, + { + "id" : "pci:1", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:02", + "description" : "PCI bridge", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 2", + "vendor" : "Intel Corporation", + "physid" : "2.2", + "businfo" : "pci@0000:00:02.2", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "pm" : "Power Management", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "pci:2", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:03", + "description" : "PCI bridge", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 3", + "vendor" : "Intel Corporation", + "physid" : "3", + "businfo" : "pci@0000:00:03.0", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "pm" : "Power Management", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:0", + "class" : "generic", + "handle" : "PCI:0000:00:05.0", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Map/VTd_Misc/System Management", + "vendor" : "Intel Corporation", + "physid" : "5", + "businfo" : "pci@0000:00:05.0", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "pciexpress" : "PCI Express", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:1", + "class" : "generic", + "handle" : "PCI:0000:00:05.1", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO Hot Plug", + "vendor" : "Intel Corporation", + "physid" : "5.1", + "businfo" : "pci@0000:00:05.1", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:2", + "class" : "generic", + "handle" : "PCI:0000:00:05.2", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D IIO RAS/Control Status/Global Errors", + "vendor" : "Intel Corporation", + "physid" : "5.2", + "businfo" : "pci@0000:00:05.2", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "pciexpress" : "PCI Express", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "communication:0", + "class" : "communication", + "handle" : "PCI:0000:00:16.0", + "description" : "Communication controller", + "product" : "8 Series/C220 Series Chipset Family MEI Controller #1", + "vendor" : "Intel Corporation", + "physid" : "16", + "businfo" : "pci@0000:00:16.0", + "version" : "04", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "communication:1", + "class" : "communication", + "handle" : "PCI:0000:00:16.1", + "description" : "Communication controller", + "product" : "8 Series/C220 Series Chipset Family MEI Controller #2", + "vendor" : "Intel Corporation", + "physid" : "16.1", + "businfo" : "pci@0000:00:16.1", + "version" : "04", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "usb:0", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:00:1a.0", + "description" : "USB controller", + "product" : "8 Series/C220 Series Chipset Family USB EHCI #2", + "vendor" : "Intel Corporation", + "physid" : "1a", + "businfo" : "pci@0000:00:1a.0", + "version" : "05", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "ehci-pci", + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "debug" : "Debug port", + "ehci" : "Enhanced Host Controller Interface (USB2)", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } { + "id" : "usbhost", + "class" : "bus", + "claimed" : true, + "handle" : "USB:1:1", + "product" : "EHCI Host Controller", + "vendor" : "Linux 5.10.0-19-amd64 ehci_hcd", + "physid" : "1", + "businfo" : "usb@1", + "logicalname" : "usb1", + "version" : "5.10", + "configuration" : { + "driver" : "hub", + "slots" : "2", + "speed" : "480Mbit/s" + }, + "capabilities" : { + "usb-2.00" : "USB 2.0" + } { + "id" : "usb", + "class" : "bus", + "claimed" : true, + "handle" : "USB:1:2", + "description" : "USB hub", + "product" : "Integrated Rate Matching Hub", + "vendor" : "Intel Corp.", + "physid" : "1", + "businfo" : "usb@1:1", + "version" : "0.05", + "configuration" : { + "driver" : "hub", + "slots" : "4", + "speed" : "480Mbit/s" + }, + "capabilities" : { + "usb-2.00" : "USB 2.0" + } + }, + + }, + + }, + { + "id" : "pci:3", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:04", + "description" : "PCI bridge", + "product" : "8 Series/C220 Series Chipset Family PCI Express Root Port #1", + "vendor" : "Intel Corporation", + "physid" : "1c", + "businfo" : "pci@0000:00:1c.0", + "version" : "d5", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } { + "id" : "network:0", + "class" : "network", + "claimed" : true, + "handle" : "PCI:0000:04:00.0", + "description" : "Ethernet interface", + "product" : "I350 Gigabit Network Connection", + "vendor" : "Intel Corporation", + "physid" : "0", + "businfo" : "pci@0000:04:00.0", + "logicalname" : "eno1", + "version" : "01", + "serial" : "ac:1f:6b:21:52:a2", + "units" : "bit/s", + "size" : 1000000000, + "capacity" : 1000000000, + "width" : 32, + "clock" : 33000000, + "configuration" : { + "autonegotiation" : "on", + "broadcast" : "yes", + "driver" : "igb", + "driverversion" : "5.10.0-19-amd64", + "duplex" : "full", + "firmware" : "1.63, 0x800009fa", + "ip" : "51.15.191.107", + "latency" : "0", + "link" : "yes", + "multicast" : "yes", + "port" : "twisted pair", + "speed" : "1Gbit/s" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "msix" : "MSI-X", + "pciexpress" : "PCI Express", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "ethernet" : true, + "physical" : "Physical interface", + "tp" : "twisted pair", + "10bt" : "10Mbit/s", + "10bt-fd" : "10Mbit/s (full duplex)", + "100bt" : "100Mbit/s", + "100bt-fd" : "100Mbit/s (full duplex)", + "1000bt-fd" : "1Gbit/s (full duplex)", + "autonegotiation" : "Auto-negotiation" + } + }, + { + "id" : "network:1", + "class" : "network", + "disabled" : true, + "claimed" : true, + "handle" : "PCI:0000:04:00.1", + "description" : "Ethernet interface", + "product" : "I350 Gigabit Network Connection", + "vendor" : "Intel Corporation", + "physid" : "0.1", + "businfo" : "pci@0000:04:00.1", + "logicalname" : "eno2", + "version" : "01", + "serial" : "ac:1f:6b:21:52:a3", + "units" : "bit/s", + "capacity" : 1000000000, + "width" : 32, + "clock" : 33000000, + "configuration" : { + "autonegotiation" : "on", + "broadcast" : "yes", + "driver" : "igb", + "driverversion" : "5.10.0-19-amd64", + "firmware" : "1.63, 0x800009fa", + "latency" : "0", + "link" : "no", + "multicast" : "yes", + "port" : "twisted pair" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "msix" : "MSI-X", + "pciexpress" : "PCI Express", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "ethernet" : true, + "physical" : "Physical interface", + "tp" : "twisted pair", + "10bt" : "10Mbit/s", + "10bt-fd" : "10Mbit/s (full duplex)", + "100bt" : "100Mbit/s", + "100bt-fd" : "100Mbit/s (full duplex)", + "1000bt-fd" : "1Gbit/s (full duplex)", + "autonegotiation" : "Auto-negotiation" + } + }, + + }, + { + "id" : "pci:4", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:05", + "description" : "PCI bridge", + "product" : "8 Series/C220 Series Chipset Family PCI Express Root Port #5", + "vendor" : "Intel Corporation", + "physid" : "1c.4", + "businfo" : "pci@0000:00:1c.4", + "version" : "d5", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } { + "id" : "pci", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:06", + "description" : "PCI bridge", + "product" : "AST1150 PCI-to-PCI Bridge", + "vendor" : "ASPEED Technology, Inc.", + "physid" : "0", + "businfo" : "pci@0000:05:00.0", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "capabilities" : { + "pci" : true, + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "pciexpress" : "PCI Express", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } { + "id" : "display", + "class" : "display", + "claimed" : true, + "handle" : "PCI:0000:06:00.0", + "description" : "VGA compatible controller", + "product" : "ASPEED Graphics Family", + "vendor" : "ASPEED Technology, Inc.", + "physid" : "0", + "businfo" : "pci@0000:06:00.0", + "version" : "30", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "ast", + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "vga_controller" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "rom" : "extension ROM" + } + }, + + }, + + }, + { + "id" : "usb:1", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:00:1d.0", + "description" : "USB controller", + "product" : "8 Series/C220 Series Chipset Family USB EHCI #1", + "vendor" : "Intel Corporation", + "physid" : "1d", + "businfo" : "pci@0000:00:1d.0", + "version" : "05", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "ehci-pci", + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "debug" : "Debug port", + "ehci" : "Enhanced Host Controller Interface (USB2)", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } { + "id" : "usbhost", + "class" : "bus", + "claimed" : true, + "handle" : "USB:2:1", + "product" : "EHCI Host Controller", + "vendor" : "Linux 5.10.0-19-amd64 ehci_hcd", + "physid" : "1", + "businfo" : "usb@2", + "logicalname" : "usb2", + "version" : "5.10", + "configuration" : { + "driver" : "hub", + "slots" : "2", + "speed" : "480Mbit/s" + }, + "capabilities" : { + "usb-2.00" : "USB 2.0" + } { + "id" : "usb", + "class" : "bus", + "claimed" : true, + "handle" : "USB:2:2", + "description" : "USB hub", + "product" : "Integrated Rate Matching Hub", + "vendor" : "Intel Corp.", + "physid" : "1", + "businfo" : "usb@2:1", + "version" : "0.05", + "configuration" : { + "driver" : "hub", + "slots" : "4", + "speed" : "480Mbit/s" + }, + "capabilities" : { + "usb-2.00" : "USB 2.0" + } { + "id" : "usb", + "class" : "bus", + "claimed" : true, + "handle" : "USB:2:3", + "description" : "USB hub", + "product" : "Hub", + "vendor" : "ATEN International Co., Ltd", + "physid" : "4", + "businfo" : "usb@2:1.4", + "version" : "0.00", + "configuration" : { + "driver" : "hub", + "maxpower" : "100mA", + "slots" : "4", + "speed" : "480Mbit/s" + }, + "capabilities" : { + "usb-2.00" : "USB 2.0" + } { + "id" : "usb", + "class" : "input", + "claimed" : true, + "handle" : "USB:2:4", + "description" : "Keyboard", + "product" : "Virtual mouse/keyboard device", + "vendor" : "ATEN International Co., Ltd", + "physid" : "1", + "businfo" : "usb@2:1.4.1", + "version" : "1.00", + "configuration" : { + "driver" : "usbhid", + "maxpower" : "160mA", + "speed" : "2Mbit/s" + }, + "capabilities" : { + "usb-1.10" : "USB 1.1" + } + }, + + }, + + }, + + }, + + }, + { + "id" : "isa", + "class" : "bridge", + "claimed" : true, + "handle" : "PCI:0000:00:1f.0", + "description" : "ISA bridge", + "product" : "C224 Series Chipset Family Server Standard SKU LPC Controller", + "vendor" : "Intel Corporation", + "physid" : "1f", + "businfo" : "pci@0000:00:1f.0", + "version" : "05", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "lpc_ich", + "latency" : "0" + }, + "capabilities" : { + "isa" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "sata", + "class" : "storage", + "claimed" : true, + "handle" : "PCI:0000:00:1f.2", + "description" : "SATA controller", + "product" : "8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode]", + "vendor" : "Intel Corporation", + "physid" : "1f.2", + "businfo" : "pci@0000:00:1f.2", + "logicalname" : ["scsi0", "scsi1"], + "version" : "05", + "width" : 32, + "clock" : 66000000, + "configuration" : { + "driver" : "ahci", + "latency" : "0" + }, + "capabilities" : { + "sata" : true, + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "ahci_1.0" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "emulated" : "Emulated device" + } { + "id" : "disk:0", + "class" : "disk", + "claimed" : true, + "handle" : "SCSI:00:00:00:00", + "description" : "ATA Disk", + "product" : "Micron_1100_MTFD", + "physid" : "0", + "businfo" : "scsi@0:0.0.0", + "logicalname" : "/dev/sda", + "dev" : "8:0", + "version" : "U031", + "serial" : "17041581D187", + "units" : "bytes", + "size" : 256060514304, + "configuration" : { + "ansiversion" : "5", + "logicalsectorsize" : "512", + "sectorsize" : "512", + "signature" : "633f0e79" + }, + "capabilities" : { + "partitioned" : "Partitioned disk", + "partitioned:dos" : "MS-DOS partition table" + } { + "id" : "volume:0", + "class" : "volume", + "claimed" : true, + "description" : "Linux raid autodetect partition", + "physid" : "1", + "businfo" : "scsi@0:0.0.0,1", + "logicalname" : "/dev/sda1", + "dev" : "8:1", + "capacity" : 313524224, + "capabilities" : { + "primary" : "Primary partition", + "bootable" : "Bootable partition (active)", + "multi" : "Multi-volumes" + } + }, + { + "id" : "volume:1", + "class" : "volume", + "claimed" : true, + "description" : "Linux swap volume", + "physid" : "2", + "businfo" : "scsi@0:0.0.0,2", + "logicalname" : "/dev/sda2", + "dev" : "8:2", + "version" : "1", + "serial" : "88061d91-e6c0-4a87-b02a-db5893d4c5e7", + "size" : 2198863872, + "capacity" : 2198863872, + "configuration" : { + "filesystem" : "swap", + "pagesize" : "4096" + }, + "capabilities" : { + "primary" : "Primary partition", + "nofs" : "No filesystem", + "swap" : "Linux swap", + "initialized" : "initialized volume" + } + }, + { + "id" : "volume:2", + "class" : "volume", + "claimed" : true, + "description" : "Linux raid autodetect partition", + "physid" : "3", + "businfo" : "scsi@0:0.0.0,3", + "logicalname" : "/dev/sda3", + "dev" : "8:3", + "capacity" : 253546725376, + "capabilities" : { + "primary" : "Primary partition", + "multi" : "Multi-volumes" + } + }, + + }, + { + "id" : "disk:1", + "class" : "disk", + "claimed" : true, + "handle" : "SCSI:01:00:00:00", + "description" : "ATA Disk", + "product" : "Micron_1100_MTFD", + "physid" : "1", + "businfo" : "scsi@1:0.0.0", + "logicalname" : "/dev/sdb", + "dev" : "8:16", + "version" : "U031", + "serial" : "17151756B586", + "units" : "bytes", + "size" : 256060514304, + "configuration" : { + "ansiversion" : "5", + "logicalsectorsize" : "512", + "sectorsize" : "512", + "signature" : "c10c2149" + }, + "capabilities" : { + "partitioned" : "Partitioned disk", + "partitioned:dos" : "MS-DOS partition table" + } { + "id" : "volume:0", + "class" : "volume", + "claimed" : true, + "description" : "Linux raid autodetect partition", + "physid" : "1", + "businfo" : "scsi@1:0.0.0,1", + "logicalname" : "/dev/sdb1", + "dev" : "8:17", + "capacity" : 313524224, + "capabilities" : { + "primary" : "Primary partition", + "bootable" : "Bootable partition (active)", + "multi" : "Multi-volumes" + } + }, + { + "id" : "volume:1", + "class" : "volume", + "claimed" : true, + "description" : "Linux swap volume", + "physid" : "2", + "businfo" : "scsi@1:0.0.0,2", + "logicalname" : "/dev/sdb2", + "dev" : "8:18", + "version" : "1", + "serial" : "b03411fa-20c6-4c54-befc-e84b2e2f6f61", + "size" : 2198863872, + "capacity" : 2198863872, + "configuration" : { + "filesystem" : "swap", + "pagesize" : "4096" + }, + "capabilities" : { + "primary" : "Primary partition", + "nofs" : "No filesystem", + "swap" : "Linux swap", + "initialized" : "initialized volume" + } + }, + { + "id" : "volume:2", + "class" : "volume", + "claimed" : true, + "description" : "Linux raid autodetect partition", + "physid" : "3", + "businfo" : "scsi@1:0.0.0,3", + "logicalname" : "/dev/sdb3", + "dev" : "8:19", + "capacity" : 253546725376, + "capabilities" : { + "primary" : "Primary partition", + "multi" : "Multi-volumes" + } + }, + + }, + + }, + { + "id" : "serial", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:00:1f.3", + "description" : "SMBus", + "product" : "8 Series/C220 Series Chipset Family SMBus Controller", + "vendor" : "Intel Corporation", + "physid" : "1f.3", + "businfo" : "pci@0000:00:1f.3", + "version" : "05", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "i801_smbus", + "latency" : "0" + } + }, + { + "id" : "generic:3", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:00:1f.6", + "description" : "Signal processing controller", + "product" : "8 Series Chipset Family Thermal Management Controller", + "vendor" : "Intel Corporation", + "physid" : "1f.6", + "businfo" : "pci@0000:00:1f.6", + "version" : "05", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "intel_pch_thermal", + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + + }, + { + "id" : "generic:0", + "class" : "generic", + "handle" : "PCI:0000:ff:0b.0", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D R3 QPI Link 0/1", + "vendor" : "Intel Corporation", + "physid" : "b", + "businfo" : "pci@0000:ff:0b.0", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:1", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:ff:0b.1", + "description" : "Performance counters", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D R3 QPI Link 0/1", + "vendor" : "Intel Corporation", + "physid" : "b.1", + "businfo" : "pci@0000:ff:0b.1", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "bdx_uncore", + "latency" : "0" + } + }, + { + "id" : "generic:2", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:ff:0b.2", + "description" : "Performance counters", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D R3 QPI Link 0/1", + "vendor" : "Intel Corporation", + "physid" : "b.2", + "businfo" : "pci@0000:ff:0b.2", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "bdx_uncore", + "latency" : "0" + } + }, + { + "id" : "generic:3", + "class" : "generic", + "handle" : "PCI:0000:ff:0b.3", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D R3 QPI Link Debug", + "vendor" : "Intel Corporation", + "physid" : "b.3", + "businfo" : "pci@0000:ff:0b.3", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:4", + "class" : "generic", + "handle" : "PCI:0000:ff:0c.0", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent", + "vendor" : "Intel Corporation", + "physid" : "c", + "businfo" : "pci@0000:ff:0c.0", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:5", + "class" : "generic", + "handle" : "PCI:0000:ff:0c.1", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent", + "vendor" : "Intel Corporation", + "physid" : "c.1", + "businfo" : "pci@0000:ff:0c.1", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:6", + "class" : "generic", + "handle" : "PCI:0000:ff:0c.2", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent", + "vendor" : "Intel Corporation", + "physid" : "c.2", + "businfo" : "pci@0000:ff:0c.2", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:7", + "class" : "generic", + "handle" : "PCI:0000:ff:0c.3", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent", + "vendor" : "Intel Corporation", + "physid" : "c.3", + "businfo" : "pci@0000:ff:0c.3", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:8", + "class" : "generic", + "handle" : "PCI:0000:ff:0c.4", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent", + "vendor" : "Intel Corporation", + "physid" : "c.4", + "businfo" : "pci@0000:ff:0c.4", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:9", + "class" : "generic", + "handle" : "PCI:0000:ff:0c.5", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent", + "vendor" : "Intel Corporation", + "physid" : "c.5", + "businfo" : "pci@0000:ff:0c.5", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:10", + "class" : "generic", + "handle" : "PCI:0000:ff:0f.0", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent", + "vendor" : "Intel Corporation", + "physid" : "f", + "businfo" : "pci@0000:ff:0f.0", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:11", + "class" : "generic", + "handle" : "PCI:0000:ff:0f.4", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent", + "vendor" : "Intel Corporation", + "physid" : "f.4", + "businfo" : "pci@0000:ff:0f.4", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:12", + "class" : "generic", + "handle" : "PCI:0000:ff:0f.5", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent", + "vendor" : "Intel Corporation", + "physid" : "f.5", + "businfo" : "pci@0000:ff:0f.5", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:13", + "class" : "generic", + "handle" : "PCI:0000:ff:0f.6", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent", + "vendor" : "Intel Corporation", + "physid" : "f.6", + "businfo" : "pci@0000:ff:0f.6", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:14", + "class" : "generic", + "handle" : "PCI:0000:ff:10.0", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D R2PCIe Agent", + "vendor" : "Intel Corporation", + "physid" : "10", + "businfo" : "pci@0000:ff:10.0", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:15", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:ff:10.1", + "description" : "Performance counters", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D R2PCIe Agent", + "vendor" : "Intel Corporation", + "physid" : "10.1", + "businfo" : "pci@0000:ff:10.1", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "bdx_uncore", + "latency" : "0" + } + }, + { + "id" : "generic:16", + "class" : "generic", + "handle" : "PCI:0000:ff:10.5", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Ubox", + "vendor" : "Intel Corporation", + "physid" : "10.5", + "businfo" : "pci@0000:ff:10.5", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:17", + "class" : "generic", + "handle" : "PCI:0000:ff:10.6", + "description" : "Performance counters", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Ubox", + "vendor" : "Intel Corporation", + "physid" : "10.6", + "businfo" : "pci@0000:ff:10.6", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:18", + "class" : "generic", + "handle" : "PCI:0000:ff:10.7", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Ubox", + "vendor" : "Intel Corporation", + "physid" : "10.7", + "businfo" : "pci@0000:ff:10.7", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:19", + "class" : "generic", + "handle" : "PCI:0000:ff:12.0", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Home Agent 0", + "vendor" : "Intel Corporation", + "physid" : "12", + "businfo" : "pci@0000:ff:12.0", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:20", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:ff:12.1", + "description" : "Performance counters", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Home Agent 0", + "vendor" : "Intel Corporation", + "physid" : "12.1", + "businfo" : "pci@0000:ff:12.1", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "bdx_uncore", + "latency" : "0" + } + }, + { + "id" : "generic:21", + "class" : "generic", + "handle" : "PCI:0000:ff:13.0", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Target Address/Thermal/RAS", + "vendor" : "Intel Corporation", + "physid" : "13", + "businfo" : "pci@0000:ff:13.0", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:22", + "class" : "generic", + "handle" : "PCI:0000:ff:13.1", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Target Address/Thermal/RAS", + "vendor" : "Intel Corporation", + "physid" : "13.1", + "businfo" : "pci@0000:ff:13.1", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:23", + "class" : "generic", + "handle" : "PCI:0000:ff:13.2", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel Target Address Decoder", + "vendor" : "Intel Corporation", + "physid" : "13.2", + "businfo" : "pci@0000:ff:13.2", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:24", + "class" : "generic", + "handle" : "PCI:0000:ff:13.3", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel Target Address Decoder", + "vendor" : "Intel Corporation", + "physid" : "13.3", + "businfo" : "pci@0000:ff:13.3", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:25", + "class" : "generic", + "handle" : "PCI:0000:ff:13.4", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel Target Address Decoder", + "vendor" : "Intel Corporation", + "physid" : "13.4", + "businfo" : "pci@0000:ff:13.4", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:26", + "class" : "generic", + "handle" : "PCI:0000:ff:13.5", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel Target Address Decoder", + "vendor" : "Intel Corporation", + "physid" : "13.5", + "businfo" : "pci@0000:ff:13.5", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:27", + "class" : "generic", + "handle" : "PCI:0000:ff:13.6", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Channel 0/1 Broadcast", + "vendor" : "Intel Corporation", + "physid" : "13.6", + "businfo" : "pci@0000:ff:13.6", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:28", + "class" : "generic", + "handle" : "PCI:0000:ff:13.7", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Global Broadcast", + "vendor" : "Intel Corporation", + "physid" : "13.7", + "businfo" : "pci@0000:ff:13.7", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:29", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:ff:14.0", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel 0 Thermal Control", + "vendor" : "Intel Corporation", + "physid" : "14", + "businfo" : "pci@0000:ff:14.0", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "bdx_uncore", + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:30", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:ff:14.1", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel 1 Thermal Control", + "vendor" : "Intel Corporation", + "physid" : "14.1", + "businfo" : "pci@0000:ff:14.1", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "bdx_uncore", + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:31", + "class" : "generic", + "handle" : "PCI:0000:ff:14.2", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel 0 Error", + "vendor" : "Intel Corporation", + "physid" : "14.2", + "businfo" : "pci@0000:ff:14.2", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:32", + "class" : "generic", + "handle" : "PCI:0000:ff:14.3", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel 1 Error", + "vendor" : "Intel Corporation", + "physid" : "14.3", + "businfo" : "pci@0000:ff:14.3", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:33", + "class" : "generic", + "handle" : "PCI:0000:ff:14.4", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Channel 0/1 Interface", + "vendor" : "Intel Corporation", + "physid" : "14.4", + "businfo" : "pci@0000:ff:14.4", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:34", + "class" : "generic", + "handle" : "PCI:0000:ff:14.5", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Channel 0/1 Interface", + "vendor" : "Intel Corporation", + "physid" : "14.5", + "businfo" : "pci@0000:ff:14.5", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:35", + "class" : "generic", + "handle" : "PCI:0000:ff:14.6", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Channel 0/1 Interface", + "vendor" : "Intel Corporation", + "physid" : "14.6", + "businfo" : "pci@0000:ff:14.6", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:36", + "class" : "generic", + "handle" : "PCI:0000:ff:14.7", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DDRIO Channel 0/1 Interface", + "vendor" : "Intel Corporation", + "physid" : "14.7", + "businfo" : "pci@0000:ff:14.7", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:37", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:ff:15.0", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel 2 Thermal Control", + "vendor" : "Intel Corporation", + "physid" : "15", + "businfo" : "pci@0000:ff:15.0", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "bdx_uncore", + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:38", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:ff:15.1", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel 3 Thermal Control", + "vendor" : "Intel Corporation", + "physid" : "15.1", + "businfo" : "pci@0000:ff:15.1", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "bdx_uncore", + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:39", + "class" : "generic", + "handle" : "PCI:0000:ff:15.2", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel 2 Error", + "vendor" : "Intel Corporation", + "physid" : "15.2", + "businfo" : "pci@0000:ff:15.2", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:40", + "class" : "generic", + "handle" : "PCI:0000:ff:15.3", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Memory Controller 0 - Channel 3 Error", + "vendor" : "Intel Corporation", + "physid" : "15.3", + "businfo" : "pci@0000:ff:15.3", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:41", + "class" : "generic", + "handle" : "PCI:0000:ff:1e.0", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit", + "vendor" : "Intel Corporation", + "physid" : "1e", + "businfo" : "pci@0000:ff:1e.0", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:42", + "class" : "generic", + "handle" : "PCI:0000:ff:1e.1", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit", + "vendor" : "Intel Corporation", + "physid" : "1e.1", + "businfo" : "pci@0000:ff:1e.1", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:43", + "class" : "generic", + "handle" : "PCI:0000:ff:1e.2", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit", + "vendor" : "Intel Corporation", + "physid" : "1e.2", + "businfo" : "pci@0000:ff:1e.2", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:44", + "class" : "generic", + "handle" : "PCI:0000:ff:1e.3", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit", + "vendor" : "Intel Corporation", + "physid" : "1e.3", + "businfo" : "pci@0000:ff:1e.3", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:45", + "class" : "generic", + "handle" : "PCI:0000:ff:1e.4", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit", + "vendor" : "Intel Corporation", + "physid" : "1e.4", + "businfo" : "pci@0000:ff:1e.4", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:46", + "class" : "generic", + "handle" : "PCI:0000:ff:1f.0", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit", + "vendor" : "Intel Corporation", + "physid" : "1f", + "businfo" : "pci@0000:ff:1f.0", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:47", + "class" : "generic", + "handle" : "PCI:0000:ff:1f.2", + "description" : "System peripheral", + "product" : "Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Power Control Unit", + "vendor" : "Intel Corporation", + "physid" : "1f.2", + "businfo" : "pci@0000:ff:1f.2", + "version" : "03", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "pnp00:00", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0b00", + "physid" : "1", + "configuration" : { + "driver" : "rtc_cmos" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:01", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "2", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:02", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "3", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:03", + "class" : "communication", + "claimed" : true, + "product" : "PnP device PNP0501", + "physid" : "4", + "configuration" : { + "driver" : "serial" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:04", + "class" : "communication", + "claimed" : true, + "product" : "PnP device PNP0501", + "physid" : "5", + "configuration" : { + "driver" : "serial" + }, + "capabilities" : { + "pnp" : true + } + }, + + }, + { + "id" : "power:0", + "class" : "power", + "description" : "To Be Filled By O.E.M.", + "product" : "To Be Filled By O.E.M.", + "vendor" : "To Be Filled By O.E.M.", + "physid" : "1", + "version" : "To Be Filled By O.E.M.", + "serial" : "To Be Filled By O.E.M.", + "units" : "mWh", + "capacity" : 32768 + }, + { + "id" : "power:1", + "class" : "power", + "description" : "To Be Filled By O.E.M.", + "product" : "To Be Filled By O.E.M.", + "vendor" : "To Be Filled By O.E.M.", + "physid" : "2", + "version" : "To Be Filled By O.E.M.", + "serial" : "To Be Filled By O.E.M.", + "units" : "mWh", + "capacity" : 32768 + }, + { + "id" : "network:0", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "3", + "logicalname" : "br-b4ed0eff4946", + "serial" : "02:42:ba:43:dc:56", + "units" : "bit/s", + "size" : 10000000000, + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "bridge", + "driverversion" : "2.3", + "firmware" : "N/A", + "ip" : "172.18.0.1", + "link" : "yes", + "multicast" : "yes", + "speed" : "10Gbit/s" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }, + { + "id" : "network:1", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "4", + "logicalname" : "docker0", + "serial" : "02:42:9e:5a:4a:d7", + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "bridge", + "driverversion" : "2.3", + "firmware" : "N/A", + "ip" : "172.17.0.1", + "link" : "no", + "multicast" : "yes" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }, + { + "id" : "network:2", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "5", + "logicalname" : "veth69dd41b", + "serial" : "96:62:b6:c7:89:89", + "units" : "bit/s", + "size" : 10000000000, + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "veth", + "driverversion" : "1.0", + "duplex" : "full", + "link" : "yes", + "multicast" : "yes", + "port" : "twisted pair", + "speed" : "10Gbit/s" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }, + { + "id" : "network:3", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "6", + "logicalname" : "vethf6ac699", + "serial" : "96:32:df:bd:5a:7b", + "units" : "bit/s", + "size" : 10000000000, + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "veth", + "driverversion" : "1.0", + "duplex" : "full", + "link" : "yes", + "multicast" : "yes", + "port" : "twisted pair", + "speed" : "10Gbit/s" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }, + { + "id" : "network:4", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "7", + "logicalname" : "veth5a80601", + "serial" : "e6:04:ca:05:5f:fb", + "units" : "bit/s", + "size" : 10000000000, + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "veth", + "driverversion" : "1.0", + "duplex" : "full", + "link" : "yes", + "multicast" : "yes", + "port" : "twisted pair", + "speed" : "10Gbit/s" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }, + { + "id" : "network:5", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "8", + "logicalname" : "veth3b6a41f", + "serial" : "3e:b8:6c:df:65:33", + "units" : "bit/s", + "size" : 10000000000, + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "veth", + "driverversion" : "1.0", + "duplex" : "full", + "link" : "yes", + "multicast" : "yes", + "port" : "twisted pair", + "speed" : "10Gbit/s" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }, + { + "id" : "network:6", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "9", + "logicalname" : "br-one-1", + "serial" : "5e:e0:d9:a6:e7:85", + "units" : "bit/s", + "size" : 10000000, + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "bridge", + "driverversion" : "2.3", + "firmware" : "N/A", + "link" : "yes", + "multicast" : "yes", + "speed" : "10Mbit/s" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }, + { + "id" : "network:7", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "a", + "logicalname" : "one-74-0", + "serial" : "fe:00:0a:65:01:03", + "units" : "bit/s", + "size" : 10000000, + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "tun", + "driverversion" : "1.6", + "duplex" : "full", + "link" : "yes", + "multicast" : "yes", + "port" : "twisted pair", + "speed" : "10Mbit/s" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }, + { + "id" : "network:8", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "b", + "logicalname" : "br-pub-1", + "serial" : "1a:e8:8b:f3:46:43", + "units" : "bit/s", + "size" : 10000000, + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "bridge", + "driverversion" : "2.3", + "firmware" : "N/A", + "ip" : "10.101.1.254", + "link" : "yes", + "multicast" : "yes", + "speed" : "10Mbit/s" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }, + { + "id" : "network:9", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "c", + "logicalname" : "one-49-0", + "serial" : "fe:00:0a:65:01:02", + "units" : "bit/s", + "size" : 10000000, + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "tun", + "driverversion" : "1.6", + "duplex" : "full", + "link" : "yes", + "multicast" : "yes", + "port" : "twisted pair", + "speed" : "10Mbit/s" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }, + { + "id" : "network:10", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "d", + "logicalname" : "one-49-1", + "serial" : "fe:00:0a:65:00:fe", + "units" : "bit/s", + "size" : 10000000, + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "tun", + "driverversion" : "1.6", + "duplex" : "full", + "link" : "yes", + "multicast" : "yes", + "port" : "twisted pair", + "speed" : "10Mbit/s" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }, + { + "id" : "network:11", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "e", + "logicalname" : "one-55-0", + "serial" : "fe:00:0a:65:00:01", + "units" : "bit/s", + "size" : 10000000, + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "tun", + "driverversion" : "1.6", + "duplex" : "full", + "link" : "yes", + "multicast" : "yes", + "port" : "twisted pair", + "speed" : "10Mbit/s" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }, + { + "id" : "network:12", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "f", + "logicalname" : "one-45-0", + "serial" : "fe:00:0a:65:00:02", + "units" : "bit/s", + "size" : 10000000, + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "tun", + "driverversion" : "1.6", + "duplex" : "full", + "link" : "yes", + "multicast" : "yes", + "port" : "twisted pair", + "speed" : "10Mbit/s" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }, + { + "id" : "network:13", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "10", + "logicalname" : "one-75-0", + "serial" : "fe:00:0a:65:00:06", + "units" : "bit/s", + "size" : 10000000, + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "tun", + "driverversion" : "1.6", + "duplex" : "full", + "link" : "yes", + "multicast" : "yes", + "port" : "twisted pair", + "speed" : "10Mbit/s" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }, + { + "id" : "network:14", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "11", + "logicalname" : "one-64-0", + "serial" : "fe:00:0a:65:00:03", + "units" : "bit/s", + "size" : 10000000, + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "tun", + "driverversion" : "1.6", + "duplex" : "full", + "link" : "yes", + "multicast" : "yes", + "port" : "twisted pair", + "speed" : "10Mbit/s" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }, + +] diff --git a/tests/mocks/lshw_data.json b/tests/mocks/lshw_data.json new file mode 100644 index 0000000..257e2ea --- /dev/null +++ b/tests/mocks/lshw_data.json @@ -0,0 +1,1137 @@ +{ + "id" : "repair-thinkpad-t490s", + "class" : "system", + "claimed" : true, + "description" : "Computer", + "width" : 64, + "capabilities" : { + "smp" : "Symmetric Multi-Processing", + "vsyscall32" : "32-bit processes" + }, + "children" : [ { + "id" : "core", + "class" : "bus", + "claimed" : true, + "description" : "Motherboard", + "physid" : "0", + "children" : [ { + "id" : "memory", + "class" : "memory", + "claimed" : true, + "description" : "System memory", + "physid" : "0", + "units" : "bytes", + "size" : 8589934592 + }, + { + "id" : "cpu", + "class" : "processor", + "claimed" : true, + "product" : "Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz", + "vendor" : "Intel Corp.", + "physid" : "1", + "businfo" : "cpu@0", + "version" : "6.142.12", + "units" : "Hz", + "size" : 2173979000, + "capacity" : 4600000000, + "width" : 64, + "configuration" : { + "microcode" : "248" + }, + "capabilities" : { + "fpu" : "mathematical co-processor", + "fpu_exception" : "FPU exceptions reporting", + "wp" : true, + "vme" : "virtual mode extensions", + "de" : "debugging extensions", + "pse" : "page size extensions", + "tsc" : "time stamp counter", + "msr" : "model-specific registers", + "pae" : "4GB+ memory addressing (Physical Address Extension)", + "mce" : "machine check exceptions", + "cx8" : "compare and exchange 8-byte", + "apic" : "on-chip advanced programmable interrupt controller (APIC)", + "sep" : "fast system calls", + "mtrr" : "memory type range registers", + "pge" : "page global enable", + "mca" : "machine check architecture", + "cmov" : "conditional move instruction", + "pat" : "page attribute table", + "pse36" : "36-bit page size extensions", + "clflush" : true, + "dts" : "debug trace and EMON store MSRs", + "acpi" : "thermal control (ACPI)", + "mmx" : "multimedia extensions (MMX)", + "fxsr" : "fast floating point save/restore", + "sse" : "streaming SIMD extensions (SSE)", + "sse2" : "streaming SIMD extensions (SSE2)", + "ss" : "self-snoop", + "ht" : "HyperThreading", + "tm" : "thermal interrupt and status", + "pbe" : "pending break event", + "syscall" : "fast system calls", + "nx" : "no-execute bit (NX)", + "pdpe1gb" : true, + "rdtscp" : true, + "x86-64" : "64bits extensions (x86-64)", + "constant_tsc" : true, + "art" : true, + "arch_perfmon" : true, + "pebs" : true, + "bts" : true, + "rep_good" : true, + "nopl" : true, + "xtopology" : true, + "nonstop_tsc" : true, + "cpuid" : true, + "aperfmperf" : true, + "pni" : true, + "pclmulqdq" : true, + "dtes64" : true, + "monitor" : true, + "ds_cpl" : true, + "vmx" : true, + "est" : true, + "tm2" : true, + "ssse3" : true, + "sdbg" : true, + "fma" : true, + "cx16" : true, + "xtpr" : true, + "pdcm" : true, + "pcid" : true, + "sse4_1" : true, + "sse4_2" : true, + "x2apic" : true, + "movbe" : true, + "popcnt" : true, + "tsc_deadline_timer" : true, + "aes" : true, + "xsave" : true, + "avx" : true, + "f16c" : true, + "rdrand" : true, + "lahf_lm" : true, + "abm" : true, + "3dnowprefetch" : true, + "cpuid_fault" : true, + "epb" : true, + "invpcid_single" : true, + "ssbd" : true, + "ibrs" : true, + "ibpb" : true, + "stibp" : true, + "ibrs_enhanced" : true, + "tpr_shadow" : true, + "flexpriority" : true, + "ept" : true, + "vpid" : true, + "ept_ad" : true, + "fsgsbase" : true, + "tsc_adjust" : true, + "sgx" : true, + "bmi1" : true, + "avx2" : true, + "smep" : true, + "bmi2" : true, + "erms" : true, + "invpcid" : true, + "mpx" : true, + "rdseed" : true, + "adx" : true, + "smap" : true, + "clflushopt" : true, + "intel_pt" : true, + "xsaveopt" : true, + "xsavec" : true, + "xgetbv1" : true, + "xsaves" : true, + "dtherm" : true, + "ida" : true, + "arat" : true, + "pln" : true, + "pts" : true, + "hwp" : true, + "hwp_notify" : true, + "hwp_act_window" : true, + "hwp_epp" : true, + "vnmi" : true, + "md_clear" : true, + "flush_l1d" : true, + "arch_capabilities" : true, + "cpufreq" : "CPU Frequency scaling" + } + }, + { + "id" : "pci", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:00", + "description" : "Host bridge", + "product" : "Coffee Lake HOST and DRAM Controller", + "vendor" : "Intel Corporation", + "physid" : "100", + "businfo" : "pci@0000:00:00.0", + "version" : "0c", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "skl_uncore" + }, + "children" : [ { + "id" : "display", + "class" : "display", + "claimed" : true, + "handle" : "PCI:0000:00:02.0", + "description" : "VGA compatible controller", + "product" : "WhiskeyLake-U GT2 [UHD Graphics 620]", + "vendor" : "Intel Corporation", + "physid" : "2", + "businfo" : "pci@0000:00:02.0", + "logicalname" : "/dev/fb0", + "version" : "02", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "depth" : "32", + "driver" : "i915", + "latency" : "0", + "resolution" : "1920,1080" + }, + "capabilities" : { + "vga_controller" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "rom" : "extension ROM", + "fb" : "framebuffer" + } + }, + { + "id" : "generic:0", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:00:04.0", + "description" : "Signal processing controller", + "product" : "Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem", + "vendor" : "Intel Corporation", + "physid" : "4", + "businfo" : "pci@0000:00:04.0", + "version" : "0c", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "proc_thermal", + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:1", + "class" : "generic", + "handle" : "PCI:0000:00:08.0", + "description" : "System peripheral", + "product" : "Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7th/8th Gen Core Processor Gaussian Mixture Model", + "vendor" : "Intel Corporation", + "physid" : "8", + "businfo" : "pci@0000:00:08.0", + "version" : "00", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:2", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:00:12.0", + "description" : "Signal processing controller", + "product" : "Cannon Point-LP Thermal Controller", + "vendor" : "Intel Corporation", + "physid" : "12", + "businfo" : "pci@0000:00:12.0", + "version" : "30", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "intel_pch_thermal", + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "usb", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:00:14.0", + "description" : "USB controller", + "product" : "Cannon Point-LP USB 3.1 xHCI Controller", + "vendor" : "Intel Corporation", + "physid" : "14", + "businfo" : "pci@0000:00:14.0", + "version" : "30", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "xhci_hcd", + "latency" : "0" + }, + "capabilities" : { + "xhci" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "memory", + "class" : "memory", + "handle" : "PCI:0000:00:14.2", + "description" : "RAM memory", + "product" : "Cannon Point-LP Shared SRAM", + "vendor" : "Intel Corporation", + "physid" : "14.2", + "businfo" : "pci@0000:00:14.2", + "version" : "30", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "network:0", + "class" : "network", + "claimed" : true, + "handle" : "PCI:0000:00:14.3", + "description" : "Wireless interface", + "product" : "Cannon Point-LP CNVi [Wireless-AC]", + "vendor" : "Intel Corporation", + "physid" : "14.3", + "businfo" : "pci@0000:00:14.3", + "logicalname" : "wlp0s20f3", + "version" : "30", + "serial" : "38:00:25:8e:bf:a2", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "broadcast" : "yes", + "driver" : "iwlwifi", + "driverversion" : "6.5.0-21-generic", + "firmware" : "46.fae53a8b.0 9000-pu-b0-jf-b0-", + "ip" : "192.168.10.82", + "latency" : "0", + "link" : "yes", + "multicast" : "yes", + "wireless" : "IEEE 802.11" + }, + "capabilities" : { + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "ethernet" : true, + "physical" : "Physical interface", + "wireless" : "Wireless-LAN" + } + }, + { + "id" : "communication", + "class" : "communication", + "claimed" : true, + "handle" : "PCI:0000:00:16.0", + "description" : "Communication controller", + "product" : "Cannon Point-LP MEI Controller #1", + "vendor" : "Intel Corporation", + "physid" : "16", + "businfo" : "pci@0000:00:16.0", + "version" : "30", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "mei_me", + "latency" : "0" + }, + "capabilities" : { + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "pci:0", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:01", + "description" : "PCI bridge", + "product" : "Cannon Point-LP PCI Express Root Port #1", + "vendor" : "Intel Corporation", + "physid" : "1c", + "businfo" : "pci@0000:00:1c.0", + "version" : "f0", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "generic", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:01:00.0", + "description" : "MMC Host", + "product" : "GL9750 SD Host Controller", + "vendor" : "Genesys Logic, Inc", + "physid" : "0", + "businfo" : "pci@0000:01:00.0", + "logicalname" : "mmc0", + "version" : "01", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "sdhci-pci", + "latency" : "0" + }, + "capabilities" : { + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }] + }, + { + "id" : "pci:1", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:02", + "description" : "PCI bridge", + "product" : "Cannon Point-LP PCI Express Root Port #5", + "vendor" : "Intel Corporation", + "physid" : "1c.4", + "businfo" : "pci@0000:00:1c.4", + "version" : "f0", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "pci", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:03", + "description" : "PCI bridge", + "product" : "JHL6240 Thunderbolt 3 Bridge (Low Power) [Alpine Ridge LP 2016]", + "vendor" : "Intel Corporation", + "physid" : "0", + "businfo" : "pci@0000:02:00.0", + "version" : "01", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "pci:0", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:04", + "description" : "PCI bridge", + "product" : "JHL6240 Thunderbolt 3 Bridge (Low Power) [Alpine Ridge LP 2016]", + "vendor" : "Intel Corporation", + "physid" : "0", + "businfo" : "pci@0000:03:00.0", + "version" : "01", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "generic", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:04:00.0", + "description" : "System peripheral", + "product" : "JHL6240 Thunderbolt 3 NHI (Low Power) [Alpine Ridge LP 2016]", + "vendor" : "Intel Corporation", + "physid" : "0", + "businfo" : "pci@0000:04:00.0", + "version" : "01", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "thunderbolt", + "latency" : "0" + }, + "capabilities" : { + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }] + }, + { + "id" : "pci:1", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:05", + "description" : "PCI bridge", + "product" : "JHL6240 Thunderbolt 3 Bridge (Low Power) [Alpine Ridge LP 2016]", + "vendor" : "Intel Corporation", + "physid" : "1", + "businfo" : "pci@0000:03:01.0", + "version" : "01", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "pci:2", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:3a", + "description" : "PCI bridge", + "product" : "JHL6240 Thunderbolt 3 Bridge (Low Power) [Alpine Ridge LP 2016]", + "vendor" : "Intel Corporation", + "physid" : "2", + "businfo" : "pci@0000:03:02.0", + "version" : "01", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "usb", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:3a:00.0", + "description" : "USB controller", + "product" : "JHL6240 Thunderbolt 3 USB 3.1 Controller (Low Power) [Alpine Ridge LP 2016]", + "vendor" : "Intel Corporation", + "physid" : "0", + "businfo" : "pci@0000:3a:00.0", + "version" : "01", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "xhci_hcd", + "latency" : "0" + }, + "capabilities" : { + "xhci" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }] + }] + }] + }, + { + "id" : "pci:2", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:3c", + "description" : "PCI bridge", + "product" : "Cannon Point-LP PCI Express Root Port #9", + "vendor" : "Intel Corporation", + "physid" : "1d", + "businfo" : "pci@0000:00:1d.0", + "version" : "f0", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "pci:3", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:3d", + "description" : "PCI bridge", + "product" : "Cannon Point-LP PCI Express Root Port #13", + "vendor" : "Intel Corporation", + "physid" : "1d.4", + "businfo" : "pci@0000:00:1d.4", + "version" : "f0", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "nvme", + "class" : "storage", + "claimed" : true, + "handle" : "PCI:0000:3d:00.0", + "description" : "NVMe device", + "product" : "KXG6AZNV256G TOSHIBA", + "vendor" : "Toshiba Corporation", + "physid" : "0", + "businfo" : "pci@0000:3d:00.0", + "logicalname" : "/dev/nvme0", + "version" : "5108AGLA", + "serial" : "39NS11RYTMCQ", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "nvme", + "latency" : "0", + "nqn" : "nqn.2017-03.jp.co.toshiba:KXG6AZNV256G TOSHIBA:39NS11RYTMCQ", + "state" : "live" + }, + "capabilities" : { + "nvme" : true, + "nvm_express" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "namespace:0", + "class" : "disk", + "claimed" : true, + "description" : "NVMe disk", + "physid" : "0", + "logicalname" : "hwmon3" + }, + { + "id" : "namespace:1", + "class" : "disk", + "claimed" : true, + "description" : "NVMe disk", + "physid" : "2", + "logicalname" : "/dev/ng0n1" + }, + { + "id" : "namespace:2", + "class" : "disk", + "claimed" : true, + "description" : "NVMe disk", + "physid" : "1", + "businfo" : "nvme@0:1", + "logicalname" : "/dev/nvme0n1", + "configuration" : { + "wwid" : "eui.8ce38e020004f28f" + } + }] + }] + }, + { + "id" : "isa", + "class" : "bridge", + "claimed" : true, + "handle" : "PCI:0000:00:1f.0", + "description" : "ISA bridge", + "product" : "Cannon Point-LP LPC Controller", + "vendor" : "Intel Corporation", + "physid" : "1f", + "businfo" : "pci@0000:00:1f.0", + "version" : "30", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "isa" : true, + "bus_master" : "bus mastering" + }, + "children" : [ { + "id" : "pnp00:00", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "0", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:01", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "1", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:02", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "2", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:03", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "3", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:04", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0b00", + "physid" : "4", + "configuration" : { + "driver" : "rtc_cmos" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:05", + "class" : "generic", + "claimed" : true, + "product" : "PnP device INT3f0d", + "physid" : "5", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:06", + "class" : "generic", + "claimed" : true, + "product" : "PnP device LEN0071", + "physid" : "6", + "configuration" : { + "driver" : "i8042 kbd" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:07", + "class" : "generic", + "claimed" : true, + "product" : "PnP device LEN0401", + "physid" : "7", + "configuration" : { + "driver" : "i8042 aux" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:08", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "8", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:09", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "9", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:0a", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "a", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:0b", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c01", + "physid" : "b", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }] + }, + { + "id" : "multimedia", + "class" : "multimedia", + "claimed" : true, + "handle" : "PCI:0000:00:1f.3", + "description" : "Audio device", + "product" : "Cannon Point-LP High Definition Audio Controller", + "vendor" : "Intel Corporation", + "physid" : "1f.3", + "businfo" : "pci@0000:00:1f.3", + "logicalname" : ["card0", "/dev/snd/controlC0", "/dev/snd/hwC0D0", "/dev/snd/hwC0D2", "/dev/snd/pcmC0D0c", "/dev/snd/pcmC0D0p", "/dev/snd/pcmC0D3p", "/dev/snd/pcmC0D7p", "/dev/snd/pcmC0D8p"], + "version" : "30", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "snd_hda_intel", + "latency" : "64" + }, + "capabilities" : { + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "input:0", + "class" : "input", + "claimed" : true, + "product" : "HDA Intel PCH Mic", + "physid" : "0", + "logicalname" : ["input20", "/dev/input/event8"] + }, + { + "id" : "input:1", + "class" : "input", + "claimed" : true, + "product" : "HDA Intel PCH Headphone", + "physid" : "1", + "logicalname" : ["input21", "/dev/input/event9"] + }, + { + "id" : "input:2", + "class" : "input", + "claimed" : true, + "product" : "HDA Intel PCH HDMI/DP,pcm=3", + "physid" : "2", + "logicalname" : ["input22", "/dev/input/event10"] + }, + { + "id" : "input:3", + "class" : "input", + "claimed" : true, + "product" : "HDA Intel PCH HDMI/DP,pcm=7", + "physid" : "3", + "logicalname" : ["input23", "/dev/input/event11"] + }, + { + "id" : "input:4", + "class" : "input", + "claimed" : true, + "product" : "HDA Intel PCH HDMI/DP,pcm=8", + "physid" : "4", + "logicalname" : ["input24", "/dev/input/event12"] + }] + }, + { + "id" : "serial:0", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:00:1f.4", + "description" : "SMBus", + "product" : "Cannon Point-LP SMBus Controller", + "vendor" : "Intel Corporation", + "physid" : "1f.4", + "businfo" : "pci@0000:00:1f.4", + "version" : "30", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "i801_smbus", + "latency" : "0" + }, + "children" : [ { + "id" : "input:0", + "class" : "input", + "claimed" : true, + "product" : "Elan Touchpad", + "physid" : "0", + "logicalname" : ["input16", "/dev/input/event4", "/dev/input/mouse0"], + "capabilities" : { + "i2c" : "I²C bus" + } + }, + { + "id" : "input:1", + "class" : "input", + "claimed" : true, + "product" : "Elan TrackPoint", + "physid" : "1", + "logicalname" : ["input17", "/dev/input/event5", "/dev/input/mouse1"], + "capabilities" : { + "i2c" : "I²C bus" + } + }] + }, + { + "id" : "serial:1", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:00:1f.5", + "description" : "Serial bus controller", + "product" : "Cannon Point-LP SPI Controller", + "vendor" : "Intel Corporation", + "physid" : "1f.5", + "businfo" : "pci@0000:00:1f.5", + "version" : "30", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "intel-spi", + "latency" : "0" + } + }, + { + "id" : "network:1", + "class" : "network", + "claimed" : true, + "handle" : "PCI:0000:00:1f.6", + "description" : "Ethernet interface", + "product" : "Ethernet Connection (6) I219-V", + "vendor" : "Intel Corporation", + "physid" : "1f.6", + "businfo" : "pci@0000:00:1f.6", + "logicalname" : "enp0s31f6", + "version" : "30", + "serial" : "98:fa:9b:1f:f1:fb", + "units" : "bit/s", + "capacity" : 1000000000, + "width" : 32, + "clock" : 33000000, + "configuration" : { + "autonegotiation" : "on", + "broadcast" : "yes", + "driver" : "e1000e", + "driverversion" : "6.5.0-21-generic", + "firmware" : "0.5-3", + "latency" : "0", + "link" : "no", + "multicast" : "yes", + "port" : "twisted pair" + }, + "capabilities" : { + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "ethernet" : true, + "physical" : "Physical interface", + "tp" : "twisted pair", + "10bt" : "10Mbit/s", + "10bt-fd" : "10Mbit/s (full duplex)", + "100bt" : "100Mbit/s", + "100bt-fd" : "100Mbit/s (full duplex)", + "1000bt-fd" : "1Gbit/s (full duplex)", + "autonegotiation" : "Auto-negotiation" + } + }] + }] + }, + { + "id" : "scsi", + "class" : "storage", + "claimed" : true, + "handle" : "SCSI:00", + "physid" : "1", + "businfo" : "scsi@0", + "logicalname" : "scsi0", + "configuration" : { + "driver" : "usb-storage" + }, + "capabilities" : { + "scsi-host" : "SCSI host adapter" + } + }, + { + "id" : "input:0", + "class" : "input", + "claimed" : true, + "product" : "Sleep Button", + "physid" : "2", + "logicalname" : ["input0", "/dev/input/event0"], + "capabilities" : { + "platform" : true + } + }, + { + "id" : "input:1", + "class" : "input", + "claimed" : true, + "product" : "Lid Switch", + "physid" : "3", + "logicalname" : ["input1", "/dev/input/event1"], + "capabilities" : { + "platform" : true + } + }, + { + "id" : "input:2", + "class" : "input", + "claimed" : true, + "product" : "ThinkPad Extra Buttons", + "physid" : "4", + "logicalname" : ["input18", "/dev/input/event7"], + "capabilities" : { + "platform" : true + } + }, + { + "id" : "input:3", + "class" : "input", + "claimed" : true, + "product" : "Video Bus", + "physid" : "5", + "logicalname" : ["input19", "/dev/input/event6"], + "capabilities" : { + "platform" : true + } + }, + { + "id" : "input:4", + "class" : "input", + "claimed" : true, + "product" : "Power Button", + "physid" : "6", + "logicalname" : ["input2", "/dev/input/event2"], + "capabilities" : { + "platform" : true + } + }, + { + "id" : "input:5", + "class" : "input", + "claimed" : true, + "product" : "Logitech Wireless Mouse M560", + "physid" : "7", + "logicalname" : ["input25", "/dev/input/event13", "/dev/input/mouse2"], + "capabilities" : { + "usb" : "USB" + } + }, + { + "id" : "input:6", + "class" : "input", + "claimed" : true, + "product" : "AT Translated Set 2 keyboard", + "physid" : "8", + "logicalname" : ["input3", "/dev/input/event3", "input3::capslock", "input3::numlock", "input3::scrolllock"], + "capabilities" : { + "i8042" : "i8042 PC AT keyboard controller" + } + }, + { + "id" : "network", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "9", + "businfo" : "usb@4:1", + "logicalname" : "enxf8e43bcd2594", + "serial" : "f8:e4:3b:cd:25:94", + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "cdc_ncm", + "driverversion" : "6.5.0-21-generic", + "duplex" : "half", + "firmware" : "CDC NCM (NO ZLP)", + "ip" : "192.168.10.50", + "link" : "yes", + "multicast" : "yes", + "port" : "twisted pair" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }] +} diff --git a/tests/mocks/lshw_data_sudo.json b/tests/mocks/lshw_data_sudo.json new file mode 100644 index 0000000..966114e --- /dev/null +++ b/tests/mocks/lshw_data_sudo.json @@ -0,0 +1,1752 @@ +{ + "id" : "repair-thinkpad-t490s", + "class" : "system", + "claimed" : true, + "handle" : "DMI:0012", + "description" : "Notebook", + "product" : "20NX000JFR (LENOVO_MT_20NX_BU_Think_FM_ThinkPad T490s)", + "vendor" : "LENOVO", + "version" : "ThinkPad T490s", + "serial" : "PC17GAZT", + "width" : 64, + "configuration" : { + "administrator_password" : "disabled", + "chassis" : "notebook", + "family" : "ThinkPad T490s", + "power-on_password" : "disabled", + "sku" : "LENOVO_MT_20NX_BU_Think_FM_ThinkPad T490s", + "uuid" : "f576c24c-2772-11b2-a85c-d5ec7831f0a9" + }, + "capabilities" : { + "smbios-3.1.1" : "SMBIOS version 3.1.1", + "dmi-3.1.1" : "DMI version 3.1.1", + "smp" : "Symmetric Multi-Processing", + "vsyscall32" : "32-bit processes" + }, + "children" : [ { + "id" : "core", + "class" : "bus", + "claimed" : true, + "handle" : "DMI:0013", + "description" : "Motherboard", + "product" : "20NX000JFR", + "vendor" : "LENOVO", + "physid" : "0", + "version" : "SDK0J40697 WIN", + "serial" : "L1HF95W030D", + "slot" : "Not Available", + "children" : [ { + "id" : "memory", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0002", + "description" : "System Memory", + "physid" : "2", + "slot" : "System board or motherboard", + "units" : "bytes", + "size" : 8589934592, + "children" : [ { + "id" : "bank:0", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0003", + "description" : "SODIMM DDR4 Synchronous 2667 MHz (0,4 ns)", + "product" : "4ATF51264HZ-2G6E1", + "vendor" : "Micron", + "physid" : "0", + "serial" : "00000000", + "slot" : "ChannelA-DIMM0", + "units" : "bytes", + "size" : 4294967296, + "width" : 64, + "clock" : 2667000000 + }, + { + "id" : "bank:1", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0004", + "description" : "SODIMM DDR4 Synchronous 2667 MHz (0,4 ns)", + "product" : "4ATF51264HZ-2G6E1", + "vendor" : "Micron", + "physid" : "1", + "serial" : "00000000", + "slot" : "ChannelB-DIMM0", + "units" : "bytes", + "size" : 4294967296, + "width" : 64, + "clock" : 2667000000 + }] + }, + { + "id" : "cache:0", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:000C", + "description" : "L1 cache", + "physid" : "c", + "slot" : "L1 Cache", + "units" : "bytes", + "size" : 262144, + "capacity" : 262144, + "configuration" : { + "level" : "1" + }, + "capabilities" : { + "synchronous" : "Synchronous", + "internal" : "Internal", + "write-back" : "Write-back", + "unified" : "Unified cache" + } + }, + { + "id" : "cache:1", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:000D", + "description" : "L2 cache", + "physid" : "d", + "slot" : "L2 Cache", + "units" : "bytes", + "size" : 1048576, + "capacity" : 1048576, + "configuration" : { + "level" : "2" + }, + "capabilities" : { + "synchronous" : "Synchronous", + "internal" : "Internal", + "write-back" : "Write-back", + "unified" : "Unified cache" + } + }, + { + "id" : "cache:2", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:000E", + "description" : "L3 cache", + "physid" : "e", + "slot" : "L3 Cache", + "units" : "bytes", + "size" : 8388608, + "capacity" : 8388608, + "configuration" : { + "level" : "3" + }, + "capabilities" : { + "synchronous" : "Synchronous", + "internal" : "Internal", + "write-back" : "Write-back", + "unified" : "Unified cache" + } + }, + { + "id" : "cpu", + "class" : "processor", + "claimed" : true, + "handle" : "DMI:000F", + "description" : "CPU", + "product" : "Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz", + "vendor" : "Intel Corp.", + "physid" : "f", + "businfo" : "cpu@0", + "version" : "6.142.12", + "serial" : "None", + "slot" : "U3E1", + "units" : "Hz", + "size" : 4099356000, + "capacity" : 4600000000, + "width" : 64, + "clock" : 100000000, + "configuration" : { + "cores" : "4", + "enabledcores" : "4", + "microcode" : "248", + "threads" : "8" + }, + "capabilities" : { + "lm" : "64bits extensions (x86-64)", + "fpu" : "mathematical co-processor", + "fpu_exception" : "FPU exceptions reporting", + "wp" : true, + "vme" : "virtual mode extensions", + "de" : "debugging extensions", + "pse" : "page size extensions", + "tsc" : "time stamp counter", + "msr" : "model-specific registers", + "pae" : "4GB+ memory addressing (Physical Address Extension)", + "mce" : "machine check exceptions", + "cx8" : "compare and exchange 8-byte", + "apic" : "on-chip advanced programmable interrupt controller (APIC)", + "sep" : "fast system calls", + "mtrr" : "memory type range registers", + "pge" : "page global enable", + "mca" : "machine check architecture", + "cmov" : "conditional move instruction", + "pat" : "page attribute table", + "pse36" : "36-bit page size extensions", + "clflush" : true, + "dts" : "debug trace and EMON store MSRs", + "acpi" : "thermal control (ACPI)", + "mmx" : "multimedia extensions (MMX)", + "fxsr" : "fast floating point save/restore", + "sse" : "streaming SIMD extensions (SSE)", + "sse2" : "streaming SIMD extensions (SSE2)", + "ss" : "self-snoop", + "ht" : "HyperThreading", + "tm" : "thermal interrupt and status", + "pbe" : "pending break event", + "syscall" : "fast system calls", + "nx" : "no-execute bit (NX)", + "pdpe1gb" : true, + "rdtscp" : true, + "x86-64" : "64bits extensions (x86-64)", + "constant_tsc" : true, + "art" : true, + "arch_perfmon" : true, + "pebs" : true, + "bts" : true, + "rep_good" : true, + "nopl" : true, + "xtopology" : true, + "nonstop_tsc" : true, + "cpuid" : true, + "aperfmperf" : true, + "pni" : true, + "pclmulqdq" : true, + "dtes64" : true, + "monitor" : true, + "ds_cpl" : true, + "vmx" : true, + "est" : true, + "tm2" : true, + "ssse3" : true, + "sdbg" : true, + "fma" : true, + "cx16" : true, + "xtpr" : true, + "pdcm" : true, + "pcid" : true, + "sse4_1" : true, + "sse4_2" : true, + "x2apic" : true, + "movbe" : true, + "popcnt" : true, + "tsc_deadline_timer" : true, + "aes" : true, + "xsave" : true, + "avx" : true, + "f16c" : true, + "rdrand" : true, + "lahf_lm" : true, + "abm" : true, + "3dnowprefetch" : true, + "cpuid_fault" : true, + "epb" : true, + "invpcid_single" : true, + "ssbd" : true, + "ibrs" : true, + "ibpb" : true, + "stibp" : true, + "ibrs_enhanced" : true, + "tpr_shadow" : true, + "flexpriority" : true, + "ept" : true, + "vpid" : true, + "ept_ad" : true, + "fsgsbase" : true, + "tsc_adjust" : true, + "sgx" : true, + "bmi1" : true, + "avx2" : true, + "smep" : true, + "bmi2" : true, + "erms" : true, + "invpcid" : true, + "mpx" : true, + "rdseed" : true, + "adx" : true, + "smap" : true, + "clflushopt" : true, + "intel_pt" : true, + "xsaveopt" : true, + "xsavec" : true, + "xgetbv1" : true, + "xsaves" : true, + "dtherm" : true, + "ida" : true, + "arat" : true, + "pln" : true, + "pts" : true, + "hwp" : true, + "hwp_notify" : true, + "hwp_act_window" : true, + "hwp_epp" : true, + "vnmi" : true, + "md_clear" : true, + "flush_l1d" : true, + "arch_capabilities" : true, + "cpufreq" : "CPU Frequency scaling" + } + }, + { + "id" : "firmware", + "class" : "memory", + "claimed" : true, + "description" : "BIOS", + "vendor" : "LENOVO", + "physid" : "11", + "version" : "N2JET89W (1.67 )", + "date" : "06/04/2020", + "units" : "bytes", + "size" : 131072, + "capacity" : 33554432, + "capabilities" : { + "pci" : "PCI bus", + "pnp" : "Plug-and-Play", + "upgrade" : "BIOS EEPROM can be upgraded", + "shadowing" : "BIOS shadowing", + "cdboot" : "Booting from CD-ROM/DVD", + "bootselect" : "Selectable boot path", + "edd" : "Enhanced Disk Drive extensions", + "int13floppy720" : "3.5\" 720KB floppy", + "int5printscreen" : "Print Screen key", + "int9keyboard" : "i8042 keyboard controller", + "int14serial" : "INT14 serial line control", + "int17printer" : "INT17 printer control", + "int10video" : "INT10 CGA/Mono video", + "acpi" : "ACPI", + "usb" : "USB legacy emulation", + "biosbootspecification" : "BIOS boot specification", + "uefi" : "UEFI specification is supported" + } + }, + { + "id" : "pci", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:00", + "description" : "Host bridge", + "product" : "Coffee Lake HOST and DRAM Controller", + "vendor" : "Intel Corporation", + "physid" : "100", + "businfo" : "pci@0000:00:00.0", + "version" : "0c", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "skl_uncore" + }, + "children" : [ { + "id" : "display", + "class" : "display", + "claimed" : true, + "handle" : "PCI:0000:00:02.0", + "description" : "VGA compatible controller", + "product" : "WhiskeyLake-U GT2 [UHD Graphics 620]", + "vendor" : "Intel Corporation", + "physid" : "2", + "businfo" : "pci@0000:00:02.0", + "logicalname" : "/dev/fb0", + "version" : "02", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "depth" : "32", + "driver" : "i915", + "latency" : "0", + "resolution" : "1920,1080" + }, + "capabilities" : { + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "vga_controller" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "rom" : "extension ROM", + "fb" : "framebuffer" + } + }, + { + "id" : "generic:0", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:00:04.0", + "description" : "Signal processing controller", + "product" : "Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem", + "vendor" : "Intel Corporation", + "physid" : "4", + "businfo" : "pci@0000:00:04.0", + "version" : "0c", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "proc_thermal", + "latency" : "0" + }, + "capabilities" : { + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:1", + "class" : "generic", + "handle" : "PCI:0000:00:08.0", + "description" : "System peripheral", + "product" : "Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7th/8th Gen Core Processor Gaussian Mixture Model", + "vendor" : "Intel Corporation", + "physid" : "8", + "businfo" : "pci@0000:00:08.0", + "version" : "00", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:2", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:00:12.0", + "description" : "Signal processing controller", + "product" : "Cannon Point-LP Thermal Controller", + "vendor" : "Intel Corporation", + "physid" : "12", + "businfo" : "pci@0000:00:12.0", + "version" : "30", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "intel_pch_thermal", + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "usb", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:00:14.0", + "description" : "USB controller", + "product" : "Cannon Point-LP USB 3.1 xHCI Controller", + "vendor" : "Intel Corporation", + "physid" : "14", + "businfo" : "pci@0000:00:14.0", + "version" : "30", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "xhci_hcd", + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "xhci" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "usbhost:0", + "class" : "bus", + "claimed" : true, + "handle" : "USB:1:1", + "product" : "xHCI Host Controller", + "vendor" : "Linux 6.5.0-21-generic xhci-hcd", + "physid" : "0", + "businfo" : "usb@1", + "logicalname" : "usb1", + "version" : "6.05", + "configuration" : { + "driver" : "hub", + "slots" : "12", + "speed" : "480Mbit/s" + }, + "capabilities" : { + "usb-2.00" : "USB 2.0" + }, + "children" : [ { + "id" : "usb:0", + "class" : "generic", + "handle" : "USB:1:2", + "description" : "Smart card reader", + "product" : "EMV Smartcard Reader", + "vendor" : "Generic", + "physid" : "1", + "businfo" : "usb@1:1", + "version" : "1.20", + "configuration" : { + "maxpower" : "50mA", + "speed" : "12Mbit/s" + }, + "capabilities" : { + "usb-2.01" : true + } + }, + { + "id" : "usb:1", + "class" : "input", + "claimed" : true, + "handle" : "USB:1:3", + "description" : "Keyboard", + "product" : "USB Receiver", + "vendor" : "Logitech", + "physid" : "4", + "businfo" : "usb@1:4", + "version" : "12.11", + "configuration" : { + "driver" : "usbhid", + "maxpower" : "98mA", + "speed" : "12Mbit/s" + }, + "capabilities" : { + "usb-2.00" : "USB 2.0" + }, + "children" : [ { + "id" : "input", + "class" : "input", + "claimed" : true, + "product" : "Logitech Wireless Mouse M560", + "physid" : "0", + "logicalname" : ["input25", "/dev/input/event13", "/dev/input/mouse2"], + "capabilities" : { + "usb" : "USB" + } + }] + }, + { + "id" : "usb:2", + "class" : "multimedia", + "claimed" : true, + "handle" : "USB:1:4", + "description" : "Video", + "product" : "Integrated Camera", + "vendor" : "Azurewave", + "physid" : "8", + "businfo" : "usb@1:8", + "version" : "17.11", + "serial" : "0001", + "configuration" : { + "driver" : "uvcvideo", + "maxpower" : "500mA", + "speed" : "480Mbit/s" + }, + "capabilities" : { + "usb-2.01" : true + } + }, + { + "id" : "usb:3", + "class" : "generic", + "handle" : "USB:1:5", + "description" : "Generic USB device", + "product" : "Prometheus MIS Touch Fingerprint Reader", + "vendor" : "Synaptics, Inc.", + "physid" : "9", + "businfo" : "usb@1:9", + "version" : "0.00", + "serial" : "97f185e21325", + "configuration" : { + "maxpower" : "100mA", + "speed" : "12Mbit/s" + }, + "capabilities" : { + "usb-2.00" : "USB 2.0" + } + }, + { + "id" : "usb:4", + "class" : "communication", + "claimed" : true, + "handle" : "USB:1:6", + "description" : "Bluetooth wireless interface", + "product" : "Bluetooth 9460/9560 Jefferson Peak (JfP)", + "vendor" : "Intel Corp.", + "physid" : "a", + "businfo" : "usb@1:a", + "version" : "0.02", + "configuration" : { + "driver" : "btusb", + "maxpower" : "100mA", + "speed" : "12Mbit/s" + }, + "capabilities" : { + "bluetooth" : "Bluetooth wireless radio", + "usb-2.00" : "USB 2.0" + } + }] + }, + { + "id" : "usbhost:1", + "class" : "bus", + "claimed" : true, + "handle" : "USB:2:1", + "product" : "xHCI Host Controller", + "vendor" : "Linux 6.5.0-21-generic xhci-hcd", + "physid" : "1", + "businfo" : "usb@2", + "logicalname" : "usb2", + "version" : "6.05", + "configuration" : { + "driver" : "hub", + "slots" : "6", + "speed" : "10000Mbit/s" + }, + "capabilities" : { + "usb-3.10" : true + }, + "children" : [ { + "id" : "usb", + "class" : "storage", + "claimed" : true, + "handle" : "SCSI:00", + "description" : "Mass storage device", + "product" : "STORE N GO", + "vendor" : "Verbatim", + "physid" : "3", + "businfo" : "usb@2:3", + "logicalname" : "scsi0", + "version" : "0.02", + "serial" : "22113084010903", + "configuration" : { + "driver" : "usb-storage", + "maxpower" : "800mA", + "speed" : "5000Mbit/s" + }, + "capabilities" : { + "usb-3.20" : true, + "scsi" : "SCSI", + "emulated" : "Emulated device", + "scsi-host" : "SCSI host adapter" + }, + "children" : [ { + "id" : "disk", + "class" : "disk", + "claimed" : true, + "handle" : "SCSI:00:00:00:00", + "description" : "SCSI Disk", + "product" : "STORE N GO", + "vendor" : "Verbatim", + "physid" : "0.0.0", + "businfo" : "scsi@0:0.0.0", + "logicalname" : "/dev/sda", + "dev" : "8:0", + "version" : "8.01", + "units" : "bytes", + "size" : 62495129600, + "configuration" : { + "ansiversion" : "6", + "logicalsectorsize" : "512", + "sectorsize" : "512" + }, + "capabilities" : { + "removable" : "support is removable" + }, + "children" : [ { + "id" : "medium", + "class" : "disk", + "claimed" : true, + "physid" : "0", + "logicalname" : "/dev/sda", + "dev" : "8:0", + "units" : "bytes", + "size" : 62495129600, + "configuration" : { + "signature" : "5cfcc5eb" + }, + "capabilities" : { + "partitioned" : "Partitioned disk", + "partitioned:dos" : "MS-DOS partition table" + }, + "children" : [ { + "id" : "volume:0", + "class" : "volume", + "claimed" : true, + "description" : "Linux filesystem partition", + "physid" : "1", + "logicalname" : "/dev/sda1", + "dev" : "8:1", + "serial" : "7bd79485-e171-4527-a9d1-43da13de02c9", + "size" : 29497491456, + "capacity" : 29497491456, + "width" : 297265464, + "configuration" : { + "bits" : "13182167352", + "filesystem" : "luks", + "hash" : "sha256", + "version" : "2" + }, + "capabilities" : { + "primary" : "Primary partition", + "encrypted" : "Encrypted volume", + "luks" : "Linux Unified Key Setup", + "initialized" : "initialized volume" + } + }, + { + "id" : "volume:1", + "class" : "volume", + "claimed" : true, + "description" : "Windows NTFS volume", + "physid" : "2", + "logicalname" : ["/dev/sda2", "/media/repair/USB-NT"], + "dev" : "8:2", + "version" : "3.1", + "serial" : "777b-c522", + "size" : 32992394752, + "capacity" : 32996589568, + "configuration" : { + "clustersize" : "4096", + "created" : "2023-12-06 08:39:55", + "filesystem" : "ntfs", + "label" : "USB-NT", + "mount.fstype" : "ntfs3", + "mount.options" : "rw,nosuid,nodev,relatime,uid=1000,gid=1000,windows_names,iocharset=utf8", + "state" : "mounted" + }, + "capabilities" : { + "primary" : "Primary partition", + "ntfs" : "Windows NTFS", + "initialized" : "initialized volume" + } + }] + }] + }] + }] + }] + }, + { + "id" : "memory", + "class" : "memory", + "handle" : "PCI:0000:00:14.2", + "description" : "RAM memory", + "product" : "Cannon Point-LP Shared SRAM", + "vendor" : "Intel Corporation", + "physid" : "14.2", + "businfo" : "pci@0000:00:14.2", + "version" : "30", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "network:0", + "class" : "network", + "claimed" : true, + "handle" : "PCI:0000:00:14.3", + "description" : "Wireless interface", + "product" : "Cannon Point-LP CNVi [Wireless-AC]", + "vendor" : "Intel Corporation", + "physid" : "14.3", + "businfo" : "pci@0000:00:14.3", + "logicalname" : "wlp0s20f3", + "version" : "30", + "serial" : "38:00:25:8e:bf:a2", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "broadcast" : "yes", + "driver" : "iwlwifi", + "driverversion" : "6.5.0-21-generic", + "firmware" : "46.fae53a8b.0 9000-pu-b0-jf-b0-", + "ip" : "192.168.10.82", + "latency" : "0", + "link" : "yes", + "multicast" : "yes", + "wireless" : "IEEE 802.11" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "msix" : "MSI-X", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "ethernet" : true, + "physical" : "Physical interface", + "wireless" : "Wireless-LAN" + } + }, + { + "id" : "communication", + "class" : "communication", + "claimed" : true, + "handle" : "PCI:0000:00:16.0", + "description" : "Communication controller", + "product" : "Cannon Point-LP MEI Controller #1", + "vendor" : "Intel Corporation", + "physid" : "16", + "businfo" : "pci@0000:00:16.0", + "version" : "30", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "mei_me", + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "pci:0", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:01", + "description" : "PCI bridge", + "product" : "Cannon Point-LP PCI Express Root Port #1", + "vendor" : "Intel Corporation", + "physid" : "1c", + "businfo" : "pci@0000:00:1c.0", + "version" : "f0", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "generic", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:01:00.0", + "description" : "MMC Host", + "product" : "GL9750 SD Host Controller", + "vendor" : "Genesys Logic, Inc", + "physid" : "0", + "businfo" : "pci@0000:01:00.0", + "logicalname" : "mmc0", + "version" : "01", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "sdhci-pci", + "latency" : "0" + }, + "capabilities" : { + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }] + }, + { + "id" : "pci:1", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:02", + "description" : "PCI bridge", + "product" : "Cannon Point-LP PCI Express Root Port #5", + "vendor" : "Intel Corporation", + "physid" : "1c.4", + "businfo" : "pci@0000:00:1c.4", + "version" : "f0", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "pci", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:03", + "description" : "PCI bridge", + "product" : "JHL6240 Thunderbolt 3 Bridge (Low Power) [Alpine Ridge LP 2016]", + "vendor" : "Intel Corporation", + "physid" : "0", + "businfo" : "pci@0000:02:00.0", + "version" : "01", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "pci:0", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:04", + "description" : "PCI bridge", + "product" : "JHL6240 Thunderbolt 3 Bridge (Low Power) [Alpine Ridge LP 2016]", + "vendor" : "Intel Corporation", + "physid" : "0", + "businfo" : "pci@0000:03:00.0", + "version" : "01", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "generic", + "class" : "generic", + "claimed" : true, + "handle" : "PCI:0000:04:00.0", + "description" : "System peripheral", + "product" : "JHL6240 Thunderbolt 3 NHI (Low Power) [Alpine Ridge LP 2016]", + "vendor" : "Intel Corporation", + "physid" : "0", + "businfo" : "pci@0000:04:00.0", + "version" : "01", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "thunderbolt", + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "msix" : "MSI-X", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }] + }, + { + "id" : "pci:1", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:05", + "description" : "PCI bridge", + "product" : "JHL6240 Thunderbolt 3 Bridge (Low Power) [Alpine Ridge LP 2016]", + "vendor" : "Intel Corporation", + "physid" : "1", + "businfo" : "pci@0000:03:01.0", + "version" : "01", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "pci:2", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:3a", + "description" : "PCI bridge", + "product" : "JHL6240 Thunderbolt 3 Bridge (Low Power) [Alpine Ridge LP 2016]", + "vendor" : "Intel Corporation", + "physid" : "2", + "businfo" : "pci@0000:03:02.0", + "version" : "01", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "usb", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:3a:00.0", + "description" : "USB controller", + "product" : "JHL6240 Thunderbolt 3 USB 3.1 Controller (Low Power) [Alpine Ridge LP 2016]", + "vendor" : "Intel Corporation", + "physid" : "0", + "businfo" : "pci@0000:3a:00.0", + "version" : "01", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "xhci_hcd", + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "xhci" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "usbhost:0", + "class" : "bus", + "claimed" : true, + "handle" : "USB:3:1", + "product" : "xHCI Host Controller", + "vendor" : "Linux 6.5.0-21-generic xhci-hcd", + "physid" : "0", + "businfo" : "usb@3", + "logicalname" : "usb3", + "version" : "6.05", + "configuration" : { + "driver" : "hub", + "slots" : "2", + "speed" : "480Mbit/s" + }, + "capabilities" : { + "usb-2.00" : "USB 2.0" + } + }, + { + "id" : "usbhost:1", + "class" : "bus", + "claimed" : true, + "handle" : "USB:4:1", + "product" : "xHCI Host Controller", + "vendor" : "Linux 6.5.0-21-generic xhci-hcd", + "physid" : "1", + "businfo" : "usb@4", + "logicalname" : "usb4", + "version" : "6.05", + "configuration" : { + "driver" : "hub", + "slots" : "2", + "speed" : "10000Mbit/s" + }, + "capabilities" : { + "usb-3.10" : true + }, + "children" : [ { + "id" : "usb", + "class" : "communication", + "claimed" : true, + "handle" : "USB:4:2", + "description" : "Communication device", + "product" : "AX88179A", + "vendor" : "ASIX", + "physid" : "1", + "businfo" : "usb@4:1", + "version" : "2.00", + "serial" : "00CD2594", + "configuration" : { + "driver" : "cdc_ncm", + "maxpower" : "184mA", + "speed" : "5000Mbit/s" + }, + "capabilities" : { + "usb-3.20" : true + } + }] + }] + }] + }] + }] + }, + { + "id" : "pci:2", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:3c", + "description" : "PCI bridge", + "product" : "Cannon Point-LP PCI Express Root Port #9", + "vendor" : "Intel Corporation", + "physid" : "1d", + "businfo" : "pci@0000:00:1d.0", + "version" : "f0", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "pci:3", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:3d", + "description" : "PCI bridge", + "product" : "Cannon Point-LP PCI Express Root Port #13", + "vendor" : "Intel Corporation", + "physid" : "1d.4", + "businfo" : "pci@0000:00:1d.4", + "version" : "f0", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "nvme", + "class" : "storage", + "claimed" : true, + "handle" : "PCI:0000:3d:00.0", + "description" : "NVMe device", + "product" : "KXG6AZNV256G TOSHIBA", + "vendor" : "Toshiba Corporation", + "physid" : "0", + "businfo" : "pci@0000:3d:00.0", + "logicalname" : "/dev/nvme0", + "version" : "5108AGLA", + "serial" : "39NS11RYTMCQ", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "nvme", + "latency" : "0", + "nqn" : "nqn.2017-03.jp.co.toshiba:KXG6AZNV256G TOSHIBA:39NS11RYTMCQ", + "state" : "live" + }, + "capabilities" : { + "nvme" : true, + "pciexpress" : "PCI Express", + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "msix" : "MSI-X", + "nvm_express" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "namespace:0", + "class" : "disk", + "claimed" : true, + "description" : "NVMe disk", + "physid" : "0", + "logicalname" : "hwmon3" + }, + { + "id" : "namespace:1", + "class" : "disk", + "claimed" : true, + "description" : "NVMe disk", + "physid" : "2", + "logicalname" : "/dev/ng0n1" + }, + { + "id" : "namespace:2", + "class" : "disk", + "claimed" : true, + "handle" : "GUID:a6682d7a-eb54-43e7-84a4-44a4beaaa49a", + "description" : "NVMe disk", + "physid" : "1", + "businfo" : "nvme@0:1", + "logicalname" : "/dev/nvme0n1", + "units" : "bytes", + "size" : 256060514304, + "configuration" : { + "guid" : "a6682d7a-eb54-43e7-84a4-44a4beaaa49a", + "logicalsectorsize" : "512", + "sectorsize" : "512", + "wwid" : "eui.8ce38e020004f28f" + }, + "capabilities" : { + "gpt-1.00" : "GUID Partition Table version 1.00", + "partitioned" : "Partitioned disk", + "partitioned:gpt" : "GUID partition table" + }, + "children" : [ { + "id" : "volume:0", + "class" : "volume", + "claimed" : true, + "handle" : "GUID:87a3ecda-69a5-4064-8f11-448e1d289ca0", + "description" : "Windows FAT volume", + "vendor" : "mkfs.fat", + "physid" : "1", + "businfo" : "nvme@0:1,1", + "logicalname" : ["/dev/nvme0n1p1", "/boot/efi"], + "dev" : "259:1", + "version" : "FAT32", + "serial" : "d9b6-7308", + "size" : 535805952, + "capacity" : 536870400, + "configuration" : { + "FATs" : "2", + "filesystem" : "fat", + "mount.fstype" : "vfat", + "mount.options" : "rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro", + "name" : "EFI System Partition", + "state" : "mounted" + }, + "capabilities" : { + "boot" : "Contains boot code", + "fat" : "Windows FAT", + "initialized" : "initialized volume" + } + }, + { + "id" : "volume:1", + "class" : "volume", + "claimed" : true, + "handle" : "GUID:9437edbd-ad72-4a85-9b4c-e2b3f0fc9643", + "description" : "EXT4 volume", + "vendor" : "Linux", + "physid" : "2", + "businfo" : "nvme@0:1,2", + "logicalname" : ["/dev/nvme0n1p2", "/", "/var/snap/firefox/common/host-hunspell"], + "dev" : "259:2", + "version" : "1.0", + "serial" : "9fb75059-3d5f-4fc4-a136-2517b3bd5a1c", + "size" : 255522242560, + "configuration" : { + "created" : "2023-12-15 11:42:35", + "filesystem" : "ext4", + "lastmountpoint" : "/", + "modified" : "2024-03-11 09:39:31", + "mount.fstype" : "ext4", + "mount.options" : "ro,noexec,noatime,errors=remount-ro", + "mounted" : "2024-03-11 09:39:32", + "state" : "mounted" + }, + "capabilities" : { + "journaled" : true, + "extended_attributes" : "Extended Attributes", + "large_files" : "4GB+ files", + "huge_files" : "16TB+ files", + "dir_nlink" : "directories with 65000+ subdirs", + "recover" : "needs recovery", + "64bit" : "64bit filesystem", + "extents" : "extent-based allocation", + "ext4" : true, + "ext2" : "EXT2/EXT3", + "initialized" : "initialized volume" + } + }] + }] + }] + }, + { + "id" : "isa", + "class" : "bridge", + "claimed" : true, + "handle" : "PCI:0000:00:1f.0", + "description" : "ISA bridge", + "product" : "Cannon Point-LP LPC Controller", + "vendor" : "Intel Corporation", + "physid" : "1f", + "businfo" : "pci@0000:00:1f.0", + "version" : "30", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "isa" : true, + "bus_master" : "bus mastering" + }, + "children" : [ { + "id" : "pnp00:00", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "0", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:01", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "1", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:02", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "2", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:03", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "3", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:04", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0b00", + "physid" : "4", + "configuration" : { + "driver" : "rtc_cmos" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:05", + "class" : "generic", + "claimed" : true, + "product" : "PnP device INT3f0d", + "physid" : "5", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:06", + "class" : "generic", + "claimed" : true, + "product" : "PnP device LEN0071", + "physid" : "6", + "configuration" : { + "driver" : "i8042 kbd" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:07", + "class" : "generic", + "claimed" : true, + "product" : "PnP device LEN0401", + "physid" : "7", + "configuration" : { + "driver" : "i8042 aux" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:08", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "8", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:09", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "9", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:0a", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "a", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:0b", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c01", + "physid" : "b", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }] + }, + { + "id" : "multimedia", + "class" : "multimedia", + "claimed" : true, + "handle" : "PCI:0000:00:1f.3", + "description" : "Audio device", + "product" : "Cannon Point-LP High Definition Audio Controller", + "vendor" : "Intel Corporation", + "physid" : "1f.3", + "businfo" : "pci@0000:00:1f.3", + "logicalname" : ["card0", "/dev/snd/controlC0", "/dev/snd/hwC0D0", "/dev/snd/hwC0D2", "/dev/snd/pcmC0D0c", "/dev/snd/pcmC0D0p", "/dev/snd/pcmC0D3p", "/dev/snd/pcmC0D7p", "/dev/snd/pcmC0D8p"], + "version" : "30", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "snd_hda_intel", + "latency" : "64" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "input:0", + "class" : "input", + "claimed" : true, + "product" : "HDA Intel PCH Mic", + "physid" : "0", + "logicalname" : ["input20", "/dev/input/event8"] + }, + { + "id" : "input:1", + "class" : "input", + "claimed" : true, + "product" : "HDA Intel PCH Headphone", + "physid" : "1", + "logicalname" : ["input21", "/dev/input/event9"] + }, + { + "id" : "input:2", + "class" : "input", + "claimed" : true, + "product" : "HDA Intel PCH HDMI/DP,pcm=3", + "physid" : "2", + "logicalname" : ["input22", "/dev/input/event10"] + }, + { + "id" : "input:3", + "class" : "input", + "claimed" : true, + "product" : "HDA Intel PCH HDMI/DP,pcm=7", + "physid" : "3", + "logicalname" : ["input23", "/dev/input/event11"] + }, + { + "id" : "input:4", + "class" : "input", + "claimed" : true, + "product" : "HDA Intel PCH HDMI/DP,pcm=8", + "physid" : "4", + "logicalname" : ["input24", "/dev/input/event12"] + }] + }, + { + "id" : "serial:0", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:00:1f.4", + "description" : "SMBus", + "product" : "Cannon Point-LP SMBus Controller", + "vendor" : "Intel Corporation", + "physid" : "1f.4", + "businfo" : "pci@0000:00:1f.4", + "version" : "30", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "i801_smbus", + "latency" : "0" + }, + "children" : [ { + "id" : "input:0", + "class" : "input", + "claimed" : true, + "product" : "Elan Touchpad", + "physid" : "0", + "logicalname" : ["input16", "/dev/input/event4", "/dev/input/mouse0"], + "capabilities" : { + "i2c" : "I²C bus" + } + }, + { + "id" : "input:1", + "class" : "input", + "claimed" : true, + "product" : "Elan TrackPoint", + "physid" : "1", + "logicalname" : ["input17", "/dev/input/event5", "/dev/input/mouse1"], + "capabilities" : { + "i2c" : "I²C bus" + } + }] + }, + { + "id" : "serial:1", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:00:1f.5", + "description" : "Serial bus controller", + "product" : "Cannon Point-LP SPI Controller", + "vendor" : "Intel Corporation", + "physid" : "1f.5", + "businfo" : "pci@0000:00:1f.5", + "version" : "30", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "intel-spi", + "latency" : "0" + } + }, + { + "id" : "network:1", + "class" : "network", + "claimed" : true, + "handle" : "PCI:0000:00:1f.6", + "description" : "Ethernet interface", + "product" : "Ethernet Connection (6) I219-V", + "vendor" : "Intel Corporation", + "physid" : "1f.6", + "businfo" : "pci@0000:00:1f.6", + "logicalname" : "enp0s31f6", + "version" : "30", + "serial" : "98:fa:9b:1f:f1:fb", + "units" : "bit/s", + "capacity" : 1000000000, + "width" : 32, + "clock" : 33000000, + "configuration" : { + "autonegotiation" : "on", + "broadcast" : "yes", + "driver" : "e1000e", + "driverversion" : "6.5.0-21-generic", + "firmware" : "0.5-3", + "latency" : "0", + "link" : "no", + "multicast" : "yes", + "port" : "twisted pair" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "ethernet" : true, + "physical" : "Physical interface", + "tp" : "twisted pair", + "10bt" : "10Mbit/s", + "10bt-fd" : "10Mbit/s (full duplex)", + "100bt" : "100Mbit/s", + "100bt-fd" : "100Mbit/s (full duplex)", + "1000bt-fd" : "1Gbit/s (full duplex)", + "autonegotiation" : "Auto-negotiation" + } + }] + }] + }, + { + "id" : "battery", + "class" : "power", + "claimed" : true, + "handle" : "DMI:002C", + "product" : "5B10W13909", + "vendor" : "LGC", + "physid" : "1", + "slot" : "Front", + "units" : "mWh", + "capacity" : 57000, + "configuration" : { + "voltage" : "11,6V" + } + }, + { + "id" : "input:0", + "class" : "input", + "claimed" : true, + "product" : "Sleep Button", + "physid" : "2", + "logicalname" : ["input0", "/dev/input/event0"], + "capabilities" : { + "platform" : true + } + }, + { + "id" : "input:1", + "class" : "input", + "claimed" : true, + "product" : "Lid Switch", + "physid" : "3", + "logicalname" : ["input1", "/dev/input/event1"], + "capabilities" : { + "platform" : true + } + }, + { + "id" : "input:2", + "class" : "input", + "claimed" : true, + "product" : "ThinkPad Extra Buttons", + "physid" : "4", + "logicalname" : ["input18", "/dev/input/event7"], + "capabilities" : { + "platform" : true + } + }, + { + "id" : "input:3", + "class" : "input", + "claimed" : true, + "product" : "Video Bus", + "physid" : "5", + "logicalname" : ["input19", "/dev/input/event6"], + "capabilities" : { + "platform" : true + } + }, + { + "id" : "input:4", + "class" : "input", + "claimed" : true, + "product" : "Power Button", + "physid" : "6", + "logicalname" : ["input2", "/dev/input/event2"], + "capabilities" : { + "platform" : true + } + }, + { + "id" : "input:5", + "class" : "input", + "claimed" : true, + "product" : "AT Translated Set 2 keyboard", + "physid" : "7", + "logicalname" : ["input3", "/dev/input/event3", "input3::capslock", "input3::numlock", "input3::scrolllock"], + "capabilities" : { + "i8042" : "i8042 PC AT keyboard controller" + } + }, + { + "id" : "network", + "class" : "network", + "claimed" : true, + "description" : "Ethernet interface", + "physid" : "8", + "businfo" : "usb@4:1", + "logicalname" : "enxf8e43bcd2594", + "serial" : "f8:e4:3b:cd:25:94", + "configuration" : { + "autonegotiation" : "off", + "broadcast" : "yes", + "driver" : "cdc_ncm", + "driverversion" : "6.5.0-21-generic", + "duplex" : "half", + "firmware" : "CDC NCM (NO ZLP)", + "ip" : "192.168.10.50", + "link" : "yes", + "multicast" : "yes", + "port" : "twisted pair" + }, + "capabilities" : { + "ethernet" : true, + "physical" : "Physical interface" + } + }] +} diff --git a/tests/mocks/nvme_data.json b/tests/mocks/nvme_data.json new file mode 100644 index 0000000..1f5c7e9 --- /dev/null +++ b/tests/mocks/nvme_data.json @@ -0,0 +1,17 @@ +{ + "Devices" : [ + { + "NameSpace" : 1, + "DevicePath" : "/dev/nvme0n1", + "Firmware" : " ", + "Index" : 0, + "ModelNumber" : " ", + "ProductName" : "Non-Volatile memory controller: Toshiba Corporation XG6 NVMe SSD Controller Satellite Pro", + "SerialNumber" : " ", + "UsedBytes" : 0, + "MaximumLBA" : 0, + "PhysicalSize" : 0, + "SectorSize" : 1 + } + ] +} diff --git a/tests/mocks/nvme_data_sudo.json b/tests/mocks/nvme_data_sudo.json new file mode 100644 index 0000000..320de8e --- /dev/null +++ b/tests/mocks/nvme_data_sudo.json @@ -0,0 +1,17 @@ +{ + "Devices" : [ + { + "NameSpace" : 1, + "DevicePath" : "/dev/nvme0n1", + "Firmware" : "5108AGLA", + "Index" : 0, + "ModelNumber" : "KXG6AZNV256G TOSHIBA", + "ProductName" : "Non-Volatile memory controller: Toshiba Corporation XG6 NVMe SSD Controller Satellite Pro", + "SerialNumber" : "39NS11RYTMCQ", + "UsedBytes" : 256060514304, + "MaximumLBA" : 500118192, + "PhysicalSize" : 256060514304, + "SectorSize" : 512 + } + ] +} diff --git a/boagent/tests/mocks/power_data.json b/tests/mocks/power_data.json similarity index 100% rename from boagent/tests/mocks/power_data.json rename to tests/mocks/power_data.json diff --git a/boagent/tests/mocks/sudo_lshw_data.json b/tests/mocks/sudo_lshw_data.json similarity index 100% rename from boagent/tests/mocks/sudo_lshw_data.json rename to tests/mocks/sudo_lshw_data.json diff --git a/boagent/tests/mocks/sudo_lshw_data_disks.json b/tests/mocks/sudo_lshw_data_disks.json similarity index 100% rename from boagent/tests/mocks/sudo_lshw_data_disks.json rename to tests/mocks/sudo_lshw_data_disks.json diff --git a/tests/mocks/sync-ce-re_lshw.json b/tests/mocks/sync-ce-re_lshw.json new file mode 100644 index 0000000..66da3c4 --- /dev/null +++ b/tests/mocks/sync-ce-re_lshw.json @@ -0,0 +1,1395 @@ +{ + "id" : "jimbei", + "class" : "system", + "claimed" : true, + "handle" : "DMI:0001", + "description" : "Sealed-case PC", + "product" : "X8SIL (To Be Filled By O.E.M.)", + "vendor" : "Supermicro", + "version" : "0123456789", + "serial" : "0123456789", + "width" : 64, + "configuration" : { + "boot" : "normal", + "chassis" : "sealed", + "family" : "To Be Filled By O.E.M.", + "sku" : "To Be Filled By O.E.M.", + "uuid" : "49434d53-0200-900d-2500-0d902500d161" + }, + "capabilities" : { + "smbios-2.6" : "SMBIOS version 2.6", + "dmi-2.6" : "DMI version 2.6", + "smp" : "Symmetric Multi-Processing", + "vsyscall32" : "32-bit processes" + }, + "children" : [ { + "id" : "core", + "class" : "bus", + "claimed" : true, + "handle" : "DMI:0002", + "description" : "Motherboard", + "product" : "X8SIL", + "vendor" : "Supermicro", + "physid" : "0", + "version" : "0123456789", + "serial" : "0123456789", + "slot" : "To Be Filled By O.E.M.", + "children" : [ { + "id" : "firmware", + "class" : "memory", + "claimed" : true, + "description" : "BIOS", + "vendor" : "American Megatrends Inc.", + "physid" : "0", + "version" : "1.2a", + "date" : "06/27/2012", + "units" : "bytes", + "size" : 65536, + "capacity" : 4194304, + "capabilities" : { + "isa" : "ISA bus", + "pci" : "PCI bus", + "pnp" : "Plug-and-Play", + "upgrade" : "BIOS EEPROM can be upgraded", + "shadowing" : "BIOS shadowing", + "escd" : "ESCD", + "cdboot" : "Booting from CD-ROM/DVD", + "bootselect" : "Selectable boot path", + "socketedrom" : "BIOS ROM is socketed", + "edd" : "Enhanced Disk Drive extensions", + "int13floppy1200" : "5.25\" 1.2MB floppy", + "int13floppy720" : "3.5\" 720KB floppy", + "int13floppy2880" : "3.5\" 2.88MB floppy", + "int5printscreen" : "Print Screen key", + "int9keyboard" : "i8042 keyboard controller", + "int14serial" : "INT14 serial line control", + "int17printer" : "INT17 printer control", + "int10video" : "INT10 CGA/Mono video", + "acpi" : "ACPI", + "usb" : "USB legacy emulation", + "ls120boot" : "Booting from LS-120", + "zipboot" : "Booting from ATAPI ZIP", + "biosbootspecification" : "BIOS boot specification" + } + }, + { + "id" : "cpu", + "class" : "processor", + "claimed" : true, + "handle" : "DMI:0004", + "description" : "CPU", + "product" : "Intel(R) Core(TM) i5 CPU 750 @ 2.67GHz", + "vendor" : "Intel Corp.", + "physid" : "4", + "businfo" : "cpu@0", + "version" : "6.30.5", + "serial" : "To Be Filled By O.E.M.", + "slot" : "CPU", + "units" : "Hz", + "size" : 1314560000, + "capacity" : 2668000000, + "width" : 64, + "clock" : 133000000, + "configuration" : { + "cores" : "4", + "enabledcores" : "4", + "microcode" : "10", + "threads" : "4" + }, + "capabilities" : { + "lm" : "64bits extensions (x86-64)", + "fpu" : "mathematical co-processor", + "fpu_exception" : "FPU exceptions reporting", + "wp" : true, + "vme" : "virtual mode extensions", + "de" : "debugging extensions", + "pse" : "page size extensions", + "tsc" : "time stamp counter", + "msr" : "model-specific registers", + "pae" : "4GB+ memory addressing (Physical Address Extension)", + "mce" : "machine check exceptions", + "cx8" : "compare and exchange 8-byte", + "apic" : "on-chip advanced programmable interrupt controller (APIC)", + "sep" : "fast system calls", + "mtrr" : "memory type range registers", + "pge" : "page global enable", + "mca" : "machine check architecture", + "cmov" : "conditional move instruction", + "pat" : "page attribute table", + "pse36" : "36-bit page size extensions", + "clflush" : true, + "dts" : "debug trace and EMON store MSRs", + "acpi" : "thermal control (ACPI)", + "mmx" : "multimedia extensions (MMX)", + "fxsr" : "fast floating point save/restore", + "sse" : "streaming SIMD extensions (SSE)", + "sse2" : "streaming SIMD extensions (SSE2)", + "ht" : "HyperThreading", + "tm" : "thermal interrupt and status", + "pbe" : "pending break event", + "syscall" : "fast system calls", + "nx" : "no-execute bit (NX)", + "rdtscp" : true, + "x86-64" : "64bits extensions (x86-64)", + "constant_tsc" : true, + "arch_perfmon" : true, + "pebs" : true, + "bts" : true, + "rep_good" : true, + "nopl" : true, + "xtopology" : true, + "nonstop_tsc" : true, + "cpuid" : true, + "aperfmperf" : true, + "pni" : true, + "dtes64" : true, + "monitor" : true, + "ds_cpl" : true, + "vmx" : true, + "smx" : true, + "est" : true, + "tm2" : true, + "ssse3" : true, + "cx16" : true, + "xtpr" : true, + "pdcm" : true, + "sse4_1" : true, + "sse4_2" : true, + "popcnt" : true, + "lahf_lm" : true, + "pti" : true, + "ssbd" : true, + "ibrs" : true, + "ibpb" : true, + "stibp" : true, + "tpr_shadow" : true, + "vnmi" : true, + "flexpriority" : true, + "ept" : true, + "vpid" : true, + "dtherm" : true, + "ida" : true, + "flush_l1d" : true, + "cpufreq" : "CPU Frequency scaling" + }, + "children" : [ { + "id" : "cache:0", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0005", + "description" : "L1 cache", + "physid" : "5", + "slot" : "L1-Cache", + "units" : "bytes", + "size" : 262144, + "capacity" : 262144, + "configuration" : { + "level" : "1" + }, + "capabilities" : { + "internal" : "Internal", + "write-through" : "Write-trough", + "instruction" : "Instruction cache" + } + }, + { + "id" : "cache:1", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0006", + "description" : "L2 cache", + "physid" : "6", + "slot" : "L2-Cache", + "units" : "bytes", + "size" : 1048576, + "capacity" : 1048576, + "configuration" : { + "level" : "2" + }, + "capabilities" : { + "internal" : "Internal", + "write-through" : "Write-trough", + "unified" : "Unified cache" + } + }, + { + "id" : "cache:2", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0007", + "description" : "L3 cache", + "physid" : "7", + "slot" : "L3-Cache", + "units" : "bytes", + "size" : 8388608, + "capacity" : 8388608, + "configuration" : { + "level" : "3" + }, + "capabilities" : { + "internal" : "Internal", + "write-back" : "Write-back", + "unified" : "Unified cache" + } + }] + }, + { + "id" : "memory", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:002C", + "description" : "System Memory", + "physid" : "2c", + "slot" : "System board or motherboard", + "units" : "bytes", + "size" : 17179869184, + "children" : [ { + "id" : "bank:0", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:002E", + "description" : "DIMM DDR3 Synchronous 1333 MHz (0.8 ns)", + "product" : "NT4GC64B8HG0NF-CG", + "vendor" : "Nanya", + "physid" : "0", + "serial" : "1194C778", + "slot" : "DIMM1A", + "units" : "bytes", + "size" : 4294967296, + "width" : 64, + "clock" : 1333000000 + }, + { + "id" : "bank:1", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0030", + "description" : "DIMM DDR3 Synchronous 1333 MHz (0.8 ns)", + "product" : "99U5403-034.A00G", + "vendor" : "Kingston", + "physid" : "1", + "serial" : "369C3810", + "slot" : "DIMM1B", + "units" : "bytes", + "size" : 4294967296, + "width" : 64, + "clock" : 1333000000 + }, + { + "id" : "bank:2", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0032", + "description" : "DIMM DDR3 Synchronous 1333 MHz (0.8 ns)", + "product" : "NT4GC64B8HG0NF-CG", + "vendor" : "Nanya", + "physid" : "2", + "serial" : "11886939", + "slot" : "DIMM2A", + "units" : "bytes", + "size" : 4294967296, + "width" : 64, + "clock" : 1333000000 + }, + { + "id" : "bank:3", + "class" : "memory", + "claimed" : true, + "handle" : "DMI:0034", + "description" : "DIMM DDR3 Synchronous 1333 MHz (0.8 ns)", + "product" : "NT4GC64B8HG0NF-CG", + "vendor" : "Nanya", + "physid" : "3", + "serial" : "14945741", + "slot" : "DIMM2B", + "units" : "bytes", + "size" : 4294967296, + "width" : 64, + "clock" : 1333000000 + }] + }, + { + "id" : "pci:0", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:00", + "description" : "Host bridge", + "product" : "Core Processor DMI", + "vendor" : "Intel Corporation", + "physid" : "100", + "businfo" : "pci@0000:00:00.0", + "version" : "11", + "width" : 32, + "clock" : 33000000, + "children" : [ { + "id" : "pci:0", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:01", + "description" : "PCI bridge", + "product" : "Core Processor PCI Express Root Port 1", + "vendor" : "Intel Corporation", + "physid" : "3", + "businfo" : "pci@0000:00:03.0", + "version" : "11", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "pm" : "Power Management", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "pci:1", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:02", + "description" : "PCI bridge", + "product" : "Core Processor PCI Express Root Port 3", + "vendor" : "Intel Corporation", + "physid" : "5", + "businfo" : "pci@0000:00:05.0", + "version" : "11", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "pm" : "Power Management", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:0", + "class" : "generic", + "handle" : "PCI:0000:00:08.0", + "description" : "System peripheral", + "product" : "Core Processor System Management Registers", + "vendor" : "Intel Corporation", + "physid" : "8", + "businfo" : "pci@0000:00:08.0", + "version" : "11", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "pciexpress" : "PCI Express", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:1", + "class" : "generic", + "handle" : "PCI:0000:00:08.1", + "description" : "System peripheral", + "product" : "Core Processor Semaphore and Scratchpad Registers", + "vendor" : "Intel Corporation", + "physid" : "8.1", + "businfo" : "pci@0000:00:08.1", + "version" : "11", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "pciexpress" : "PCI Express", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:2", + "class" : "generic", + "handle" : "PCI:0000:00:08.2", + "description" : "System peripheral", + "product" : "Core Processor System Control and Status Registers", + "vendor" : "Intel Corporation", + "physid" : "8.2", + "businfo" : "pci@0000:00:08.2", + "version" : "11", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + }, + "capabilities" : { + "pciexpress" : "PCI Express", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "generic:3", + "class" : "generic", + "handle" : "PCI:0000:00:08.3", + "description" : "System peripheral", + "product" : "Core Processor Miscellaneous Registers", + "vendor" : "Intel Corporation", + "physid" : "8.3", + "businfo" : "pci@0000:00:08.3", + "version" : "11", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:4", + "class" : "generic", + "handle" : "PCI:0000:00:10.0", + "description" : "System peripheral", + "product" : "Core Processor QPI Link", + "vendor" : "Intel Corporation", + "physid" : "10", + "businfo" : "pci@0000:00:10.0", + "version" : "11", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "generic:5", + "class" : "generic", + "handle" : "PCI:0000:00:10.1", + "description" : "System peripheral", + "product" : "Core Processor QPI Routing and Protocol Registers", + "vendor" : "Intel Corporation", + "physid" : "10.1", + "businfo" : "pci@0000:00:10.1", + "version" : "11", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "latency" : "0" + } + }, + { + "id" : "pci:2", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:03", + "description" : "PCI bridge", + "product" : "5 Series/3400 Series Chipset PCI Express Root Port 1", + "vendor" : "Intel Corporation", + "physid" : "1c", + "businfo" : "pci@0000:00:1c.0", + "version" : "05", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + } + }, + { + "id" : "pci:3", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:04", + "description" : "PCI bridge", + "product" : "5 Series/3400 Series Chipset PCI Express Root Port 5", + "vendor" : "Intel Corporation", + "physid" : "1c.4", + "businfo" : "pci@0000:00:1c.4", + "version" : "05", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "network", + "class" : "network", + "claimed" : true, + "handle" : "PCI:0000:04:00.0", + "description" : "Ethernet interface", + "product" : "82574L Gigabit Network Connection", + "vendor" : "Intel Corporation", + "physid" : "0", + "businfo" : "pci@0000:04:00.0", + "logicalname" : "enp4s0", + "version" : "00", + "serial" : "00:25:90:0d:61:d0", + "units" : "bit/s", + "size" : 100000000, + "capacity" : 1000000000, + "width" : 32, + "clock" : 33000000, + "configuration" : { + "autonegotiation" : "on", + "broadcast" : "yes", + "driver" : "e1000e", + "driverversion" : "5.15.0-91-generic", + "duplex" : "full", + "firmware" : "1.9-0", + "ip" : "91.121.209.54", + "latency" : "0", + "link" : "yes", + "multicast" : "yes", + "port" : "twisted pair", + "speed" : "100Mbit/s" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "msix" : "MSI-X", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "ethernet" : true, + "physical" : "Physical interface", + "tp" : "twisted pair", + "10bt" : "10Mbit/s", + "10bt-fd" : "10Mbit/s (full duplex)", + "100bt" : "100Mbit/s", + "100bt-fd" : "100Mbit/s (full duplex)", + "1000bt-fd" : "1Gbit/s (full duplex)", + "autonegotiation" : "Auto-negotiation" + } + }] + }, + { + "id" : "pci:4", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:05", + "description" : "PCI bridge", + "product" : "5 Series/3400 Series Chipset PCI Express Root Port 6", + "vendor" : "Intel Corporation", + "physid" : "1c.5", + "businfo" : "pci@0000:00:1c.5", + "version" : "05", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "pcieport" + }, + "capabilities" : { + "pci" : true, + "pciexpress" : "PCI Express", + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "normal_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "network", + "class" : "network", + "disabled" : true, + "claimed" : true, + "handle" : "PCI:0000:05:00.0", + "description" : "Ethernet interface", + "product" : "82574L Gigabit Network Connection", + "vendor" : "Intel Corporation", + "physid" : "0", + "businfo" : "pci@0000:05:00.0", + "logicalname" : "enp5s0", + "version" : "00", + "serial" : "00:25:90:0d:61:d1", + "units" : "bit/s", + "capacity" : 1000000000, + "width" : 32, + "clock" : 33000000, + "configuration" : { + "autonegotiation" : "on", + "broadcast" : "yes", + "driver" : "e1000e", + "driverversion" : "5.15.0-91-generic", + "firmware" : "1.9-0", + "latency" : "0", + "link" : "no", + "multicast" : "yes", + "port" : "twisted pair" + }, + "capabilities" : { + "pm" : "Power Management", + "msi" : "Message Signalled Interrupts", + "pciexpress" : "PCI Express", + "msix" : "MSI-X", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "ethernet" : true, + "physical" : "Physical interface", + "tp" : "twisted pair", + "10bt" : "10Mbit/s", + "10bt-fd" : "10Mbit/s (full duplex)", + "100bt" : "100Mbit/s", + "100bt-fd" : "100Mbit/s (full duplex)", + "1000bt-fd" : "1Gbit/s (full duplex)", + "autonegotiation" : "Auto-negotiation" + } + }] + }, + { + "id" : "usb", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:00:1d.0", + "description" : "USB controller", + "product" : "5 Series/3400 Series Chipset USB2 Enhanced Host Controller", + "vendor" : "Intel Corporation", + "physid" : "1d", + "businfo" : "pci@0000:00:1d.0", + "version" : "05", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "ehci-pci", + "latency" : "0" + }, + "capabilities" : { + "pm" : "Power Management", + "debug" : "Debug port", + "ehci" : "Enhanced Host Controller Interface (USB2)", + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "usbhost", + "class" : "bus", + "claimed" : true, + "handle" : "USB:1:1", + "product" : "EHCI Host Controller", + "vendor" : "Linux 5.15.0-91-generic ehci_hcd", + "physid" : "1", + "businfo" : "usb@1", + "logicalname" : "usb1", + "version" : "5.15", + "configuration" : { + "driver" : "hub", + "slots" : "2", + "speed" : "480Mbit/s" + }, + "capabilities" : { + "usb-2.00" : "USB 2.0" + }, + "children" : [ { + "id" : "usb", + "class" : "bus", + "claimed" : true, + "handle" : "USB:1:2", + "description" : "USB hub", + "product" : "Integrated Rate Matching Hub", + "vendor" : "Intel Corp.", + "physid" : "1", + "businfo" : "usb@1:1", + "version" : "0.00", + "configuration" : { + "driver" : "hub", + "slots" : "8", + "speed" : "480Mbit/s" + }, + "capabilities" : { + "usb-2.00" : "USB 2.0" + } + }] + }] + }, + { + "id" : "pci:5", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:06", + "description" : "PCI bridge", + "product" : "82801 PCI Bridge", + "vendor" : "Intel Corporation", + "physid" : "1e", + "businfo" : "pci@0000:00:1e.0", + "version" : "a5", + "width" : 32, + "clock" : 33000000, + "capabilities" : { + "pci" : true, + "subtractive_decode" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "display", + "class" : "display", + "claimed" : true, + "handle" : "PCI:0000:06:03.0", + "description" : "VGA compatible controller", + "product" : "MGA G200eW WPCM450", + "vendor" : "Matrox Electronics Systems Ltd.", + "physid" : "3", + "businfo" : "pci@0000:06:03.0", + "logicalname" : "/dev/fb0", + "version" : "0a", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "depth" : "32", + "driver" : "mgag200", + "latency" : "64", + "maxlatency" : "32", + "mingnt" : "16", + "resolution" : "1024,768" + }, + "capabilities" : { + "pm" : "Power Management", + "vga_controller" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "rom" : "extension ROM", + "fb" : "framebuffer" + } + }] + }, + { + "id" : "isa", + "class" : "bridge", + "claimed" : true, + "handle" : "PCI:0000:00:1f.0", + "description" : "ISA bridge", + "product" : "3400 Series Chipset LPC Interface Controller", + "vendor" : "Intel Corporation", + "physid" : "1f", + "businfo" : "pci@0000:00:1f.0", + "version" : "05", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "lpc_ich", + "latency" : "0" + }, + "capabilities" : { + "isa" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing" + }, + "children" : [ { + "id" : "pnp00:00", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c01", + "physid" : "0", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:01", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0b00", + "physid" : "1", + "configuration" : { + "driver" : "rtc_cmos" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:02", + "class" : "communication", + "claimed" : true, + "product" : "PnP device PNP0501", + "physid" : "2", + "configuration" : { + "driver" : "serial" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:03", + "class" : "communication", + "claimed" : true, + "product" : "PnP device PNP0501", + "physid" : "3", + "configuration" : { + "driver" : "serial" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:04", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "4", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:05", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "5", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:06", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "6", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:07", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "7", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:08", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c02", + "physid" : "8", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }, + { + "id" : "pnp00:09", + "class" : "system", + "claimed" : true, + "product" : "PnP device PNP0c01", + "physid" : "9", + "configuration" : { + "driver" : "system" + }, + "capabilities" : { + "pnp" : true + } + }] + }, + { + "id" : "sata", + "class" : "storage", + "claimed" : true, + "handle" : "PCI:0000:00:1f.2", + "description" : "SATA controller", + "product" : "5 Series/3400 Series Chipset 4 port SATA AHCI Controller", + "vendor" : "Intel Corporation", + "physid" : "1f.2", + "businfo" : "pci@0000:00:1f.2", + "logicalname" : "scsi0", + "version" : "05", + "width" : 32, + "clock" : 66000000, + "configuration" : { + "driver" : "ahci", + "latency" : "0" + }, + "capabilities" : { + "sata" : true, + "msi" : "Message Signalled Interrupts", + "pm" : "Power Management", + "ahci_1.0" : true, + "bus_master" : "bus mastering", + "cap_list" : "PCI capabilities listing", + "emulated" : "Emulated device" + }, + "children" : [ { + "id" : "disk", + "class" : "disk", + "claimed" : true, + "handle" : "GUID:e28a896c-74dc-4063-a4d1-91681dcecf2c", + "description" : "ATA Disk", + "product" : "HGST HUS724020AL", + "physid" : "0.0.0", + "businfo" : "scsi@0:0.0.0", + "logicalname" : "/dev/sda", + "dev" : "8:0", + "version" : "ABY0", + "serial" : "PN1134P6K12EDW", + "units" : "bytes", + "size" : 2000398934016, + "configuration" : { + "ansiversion" : "5", + "guid" : "e28a896c-74dc-4063-a4d1-91681dcecf2c", + "logicalsectorsize" : "512", + "sectorsize" : "512" + }, + "capabilities" : { + "gpt-1.00" : "GUID Partition Table version 1.00", + "partitioned" : "Partitioned disk", + "partitioned:gpt" : "GUID partition table" + }, + "children" : [ { + "id" : "volume:0", + "class" : "volume", + "claimed" : true, + "handle" : "GUID:42ff3370-fd34-4b61-b1c9-52da58c0338d", + "description" : "BIOS Boot partition", + "vendor" : "EFI", + "physid" : "1", + "businfo" : "scsi@0:0.0.0,1", + "logicalname" : "/dev/sda1", + "dev" : "8:1", + "serial" : "42ff3370-fd34-4b61-b1c9-52da58c0338d", + "capacity" : 1028096, + "configuration" : { + "name" : "bios_grub-sda" + }, + "capabilities" : { + "nofs" : "No filesystem" + } + }, + { + "id" : "volume:1", + "class" : "volume", + "claimed" : true, + "handle" : "GUID:d9918f23-f51e-4374-8772-3a30bfcc9948", + "description" : "EXT4 volume", + "vendor" : "Linux", + "physid" : "2", + "businfo" : "scsi@0:0.0.0,2", + "logicalname" : ["/dev/sda2", "/boot"], + "dev" : "8:2", + "version" : "1.0", + "serial" : "aa195782-db85-436f-b272-1d56e72ea0fc", + "size" : 535822336, + "configuration" : { + "created" : "2019-01-24 23:01:40", + "filesystem" : "ext4", + "label" : "/boot", + "lastmountpoint" : "/boot", + "modified" : "2024-01-04 16:31:11", + "mount.fstype" : "ext4", + "mount.options" : "rw,relatime,errors=remount-ro", + "mounted" : "2024-01-04 16:31:11", + "name" : "primary", + "state" : "mounted" + }, + "capabilities" : { + "journaled" : true, + "extended_attributes" : "Extended Attributes", + "huge_files" : "16TB+ files", + "dir_nlink" : "directories with 65000+ subdirs", + "recover" : "needs recovery", + "extents" : "extent-based allocation", + "ext4" : true, + "ext2" : "EXT2/EXT3", + "initialized" : "initialized volume" + } + }, + { + "id" : "volume:2", + "class" : "volume", + "claimed" : true, + "handle" : "GUID:140f06cf-0335-44e9-b3fd-b8190224265d", + "description" : "Linux swap volume", + "vendor" : "Linux", + "physid" : "3", + "businfo" : "scsi@0:0.0.0,3", + "logicalname" : "/dev/sda3", + "dev" : "8:3", + "version" : "1", + "serial" : "309f7768-e3ef-44f6-8bb5-d0049b6c9a07", + "size" : 535691520, + "capacity" : 535821824, + "configuration" : { + "filesystem" : "swap", + "label" : "swap-sda3", + "name" : "primary", + "pagesize" : "4095" + }, + "capabilities" : { + "nofs" : "No filesystem", + "swap" : "Linux swap", + "initialized" : "initialized volume" + } + }, + { + "id" : "volume:3", + "class" : "volume", + "claimed" : true, + "handle" : "GUID:18023466-1b7d-439b-bdd9-3e06a8fb4f63", + "description" : "EXT4 volume", + "vendor" : "Linux", + "physid" : "4", + "businfo" : "scsi@0:0.0.0,4", + "logicalname" : ["/dev/sda4", "/"], + "dev" : "8:4", + "version" : "1.0", + "serial" : "bd7bcedf-e69b-4fcb-8679-824ce4333dba", + "size" : 1272657739776, + "configuration" : { + "created" : "2019-01-24 23:01:33", + "filesystem" : "ext4", + "label" : "/", + "lastmountpoint" : "/", + "modified" : "2024-01-04 16:30:47", + "mount.fstype" : "ext4", + "mount.options" : "rw,relatime,errors=remount-ro", + "mounted" : "2024-01-04 16:30:58", + "name" : "primary", + "state" : "mounted" + }, + "capabilities" : { + "journaled" : true, + "extended_attributes" : "Extended Attributes", + "large_files" : "4GB+ files", + "huge_files" : "16TB+ files", + "dir_nlink" : "directories with 65000+ subdirs", + "recover" : "needs recovery", + "extents" : "extent-based allocation", + "ext4" : true, + "ext2" : "EXT2/EXT3", + "initialized" : "initialized volume" + } + }, + { + "id" : "volume:4", + "class" : "volume", + "claimed" : true, + "handle" : "GUID:98851bad-b3c8-4271-a39f-4668b8e109e8", + "description" : "LVM Physical Volume", + "vendor" : "Linux", + "physid" : "5", + "businfo" : "scsi@0:0.0.0,5", + "logicalname" : "/dev/sda5", + "dev" : "8:5", + "serial" : "lXXkmE-4tYr-DLgZ-L7fp-iCOG-F8fO-kxWRZa", + "size" : 726661070848, + "configuration" : { + "name" : "logical" + }, + "capabilities" : { + "multi" : "Multi-volumes", + "lvm2" : true + } + }] + }] + }, + { + "id" : "serial", + "class" : "bus", + "claimed" : true, + "handle" : "PCI:0000:00:1f.3", + "description" : "SMBus", + "product" : "5 Series/3400 Series Chipset SMBus Controller", + "vendor" : "Intel Corporation", + "physid" : "1f.3", + "businfo" : "pci@0000:00:1f.3", + "version" : "05", + "width" : 64, + "clock" : 33000000, + "configuration" : { + "driver" : "i801_smbus", + "latency" : "0" + } + }] + }, + { + "id" : "pci:1", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:ff", + "description" : "Host bridge", + "product" : "Core Processor QuickPath Architecture Generic Non-Core Registers", + "vendor" : "Intel Corporation", + "physid" : "101", + "businfo" : "pci@0000:ff:00.0", + "version" : "04", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:2", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:ff", + "description" : "Host bridge", + "product" : "Core Processor QuickPath Architecture System Address Decoder", + "vendor" : "Intel Corporation", + "physid" : "102", + "businfo" : "pci@0000:ff:00.1", + "version" : "04", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:3", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:ff", + "description" : "Host bridge", + "product" : "Core Processor QPI Link 0", + "vendor" : "Intel Corporation", + "physid" : "103", + "businfo" : "pci@0000:ff:02.0", + "version" : "04", + "width" : 32, + "clock" : 33000000, + "configuration" : { + "driver" : "i7core_edac" + } + }, + { + "id" : "pci:4", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:ff", + "description" : "Host bridge", + "product" : "Core Processor QPI Physical 0", + "vendor" : "Intel Corporation", + "physid" : "104", + "businfo" : "pci@0000:ff:02.1", + "version" : "04", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:5", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:ff", + "description" : "Host bridge", + "product" : "Core Processor Integrated Memory Controller", + "vendor" : "Intel Corporation", + "physid" : "105", + "businfo" : "pci@0000:ff:03.0", + "version" : "04", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:6", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:ff", + "description" : "Host bridge", + "product" : "Core Processor Integrated Memory Controller Target Address Decoder", + "vendor" : "Intel Corporation", + "physid" : "106", + "businfo" : "pci@0000:ff:03.1", + "version" : "04", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:7", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:ff", + "description" : "Host bridge", + "product" : "Core Processor Integrated Memory Controller Test Registers", + "vendor" : "Intel Corporation", + "physid" : "107", + "businfo" : "pci@0000:ff:03.4", + "version" : "04", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:8", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:ff", + "description" : "Host bridge", + "product" : "Core Processor Integrated Memory Controller Channel 0 Control Registers", + "vendor" : "Intel Corporation", + "physid" : "108", + "businfo" : "pci@0000:ff:04.0", + "version" : "04", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:9", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:ff", + "description" : "Host bridge", + "product" : "Core Processor Integrated Memory Controller Channel 0 Address Registers", + "vendor" : "Intel Corporation", + "physid" : "109", + "businfo" : "pci@0000:ff:04.1", + "version" : "04", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:10", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:ff", + "description" : "Host bridge", + "product" : "Core Processor Integrated Memory Controller Channel 0 Rank Registers", + "vendor" : "Intel Corporation", + "physid" : "10a", + "businfo" : "pci@0000:ff:04.2", + "version" : "04", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:11", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:ff", + "description" : "Host bridge", + "product" : "Core Processor Integrated Memory Controller Channel 0 Thermal Control Registers", + "vendor" : "Intel Corporation", + "physid" : "10b", + "businfo" : "pci@0000:ff:04.3", + "version" : "04", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:12", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:ff", + "description" : "Host bridge", + "product" : "Core Processor Integrated Memory Controller Channel 1 Control Registers", + "vendor" : "Intel Corporation", + "physid" : "10c", + "businfo" : "pci@0000:ff:05.0", + "version" : "04", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:13", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:ff", + "description" : "Host bridge", + "product" : "Core Processor Integrated Memory Controller Channel 1 Address Registers", + "vendor" : "Intel Corporation", + "physid" : "10d", + "businfo" : "pci@0000:ff:05.1", + "version" : "04", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:14", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:ff", + "description" : "Host bridge", + "product" : "Core Processor Integrated Memory Controller Channel 1 Rank Registers", + "vendor" : "Intel Corporation", + "physid" : "10e", + "businfo" : "pci@0000:ff:05.2", + "version" : "04", + "width" : 32, + "clock" : 33000000 + }, + { + "id" : "pci:15", + "class" : "bridge", + "claimed" : true, + "handle" : "PCIBUS:0000:ff", + "description" : "Host bridge", + "product" : "Core Processor Integrated Memory Controller Channel 1 Thermal Control Registers", + "vendor" : "Intel Corporation", + "physid" : "10f", + "businfo" : "pci@0000:ff:05.3", + "version" : "04", + "width" : 32, + "clock" : 33000000 + }] + }, + { + "id" : "power", + "class" : "power", + "description" : "To Be Filled By O.E.M.", + "product" : "To Be Filled By O.E.M.", + "vendor" : "To Be Filled By O.E.M.", + "physid" : "1", + "version" : "To Be Filled By O.E.M.", + "serial" : "To Be Filled By O.E.M.", + "units" : "mWh", + "capacity" : 32768 + }, + { + "id" : "input:0", + "class" : "input", + "claimed" : true, + "product" : "Power Button", + "physid" : "2", + "logicalname" : ["input0", "/dev/input/event0"], + "capabilities" : { + "platform" : true + } + }, + { + "id" : "input:1", + "class" : "input", + "claimed" : true, + "product" : "Power Button", + "physid" : "3", + "logicalname" : ["input1", "/dev/input/event1"], + "capabilities" : { + "platform" : true + } + }] +} From 5ecc6799dec06e64d74b613ad7b5f7a92d388a4b Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 10 Apr 2024 11:32:02 +0200 Subject: [PATCH 103/227] config: update config settings to use pydantic_settings package --- boagent/api/config.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 boagent/api/config.py diff --git a/boagent/api/config.py b/boagent/api/config.py new file mode 100644 index 0000000..6517719 --- /dev/null +++ b/boagent/api/config.py @@ -0,0 +1,38 @@ +from pydantic_settings import BaseSettings + + +class Settings(BaseSettings): + project_name: str = "boagent" + project_version: str = "0.1.0" + project_description: str = "Boagent is a local API and monitoring agent to help you estimate the environmental impact of your machine, including software activity and hardware embodied impacts." + tags_metadata: list = [ + {"name": "info", "description": "Returns runtime configuration of Boagent."}, + {"name": "web", "description": "Web UI to explore Boagent metrics."}, + { + "name": "csv", + "description": "Internal route. Generates and returns a CSV-formatted dataset with metrics needed by the webUI", + }, + { + "name": "metrics", + "description": "Returns metrics as a Prometheus HTTP exporter.", + }, + { + "name": "query", + "description": "This is the main route. Returns metrics in JSON format.", + }, + ] + seconds_in_one_year: int = 31536000 + default_lifetime: float = 5.0 + hardware_file_path: str = "./hardware_data.json" + power_file_path: str = "./power_data.json" + hardware_cli: str = "./hardware/hardware_cli.py" + boaviztapi_endpoint: str = "http://localhost:5000" + db_path: str = "../../db/boagent.db" + public_path: str = "./public" + assets_path: str = "./public/assets/" + carbon_aware_api_endpoint: str = "https://carbon-aware-api.azurewebsites.net" + carbon_aware_api_token: str = "token" + azure_location: str = "northeurope" + + +settings = Settings() From 5ae081a78db856e0a4819e66a47cc853fd7466ce Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 10 Apr 2024 14:21:35 +0200 Subject: [PATCH 104/227] config: settings instance in api --- boagent/api/api.py | 15 ++++++++++----- boagent/api/config.py | 3 --- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 3da6d20..1bee599 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -24,7 +24,7 @@ sort_disks, ) -from .config import settings +from .config import Settings from .database import ( get_session, @@ -34,6 +34,7 @@ new_highlight_spikes, ) +settings = Settings() HARDWARE_FILE_PATH = settings.hardware_file_path POWER_DATA_FILE_PATH = settings.power_file_path @@ -47,6 +48,10 @@ BOAVIZTAPI_ENDPOINT = settings.boaviztapi_endpoint CARBON_AWARE_API_ENDPOINT = settings.carbon_aware_api_endpoint CARBON_AWARE_API_TOKEN = settings.carbon_aware_api_token +PROJECT_NAME = settings.project_name +PROJECT_VERSION = settings.project_version +PROJECT_DESCRIPTION = settings.project_description +TAGS_METADATA = settings.tags_metadata def configure_static(app): @@ -55,12 +60,12 @@ def configure_static(app): def configure_app(): app = FastAPI( - title=settings.PROJECT_NAME, - version=settings.PROJECT_VERSION, - description=settings.PROJECT_DESCRIPTION, + title=PROJECT_NAME, + version=PROJECT_VERSION, + description=PROJECT_DESCRIPTION, contact={"name": "Boavizta Members", "url": "https://boavizta.org/en"}, license_info={"name": "Apache-2.0"}, - openapi_tags=settings.TAGS_METADATA, + openapi_tags=TAGS_METADATA, ) configure_static(app) return app diff --git a/boagent/api/config.py b/boagent/api/config.py index 6517719..04b29c0 100644 --- a/boagent/api/config.py +++ b/boagent/api/config.py @@ -33,6 +33,3 @@ class Settings(BaseSettings): carbon_aware_api_endpoint: str = "https://carbon-aware-api.azurewebsites.net" carbon_aware_api_token: str = "token" azure_location: str = "northeurope" - - -settings = Settings() From 5f547639fbc8eb1e9e297dd5f7e60f1c0cf013f6 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 10 Apr 2024 15:32:32 +0200 Subject: [PATCH 105/227] config: dockerfile command at root of boagent directory --- Dockerfile | 2 +- boagent/api/config.py | 6 +- boagent/api/{database => }/database.py | 6 +- boagent/api/database/__init__.py | 7 - boagent/api/utils.py | 157 +++++++++++++++ boagent/hardware/hardware_cli.py | 2 +- boagent/hardware/lshw.py | 267 +++++++++++++++++++++++++ 7 files changed, 432 insertions(+), 15 deletions(-) rename boagent/api/{database => }/database.py (98%) delete mode 100644 boagent/api/database/__init__.py create mode 100644 boagent/api/utils.py create mode 100644 boagent/hardware/lshw.py diff --git a/Dockerfile b/Dockerfile index 025cefa..1a7eb85 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,4 +28,4 @@ COPY . . EXPOSE 8000 -ENTRYPOINT [ "/bin/bash", "-c", "cd boagent/ && uvicorn --reload api.api:app --host 0.0.0.0" ] +ENTRYPOINT [ "/bin/bash", "-c", "uvicorn --reload boagent.api.api:app --host 0.0.0.0" ] diff --git a/boagent/api/config.py b/boagent/api/config.py index 04b29c0..b085287 100644 --- a/boagent/api/config.py +++ b/boagent/api/config.py @@ -25,11 +25,11 @@ class Settings(BaseSettings): default_lifetime: float = 5.0 hardware_file_path: str = "./hardware_data.json" power_file_path: str = "./power_data.json" - hardware_cli: str = "./hardware/hardware_cli.py" + hardware_cli: str = "./boagent/hardware/hardware_cli.py" boaviztapi_endpoint: str = "http://localhost:5000" db_path: str = "../../db/boagent.db" - public_path: str = "./public" - assets_path: str = "./public/assets/" + public_path: str = "./boagent/public" + assets_path: str = "./boagent/public/assets/" carbon_aware_api_endpoint: str = "https://carbon-aware-api.azurewebsites.net" carbon_aware_api_token: str = "token" azure_location: str = "northeurope" diff --git a/boagent/api/database/database.py b/boagent/api/database.py similarity index 98% rename from boagent/api/database/database.py rename to boagent/api/database.py index a2bf0b9..1449a90 100644 --- a/boagent/api/database/database.py +++ b/boagent/api/database.py @@ -7,10 +7,10 @@ from sqlalchemy import Column, DateTime, Integer, Float, insert, select, inspect from sqlalchemy.engine import Engine, create_engine from sqlalchemy.orm import Session, declarative_base, declared_attr -from api.config import settings -from api.utils import filter_date_range - +from .config import Settings +from .utils import filter_date_range +settings = Settings() DB_PATH = settings.db_path POWER_DATA_FILE_PATH = settings.power_file_path diff --git a/boagent/api/database/__init__.py b/boagent/api/database/__init__.py deleted file mode 100644 index 471c82d..0000000 --- a/boagent/api/database/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from .database import ( - get_session, - select_metric, - get_most_recent_data, - get_max, - new_highlight_spikes -) diff --git a/boagent/api/utils.py b/boagent/api/utils.py new file mode 100644 index 0000000..4123ec6 --- /dev/null +++ b/boagent/api/utils.py @@ -0,0 +1,157 @@ +from datetime import datetime +from boaviztapi_sdk import ApiClient, Configuration +from dateutil import parser +from .config import Settings +from os import PathLike + +settings = Settings() +BOAVIZTAPI_ENDPOINT = settings.boaviztapi_endpoint + + +def sort_ram(items: list): + hash_map = {} + for r in items: + if "manufacturer" in r: + if "{}:{}".format(r["capacity"], r["manufacturer"]) in hash_map: + hash_map["{}:{}".format(r["capacity"], r["manufacturer"])]["units"] += 1 + else: + hash_map["{}:{}".format(r["capacity"], r["manufacturer"])] = { + "units": 1, + "manufacturer": r["manufacturer"], + "capacity": r["capacity"], + } + else: + hash_map["{}".format(r["capacity"])] = { + "units": 1, + "capacity": r["capacity"], + } + return [v for k, v in hash_map.items()] + + +def sort_disks(items: list): + hash_map = {} + for r in items: + if "{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"]) in hash_map: + hash_map["{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"])][ + "units" + ] += 1 + else: + hash_map["{}:{}:{}".format(r["capacity"], r["manufacturer"], r["type"])] = { + "units": 1, + "manufacturer": r["manufacturer"], + "capacity": r["capacity"], + "type": r["type"], + } + return [v for k, v in hash_map.items()] + + +def get_boavizta_api_client(): + config = Configuration( + host=BOAVIZTAPI_ENDPOINT, + ) + client = ApiClient(configuration=config, pool_threads=2) + return client + + +def iso8601_or_timestamp_as_timestamp(iso_time: str) -> float: + """ + Takes an str that's either a timestamp or an iso8601 + time. Returns a float that represents a timestamp. + """ + if iso_time == "0.0" or iso_time == "0": + return float(iso_time) + else: + dt = None + try: + dt = parser.parse(iso_time) + print("{} is an iso 8601 datetime".format(iso_time)) + except Exception as e: + print("{} is not an iso 8601 datetime".format(iso_time)) + print("Exception : {}".format(e)) + try: + dt = datetime.fromtimestamp(int(round(float(iso_time)))) + print("{} is a timestamp".format(iso_time)) + except Exception as e: + print("{} is not a timestamp".format(iso_time)) + print("Exception : {}".format(e)) + print("Parser would give : {}".format(parser.parse(iso_time))) + finally: + if dt: + return dt.timestamp() + else: + return float(iso_time) + + +def format_prometheus_output(res): + response = "" + for k, v in res.items(): + if "value" in v and "type" in v: + if "description" not in v: + v["description"] = "TODO: define me" + response += format_prometheus_metric( + k, + "{}. {}".format( + v["description"], "In {} ({}).".format(v["long_unit"], v["unit"]) + ), + v["type"], + v["value"], + ) + # response += format_prometheus_metric("energy_consumption", "Energy consumed in the evaluation time window (evaluated at least for an hour, be careful if the time windows is lower than 1 hour), in Wh", "counter", res["emissions_calculation_data"]["energy_consumption"]) + else: + for x, y in v.items(): + if "value" in y and "type" in y: + if "description" not in y: + y["description"] = "TODO: define me" + response += format_prometheus_metric( + "{}_{}".format(k, x), + "{}. {}".format( + y["description"], + "In {} ({}).".format(y["long_unit"], y["unit"]), + ), + y["type"], + y["value"], + ) + + return response + + +def format_prometheus_metric( + metric_name, metric_description, metric_type, metric_value +): + response = """# HELP {} {} +# TYPE {} {} +{} {} +""".format( + metric_name, + metric_description, + metric_name, + metric_type, + metric_name, + metric_value, + ) + return response + + +def filter_date_range(data: list, start_date: datetime, stop_date: datetime) -> list: + + lower_index = 0 + upper_index = 0 + + start = datetime.timestamp(start_date) + end = datetime.timestamp(stop_date) + + for d in data: + if d["timestamp"] < start: + lower_index += 1 + if d["timestamp"] < end: + upper_index += 1 + + return data[lower_index:upper_index] + + +def format_scaphandre_json(file: str | PathLike) -> str: + with open(file, "r") as fd: + formatted_scaphandre_json = f"[{fd.read()}]".replace( + '{"host"', ',{"host"' + ).replace(',{"host"', '{"host"', 1) + return formatted_scaphandre_json diff --git a/boagent/hardware/hardware_cli.py b/boagent/hardware/hardware_cli.py index fc2c0d2..7ee8dc2 100755 --- a/boagent/hardware/hardware_cli.py +++ b/boagent/hardware/hardware_cli.py @@ -3,7 +3,7 @@ import click import json import sys -from .lshw import Lshw +from boagent.hardware.lshw import Lshw # from disk import search_physical_drives # from cpu import get_cpus diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py new file mode 100644 index 0000000..b5e0dd0 --- /dev/null +++ b/boagent/hardware/lshw.py @@ -0,0 +1,267 @@ +from shutil import which +import subprocess +import logging +import json +import sys +import re +import os + +# Commented elements only available when runnning `lshw` as `sudo`. + +SYS_BLOCK_PATH = "/sys/block" + + +def is_tool(name): + """Check whether `name` is on PATH and marked as executable""" + return which(name) is not None + + +class Lshw: + def __init__(self): + if not is_tool("lshw"): + logging.error("lshw does not seem to be installed") + sys.exit(1) + + data = subprocess.getoutput("sudo lshw -quiet -json 2> /dev/null") + json_data = json.loads(data) + # Starting from version 02.18, `lshw -json` wraps its result in a list + # rather than returning directly a dictionary + if isinstance(json_data, list): + self.hw_info = json_data[0] + else: + self.hw_info = json_data + self.info = {} + self.memories = [] + # self.interfaces = [] + self.cpus = [] + self.power = [] + self.disks = [] + self.gpus = [] + # self.vendor = self.hw_info["vendor"] + # self.product = self.hw_info["product"] + # self.chassis_serial = self.hw_info["serial"] + self.motherboard_serial = self.hw_info["children"][0].get("serial", "No S/N") + self.motherboard = self.hw_info["children"][0].get("product", "Motherboard") + + for k in self.hw_info["children"]: + if k["class"] == "power": + # self.power[k["id"]] = k + self.power.append(k) + + if "children" in k: + for j in k["children"]: + if j["class"] == "generic": + continue + + if j["class"] == "storage": + self.find_storage(j) + + if j["class"] == "memory": + self.find_memories(j) + + if j["class"] == "processor": + self.find_cpus(j) + + if j["class"] == "bridge": + self.walk_bridge(j) + + def get_hw_linux(self, hwclass): + if hwclass == "cpu": + return self.cpus + if hwclass == "gpu": + return self.gpus + """ if hwclass == "network": + return self.interfaces """ + if hwclass == "storage": + return self.disks + if hwclass == "memory": + return self.memories + + """ + def find_network(self, obj): + # Some interfaces do not have device (logical) name (eth0, for + # instance), such as not connected network mezzanine cards in blade + # servers. In such situations, the card will be named `unknown[0-9]`. + unkn_intfs = [] + for i in self.interfaces: + # newer versions of lshw can return a list of names, see issue #227 + if not isinstance(i["name"], list): + if i["name"].startswith("unknown"): + unkn_intfs.push(i) + else: + for j in i["name"]: + if j.startswith("unknown"): + unkn_intfs.push(j) + + unkn_name = "unknown{}".format(len(unkn_intfs)) + self.interfaces.append( + { + "name": obj.get("logicalname", unkn_name), + "macaddress": obj.get("serial", ""), + "serial": obj.get("serial", ""), + "product": obj["product"], + "vendor": obj["vendor"], + "description": obj["description"], + } + ) + """ + + def find_storage(self, obj): + if "children" in obj: + for device in obj["children"]: + if "vendor" in device and "size" in device: + d = { + "units": +1, + "manufacturer": self.check_disk_vendor( + device["vendor"] + ).lower(), + "capacity": device["size"], + "logicalname": device["logicalname"], + "type": self.get_disk_type(device["logicalname"]), + } + self.disks.append(d) + if "nvme" in obj["configuration"]["driver"]: + if not is_tool("nvme"): + logging.error("nvme-cli >= 1.0 does not seem to be installed") + raise Exception("nvme-cli >= 1.0 does not seem to be installed") + try: + nvme = json.loads( + subprocess.check_output( + ["sudo", "nvme", "-list", "-o", "json"], encoding="utf8" + ) + ) + for device in nvme["Devices"]: + d = { + "units": +1, + "logicalname": device["DevicePath"], + "manufacturer": self.check_disk_vendor( + device["ModelNumber"] + ).lower(), + "type": "ssd", + } + if "UsedSize" in device: + d["capacity"] = device["UsedSize"] // 1073741824 + if "UsedBytes" in device: + d["capacity"] = device["UsedBytes"] // 1073741824 + self.disks.append(d) + except Exception: + pass + + def find_cpus(self, obj): + if "product" in obj: + self.cpus.append( + { + "units": +1, + "name": obj["product"], + "vendor": obj["vendor"], + "core_units": obj["configuration"]["cores"], + # "description": obj["description"], + # "location": obj["slot"], + } + ) + + def find_memories(self, obj): + if "children" not in obj: + # print("not a DIMM memory.") + return + + for dimm in obj["children"]: + if "empty" in dimm["description"]: + continue + + self.memories.append( + { + "units": +1, + "manufacturer": dimm.get("vendor", "N/A"), + "capacity": dimm.get("size", 0) // 2**20 // 1024, + } + ) + + def find_gpus(self, obj): + if "product" in obj: + self.gpus.append( + { + "product": obj["product"], + "vendor": obj["vendor"], + "description": obj["description"], + } + ) + + def walk_bridge(self, obj): + if "children" not in obj: + return + + for bus in obj["children"]: + if bus["class"] == "storage": + self.find_storage(bus) + if bus["class"] == "display": + self.find_gpus(bus) + + if "children" in bus: + for b in bus["children"]: + if b["class"] == "storage": + self.find_storage(b) + # if b["class"] == "network": + # self.find_network(b) + if b["class"] == "display": + self.find_gpus(b) + + def check_disk_vendor(self, model_string: str) -> str: + split_model = model_string.split(" ") + vendor = "" + + if len(split_model) == 1: + check_string_for_numbers = bool(re.search("\\d", model_string)) + if check_string_for_numbers: + raise Exception( + "Lshw did not output an acceptable manufacturer name for this device." + ) + else: + return model_string + + model_first_str = split_model[0] + model_second_str = split_model[1] + check_first_string_for_numbers = re.search("\\d", model_first_str) + result = bool(check_first_string_for_numbers) + + if result: + vendor = model_second_str + return vendor + else: + vendor = model_first_str + return vendor + + def get_disk_type(self, dev_path: str) -> str: + + rotational = self.get_rotational_int(dev_path) + + if rotational == 0: + return "ssd" + if rotational == 1: + return "hdd" + if rotational == 2: + return "unknown" + return "unknown" + + def get_rotational_int(self, dev_path: str) -> int: + + device = dev_path.removeprefix("/dev") + + try: + rotational_fp = os.path.realpath( + f"{SYS_BLOCK_PATH}{device}/queue/rotational", strict=True + ) + print(rotational_fp) + + except OSError: + print("Rotational file was not found") + return 2 + else: + with open(rotational_fp, "r") as file: + rotational_int = int(file.read()) + return rotational_int + + +""" +if __name__ == "__main__": + pass """ From f67854c254112de3646cbd0c4df30cfed320f8fb Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 11 Apr 2024 15:32:26 +0200 Subject: [PATCH 106/227] test: mocking hardware_data in several test cases --- tests/api/test_api_unit.py | 48 ++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index ace15cf..373cbb9 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -30,14 +30,13 @@ mock_formatted_scaphandre = os.path.join( f"{current_dir}", "../mocks/formatted_scaphandre.json" ) -hardware_cli = os.path.join(f"{current_dir}", "") -hardware_data = os.path.join( - f"{current_dir}", "../../boagent/hardware/hardware_data.json" -) +hardware_cli = os.path.join(f"{current_dir}", "../../boagent/hardware/hardware_cli.py") +hardware_data = os.path.join(f"{current_dir}", "../../boagent/api/hardware_data.json") -@patch("boagent.api.build_hardware_data") class ReadHardwareDataTest(TestCase): + @patch("boagent.api.api.HARDWARE_CLI", hardware_cli) + @patch("boagent.api.api.HARDWARE_FILE_PATH", hardware_data) def test_build_hardware_data(self): build_hardware_data() @@ -51,7 +50,7 @@ def test_read_hardware_data(self): assert type(data["rams"]) is list assert type(data["disks"]) is list - @patch("boagent.api.build_hardware_data") + @patch("boagent.api.api.build_hardware_data") def test_get_hardware_data_with_fetch_hardware_false(self, mocked_build_hardware): # Test case where hardware_data.json is already present on the @@ -178,6 +177,8 @@ def test_get_power_data_with_short_time_interval( assert "warning" in power_data +@patch("boagent.api.api.read_hardware_data") +@patch("boagent.api.api.query_machine_impact_data") class GetMetricsNotVerboseNoScaphandreTest(TestCase): def setUp(self) -> None: self.time_workload_as_percentage = 70 @@ -197,9 +198,11 @@ def setUp(self) -> None: with open(mock_boaviztapi_response_not_verbose, "r") as file: self.boaviztapi_data = json.load(file) - @patch("boagent.api.api.query_machine_impact_data") + with open(mock_hardware_data, "r") as file: + self.hardware_data = json.load(file) + def test_get_metrics_with_time_workload_as_percentage( - self, mocked_query_machine_impact_data + self, mocked_read_hardware_data, mocked_query_machine_impact_data ): metrics = get_metrics( @@ -213,6 +216,7 @@ def test_get_metrics_with_time_workload_as_percentage( self.time_workload_as_percentage, ) + mocked_read_hardware_data.return_value = self.hardware_data mocked_query_machine_impact_data.return_value = self.boaviztapi_data assert type(metrics) is dict @@ -221,9 +225,8 @@ def test_get_metrics_with_time_workload_as_percentage( assert "embedded_abiotic_resources_depletion" in metrics assert "embedded_primary_energy" in metrics - @patch("boagent.api.api.query_machine_impact_data") def test_get_metrics_with_time_workload_as_list_of_dicts( - self, mocked_query_machine_impact_data + self, mocked_read_hardware_data, mocked_query_machine_impact_data ): metrics = get_metrics( @@ -237,7 +240,9 @@ def test_get_metrics_with_time_workload_as_list_of_dicts( self.time_workload_as_list_of_dicts, ) + mocked_read_hardware_data.return_value = self.hardware_data mocked_query_machine_impact_data.return_value = self.boaviztapi_data + assert type(metrics) is dict assert "emissions_calculation_data" in metrics assert "embedded_emissions" in metrics @@ -245,6 +250,8 @@ def test_get_metrics_with_time_workload_as_list_of_dicts( assert "embedded_primary_energy" in metrics +@patch("boagent.api.api.read_hardware_data") +@patch("boagent.api.api.query_machine_impact_data") class GetMetricsVerboseNoScaphandreTest(TestCase): def setUp(self) -> None: self.time_workload_as_percentage = 70 @@ -264,9 +271,11 @@ def setUp(self) -> None: with open(mock_boaviztapi_response_verbose, "r") as file: self.boaviztapi_data = json.load(file) - @patch("boagent.api.api.query_machine_impact_data") + with open(mock_hardware_data, "r") as file: + self.hardware_data = json.load(file) + def test_get_metrics_verbose_with_time_workload_percentage( - self, mocked_query_machine_impact_data + self, mocked_read_hardware_data, mocked_query_machine_impact_data ): metrics = get_metrics( @@ -280,6 +289,7 @@ def test_get_metrics_verbose_with_time_workload_percentage( self.time_workload_as_percentage, ) + mocked_read_hardware_data.return_value = self.hardware_data mocked_query_machine_impact_data.return_value = self.boaviztapi_data assert type(metrics) is dict @@ -290,9 +300,8 @@ def test_get_metrics_verbose_with_time_workload_percentage( assert "raw_data" in metrics assert "electricity_carbon_intensity" in metrics - @patch("boagent.api.api.query_machine_impact_data") def test_get_metrics_verbose_with_time_workload_as_list_of_dicts( - self, mocked_query_machine_impact_data + self, mocked_read_hardware_data, mocked_query_machine_impact_data ): metrics = get_metrics( @@ -306,6 +315,7 @@ def test_get_metrics_verbose_with_time_workload_as_list_of_dicts( self.time_workload_as_list_of_dicts, ) + mocked_read_hardware_data.return_value = self.hardware_data mocked_query_machine_impact_data.return_value = self.boaviztapi_data assert type(metrics) is dict @@ -336,10 +346,17 @@ def setUp(self) -> None: power_data["avg_power"] = 11.86 self.power_data = power_data + with open(mock_hardware_data, "r") as file: + self.hardware_data = json.load(file) + @patch("boagent.api.api.query_machine_impact_data") @patch("boagent.api.api.get_power_data") + @patch("boagent.api.api.read_hardware_data") def test_get_metrics_verbose_with_scaphandre( - self, mocked_query_machine_impact_data, mocked_power_data + self, + mocked_read_hardware_data, + mocked_query_machine_impact_data, + mocked_power_data, ): metrics = get_metrics( @@ -352,6 +369,7 @@ def test_get_metrics_verbose_with_scaphandre( self.fetch_hardware, ) + mocked_read_hardware_data.return_value = self.hardware_data mocked_query_machine_impact_data.return_value = self.boaviztapi_data mocked_power_data.return_value = self.power_data From 50ebe1cab62d2554518c53d0be6029d150b94c36 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 11 Apr 2024 16:07:22 +0200 Subject: [PATCH 107/227] feat: add query post route with time_workload in request body --- boagent/api/api.py | 49 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 5 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 1bee599..cc91f5f 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -10,7 +10,7 @@ from subprocess import run from typing import Dict, Any, Tuple, List, Optional, Union from croniter import croniter -from fastapi import FastAPI, Response +from fastapi import FastAPI, Response, Body from fastapi.staticfiles import StaticFiles from fastapi.responses import HTMLResponse from boaviztapi_sdk.api.server_api import ServerApi @@ -214,7 +214,46 @@ async def query( measure_power: bool = True, lifetime: float = DEFAULT_LIFETIME, fetch_hardware: bool = False, - time_workload: Union[float, list[dict[str, float]], None] = None, +): + """ + start_time: Start time for evaluation. Accepts either UNIX Timestamp or ISO8601 date format. \n + end_time: End time for evaluation. Accepts either UNIX Timestamp or ISO8601 date format. \n + verbose: Get detailled metrics with extra information.\n + location: Country code to configure the local electricity grid to take into account.\n + measure_power: Get electricity consumption metrics from Scaphandre or not.\n + lifetime: Full lifetime of the machine to consider.\n + fetch_hardware: Regenerate hardware.json file with current machine hardware or not.\n + """ + return get_metrics( + iso8601_or_timestamp_as_timestamp(start_time), + iso8601_or_timestamp_as_timestamp(end_time), + verbose, + location, + measure_power, + lifetime, + fetch_hardware, + ) + + +time_workload_example = { + "time_workload": [ + {"time_percentage": 50, "load_percentage": 0}, + {"time_percentage": 25, "load_percentage": 60}, + {"time_percentage": 25, "load_percentage": 100}, + ] +} + + +@app.post("/query", tags=["query"]) +async def query_with_time_workload( + start_time: str = "0.0", + end_time: str = "0.0", + verbose: bool = False, + location: Union[str, None] = None, + measure_power: bool = True, + lifetime: float = DEFAULT_LIFETIME, + fetch_hardware: bool = False, + time_workload: Union[float, list[dict[str, float]], None] = Body(None, example=time_workload_example), ): """ start_time: Start time for evaluation. Accepts either UNIX Timestamp or ISO8601 date format. \n @@ -430,9 +469,9 @@ def get_metrics( avg_power = power_data["avg_power"] use_time_ratio = power_data["use_time_ratio"] if "warning" in power_data: - res["emissions_calculation_data"][ - "energy_consumption_warning" - ] = power_data["warning"] + res["emissions_calculation_data"]["energy_consumption_warning"] = ( + power_data["warning"] + ) boaviztapi_data = query_machine_impact_data( model={}, From d091828e629c4e818732507372f0ef62ee6f4a57 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 11 Apr 2024 16:55:40 +0200 Subject: [PATCH 108/227] feat: build hardware_data directly in api module --- boagent/api/api.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index cc91f5f..951fd60 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -15,6 +15,7 @@ from fastapi.responses import HTMLResponse from boaviztapi_sdk.api.server_api import ServerApi from boaviztapi_sdk.models.server import Server +from boagent.hardware.lshw import Lshw from .utils import ( iso8601_or_timestamp_as_timestamp, format_scaphandre_json, @@ -253,7 +254,9 @@ async def query_with_time_workload( measure_power: bool = True, lifetime: float = DEFAULT_LIFETIME, fetch_hardware: bool = False, - time_workload: Union[float, list[dict[str, float]], None] = Body(None, example=time_workload_example), + time_workload: Union[float, list[dict[str, float]], None] = Body( + None, example=time_workload_example + ), ): """ start_time: Start time for evaluation. Accepts either UNIX Timestamp or ISO8601 date format. \n @@ -651,7 +654,13 @@ def read_hardware_data() -> Dict: def build_hardware_data(): - run([HARDWARE_CLI, "--output-file", HARDWARE_FILE_PATH]) + lshw = Lshw() + with open(HARDWARE_FILE_PATH, "w") as hardware_file: + hardware_data = {} + hardware_data["disks"] = lshw.disks + hardware_data["cpus"] = lshw.cpus + hardware_data["rams"] = lshw.memories + json.dump(hardware_data, hardware_file) def query_machine_impact_data( From 15146ec4a25516a0f4b6bd19986e972830224c80 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 11 Apr 2024 17:03:32 +0200 Subject: [PATCH 109/227] test: patch hardware_file_path for path resolution --- tests/api/test_api_unit.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 373cbb9..8bf92ae 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -34,9 +34,8 @@ hardware_data = os.path.join(f"{current_dir}", "../../boagent/api/hardware_data.json") +@patch("boagent.api.api.HARDWARE_FILE_PATH", hardware_data) class ReadHardwareDataTest(TestCase): - @patch("boagent.api.api.HARDWARE_CLI", hardware_cli) - @patch("boagent.api.api.HARDWARE_FILE_PATH", hardware_data) def test_build_hardware_data(self): build_hardware_data() From 41c2ef56204c0c4850264786f184dc88b527a671 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 11 Apr 2024 17:04:47 +0200 Subject: [PATCH 110/227] feat: try except block to handle non-root access to lshw, such as in container --- boagent/hardware/lshw.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py index b5e0dd0..79c4581 100644 --- a/boagent/hardware/lshw.py +++ b/boagent/hardware/lshw.py @@ -19,11 +19,15 @@ def is_tool(name): class Lshw: def __init__(self): if not is_tool("lshw"): - logging.error("lshw does not seem to be installed") + print("lshw does not seem to be installed.") sys.exit(1) - data = subprocess.getoutput("sudo lshw -quiet -json 2> /dev/null") - json_data = json.loads(data) + try: + data = subprocess.getoutput("sudo lshw -quiet -json 2> /dev/null") + json_data = json.loads(data) + except json.JSONDecodeError: + print("lshw does not seem do be executed as root.") + sys.exit(1) # Starting from version 02.18, `lshw -json` wraps its result in a list # rather than returning directly a dictionary if isinstance(json_data, list): @@ -154,7 +158,7 @@ def find_cpus(self, obj): "units": +1, "name": obj["product"], "vendor": obj["vendor"], - "core_units": obj["configuration"]["cores"], + "core_units": obj["configuration"]["cores"], # ONLY AVAILABLE AS ROOT # "description": obj["description"], # "location": obj["slot"], } From 3679baf221c8940b0c8cb49f306e3dbf89ce3c02 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 22 Apr 2024 16:14:41 +0200 Subject: [PATCH 111/227] config: install lshw and nvme-cli for hardware output --- Dockerfile | 2 ++ docker-compose.yaml | 1 + 2 files changed, 3 insertions(+) diff --git a/Dockerfile b/Dockerfile index 1a7eb85..5fc81da 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,6 +4,8 @@ LABEL org.opencontainers.image.authors="bpetit@hubblo.org" RUN apt update && apt install gcc g++ -y +RUN apt install lshw nvme-cli -y + RUN apt-get install -y cron sqlite3 RUN useradd -ms /bin/bash boagent diff --git a/docker-compose.yaml b/docker-compose.yaml index a7105ff..cb7cc48 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -13,6 +13,7 @@ services: HARDWARE_FILE_PATH: "/home/boagent/hardware_data.json" POWER_FILE_PATH: "/app/data/power_data.json" #user: boagent + privileged: true depends_on: - boaviztapi - scaphandre From a8a0fdca7584ab0c1650d6bb7cf439b0a13f8fd9 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 22 Apr 2024 16:18:03 +0200 Subject: [PATCH 112/227] fix: remove pool_threads, deprecated argument for BoaviztAPI SDK --- boagent/api/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boagent/api/utils.py b/boagent/api/utils.py index 4123ec6..ff8d246 100644 --- a/boagent/api/utils.py +++ b/boagent/api/utils.py @@ -49,7 +49,7 @@ def get_boavizta_api_client(): config = Configuration( host=BOAVIZTAPI_ENDPOINT, ) - client = ApiClient(configuration=config, pool_threads=2) + client = ApiClient(configuration=config) return client From 97df8d5a205df8cf8f32b8fb60d48044b047c92c Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 22 Apr 2024 16:18:56 +0200 Subject: [PATCH 113/227] refactor: remove sudo for lshw and nvme-cli in lshw class --- boagent/hardware/lshw.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py index 79c4581..a339c7b 100644 --- a/boagent/hardware/lshw.py +++ b/boagent/hardware/lshw.py @@ -23,7 +23,7 @@ def __init__(self): sys.exit(1) try: - data = subprocess.getoutput("sudo lshw -quiet -json 2> /dev/null") + data = subprocess.getoutput("lshw -quiet -json 2> /dev/null") json_data = json.loads(data) except json.JSONDecodeError: print("lshw does not seem do be executed as root.") @@ -131,7 +131,7 @@ def find_storage(self, obj): try: nvme = json.loads( subprocess.check_output( - ["sudo", "nvme", "-list", "-o", "json"], encoding="utf8" + ["nvme", "-list", "-o", "json"], encoding="utf8" ) ) for device in nvme["Devices"]: @@ -158,7 +158,9 @@ def find_cpus(self, obj): "units": +1, "name": obj["product"], "vendor": obj["vendor"], - "core_units": obj["configuration"]["cores"], # ONLY AVAILABLE AS ROOT + "core_units": obj["configuration"][ + "cores" + ], # ONLY AVAILABLE AS ROOT # "description": obj["description"], # "location": obj["slot"], } From 9cb4f643d7d44fc2513ca22e8be6a6ccb1854c79 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 22 Apr 2024 16:19:58 +0200 Subject: [PATCH 114/227] test: testing with formatted scaphandre JSON output for one hour --- boagent/hardware/test_hardwarecli.py | 43 ------------------- tests/api/test_api_unit.py | 12 +++--- .../mocks/formatted_power_data_one_hour.json | 1 + 3 files changed, 8 insertions(+), 48 deletions(-) delete mode 100644 boagent/hardware/test_hardwarecli.py create mode 100644 tests/mocks/formatted_power_data_one_hour.json diff --git a/boagent/hardware/test_hardwarecli.py b/boagent/hardware/test_hardwarecli.py deleted file mode 100644 index f08101d..0000000 --- a/boagent/hardware/test_hardwarecli.py +++ /dev/null @@ -1,43 +0,0 @@ -from unittest import TestCase -from os.path import exists -from hardware_cli import main, get_cpus, get_ram, get_disks -from click.testing import CliRunner - - -class HardwarecliTest(TestCase): - def test_read_hardware_cli_cpus(self): - - cpus = get_cpus() - assert type(cpus) is list - - def test_read_hardware_cli_ram(self): - - ram = get_ram() - assert type(ram) is list - - def test_read_hardware_cli_disks(self): - - disks = get_disks() - assert type(disks) is list - - def test_write_hardware_json_file_from_hardware_cli_with_output_file_flag_on(self): - - runner = CliRunner() - with runner.isolated_filesystem(): - result_file_path = "hardware_data.json" - - result = runner.invoke(main, ["--output-file", f"./{result_file_path}"]) - assert exists(f"./{result_file_path}") is True - - assert result.exit_code == 0 - - def test_read_stdout_from_hardware_cli(self): - - runner = CliRunner() - - result = runner.invoke(main) - - assert result.exit_code == 0 - assert result.output.count("disk") >= 1 - assert result.output.count("ram") >= 1 - assert result.output.count("cpu") >= 1 diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 8bf92ae..1dfc7ca 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -28,7 +28,7 @@ f"{current_dir}", "../mocks/boaviztapi_response_verbose.json" ) mock_formatted_scaphandre = os.path.join( - f"{current_dir}", "../mocks/formatted_scaphandre.json" + f"{current_dir}", "../mocks/formatted_power_data_one_hour.json" ) hardware_cli = os.path.join(f"{current_dir}", "../../boagent/hardware/hardware_cli.py") hardware_data = os.path.join(f"{current_dir}", "../../boagent/api/hardware_data.json") @@ -136,11 +136,11 @@ def test_compute_average_consumption(self): class GetPowerDataTest(TestCase): def setUp(self) -> None: # One-hour interval - self.start_time = 1710837858 - self.end_time = 1710841458 + self.start_time = 1713776733 + self.end_time = 1713780333 # Ten minutes interval - self.short_interval_start_time = 1710923675 - self.short_interval_end_time = 1710924275 + self.short_interval_start_time = 1713776733 + self.short_interval_end_time = 1713777333 self.formatted_scaphandre = f"{mock_formatted_scaphandre}" @@ -156,6 +156,8 @@ def test_get_power_data(self, mocked_format_scaphandre_json): assert type(power_data) is dict assert "raw_data" in power_data assert "avg_power" in power_data + assert type(power_data["avg_power"]) is float + assert power_data["avg_power"] > 0 @patch("boagent.api.api.format_scaphandre_json") def test_get_power_data_with_short_time_interval( diff --git a/tests/mocks/formatted_power_data_one_hour.json b/tests/mocks/formatted_power_data_one_hour.json new file mode 100644 index 0000000..25c3aab --- /dev/null +++ b/tests/mocks/formatted_power_data_one_hour.json @@ -0,0 +1 @@ +[{"host":{"consumption":22839456.0,"timestamp":1713776733.1511338,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984608768","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14541315.0,"domains":[{"name":"uncore","consumption":45094.0,"timestamp":1713776733.0607731},{"name":"core","consumption":12269990.0,"timestamp":1713776733.0605369},{"name":"dram","consumption":852068.0,"timestamp":1713776733.0603411}],"timestamp":1713776733.0592344}]},{"host":{"consumption":16981000.0,"timestamp":1713776743.218813,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983822336","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9059081.0,"domains":[{"name":"uncore","consumption":48212.0,"timestamp":1713776743.158127},{"name":"core","consumption":6869789.0,"timestamp":1713776743.1580791},{"name":"dram","consumption":739943.0,"timestamp":1713776743.1580322}],"timestamp":1713776743.1577911}]},{"host":{"consumption":16722740.0,"timestamp":1713776753.3200343,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983838720","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9070029.0,"domains":[{"name":"uncore","consumption":46079.0,"timestamp":1713776753.2260823},{"name":"core","consumption":6879086.0,"timestamp":1713776753.2260573},{"name":"dram","consumption":740840.0,"timestamp":1713776753.226029}],"timestamp":1713776753.2255995}]},{"host":{"consumption":16845328.0,"timestamp":1713776763.3460875,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983805952","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9006139.0,"domains":[{"name":"uncore","consumption":28302.0,"timestamp":1713776763.3271012},{"name":"core","consumption":6842051.0,"timestamp":1713776763.327086},{"name":"dram","consumption":721432.0,"timestamp":1713776763.3270676}],"timestamp":1713776763.3268232}]},{"host":{"consumption":20178468.0,"timestamp":1713776773.3749685,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984961024","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11565690.0,"domains":[{"name":"uncore","consumption":138203.0,"timestamp":1713776773.3530092},{"name":"core","consumption":9056146.0,"timestamp":1713776773.352927},{"name":"dram","consumption":917219.0,"timestamp":1713776773.3528495}],"timestamp":1713776773.3525944}]},{"host":{"consumption":19320856.0,"timestamp":1713776783.4413419,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985849856","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10891636.0,"domains":[{"name":"uncore","consumption":100456.0,"timestamp":1713776783.381015},{"name":"core","consumption":8502546.0,"timestamp":1713776783.3810034},{"name":"dram","consumption":890911.0,"timestamp":1713776783.380984}],"timestamp":1713776783.3807747}]},{"host":{"consumption":18664104.0,"timestamp":1713776793.527114,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985829376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10461344.0,"domains":[{"name":"uncore","consumption":163930.0,"timestamp":1713776793.448991},{"name":"core","consumption":8026378.0,"timestamp":1713776793.4489007},{"name":"dram","consumption":912285.0,"timestamp":1713776793.4488075}],"timestamp":1713776793.447805}]},{"host":{"consumption":18027132.0,"timestamp":1713776803.6265707,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985821184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9899857.0,"domains":[{"name":"uncore","consumption":183041.0,"timestamp":1713776803.535488},{"name":"core","consumption":7494878.0,"timestamp":1713776803.5353925},{"name":"dram","consumption":884276.0,"timestamp":1713776803.535213}],"timestamp":1713776803.5343165}]},{"host":{"consumption":17484540.0,"timestamp":1713776813.6934764,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985829376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9464936.0,"domains":[{"name":"uncore","consumption":73310.0,"timestamp":1713776813.6352477},{"name":"core","consumption":7223027.0,"timestamp":1713776813.6351972},{"name":"dram","consumption":785048.0,"timestamp":1713776813.6351457}],"timestamp":1713776813.6348221}]},{"host":{"consumption":16846520.0,"timestamp":1713776823.7871494,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985829376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9133689.0,"domains":[{"name":"uncore","consumption":80251.0,"timestamp":1713776823.7018094},{"name":"core","consumption":6899394.0,"timestamp":1713776823.701636},{"name":"dram","consumption":780682.0,"timestamp":1713776823.701415}],"timestamp":1713776823.700346}]},{"host":{"consumption":19366870.0,"timestamp":1713776833.8774304,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985022464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10976765.0,"domains":[{"name":"uncore","consumption":150406.0,"timestamp":1713776833.7932224},{"name":"core","consumption":8548469.0,"timestamp":1713776833.793142},{"name":"dram","consumption":908710.0,"timestamp":1713776833.7930572}],"timestamp":1713776833.7928212}]},{"host":{"consumption":19660644.0,"timestamp":1713776843.9498193,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984977408","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11163514.0,"domains":[{"name":"uncore","consumption":187910.0,"timestamp":1713776843.8866582},{"name":"core","consumption":8677972.0,"timestamp":1713776843.8865824},{"name":"dram","consumption":988746.0,"timestamp":1713776843.8864777}],"timestamp":1713776843.8854172}]},{"host":{"consumption":16384468.0,"timestamp":1713776854.0142157,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984907776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8733699.0,"domains":[{"name":"uncore","consumption":1097.0,"timestamp":1713776853.9547465},{"name":"core","consumption":6632548.0,"timestamp":1713776853.9547296},{"name":"dram","consumption":676655.0,"timestamp":1713776853.9547124}],"timestamp":1713776853.9544137}]},{"host":{"consumption":16174939.0,"timestamp":1713776864.10159,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984915968","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8709866.0,"domains":[{"name":"uncore","consumption":22437.0,"timestamp":1713776864.0224054},{"name":"core","consumption":6586726.0,"timestamp":1713776864.0221882},{"name":"dram","consumption":702673.0,"timestamp":1713776864.0219984}],"timestamp":1713776864.020949}]},{"host":{"consumption":16641214.0,"timestamp":1713776874.1272652,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984899584","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8941654.0,"domains":[{"name":"uncore","consumption":30573.0,"timestamp":1713776874.1079433},{"name":"core","consumption":6783195.0,"timestamp":1713776874.1078608},{"name":"dram","consumption":713687.0,"timestamp":1713776874.1077807}],"timestamp":1713776874.1074984}]},{"host":{"consumption":17742036.0,"timestamp":1713776884.1930141,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983883776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9792363.0,"domains":[{"name":"uncore","consumption":12237.0,"timestamp":1713776884.1331985},{"name":"core","consumption":7611253.0,"timestamp":1713776884.1331136},{"name":"dram","consumption":702807.0,"timestamp":1713776884.1330287}],"timestamp":1713776884.1327791}]},{"host":{"consumption":16045425.0,"timestamp":1713776894.2987273,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983871488","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8638578.0,"domains":[{"name":"uncore","consumption":19957.0,"timestamp":1713776894.200897},{"name":"core","consumption":6520352.0,"timestamp":1713776894.2008362},{"name":"dram","consumption":699931.0,"timestamp":1713776894.2007725}],"timestamp":1713776894.1999118}]},{"host":{"consumption":16224034.0,"timestamp":1713776904.3735363,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983871488","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8631907.0,"domains":[{"name":"uncore","consumption":7713.0,"timestamp":1713776904.3059886},{"name":"core","consumption":6542680.0,"timestamp":1713776904.3059006},{"name":"dram","consumption":672715.0,"timestamp":1713776904.305835}],"timestamp":1713776904.305626}]},{"host":{"consumption":16846048.0,"timestamp":1713776914.4393625,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983826432","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9056345.0,"domains":[{"name":"uncore","consumption":6483.0,"timestamp":1713776914.37817},{"name":"core","consumption":6914729.0,"timestamp":1713776914.3780758},{"name":"dram","consumption":717895.0,"timestamp":1713776914.3779886}],"timestamp":1713776914.377803}]},{"host":{"consumption":17085022.0,"timestamp":1713776924.5196557,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983781376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9334116.0,"domains":[{"name":"uncore","consumption":59258.0,"timestamp":1713776924.4472995},{"name":"core","consumption":7110072.0,"timestamp":1713776924.4470918},{"name":"dram","consumption":777071.0,"timestamp":1713776924.446896}],"timestamp":1713776924.4458892}]},{"host":{"consumption":18274012.0,"timestamp":1713776934.5888944,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982667264","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10051529.0,"domains":[{"name":"uncore","consumption":87871.0,"timestamp":1713776934.5258956},{"name":"core","consumption":7730027.0,"timestamp":1713776934.5258844},{"name":"dram","consumption":840146.0,"timestamp":1713776934.5258706}],"timestamp":1713776934.5256615}]},{"host":{"consumption":17763572.0,"timestamp":1713776944.6601112,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982642688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9823252.0,"domains":[{"name":"uncore","consumption":111906.0,"timestamp":1713776944.5963216},{"name":"core","consumption":7510654.0,"timestamp":1713776944.5962281},{"name":"dram","consumption":842703.0,"timestamp":1713776944.596136}],"timestamp":1713776944.5958858}]},{"host":{"consumption":18286144.0,"timestamp":1713776954.6996922,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982642688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10133228.0,"domains":[{"name":"uncore","consumption":123874.0,"timestamp":1713776954.6674545},{"name":"core","consumption":7752282.0,"timestamp":1713776954.6673684},{"name":"dram","consumption":947740.0,"timestamp":1713776954.6672251}],"timestamp":1713776954.6666923}]},{"host":{"consumption":19241480.0,"timestamp":1713776964.7721376,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982634496","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10905721.0,"domains":[{"name":"uncore","consumption":139415.0,"timestamp":1713776964.7069016},{"name":"core","consumption":8461981.0,"timestamp":1713776964.7067893},{"name":"dram","consumption":1017923.0,"timestamp":1713776964.7066824}],"timestamp":1713776964.7062266}]},{"host":{"consumption":16724868.0,"timestamp":1713776974.8404372,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982601728","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8937357.0,"domains":[{"name":"uncore","consumption":24044.0,"timestamp":1713776974.7793686},{"name":"core","consumption":6779412.0,"timestamp":1713776974.7793553},{"name":"dram","consumption":725967.0,"timestamp":1713776974.779332}],"timestamp":1713776974.7790234}]},{"host":{"consumption":16168697.0,"timestamp":1713776984.9150546,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981815296","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8730403.0,"domains":[{"name":"uncore","consumption":14129.0,"timestamp":1713776984.8483362},{"name":"core","consumption":6612168.0,"timestamp":1713776984.8482864},{"name":"dram","consumption":685285.0,"timestamp":1713776984.8482223}],"timestamp":1713776984.8473754}]},{"host":{"consumption":16972942.0,"timestamp":1713776994.9903839,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981815296","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9338204.0,"domains":[{"name":"uncore","consumption":4683.0,"timestamp":1713776994.9218297},{"name":"core","consumption":7238084.0,"timestamp":1713776994.9218106},{"name":"dram","consumption":670005.0,"timestamp":1713776994.9217336}],"timestamp":1713776994.9214137}]},{"host":{"consumption":19904440.0,"timestamp":1713777005.0633216,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981807104","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11469411.0,"domains":[{"name":"uncore","consumption":14218.0,"timestamp":1713777004.996468},{"name":"core","consumption":9234698.0,"timestamp":1713777004.9964507},{"name":"dram","consumption":802499.0,"timestamp":1713777004.9964309}],"timestamp":1713777004.9962282}]},{"host":{"consumption":23821914.0,"timestamp":1713777015.1340816,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982241280","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14857354.0,"domains":[{"name":"uncore","consumption":90502.0,"timestamp":1713777015.0712984},{"name":"core","consumption":12383485.0,"timestamp":1713777015.0712466},{"name":"dram","consumption":972342.0,"timestamp":1713777015.0711875}],"timestamp":1713777015.0708177}]},{"host":{"consumption":18002080.0,"timestamp":1713777025.1986918,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982192128","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9977895.0,"domains":[{"name":"uncore","consumption":85695.0,"timestamp":1713777025.1393635},{"name":"core","consumption":7701050.0,"timestamp":1713777025.139356},{"name":"dram","consumption":792326.0,"timestamp":1713777025.1393478}],"timestamp":1713777025.1391838}]},{"host":{"consumption":17680458.0,"timestamp":1713777035.27853,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981131264","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9743090.0,"domains":[{"name":"uncore","consumption":70435.0,"timestamp":1713777035.2058847},{"name":"core","consumption":7439096.0,"timestamp":1713777035.2058249},{"name":"dram","consumption":804227.0,"timestamp":1713777035.2057557}],"timestamp":1713777035.204923}]},{"host":{"consumption":18357346.0,"timestamp":1713777045.337737,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152980979712","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10192130.0,"domains":[{"name":"uncore","consumption":74988.0,"timestamp":1713777045.286384},{"name":"core","consumption":7816444.0,"timestamp":1713777045.286365},{"name":"dram","consumption":810440.0,"timestamp":1713777045.2863448}],"timestamp":1713777045.2858868}]},{"host":{"consumption":17990072.0,"timestamp":1713777055.4065242,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152980873216","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9824797.0,"domains":[{"name":"uncore","consumption":77175.0,"timestamp":1713777055.3453813},{"name":"core","consumption":7495410.0,"timestamp":1713777055.345311},{"name":"dram","consumption":805234.0,"timestamp":1713777055.3452392}],"timestamp":1713777055.344998}]},{"host":{"consumption":17519172.0,"timestamp":1713777065.503242,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152980742144","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9647848.0,"domains":[{"name":"uncore","consumption":56186.0,"timestamp":1713777065.4142375},{"name":"core","consumption":7358347.0,"timestamp":1713777065.414192},{"name":"dram","consumption":773846.0,"timestamp":1713777065.4141448}],"timestamp":1713777065.4134197}]},{"host":{"consumption":17891032.0,"timestamp":1713777075.5509567,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982196224","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9832698.0,"domains":[{"name":"uncore","consumption":61244.0,"timestamp":1713777075.5105214},{"name":"core","consumption":7536060.0,"timestamp":1713777075.5104876},{"name":"dram","consumption":777253.0,"timestamp":1713777075.5104597}],"timestamp":1713777075.510103}]},{"host":{"consumption":17815084.0,"timestamp":1713777085.6228104,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981295104","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9678532.0,"domains":[{"name":"uncore","consumption":61632.0,"timestamp":1713777085.561123},{"name":"core","consumption":7380698.0,"timestamp":1713777085.5611074},{"name":"dram","consumption":786439.0,"timestamp":1713777085.5610945}],"timestamp":1713777085.5609138}]},{"host":{"consumption":17694360.0,"timestamp":1713777095.7247462,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981151744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9802988.0,"domains":[{"name":"uncore","consumption":71710.0,"timestamp":1713777095.6316407},{"name":"core","consumption":7503412.0,"timestamp":1713777095.6314514},{"name":"dram","consumption":804160.0,"timestamp":1713777095.6312304}],"timestamp":1713777095.6302629}]},{"host":{"consumption":18129474.0,"timestamp":1713777105.790891,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981102592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9953748.0,"domains":[{"name":"uncore","consumption":72152.0,"timestamp":1713777105.7319067},{"name":"core","consumption":7662805.0,"timestamp":1713777105.731818},{"name":"dram","consumption":816287.0,"timestamp":1713777105.7317307}],"timestamp":1713777105.7314792}]},{"host":{"consumption":15953801.0,"timestamp":1713777115.8627741,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981102592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8530278.0,"domains":[{"name":"uncore","consumption":11961.0,"timestamp":1713777115.7994144},{"name":"core","consumption":6420022.0,"timestamp":1713777115.7991927},{"name":"dram","consumption":677953.0,"timestamp":1713777115.79897}],"timestamp":1713777115.7978327}]},{"host":{"consumption":16938940.0,"timestamp":1713777125.9474034,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981114880","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9192264.0,"domains":[{"name":"uncore","consumption":54261.0,"timestamp":1713777125.8688385},{"name":"core","consumption":6987367.0,"timestamp":1713777125.8688178},{"name":"dram","consumption":759677.0,"timestamp":1713777125.8688}],"timestamp":1713777125.8685436}]},{"host":{"consumption":17084550.0,"timestamp":1713777136.0318727,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152980295680","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9322397.0,"domains":[{"name":"uncore","consumption":24124.0,"timestamp":1713777135.953332},{"name":"core","consumption":7153078.0,"timestamp":1713777135.9532452},{"name":"dram","consumption":730172.0,"timestamp":1713777135.9531567}],"timestamp":1713777135.9529128}]},{"host":{"consumption":17661328.0,"timestamp":1713777146.0986826,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152974946304","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9637077.0,"domains":[{"name":"uncore","consumption":25416.0,"timestamp":1713777146.0393763},{"name":"core","consumption":7339891.0,"timestamp":1713777146.0393615},{"name":"dram","consumption":738663.0,"timestamp":1713777146.0393455}],"timestamp":1713777146.0390542}]},{"host":{"consumption":16707994.0,"timestamp":1713777156.2043657,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152974888960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9161977.0,"domains":[{"name":"uncore","consumption":16447.0,"timestamp":1713777156.1071963},{"name":"core","consumption":7019542.0,"timestamp":1713777156.1069677},{"name":"dram","consumption":710408.0,"timestamp":1713777156.1067336}],"timestamp":1713777156.1055775}]},{"host":{"consumption":17207338.0,"timestamp":1713777166.2376916,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152974888960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9286949.0,"domains":[{"name":"uncore","consumption":76193.0,"timestamp":1713777166.2133067},{"name":"core","consumption":7053232.0,"timestamp":1713777166.2132885},{"name":"dram","consumption":782137.0,"timestamp":1713777166.213268}],"timestamp":1713777166.212981}]},{"host":{"consumption":17584212.0,"timestamp":1713777176.2885852,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152974868480","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9738880.0,"domains":[{"name":"uncore","consumption":55203.0,"timestamp":1713777176.2469187},{"name":"core","consumption":7530107.0,"timestamp":1713777176.2468045},{"name":"dram","consumption":756529.0,"timestamp":1713777176.2466614}],"timestamp":1713777176.2450926}]},{"host":{"consumption":17274468.0,"timestamp":1713777186.3227236,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973860864","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9410312.0,"domains":[{"name":"uncore","consumption":83281.0,"timestamp":1713777186.2982764},{"name":"core","consumption":7170252.0,"timestamp":1713777186.2982504},{"name":"dram","consumption":788001.0,"timestamp":1713777186.2982068}],"timestamp":1713777186.297853}]},{"host":{"consumption":16231953.0,"timestamp":1713777196.3952644,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973860864","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8575499.0,"domains":[{"name":"uncore","consumption":17611.0,"timestamp":1713777196.3278553},{"name":"core","consumption":6479625.0,"timestamp":1713777196.327841},{"name":"dram","consumption":684457.0,"timestamp":1713777196.3278232}],"timestamp":1713777196.3276503}]},{"host":{"consumption":17897220.0,"timestamp":1713777206.4610589,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973869056","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9950755.0,"domains":[{"name":"uncore","consumption":24972.0,"timestamp":1713777206.399892},{"name":"core","consumption":7791134.0,"timestamp":1713777206.3998756},{"name":"dram","consumption":764722.0,"timestamp":1713777206.399863}],"timestamp":1713777206.3996723}]},{"host":{"consumption":24343926.0,"timestamp":1713777216.5693893,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973824000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":15427863.0,"domains":[{"name":"uncore","consumption":19596.0,"timestamp":1713777216.4696398},{"name":"core","consumption":13038636.0,"timestamp":1713777216.4694428},{"name":"dram","consumption":907260.0,"timestamp":1713777216.4692278}],"timestamp":1713777216.4682693}]},{"host":{"consumption":18454150.0,"timestamp":1713777226.634701,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973021184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10223166.0,"domains":[{"name":"uncore","consumption":92544.0,"timestamp":1713777226.5767918},{"name":"core","consumption":7945179.0,"timestamp":1713777226.5767102},{"name":"dram","consumption":811552.0,"timestamp":1713777226.5766191}],"timestamp":1713777226.5763497}]},{"host":{"consumption":16529560.0,"timestamp":1713777236.7167804,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973000704","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8944020.0,"domains":[{"name":"uncore","consumption":35589.0,"timestamp":1713777236.642004},{"name":"core","consumption":6789653.0,"timestamp":1713777236.6419218},{"name":"dram","consumption":717853.0,"timestamp":1713777236.6418812}],"timestamp":1713777236.6410005}]},{"host":{"consumption":16775695.0,"timestamp":1713777246.7846277,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152972972032","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8951850.0,"domains":[{"name":"uncore","consumption":26276.0,"timestamp":1713777246.7229867},{"name":"core","consumption":6796287.0,"timestamp":1713777246.7229757},{"name":"dram","consumption":704799.0,"timestamp":1713777246.7229636}],"timestamp":1713777246.7227092}]},{"host":{"consumption":15556533.0,"timestamp":1713777256.8788333,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152972976128","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8236154.0,"domains":[{"name":"uncore","consumption":1030.0,"timestamp":1713777256.7930374},{"name":"core","consumption":6168328.0,"timestamp":1713777256.7928183},{"name":"dram","consumption":645843.0,"timestamp":1713777256.7925932}],"timestamp":1713777256.7914505}]},{"host":{"consumption":17937068.0,"timestamp":1713777266.9760392,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152972910592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9924039.0,"domains":[{"name":"uncore","consumption":88172.0,"timestamp":1713777266.8877187},{"name":"core","consumption":7630807.0,"timestamp":1713777266.8876908},{"name":"dram","consumption":803316.0,"timestamp":1713777266.8876681}],"timestamp":1713777266.8873644}]},{"host":{"consumption":18454380.0,"timestamp":1713777277.0442383,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152971960320","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10182132.0,"domains":[{"name":"uncore","consumption":74447.0,"timestamp":1713777276.9832406},{"name":"core","consumption":7849393.0,"timestamp":1713777276.9832327},{"name":"dram","consumption":817975.0,"timestamp":1713777276.983224}],"timestamp":1713777276.9830406}]},{"host":{"consumption":17266296.0,"timestamp":1713777287.113659,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152971816960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9419215.0,"domains":[{"name":"uncore","consumption":49091.0,"timestamp":1713777287.0527253},{"name":"core","consumption":7157526.0,"timestamp":1713777287.052653},{"name":"dram","consumption":756459.0,"timestamp":1713777287.0525587}],"timestamp":1713777287.0514598}]},{"host":{"consumption":17562162.0,"timestamp":1713777297.214952,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152971739136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9647698.0,"domains":[{"name":"uncore","consumption":65355.0,"timestamp":1713777297.1191518},{"name":"core","consumption":7371870.0,"timestamp":1713777297.1191337},{"name":"dram","consumption":790216.0,"timestamp":1713777297.1191046}],"timestamp":1713777297.1187286}]},{"host":{"consumption":20346536.0,"timestamp":1713777307.293429,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152971628544","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11724314.0,"domains":[{"name":"uncore","consumption":163220.0,"timestamp":1713777307.2234144},{"name":"core","consumption":9303487.0,"timestamp":1713777307.2233179},{"name":"dram","consumption":975655.0,"timestamp":1713777307.2232158}],"timestamp":1713777307.222858}]},{"host":{"consumption":19801178.0,"timestamp":1713777317.359613,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152971571200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11231485.0,"domains":[{"name":"uncore","consumption":198577.0,"timestamp":1713777317.2983823},{"name":"core","consumption":8713569.0,"timestamp":1713777317.298366},{"name":"dram","consumption":991540.0,"timestamp":1713777317.298354}],"timestamp":1713777317.2981806}]},{"host":{"consumption":17649494.0,"timestamp":1713777327.449634,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152970821632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9688075.0,"domains":[{"name":"uncore","consumption":110425.0,"timestamp":1713777327.3674223},{"name":"core","consumption":7351944.0,"timestamp":1713777327.367366},{"name":"dram","consumption":839885.0,"timestamp":1713777327.3672998}],"timestamp":1713777327.3664134}]},{"host":{"consumption":18980238.0,"timestamp":1713777337.5194466,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152970706944","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10592785.0,"domains":[{"name":"uncore","consumption":83956.0,"timestamp":1713777337.4586651},{"name":"core","consumption":8247316.0,"timestamp":1713777337.4586465},{"name":"dram","consumption":857625.0,"timestamp":1713777337.4586263}],"timestamp":1713777337.4583135}]},{"host":{"consumption":21691694.0,"timestamp":1713777347.583959,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152969510912","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12880346.0,"domains":[{"name":"uncore","consumption":131259.0,"timestamp":1713777347.524417},{"name":"core","consumption":10396386.0,"timestamp":1713777347.5243325},{"name":"dram","consumption":957926.0,"timestamp":1713777347.5242443}],"timestamp":1713777347.523989}]},{"host":{"consumption":18650282.0,"timestamp":1713777357.6647134,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152969199616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10580498.0,"domains":[{"name":"uncore","consumption":89075.0,"timestamp":1713777357.5921497},{"name":"core","consumption":8275383.0,"timestamp":1713777357.5919557},{"name":"dram","consumption":853215.0,"timestamp":1713777357.5917592}],"timestamp":1713777357.5907595}]},{"host":{"consumption":18892164.0,"timestamp":1713777367.7330296,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152969150464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10560693.0,"domains":[{"name":"uncore","consumption":104854.0,"timestamp":1713777367.6705291},{"name":"core","consumption":8228723.0,"timestamp":1713777367.6705165},{"name":"dram","consumption":873054.0,"timestamp":1713777367.670503}],"timestamp":1713777367.670317}]},{"host":{"consumption":18655484.0,"timestamp":1713777377.8278155,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152968314880","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10547207.0,"domains":[{"name":"uncore","consumption":119447.0,"timestamp":1713777377.7424407},{"name":"core","consumption":8202705.0,"timestamp":1713777377.742352},{"name":"dram","consumption":864928.0,"timestamp":1713777377.7422514}],"timestamp":1713777377.7406278}]},{"host":{"consumption":19839508.0,"timestamp":1713777387.8977547,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152967557120","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11226931.0,"domains":[{"name":"uncore","consumption":147733.0,"timestamp":1713777387.8355281},{"name":"core","consumption":8815164.0,"timestamp":1713777387.8355043},{"name":"dram","consumption":930749.0,"timestamp":1713777387.8354752}],"timestamp":1713777387.8351617}]},{"host":{"consumption":19093878.0,"timestamp":1713777397.972775,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152967593984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10841222.0,"domains":[{"name":"uncore","consumption":125816.0,"timestamp":1713777397.9035504},{"name":"core","consumption":8468717.0,"timestamp":1713777397.9035375},{"name":"dram","consumption":904159.0,"timestamp":1713777397.9035237}],"timestamp":1713777397.9033375}]},{"host":{"consumption":17952432.0,"timestamp":1713777408.0408626,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152967356416","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9946246.0,"domains":[{"name":"uncore","consumption":78989.0,"timestamp":1713777407.9787939},{"name":"core","consumption":7660487.0,"timestamp":1713777407.9787714},{"name":"dram","consumption":821510.0,"timestamp":1713777407.978734}],"timestamp":1713777407.9782877}]},{"host":{"consumption":17320856.0,"timestamp":1713777418.1319575,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152967344128","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9461335.0,"domains":[{"name":"uncore","consumption":69949.0,"timestamp":1713777418.0463884},{"name":"core","consumption":7215506.0,"timestamp":1713777418.0463102},{"name":"dram","consumption":788687.0,"timestamp":1713777418.046224}],"timestamp":1713777418.0459182}]},{"host":{"consumption":17474848.0,"timestamp":1713777428.2004583,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966549504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9409248.0,"domains":[{"name":"uncore","consumption":95253.0,"timestamp":1713777428.1390185},{"name":"core","consumption":7122726.0,"timestamp":1713777428.1390052},{"name":"dram","consumption":809644.0,"timestamp":1713777428.1389885}],"timestamp":1713777428.1387415}]},{"host":{"consumption":16820736.0,"timestamp":1713777438.3035433,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966549504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9165546.0,"domains":[{"name":"uncore","consumption":108143.0,"timestamp":1713777438.2093804},{"name":"core","consumption":6890045.0,"timestamp":1713777438.209173},{"name":"dram","consumption":796038.0,"timestamp":1713777438.2089665}],"timestamp":1713777438.2079842}]},{"host":{"consumption":16727609.0,"timestamp":1713777448.3768816,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966549504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8939919.0,"domains":[{"name":"uncore","consumption":71607.0,"timestamp":1713777448.3114433},{"name":"core","consumption":6727186.0,"timestamp":1713777448.3114324},{"name":"dram","consumption":750922.0,"timestamp":1713777448.3114202}],"timestamp":1713777448.3112388}]},{"host":{"consumption":16308847.0,"timestamp":1713777458.4427474,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966553600","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8585879.0,"domains":[{"name":"uncore","consumption":47079.0,"timestamp":1713777458.3821568},{"name":"core","consumption":6422585.0,"timestamp":1713777458.3821454},{"name":"dram","consumption":715525.0,"timestamp":1713777458.382133}],"timestamp":1713777458.3819559}]},{"host":{"consumption":17582196.0,"timestamp":1713777468.5505536,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966561792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9790577.0,"domains":[{"name":"uncore","consumption":115877.0,"timestamp":1713777468.449387},{"name":"core","consumption":7484325.0,"timestamp":1713777468.4491963},{"name":"dram","consumption":842199.0,"timestamp":1713777468.448999}],"timestamp":1713777468.4479294}]},{"host":{"consumption":21082234.0,"timestamp":1713777478.6427877,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965779456","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12303180.0,"domains":[{"name":"uncore","consumption":201535.0,"timestamp":1713777478.5594313},{"name":"core","consumption":9761258.0,"timestamp":1713777478.5593724},{"name":"dram","consumption":1047614.0,"timestamp":1713777478.559312}],"timestamp":1713777478.5590181}]},{"host":{"consumption":18089648.0,"timestamp":1713777488.7118351,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965562368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9918908.0,"domains":[{"name":"uncore","consumption":117238.0,"timestamp":1713777488.6492963},{"name":"core","consumption":7574489.0,"timestamp":1713777488.6491983},{"name":"dram","consumption":894123.0,"timestamp":1713777488.6491091}],"timestamp":1713777488.6487775}]},{"host":{"consumption":16313611.0,"timestamp":1713777498.7860672,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965505024","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8774291.0,"domains":[{"name":"uncore","consumption":28373.0,"timestamp":1713777498.7166615},{"name":"core","consumption":6648229.0,"timestamp":1713777498.7166505},{"name":"dram","consumption":703226.0,"timestamp":1713777498.716639}],"timestamp":1713777498.7164707}]},{"host":{"consumption":15908766.0,"timestamp":1713777508.8507597,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965505024","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8388403.0,"domains":[{"name":"uncore","consumption":2084.0,"timestamp":1713777508.7911139},{"name":"core","consumption":6325376.0,"timestamp":1713777508.791101},{"name":"dram","consumption":653991.0,"timestamp":1713777508.7910852}],"timestamp":1713777508.790909}]},{"host":{"consumption":15899949.0,"timestamp":1713777518.9272132,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965505024","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8448667.0,"domains":[{"name":"uncore","consumption":7016.0,"timestamp":1713777518.8562863},{"name":"core","consumption":6357922.0,"timestamp":1713777518.8561907},{"name":"dram","consumption":679596.0,"timestamp":1713777518.8560758}],"timestamp":1713777518.8557153}]},{"host":{"consumption":16183745.0,"timestamp":1713777529.0078616,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152964710400","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8689172.0,"domains":[{"name":"uncore","consumption":5571.0,"timestamp":1713777528.935464},{"name":"core","consumption":6591279.0,"timestamp":1713777528.935428},{"name":"dram","consumption":676487.0,"timestamp":1713777528.9353883}],"timestamp":1713777528.9345155}]},{"host":{"consumption":15916104.0,"timestamp":1713777539.0753608,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152964685824","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8294892.0,"domains":[{"name":"uncore","consumption":14249.0,"timestamp":1713777539.0141416},{"name":"core","consumption":6169550.0,"timestamp":1713777539.0141294},{"name":"dram","consumption":674498.0,"timestamp":1713777539.01411}],"timestamp":1713777539.0138464}]},{"host":{"consumption":16209632.0,"timestamp":1713777549.1478362,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152964677632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8713013.0,"domains":[{"name":"uncore","consumption":21256.0,"timestamp":1713777549.0809667},{"name":"core","consumption":6591171.0,"timestamp":1713777549.080948},{"name":"dram","consumption":686833.0,"timestamp":1713777549.080928}],"timestamp":1713777549.0806618}]},{"host":{"consumption":16297672.0,"timestamp":1713777559.2131064,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966852608","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8636431.0,"domains":[{"name":"uncore","consumption":17554.0,"timestamp":1713777559.1536322},{"name":"core","consumption":6528329.0,"timestamp":1713777559.153618},{"name":"dram","consumption":687476.0,"timestamp":1713777559.1536024}],"timestamp":1713777559.1534212}]},{"host":{"consumption":16613624.0,"timestamp":1713777569.2817764,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966840320","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8982682.0,"domains":[{"name":"uncore","consumption":14080.0,"timestamp":1713777569.2191489},{"name":"core","consumption":6835346.0,"timestamp":1713777569.219115},{"name":"dram","consumption":686288.0,"timestamp":1713777569.2190804}],"timestamp":1713777569.2186477}]},{"host":{"consumption":15928445.0,"timestamp":1713777579.3524537,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966041600","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8482414.0,"domains":[{"name":"uncore","consumption":8813.0,"timestamp":1713777579.2880456},{"name":"core","consumption":6404099.0,"timestamp":1713777579.287951},{"name":"dram","consumption":667569.0,"timestamp":1713777579.287852}],"timestamp":1713777579.2874703}]},{"host":{"consumption":15866381.0,"timestamp":1713777589.4253757,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966049792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8423159.0,"domains":[{"name":"uncore","consumption":496.0,"timestamp":1713777589.357418},{"name":"core","consumption":6360998.0,"timestamp":1713777589.3573365},{"name":"dram","consumption":654786.0,"timestamp":1713777589.3572474}],"timestamp":1713777589.3570118}]},{"host":{"consumption":15883202.0,"timestamp":1713777599.500007,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966049792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8349347.0,"domains":[{"name":"uncore","consumption":1114.0,"timestamp":1713777599.431466},{"name":"core","consumption":6300350.0,"timestamp":1713777599.4314551},{"name":"dram","consumption":651057.0,"timestamp":1713777599.4314435}],"timestamp":1713777599.4312637}]},{"host":{"consumption":16583735.0,"timestamp":1713777609.577641,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966057984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8933031.0,"domains":[{"name":"uncore","consumption":16167.0,"timestamp":1713777609.5073316},{"name":"core","consumption":6814868.0,"timestamp":1713777609.5073144},{"name":"dram","consumption":724313.0,"timestamp":1713777609.5072951}],"timestamp":1713777609.5069907}]},{"host":{"consumption":16225616.0,"timestamp":1713777619.6726906,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965238784","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8753202.0,"domains":[{"name":"uncore","consumption":5866.0,"timestamp":1713777619.5885262},{"name":"core","consumption":6647838.0,"timestamp":1713777619.588443},{"name":"dram","consumption":698294.0,"timestamp":1713777619.5883377}],"timestamp":1713777619.587323}]},{"host":{"consumption":16452231.0,"timestamp":1713777629.7383971,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965230592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8740273.0,"domains":[{"name":"uncore","consumption":7131.0,"timestamp":1713777629.6791177},{"name":"core","consumption":6637624.0,"timestamp":1713777629.6791074},{"name":"dram","consumption":683510.0,"timestamp":1713777629.6790953}],"timestamp":1713777629.678914}]},{"host":{"consumption":15823927.0,"timestamp":1713777639.7776556,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965206016","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8402048.0,"domains":[{"name":"uncore","consumption":0.0,"timestamp":1713777639.7470057},{"name":"core","consumption":6336968.0,"timestamp":1713777639.746783},{"name":"dram","consumption":651596.0,"timestamp":1713777639.7465599}],"timestamp":1713777639.7453885}]},{"host":{"consumption":20210992.0,"timestamp":1713777649.8567626,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152964087808","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11645443.0,"domains":[{"name":"uncore","consumption":166251.0,"timestamp":1713777649.7856688},{"name":"core","consumption":9154307.0,"timestamp":1713777649.7855568},{"name":"dram","consumption":959337.0,"timestamp":1713777649.7854187}],"timestamp":1713777649.7847738}]},{"host":{"consumption":18315888.0,"timestamp":1713777659.9245737,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152964091904","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10023681.0,"domains":[{"name":"uncore","consumption":101881.0,"timestamp":1713777659.862742},{"name":"core","consumption":7680835.0,"timestamp":1713777659.8626509},{"name":"dram","consumption":855120.0,"timestamp":1713777659.8625586}],"timestamp":1713777659.8622923}]},{"host":{"consumption":18779222.0,"timestamp":1713777669.9968607,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152963125248","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10526377.0,"domains":[{"name":"uncore","consumption":169323.0,"timestamp":1713777669.934799},{"name":"core","consumption":8078254.0,"timestamp":1713777669.9346042},{"name":"dram","consumption":936328.0,"timestamp":1713777669.9344296}],"timestamp":1713777669.9331813}]},{"host":{"consumption":19123404.0,"timestamp":1713777680.0693,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152963768320","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10781109.0,"domains":[{"name":"uncore","consumption":113506.0,"timestamp":1713777680.0042026},{"name":"core","consumption":8356430.0,"timestamp":1713777680.0040424},{"name":"dram","consumption":875108.0,"timestamp":1713777680.0038862}],"timestamp":1713777680.0032423}]},{"host":{"consumption":16658693.0,"timestamp":1713777690.1361642,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152963764224","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8869032.0,"domains":[{"name":"uncore","consumption":40817.0,"timestamp":1713777690.0751405},{"name":"core","consumption":6706145.0,"timestamp":1713777690.0750535},{"name":"dram","consumption":736214.0,"timestamp":1713777690.0749643}],"timestamp":1713777690.0747101}]},{"host":{"consumption":15931695.0,"timestamp":1713777700.2205713,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152963739648","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8498349.0,"domains":[{"name":"uncore","consumption":37672.0,"timestamp":1713777700.1458943},{"name":"core","consumption":6345941.0,"timestamp":1713777700.1457095},{"name":"dram","consumption":712412.0,"timestamp":1713777700.1454847}],"timestamp":1713777700.1442876}]},{"host":{"consumption":15856558.0,"timestamp":1713777710.3048334,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152963735552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8405044.0,"domains":[{"name":"uncore","consumption":1059.0,"timestamp":1713777710.228694},{"name":"core","consumption":6337611.0,"timestamp":1713777710.2286005},{"name":"dram","consumption":654882.0,"timestamp":1713777710.2285113}],"timestamp":1713777710.228153}]},{"host":{"consumption":15731130.0,"timestamp":1713777720.3704264,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152962949120","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8187628.0,"domains":[{"name":"uncore","consumption":16242.0,"timestamp":1713777720.3109682},{"name":"core","consumption":6095751.0,"timestamp":1713777720.3108895},{"name":"dram","consumption":679307.0,"timestamp":1713777720.3108082}],"timestamp":1713777720.3105443}]},{"host":{"consumption":16210695.0,"timestamp":1713777730.4636085,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152962957312","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8795062.0,"domains":[{"name":"uncore","consumption":16315.0,"timestamp":1713777730.3778632},{"name":"core","consumption":6706404.0,"timestamp":1713777730.3778448},{"name":"dram","consumption":685067.0,"timestamp":1713777730.3778222}],"timestamp":1713777730.377493}]},{"host":{"consumption":16040021.0,"timestamp":1713777740.5394042,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152962924544","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8431943.0,"domains":[{"name":"uncore","consumption":9415.0,"timestamp":1713777740.4708369},{"name":"core","consumption":6360303.0,"timestamp":1713777740.4708252},{"name":"dram","consumption":672710.0,"timestamp":1713777740.4708118}],"timestamp":1713777740.4706376}]},{"host":{"consumption":17075332.0,"timestamp":1713777750.6046717,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152962924544","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9383489.0,"domains":[{"name":"uncore","consumption":19158.0,"timestamp":1713777750.5443146},{"name":"core","consumption":7245646.0,"timestamp":1713777750.544299},{"name":"dram","consumption":694105.0,"timestamp":1713777750.5442803}],"timestamp":1713777750.544087}]},{"host":{"consumption":16038221.0,"timestamp":1713777760.7143607,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152962920448","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8620729.0,"domains":[{"name":"uncore","consumption":34230.0,"timestamp":1713777760.6133876},{"name":"core","consumption":6495974.0,"timestamp":1713777760.6132631},{"name":"dram","consumption":708761.0,"timestamp":1713777760.6130996}],"timestamp":1713777760.611765}]},{"host":{"consumption":18562744.0,"timestamp":1713777770.7854593,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152961789952","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10167510.0,"domains":[{"name":"uncore","consumption":85764.0,"timestamp":1713777770.7238543},{"name":"core","consumption":7782228.0,"timestamp":1713777770.7238424},{"name":"dram","consumption":824070.0,"timestamp":1713777770.7238216}],"timestamp":1713777770.723569}]},{"host":{"consumption":17822256.0,"timestamp":1713777780.8563392,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152961662976","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9776705.0,"domains":[{"name":"uncore","consumption":65075.0,"timestamp":1713777780.79145},{"name":"core","consumption":7445099.0,"timestamp":1713777780.791433},{"name":"dram","consumption":800301.0,"timestamp":1713777780.791413}],"timestamp":1713777780.7911453}]},{"host":{"consumption":17887402.0,"timestamp":1713777790.9230866,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152961298432","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9885649.0,"domains":[{"name":"uncore","consumption":43824.0,"timestamp":1713777790.863574},{"name":"core","consumption":7646417.0,"timestamp":1713777790.8635585},{"name":"dram","consumption":772986.0,"timestamp":1713777790.8635464}],"timestamp":1713777790.863358}]},{"host":{"consumption":16965574.0,"timestamp":1713777800.9973304,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152961216512","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9200041.0,"domains":[{"name":"uncore","consumption":56064.0,"timestamp":1713777800.933654},{"name":"core","consumption":6970620.0,"timestamp":1713777800.933577},{"name":"dram","consumption":772481.0,"timestamp":1713777800.933496}],"timestamp":1713777800.9316926}]},{"host":{"consumption":17400900.0,"timestamp":1713777811.0945747,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152961224704","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9707364.0,"domains":[{"name":"uncore","consumption":22511.0,"timestamp":1713777811.0058458},{"name":"core","consumption":7574528.0,"timestamp":1713777811.005728},{"name":"dram","consumption":694298.0,"timestamp":1713777811.005565}],"timestamp":1713777811.0046043}]},{"host":{"consumption":22693084.0,"timestamp":1713777821.1748168,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152960417792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14066250.0,"domains":[{"name":"uncore","consumption":20233.0,"timestamp":1713777821.1053782},{"name":"core","consumption":11756106.0,"timestamp":1713777821.1052055},{"name":"dram","consumption":747530.0,"timestamp":1713777821.1050317}],"timestamp":1713777821.1041722}]},{"host":{"consumption":17230540.0,"timestamp":1713777831.2208235,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152960409600","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9318668.0,"domains":[{"name":"uncore","consumption":73312.0,"timestamp":1713777831.1806302},{"name":"core","consumption":7098818.0,"timestamp":1713777831.180615},{"name":"dram","consumption":790496.0,"timestamp":1713777831.180598}],"timestamp":1713777831.1804144}]},{"host":{"consumption":17543072.0,"timestamp":1713777841.323959,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152960290816","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9691442.0,"domains":[{"name":"uncore","consumption":65266.0,"timestamp":1713777841.2299023},{"name":"core","consumption":7379468.0,"timestamp":1713777841.2298503},{"name":"dram","consumption":771439.0,"timestamp":1713777841.229734}],"timestamp":1713777841.2287185}]},{"host":{"consumption":18375540.0,"timestamp":1713777851.393677,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152960143360","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10071285.0,"domains":[{"name":"uncore","consumption":95768.0,"timestamp":1713777851.332009},{"name":"core","consumption":7713945.0,"timestamp":1713777851.3319974},{"name":"dram","consumption":835902.0,"timestamp":1713777851.3319821}],"timestamp":1713777851.3318}]},{"host":{"consumption":17726560.0,"timestamp":1713777861.4610617,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152960004096","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9741501.0,"domains":[{"name":"uncore","consumption":67079.0,"timestamp":1713777861.4008732},{"name":"core","consumption":7442516.0,"timestamp":1713777861.4008353},{"name":"dram","consumption":793650.0,"timestamp":1713777861.4008021}],"timestamp":1713777861.4003146}]},{"host":{"consumption":17449610.0,"timestamp":1713777871.5619464,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152959102976","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9601990.0,"domains":[{"name":"uncore","consumption":60339.0,"timestamp":1713777871.4696467},{"name":"core","consumption":7300906.0,"timestamp":1713777871.4694824},{"name":"dram","consumption":769847.0,"timestamp":1713777871.4692864}],"timestamp":1713777871.4681816}]},{"host":{"consumption":18067604.0,"timestamp":1713777881.5899308,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958939136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9903128.0,"domains":[{"name":"uncore","consumption":86261.0,"timestamp":1713777881.5700386},{"name":"core","consumption":7576518.0,"timestamp":1713777881.570027},{"name":"dram","consumption":818160.0,"timestamp":1713777881.570015}],"timestamp":1713777881.5698082}]},{"host":{"consumption":18114310.0,"timestamp":1713777891.6597648,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958910464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10051117.0,"domains":[{"name":"uncore","consumption":119266.0,"timestamp":1713777891.595267},{"name":"core","consumption":7688228.0,"timestamp":1713777891.5952513},{"name":"dram","consumption":875669.0,"timestamp":1713777891.5952399}],"timestamp":1713777891.5950556}]},{"host":{"consumption":17982304.0,"timestamp":1713777901.7224674,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958914560","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9921893.0,"domains":[{"name":"uncore","consumption":105382.0,"timestamp":1713777901.6688368},{"name":"core","consumption":7614912.0,"timestamp":1713777901.6687794},{"name":"dram","consumption":821355.0,"timestamp":1713777901.6687136}],"timestamp":1713777901.6678514}]},{"host":{"consumption":16229753.0,"timestamp":1713777911.8222022,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958902272","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8694883.0,"domains":[{"name":"uncore","consumption":13136.0,"timestamp":1713777911.7282002},{"name":"core","consumption":6587707.0,"timestamp":1713777911.7281888},{"name":"dram","consumption":687165.0,"timestamp":1713777911.7281759}],"timestamp":1713777911.7280076}]},{"host":{"consumption":16616626.0,"timestamp":1713777921.8897438,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958091264","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8844863.0,"domains":[{"name":"uncore","consumption":6247.0,"timestamp":1713777921.8297477},{"name":"core","consumption":6710053.0,"timestamp":1713777921.829701},{"name":"dram","consumption":696847.0,"timestamp":1713777921.8296196}],"timestamp":1713777921.8293762}]},{"host":{"consumption":24247360.0,"timestamp":1713777931.9538066,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958078976","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":15254459.0,"domains":[{"name":"uncore","consumption":35481.0,"timestamp":1713777931.8947358},{"name":"core","consumption":12941539.0,"timestamp":1713777931.894722},{"name":"dram","consumption":962834.0,"timestamp":1713777931.8947082}],"timestamp":1713777931.8945222}]},{"host":{"consumption":20532328.0,"timestamp":1713777942.0455108,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958062592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12224716.0,"domains":[{"name":"uncore","consumption":99571.0,"timestamp":1713777941.9616747},{"name":"core","consumption":9892754.0,"timestamp":1713777941.9615881},{"name":"dram","consumption":849291.0,"timestamp":1713777941.9614494}],"timestamp":1713777941.9605832}]},{"host":{"consumption":16474318.0,"timestamp":1713777952.0709994,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958062592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8771281.0,"domains":[{"name":"uncore","consumption":30979.0,"timestamp":1713777952.052795},{"name":"core","consumption":6620660.0,"timestamp":1713777952.0527837},{"name":"dram","consumption":715171.0,"timestamp":1713777952.0527718}],"timestamp":1713777952.0525928}]},{"host":{"consumption":17493240.0,"timestamp":1713777962.1385055,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958066688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9531806.0,"domains":[{"name":"uncore","consumption":131463.0,"timestamp":1713777962.0778706},{"name":"core","consumption":7202853.0,"timestamp":1713777962.0778282},{"name":"dram","consumption":833088.0,"timestamp":1713777962.0777817}],"timestamp":1713777962.0771358}]},{"host":{"consumption":17458548.0,"timestamp":1713777972.24492,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152957239296","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9531299.0,"domains":[{"name":"uncore","consumption":127349.0,"timestamp":1713777972.1469042},{"name":"core","consumption":7191604.0,"timestamp":1713777972.1468406},{"name":"dram","consumption":825182.0,"timestamp":1713777972.1467702}],"timestamp":1713777972.1457498}]},{"host":{"consumption":17862440.0,"timestamp":1713777982.3326883,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152957214720","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9769459.0,"domains":[{"name":"uncore","consumption":179092.0,"timestamp":1713777982.252346},{"name":"core","consumption":7372610.0,"timestamp":1713777982.252256},{"name":"dram","consumption":884528.0,"timestamp":1713777982.2521672}],"timestamp":1713777982.251912}]},{"host":{"consumption":18233520.0,"timestamp":1713777992.4027348,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152957206528","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10080855.0,"domains":[{"name":"uncore","consumption":104562.0,"timestamp":1713777992.3419394},{"name":"core","consumption":7790676.0,"timestamp":1713777992.3419151},{"name":"dram","consumption":820201.0,"timestamp":1713777992.341895}],"timestamp":1713777992.3415523}]},{"host":{"consumption":19109640.0,"timestamp":1713778002.4701629,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152956878848","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10871542.0,"domains":[{"name":"uncore","consumption":115419.0,"timestamp":1713778002.4089096},{"name":"core","consumption":8515008.0,"timestamp":1713778002.4088027},{"name":"dram","consumption":916167.0,"timestamp":1713778002.4086978}],"timestamp":1713778002.4082537}]},{"host":{"consumption":18408262.0,"timestamp":1713778012.5528898,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152956362752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10342927.0,"domains":[{"name":"uncore","consumption":82893.0,"timestamp":1713778012.4801257},{"name":"core","consumption":8061710.0,"timestamp":1713778012.4799323},{"name":"dram","consumption":842357.0,"timestamp":1713778012.479757}],"timestamp":1713778012.4787397}]},{"host":{"consumption":19840854.0,"timestamp":1713778022.6270146,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152956350464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11335704.0,"domains":[{"name":"uncore","consumption":163135.0,"timestamp":1713778022.55935},{"name":"core","consumption":8897139.0,"timestamp":1713778022.5593307},{"name":"dram","consumption":981078.0,"timestamp":1713778022.5593092}],"timestamp":1713778022.5589626}]},{"host":{"consumption":17312974.0,"timestamp":1713778032.7117648,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152956309504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9499735.0,"domains":[{"name":"uncore","consumption":87710.0,"timestamp":1713778032.6362305},{"name":"core","consumption":7215070.0,"timestamp":1713778032.6359973},{"name":"dram","consumption":811384.0,"timestamp":1713778032.6357644}],"timestamp":1713778032.6345541}]},{"host":{"consumption":18126974.0,"timestamp":1713778042.7790456,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152956256256","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10049458.0,"domains":[{"name":"uncore","consumption":100679.0,"timestamp":1713778042.7184296},{"name":"core","consumption":7772194.0,"timestamp":1713778042.718339},{"name":"dram","consumption":809173.0,"timestamp":1713778042.7182584}],"timestamp":1713778042.7180066}]},{"host":{"consumption":17990110.0,"timestamp":1713778052.845718,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955977728","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9860508.0,"domains":[{"name":"uncore","consumption":132729.0,"timestamp":1713778052.7844014},{"name":"core","consumption":7515147.0,"timestamp":1713778052.7843919},{"name":"dram","consumption":877302.0,"timestamp":1713778052.784381}],"timestamp":1713778052.7841396}]},{"host":{"consumption":19102024.0,"timestamp":1713778062.9095144,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955179008","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10795199.0,"domains":[{"name":"uncore","consumption":191009.0,"timestamp":1713778062.855294},{"name":"core","consumption":8332341.0,"timestamp":1713778062.8551056},{"name":"dram","consumption":993144.0,"timestamp":1713778062.8549147}],"timestamp":1713778062.853756}]},{"host":{"consumption":17932420.0,"timestamp":1713778072.9832215,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955179008","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9801198.0,"domains":[{"name":"uncore","consumption":119654.0,"timestamp":1713778072.9159064},{"name":"core","consumption":7465131.0,"timestamp":1713778072.915892},{"name":"dram","consumption":868349.0,"timestamp":1713778072.9158764}],"timestamp":1713778072.9157023}]},{"host":{"consumption":15665550.0,"timestamp":1713778083.0535884,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954957824","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8236872.0,"domains":[{"name":"uncore","consumption":1435.0,"timestamp":1713778082.9920995},{"name":"core","consumption":6126665.0,"timestamp":1713778082.9918785},{"name":"dram","consumption":660562.0,"timestamp":1713778082.991654}],"timestamp":1713778082.9904716}]},{"host":{"consumption":16120235.0,"timestamp":1713778093.1263516,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954728448","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8520780.0,"domains":[{"name":"uncore","consumption":21778.0,"timestamp":1713778093.058785},{"name":"core","consumption":6411878.0,"timestamp":1713778093.0587704},{"name":"dram","consumption":687990.0,"timestamp":1713778093.058755}],"timestamp":1713778093.0585763}]},{"host":{"consumption":16046596.0,"timestamp":1713778103.2007499,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954716160","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8483392.0,"domains":[{"name":"uncore","consumption":24553.0,"timestamp":1713778103.1311922},{"name":"core","consumption":6374043.0,"timestamp":1713778103.131181},{"name":"dram","consumption":697553.0,"timestamp":1713778103.1311667}],"timestamp":1713778103.1309865}]},{"host":{"consumption":15957042.0,"timestamp":1713778113.261549,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953991168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8526762.0,"domains":[{"name":"uncore","consumption":9305.0,"timestamp":1713778113.2123566},{"name":"core","consumption":6414746.0,"timestamp":1713778113.2122111},{"name":"dram","consumption":668618.0,"timestamp":1713778113.2119734}],"timestamp":1713778113.2108254}]},{"host":{"consumption":15601428.0,"timestamp":1713778123.3766108,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953991168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8257602.0,"domains":[{"name":"uncore","consumption":1073.0,"timestamp":1713778123.2738173},{"name":"core","consumption":6212498.0,"timestamp":1713778123.273661},{"name":"dram","consumption":645039.0,"timestamp":1713778123.2734315}],"timestamp":1713778123.2723062}]},{"host":{"consumption":19030572.0,"timestamp":1713778133.4485748,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955719680","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10675758.0,"domains":[{"name":"uncore","consumption":111651.0,"timestamp":1713778133.3864427},{"name":"core","consumption":8321683.0,"timestamp":1713778133.386427},{"name":"dram","consumption":880649.0,"timestamp":1713778133.3864074}],"timestamp":1713778133.3861651}]},{"host":{"consumption":18044690.0,"timestamp":1713778143.5153856,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955723776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9966501.0,"domains":[{"name":"uncore","consumption":99055.0,"timestamp":1713778143.4558403},{"name":"core","consumption":7658628.0,"timestamp":1713778143.4558094},{"name":"dram","consumption":839877.0,"timestamp":1713778143.4557405}],"timestamp":1713778143.4554782}]},{"host":{"consumption":16208644.0,"timestamp":1713778153.6035,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955723776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8720445.0,"domains":[{"name":"uncore","consumption":28104.0,"timestamp":1713778153.5237722},{"name":"core","consumption":6585610.0,"timestamp":1713778153.5237236},{"name":"dram","consumption":708395.0,"timestamp":1713778153.5236516}],"timestamp":1713778153.522603}]},{"host":{"consumption":16021691.0,"timestamp":1713778163.6856952,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954953728","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8491445.0,"domains":[{"name":"uncore","consumption":12070.0,"timestamp":1713778163.6114707},{"name":"core","consumption":6391293.0,"timestamp":1713778163.611446},{"name":"dram","consumption":680306.0,"timestamp":1713778163.6114204}],"timestamp":1713778163.6108978}]},{"host":{"consumption":16108650.0,"timestamp":1713778173.75182,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954937344","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8471021.0,"domains":[{"name":"uncore","consumption":13198.0,"timestamp":1713778173.6924863},{"name":"core","consumption":6370185.0,"timestamp":1713778173.692438},{"name":"dram","consumption":680392.0,"timestamp":1713778173.6923525}],"timestamp":1713778173.6921015}]},{"host":{"consumption":16630331.0,"timestamp":1713778183.8555284,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954843136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9040092.0,"domains":[{"name":"uncore","consumption":11112.0,"timestamp":1713778183.7604535},{"name":"core","consumption":6876670.0,"timestamp":1713778183.760376},{"name":"dram","consumption":709599.0,"timestamp":1713778183.7602925}],"timestamp":1713778183.759236}]},{"host":{"consumption":20623596.0,"timestamp":1713778193.9633613,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954834944","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12148391.0,"domains":[{"name":"uncore","consumption":75015.0,"timestamp":1713778193.8707},{"name":"core","consumption":9812882.0,"timestamp":1713778193.8706245},{"name":"dram","consumption":899764.0,"timestamp":1713778193.870541}],"timestamp":1713778193.8694522}]},{"host":{"consumption":17016802.0,"timestamp":1713778204.034221,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954843136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9095368.0,"domains":[{"name":"uncore","consumption":66745.0,"timestamp":1713778203.9716375},{"name":"core","consumption":6873280.0,"timestamp":1713778203.9716249},{"name":"dram","consumption":784929.0,"timestamp":1713778203.97161}],"timestamp":1713778203.971305}]},{"host":{"consumption":17112820.0,"timestamp":1713778214.1344874,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954105856","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9360768.0,"domains":[{"name":"uncore","consumption":60661.0,"timestamp":1713778214.0423117},{"name":"core","consumption":7127434.0,"timestamp":1713778214.0422997},{"name":"dram","consumption":773353.0,"timestamp":1713778214.0422854}],"timestamp":1713778214.0420032}]},{"host":{"consumption":18903108.0,"timestamp":1713778224.2335865,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953991168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10563515.0,"domains":[{"name":"uncore","consumption":114829.0,"timestamp":1713778224.1482656},{"name":"core","consumption":8165978.0,"timestamp":1713778224.1480432},{"name":"dram","consumption":893129.0,"timestamp":1713778224.147817}],"timestamp":1713778224.1467283}]},{"host":{"consumption":16815078.0,"timestamp":1713778234.3094904,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953987072","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9073328.0,"domains":[{"name":"uncore","consumption":33808.0,"timestamp":1713778234.2399542},{"name":"core","consumption":6896834.0,"timestamp":1713778234.2399182},{"name":"dram","consumption":742332.0,"timestamp":1713778234.2398176}],"timestamp":1713778234.239405}]},{"host":{"consumption":16468905.0,"timestamp":1713778244.334961,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953974784","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8726411.0,"domains":[{"name":"uncore","consumption":51516.0,"timestamp":1713778244.31644},{"name":"core","consumption":6539256.0,"timestamp":1713778244.3163552},{"name":"dram","consumption":757700.0,"timestamp":1713778244.3162642}],"timestamp":1713778244.316021}]},{"host":{"consumption":16805254.0,"timestamp":1713778254.4097855,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953974784","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9099256.0,"domains":[{"name":"uncore","consumption":44680.0,"timestamp":1713778254.340396},{"name":"core","consumption":6936122.0,"timestamp":1713778254.3403227},{"name":"dram","consumption":744308.0,"timestamp":1713778254.3402247}],"timestamp":1713778254.3399541}]},{"host":{"consumption":16182486.0,"timestamp":1713778264.4898,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953188352","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8616916.0,"domains":[{"name":"uncore","consumption":22437.0,"timestamp":1713778264.4189432},{"name":"core","consumption":6478810.0,"timestamp":1713778264.4188635},{"name":"dram","consumption":722628.0,"timestamp":1713778264.4188013}],"timestamp":1713778264.4178174}]},{"host":{"consumption":17305524.0,"timestamp":1713778274.592418,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953188352","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9435582.0,"domains":[{"name":"uncore","consumption":76477.0,"timestamp":1713778274.4962804},{"name":"core","consumption":7187148.0,"timestamp":1713778274.4961896},{"name":"dram","consumption":795758.0,"timestamp":1713778274.4960816}],"timestamp":1713778274.4958107}]},{"host":{"consumption":18785188.0,"timestamp":1713778284.6705709,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953167872","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10446739.0,"domains":[{"name":"uncore","consumption":125444.0,"timestamp":1713778284.6004436},{"name":"core","consumption":8087918.0,"timestamp":1713778284.6003916},{"name":"dram","consumption":890058.0,"timestamp":1713778284.6003404}],"timestamp":1713778284.6000745}]},{"host":{"consumption":16213882.0,"timestamp":1713778294.7732277,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953221120","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8737510.0,"domains":[{"name":"uncore","consumption":16673.0,"timestamp":1713778294.6817791},{"name":"core","consumption":6622020.0,"timestamp":1713778294.6817255},{"name":"dram","consumption":691778.0,"timestamp":1713778294.6816595}],"timestamp":1713778294.6806479}]},{"host":{"consumption":16841598.0,"timestamp":1713778304.8395026,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953221120","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8990070.0,"domains":[{"name":"uncore","consumption":67261.0,"timestamp":1713778304.7806199},{"name":"core","consumption":6786066.0,"timestamp":1713778304.780608},{"name":"dram","consumption":772277.0,"timestamp":1713778304.7805893}],"timestamp":1713778304.7802932}]},{"host":{"consumption":15886529.0,"timestamp":1713778314.9193351,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152952422400","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8469075.0,"domains":[{"name":"uncore","consumption":13107.0,"timestamp":1713778314.8479078},{"name":"core","consumption":6378442.0,"timestamp":1713778314.8478038},{"name":"dram","consumption":681078.0,"timestamp":1713778314.847698}],"timestamp":1713778314.8471231}]},{"host":{"consumption":16300617.0,"timestamp":1713778324.9993405,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152952422400","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8713816.0,"domains":[{"name":"uncore","consumption":22667.0,"timestamp":1713778324.9289382},{"name":"core","consumption":6595842.0,"timestamp":1713778324.9288406},{"name":"dram","consumption":698723.0,"timestamp":1713778324.9287448}],"timestamp":1713778324.9282732}]},{"host":{"consumption":16274175.0,"timestamp":1713778335.0838835,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152952406016","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8685893.0,"domains":[{"name":"uncore","consumption":1072.0,"timestamp":1713778335.0060637},{"name":"core","consumption":6599734.0,"timestamp":1713778335.006051},{"name":"dram","consumption":684139.0,"timestamp":1713778335.0060375}],"timestamp":1713778335.0058546}]},{"host":{"consumption":15490132.0,"timestamp":1713778345.1519918,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152952406016","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8027108.0,"domains":[{"name":"uncore","consumption":1077.0,"timestamp":1713778345.0918274},{"name":"core","consumption":5970722.0,"timestamp":1713778345.091758},{"name":"dram","consumption":649692.0,"timestamp":1713778345.0917196}],"timestamp":1713778345.090986}]},{"host":{"consumption":15852559.0,"timestamp":1713778355.2326415,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152952401920","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8466667.0,"domains":[{"name":"uncore","consumption":1024.0,"timestamp":1713778355.1580641},{"name":"core","consumption":6413722.0,"timestamp":1713778355.1580014},{"name":"dram","consumption":649999.0,"timestamp":1713778355.157901}],"timestamp":1713778355.157543}]},{"host":{"consumption":16240695.0,"timestamp":1713778365.3005126,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152951627776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8585786.0,"domains":[{"name":"uncore","consumption":4891.0,"timestamp":1713778365.2409782},{"name":"core","consumption":6503272.0,"timestamp":1713778365.240959},{"name":"dram","consumption":685492.0,"timestamp":1713778365.2409384}],"timestamp":1713778365.2406104}]},{"host":{"consumption":16741456.0,"timestamp":1713778375.3824499,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152951611392","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9067325.0,"domains":[{"name":"uncore","consumption":28774.0,"timestamp":1713778375.3098996},{"name":"core","consumption":6902248.0,"timestamp":1713778375.3098242},{"name":"dram","consumption":751734.0,"timestamp":1713778375.309668}],"timestamp":1713778375.3084521}]},{"host":{"consumption":16094570.0,"timestamp":1713778385.4497921,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152951390208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8522783.0,"domains":[{"name":"uncore","consumption":3094.0,"timestamp":1713778385.3902752},{"name":"core","consumption":6430091.0,"timestamp":1713778385.3902605},{"name":"dram","consumption":675185.0,"timestamp":1713778385.3902447}],"timestamp":1713778385.3900678}]},{"host":{"consumption":15702383.0,"timestamp":1713778395.5490887,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152951390208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8299491.0,"domains":[{"name":"uncore","consumption":1303.0,"timestamp":1713778395.4573636},{"name":"core","consumption":6229972.0,"timestamp":1713778395.4572694},{"name":"dram","consumption":672905.0,"timestamp":1713778395.4571745}],"timestamp":1713778395.4568045}]},{"host":{"consumption":15926298.0,"timestamp":1713778405.6472604,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152950620160","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8407060.0,"domains":[{"name":"uncore","consumption":2913.0,"timestamp":1713778405.5561535},{"name":"core","consumption":6320935.0,"timestamp":1713778405.5561402},{"name":"dram","consumption":664250.0,"timestamp":1713778405.5561228}],"timestamp":1713778405.5559301}]},{"host":{"consumption":17106012.0,"timestamp":1713778415.7178535,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152950579200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9104477.0,"domains":[{"name":"uncore","consumption":86591.0,"timestamp":1713778415.6561277},{"name":"core","consumption":6853135.0,"timestamp":1713778415.656116},{"name":"dram","consumption":814963.0,"timestamp":1713778415.6561036}],"timestamp":1713778415.655915}]},{"host":{"consumption":20155688.0,"timestamp":1713778425.8072379,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152950501376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11732790.0,"domains":[{"name":"uncore","consumption":153072.0,"timestamp":1713778425.72294},{"name":"core","consumption":9271947.0,"timestamp":1713778425.7229323},{"name":"dram","consumption":959340.0,"timestamp":1713778425.722924}],"timestamp":1713778425.7227395}]},{"host":{"consumption":18600844.0,"timestamp":1713778435.892952,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152950497280","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10397299.0,"domains":[{"name":"uncore","consumption":127204.0,"timestamp":1713778435.8201876},{"name":"core","consumption":8062494.0,"timestamp":1713778435.8201532},{"name":"dram","consumption":901573.0,"timestamp":1713778435.8201234}],"timestamp":1713778435.8196468}]},{"host":{"consumption":18800292.0,"timestamp":1713778445.989877,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152950484992","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10658923.0,"domains":[{"name":"uncore","consumption":87654.0,"timestamp":1713778445.899361},{"name":"core","consumption":8358092.0,"timestamp":1713778445.899273},{"name":"dram","consumption":863223.0,"timestamp":1713778445.8991795}],"timestamp":1713778445.8988254}]},{"host":{"consumption":16503893.0,"timestamp":1713778456.0580692,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152949698560","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8760128.0,"domains":[{"name":"uncore","consumption":24881.0,"timestamp":1713778455.9982858},{"name":"core","consumption":6619273.0,"timestamp":1713778455.998271},{"name":"dram","consumption":722279.0,"timestamp":1713778455.9982567}],"timestamp":1713778455.9980743}]},{"host":{"consumption":16004728.0,"timestamp":1713778466.1401925,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152949706752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8535786.0,"domains":[{"name":"uncore","consumption":21513.0,"timestamp":1713778466.0670831},{"name":"core","consumption":6396448.0,"timestamp":1713778466.0669842},{"name":"dram","consumption":709696.0,"timestamp":1713778466.0668886}],"timestamp":1713778466.065791}]},{"host":{"consumption":15714509.0,"timestamp":1713778476.2077904,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152949694464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8224187.0,"domains":[{"name":"uncore","consumption":593.0,"timestamp":1713778476.1474054},{"name":"core","consumption":6164270.0,"timestamp":1713778476.147317},{"name":"dram","consumption":658405.0,"timestamp":1713778476.1472273}],"timestamp":1713778476.1469781}]},{"host":{"consumption":15509596.0,"timestamp":1713778486.2828846,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152949694464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8095696.0,"domains":[{"name":"uncore","consumption":1121.0,"timestamp":1713778486.2131784},{"name":"core","consumption":6029805.0,"timestamp":1713778486.2131019},{"name":"dram","consumption":658380.0,"timestamp":1713778486.2130163}],"timestamp":1713778486.2127774}]},{"host":{"consumption":15917170.0,"timestamp":1713778496.3726666,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152949686272","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8507946.0,"domains":[{"name":"uncore","consumption":508.0,"timestamp":1713778496.293669},{"name":"core","consumption":6425052.0,"timestamp":1713778496.2935703},{"name":"dram","consumption":674278.0,"timestamp":1713778496.293475}],"timestamp":1713778496.293092}]},{"host":{"consumption":17460936.0,"timestamp":1713778506.4403293,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152948645888","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9438790.0,"domains":[{"name":"uncore","consumption":63186.0,"timestamp":1713778506.3801222},{"name":"core","consumption":7188739.0,"timestamp":1713778506.3801115},{"name":"dram","consumption":801605.0,"timestamp":1713778506.3800988}],"timestamp":1713778506.37992}]},{"host":{"consumption":17647596.0,"timestamp":1713778516.467086,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152948502528","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9673203.0,"domains":[{"name":"uncore","consumption":63288.0,"timestamp":1713778516.4464781},{"name":"core","consumption":7367384.0,"timestamp":1713778516.4464595},{"name":"dram","consumption":781762.0,"timestamp":1713778516.4464357}],"timestamp":1713778516.4461293}]},{"host":{"consumption":17998264.0,"timestamp":1713778526.5498712,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152948396032","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9922432.0,"domains":[{"name":"uncore","consumption":93941.0,"timestamp":1713778526.4760978},{"name":"core","consumption":7568352.0,"timestamp":1713778526.47608},{"name":"dram","consumption":827088.0,"timestamp":1713778526.4760604}],"timestamp":1713778526.475664}]},{"host":{"consumption":17919348.0,"timestamp":1713778536.6171196,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152948281344","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9716069.0,"domains":[{"name":"uncore","consumption":91981.0,"timestamp":1713778536.55687},{"name":"core","consumption":7362954.0,"timestamp":1713778536.5568569},{"name":"dram","consumption":822564.0,"timestamp":1713778536.5568407}],"timestamp":1713778536.5566506}]},{"host":{"consumption":17562222.0,"timestamp":1713778546.7132726,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152948137984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9642658.0,"domains":[{"name":"uncore","consumption":83211.0,"timestamp":1713778546.6262805},{"name":"core","consumption":7284240.0,"timestamp":1713778546.6260839},{"name":"dram","consumption":808179.0,"timestamp":1713778546.6259797}],"timestamp":1713778546.624852}]},{"host":{"consumption":17814228.0,"timestamp":1713778556.7811947,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152947236864","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9663190.0,"domains":[{"name":"uncore","consumption":63607.0,"timestamp":1713778556.720838},{"name":"core","consumption":7354302.0,"timestamp":1713778556.720753},{"name":"dram","consumption":790565.0,"timestamp":1713778556.7206686}],"timestamp":1713778556.7204156}]},{"host":{"consumption":17404296.0,"timestamp":1713778566.870133,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152947122176","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9502488.0,"domains":[{"name":"uncore","consumption":50750.0,"timestamp":1713778566.7870471},{"name":"core","consumption":7210500.0,"timestamp":1713778566.78702},{"name":"dram","consumption":761710.0,"timestamp":1713778566.7869334}],"timestamp":1713778566.78662}]},{"host":{"consumption":16562229.0,"timestamp":1713778576.9380562,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152947113984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8787423.0,"domains":[{"name":"uncore","consumption":33913.0,"timestamp":1713778576.8780177},{"name":"core","consumption":6621239.0,"timestamp":1713778576.8779504},{"name":"dram","consumption":738578.0,"timestamp":1713778576.877923}],"timestamp":1713778576.8776152}]},{"host":{"consumption":16660833.0,"timestamp":1713778587.025769,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152947113984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9023139.0,"domains":[{"name":"uncore","consumption":36360.0,"timestamp":1713778586.9464016},{"name":"core","consumption":6847376.0,"timestamp":1713778586.9463885},{"name":"dram","consumption":750955.0,"timestamp":1713778586.9463744}],"timestamp":1713778586.9455016}]},{"host":{"consumption":27157940.0,"timestamp":1713778597.0935817,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152947126272","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":17499112.0,"domains":[{"name":"uncore","consumption":35800.0,"timestamp":1713778597.0323348},{"name":"core","consumption":15083170.0,"timestamp":1713778597.0323172},{"name":"dram","consumption":1039158.0,"timestamp":1713778597.0322983}],"timestamp":1713778597.032109}]},{"host":{"consumption":28478488.0,"timestamp":1713778607.1648693,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152946339840","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":18714750.0,"domains":[{"name":"uncore","consumption":44761.0,"timestamp":1713778607.1008992},{"name":"core","consumption":16264204.0,"timestamp":1713778607.1008866},{"name":"dram","consumption":1128004.0,"timestamp":1713778607.1008732}],"timestamp":1713778607.1006866}]},{"host":{"consumption":18499788.0,"timestamp":1713778617.2449539,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152946348032","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10543282.0,"domains":[{"name":"uncore","consumption":35862.0,"timestamp":1713778617.1762187},{"name":"core","consumption":8301560.0,"timestamp":1713778617.1761572},{"name":"dram","consumption":822909.0,"timestamp":1713778617.176089}],"timestamp":1713778617.175215}]},{"host":{"consumption":23262280.0,"timestamp":1713778627.2894037,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152946331648","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14149683.0,"domains":[{"name":"uncore","consumption":42079.0,"timestamp":1713778627.251147},{"name":"core","consumption":11705086.0,"timestamp":1713778627.2510552},{"name":"dram","consumption":1064990.0,"timestamp":1713778627.2509615}],"timestamp":1713778627.2506926}]},{"host":{"consumption":21524196.0,"timestamp":1713778637.3684716,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152946331648","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":13009110.0,"domains":[{"name":"uncore","consumption":28453.0,"timestamp":1713778637.2985888},{"name":"core","consumption":10682544.0,"timestamp":1713778637.2984},{"name":"dram","consumption":871337.0,"timestamp":1713778637.298218}],"timestamp":1713778637.297285}]},{"host":{"consumption":18142652.0,"timestamp":1713778647.434562,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152946593792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10150490.0,"domains":[{"name":"uncore","consumption":4452.0,"timestamp":1713778647.3748107},{"name":"core","consumption":7951602.0,"timestamp":1713778647.3747218},{"name":"dram","consumption":701909.0,"timestamp":1713778647.3746347}],"timestamp":1713778647.3743806}]},{"host":{"consumption":17666958.0,"timestamp":1713778657.503115,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152945795072","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9798788.0,"domains":[{"name":"uncore","consumption":50984.0,"timestamp":1713778657.440225},{"name":"core","consumption":7597266.0,"timestamp":1713778657.4401462},{"name":"dram","consumption":746821.0,"timestamp":1713778657.440057}],"timestamp":1713778657.4398046}]},{"host":{"consumption":19220484.0,"timestamp":1713778667.5885675,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152945782784","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11069197.0,"domains":[{"name":"uncore","consumption":77207.0,"timestamp":1713778667.5139923},{"name":"core","consumption":8749279.0,"timestamp":1713778667.5138848},{"name":"dram","consumption":857648.0,"timestamp":1713778667.5138164}],"timestamp":1713778667.5128698}]},{"host":{"consumption":20951024.0,"timestamp":1713778677.6627448,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152945745920","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12430102.0,"domains":[{"name":"uncore","consumption":69874.0,"timestamp":1713778677.599442},{"name":"core","consumption":10106482.0,"timestamp":1713778677.5993917},{"name":"dram","consumption":841225.0,"timestamp":1713778677.5993023}],"timestamp":1713778677.5990338}]},{"host":{"consumption":16926342.0,"timestamp":1713778687.7279685,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152945446912","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9035822.0,"domains":[{"name":"uncore","consumption":56728.0,"timestamp":1713778687.6679056},{"name":"core","consumption":6790726.0,"timestamp":1713778687.6678214},{"name":"dram","consumption":761855.0,"timestamp":1713778687.667737}],"timestamp":1713778687.66746}]},{"host":{"consumption":19875748.0,"timestamp":1713778697.7560825,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152945446912","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11318247.0,"domains":[{"name":"uncore","consumption":157622.0,"timestamp":1713778697.733742},{"name":"core","consumption":8787961.0,"timestamp":1713778697.733689},{"name":"dram","consumption":926546.0,"timestamp":1713778697.7336307}],"timestamp":1713778697.7332962}]},{"host":{"consumption":17565808.0,"timestamp":1713778707.8432217,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152944713728","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9708976.0,"domains":[{"name":"uncore","consumption":68045.0,"timestamp":1713778707.7646315},{"name":"core","consumption":7454607.0,"timestamp":1713778707.7645397},{"name":"dram","consumption":792112.0,"timestamp":1713778707.7644496}],"timestamp":1713778707.7642076}]},{"host":{"consumption":16271821.0,"timestamp":1713778717.9177754,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152944709632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8585741.0,"domains":[{"name":"uncore","consumption":16722.0,"timestamp":1713778717.8493693},{"name":"core","consumption":6444695.0,"timestamp":1713778717.8493614},{"name":"dram","consumption":704756.0,"timestamp":1713778717.8493526}],"timestamp":1713778717.849184}]},{"host":{"consumption":16705390.0,"timestamp":1713778728.0240765,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152944709632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9099752.0,"domains":[{"name":"uncore","consumption":64872.0,"timestamp":1713778727.9277136},{"name":"core","consumption":6869289.0,"timestamp":1713778727.9276729},{"name":"dram","consumption":778874.0,"timestamp":1713778727.9276247}],"timestamp":1713778727.9262896}]},{"host":{"consumption":17832512.0,"timestamp":1713778738.0924132,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152944668672","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9709509.0,"domains":[{"name":"uncore","consumption":75912.0,"timestamp":1713778738.0317535},{"name":"core","consumption":7418628.0,"timestamp":1713778738.031738},{"name":"dram","consumption":823897.0,"timestamp":1713778738.031726}],"timestamp":1713778738.0315561}]},{"host":{"consumption":20198180.0,"timestamp":1713778748.160627,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152944652288","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11694763.0,"domains":[{"name":"uncore","consumption":142257.0,"timestamp":1713778748.09847},{"name":"core","consumption":9226643.0,"timestamp":1713778748.0983844},{"name":"dram","consumption":969974.0,"timestamp":1713778748.0982988}],"timestamp":1713778748.0980463}]},{"host":{"consumption":15958849.0,"timestamp":1713778758.2308273,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943874048","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8529656.0,"domains":[{"name":"uncore","consumption":11485.0,"timestamp":1713778758.1690784},{"name":"core","consumption":6410123.0,"timestamp":1713778758.1689932},{"name":"dram","consumption":681797.0,"timestamp":1713778758.1689286}],"timestamp":1713778758.16806}]},{"host":{"consumption":24738866.0,"timestamp":1713778768.262927,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943882240","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":15562587.0,"domains":[{"name":"uncore","consumption":81832.0,"timestamp":1713778768.2387984},{"name":"core","consumption":13186542.0,"timestamp":1713778768.2387848},{"name":"dram","consumption":1013336.0,"timestamp":1713778768.2387707}],"timestamp":1713778768.2385335}]},{"host":{"consumption":19744614.0,"timestamp":1713778778.331345,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943849472","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11519386.0,"domains":[{"name":"uncore","consumption":22756.0,"timestamp":1713778778.2697496},{"name":"core","consumption":9316394.0,"timestamp":1713778778.2697268},{"name":"dram","consumption":812384.0,"timestamp":1713778778.2696981}],"timestamp":1713778778.269317}]},{"host":{"consumption":19459386.0,"timestamp":1713778788.4409165,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943845376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11461473.0,"domains":[{"name":"uncore","consumption":31296.0,"timestamp":1713778788.3407662},{"name":"core","consumption":9237161.0,"timestamp":1713778788.340537},{"name":"dram","consumption":827642.0,"timestamp":1713778788.3403227}],"timestamp":1713778788.33934}]},{"host":{"consumption":18436102.0,"timestamp":1713778798.5504792,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943853568","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10466570.0,"domains":[{"name":"uncore","consumption":29233.0,"timestamp":1713778798.45015},{"name":"core","consumption":8261108.0,"timestamp":1713778798.4501016},{"name":"dram","consumption":796075.0,"timestamp":1713778798.4500134}],"timestamp":1713778798.4496686}]},{"host":{"consumption":20001496.0,"timestamp":1713778808.640647,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943067136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11704517.0,"domains":[{"name":"uncore","consumption":54240.0,"timestamp":1713778808.5617294},{"name":"core","consumption":9452224.0,"timestamp":1713778808.5616283},{"name":"dram","consumption":781040.0,"timestamp":1713778808.5615287}],"timestamp":1713778808.5606935}]},{"host":{"consumption":18077090.0,"timestamp":1713778818.710855,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943054848","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9995364.0,"domains":[{"name":"uncore","consumption":92504.0,"timestamp":1713778818.6501791},{"name":"core","consumption":7699817.0,"timestamp":1713778818.6500888},{"name":"dram","consumption":822687.0,"timestamp":1713778818.6499984}],"timestamp":1713778818.6497564}]},{"host":{"consumption":16362333.0,"timestamp":1713778828.80112,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943038464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8835574.0,"domains":[{"name":"uncore","consumption":27299.0,"timestamp":1713778828.7198443},{"name":"core","consumption":6682977.0,"timestamp":1713778828.719802},{"name":"dram","consumption":712363.0,"timestamp":1713778828.7197506}],"timestamp":1713778828.7187848}]},{"host":{"consumption":16467553.0,"timestamp":1713778838.877483,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943026176","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8775517.0,"domains":[{"name":"uncore","consumption":29910.0,"timestamp":1713778838.8084548},{"name":"core","consumption":6634164.0,"timestamp":1713778838.808442},{"name":"dram","consumption":710494.0,"timestamp":1713778838.8084257}],"timestamp":1713778838.8082528}]},{"host":{"consumption":16077070.0,"timestamp":1713778848.9446871,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152942239744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8514501.0,"domains":[{"name":"uncore","consumption":20074.0,"timestamp":1713778848.8842096},{"name":"core","consumption":6378392.0,"timestamp":1713778848.884195},{"name":"dram","consumption":687720.0,"timestamp":1713778848.884182}],"timestamp":1713778848.8840048}]},{"host":{"consumption":16118377.0,"timestamp":1713778859.024553,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152942026752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8688166.0,"domains":[{"name":"uncore","consumption":1685.0,"timestamp":1713778858.9515653},{"name":"core","consumption":6589562.0,"timestamp":1713778858.9514425},{"name":"dram","consumption":662978.0,"timestamp":1713778858.9513195}],"timestamp":1713778858.95085}]},{"host":{"consumption":15860850.0,"timestamp":1713778869.0948727,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152942051328","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8282485.0,"domains":[{"name":"uncore","consumption":7841.0,"timestamp":1713778869.0309985},{"name":"core","consumption":6195926.0,"timestamp":1713778869.0309856},{"name":"dram","consumption":662119.0,"timestamp":1713778869.0309694}],"timestamp":1713778869.0307913}]},{"host":{"consumption":15820916.0,"timestamp":1713778879.1628766,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152942051328","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8353632.0,"domains":[{"name":"uncore","consumption":2339.0,"timestamp":1713778879.103162},{"name":"core","consumption":6269642.0,"timestamp":1713778879.1031518},{"name":"dram","consumption":669379.0,"timestamp":1713778879.1031404}],"timestamp":1713778879.1029003}]},{"host":{"consumption":28507276.0,"timestamp":1713778889.2309678,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152942063616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":18768124.0,"domains":[{"name":"uncore","consumption":41915.0,"timestamp":1713778889.1694262},{"name":"core","consumption":16377608.0,"timestamp":1713778889.1694157},{"name":"dram","consumption":1118404.0,"timestamp":1713778889.1694038}],"timestamp":1713778889.1691332}]},{"host":{"consumption":20713548.0,"timestamp":1713778899.3085809,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152941256704","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12419683.0,"domains":[{"name":"uncore","consumption":15095.0,"timestamp":1713778899.2372148},{"name":"core","consumption":10194320.0,"timestamp":1713778899.2372034},{"name":"dram","consumption":838509.0,"timestamp":1713778899.2371914}],"timestamp":1713778899.2369263}]},{"host":{"consumption":19035308.0,"timestamp":1713778909.378997,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152941264896","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10928281.0,"domains":[{"name":"uncore","consumption":3688.0,"timestamp":1713778909.3157477},{"name":"core","consumption":8781333.0,"timestamp":1713778909.315735},{"name":"dram","consumption":726519.0,"timestamp":1713778909.3157215}],"timestamp":1713778909.3154285}]},{"host":{"consumption":16065870.0,"timestamp":1713778919.4597495,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152941244416","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8535028.0,"domains":[{"name":"uncore","consumption":1672.0,"timestamp":1713778919.387487},{"name":"core","consumption":6419199.0,"timestamp":1713778919.387414},{"name":"dram","consumption":689804.0,"timestamp":1713778919.3873172}],"timestamp":1713778919.3863416}]},{"host":{"consumption":17734752.0,"timestamp":1713778929.5379992,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152941248512","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9834249.0,"domains":[{"name":"uncore","consumption":23697.0,"timestamp":1713778929.465888},{"name":"core","consumption":7633540.0,"timestamp":1713778929.465871},{"name":"dram","consumption":764096.0,"timestamp":1713778929.4658518}],"timestamp":1713778929.4655876}]},{"host":{"consumption":15843842.0,"timestamp":1713778939.6145253,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152941248512","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8270132.0,"domains":[{"name":"uncore","consumption":3185.0,"timestamp":1713778939.5446556},{"name":"core","consumption":6191850.0,"timestamp":1713778939.5445673},{"name":"dram","consumption":666510.0,"timestamp":1713778939.5444832}],"timestamp":1713778939.544224}]},{"host":{"consumption":16050476.0,"timestamp":1713778949.7187426,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152940462080","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8640127.0,"domains":[{"name":"uncore","consumption":6901.0,"timestamp":1713778949.627088},{"name":"core","consumption":6530049.0,"timestamp":1713778949.6270237},{"name":"dram","consumption":681281.0,"timestamp":1713778949.6269534}],"timestamp":1713778949.6258066}]},{"host":{"consumption":15882139.0,"timestamp":1713778959.7902706,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152940457984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8307277.0,"domains":[{"name":"uncore","consumption":567.0,"timestamp":1713778959.72786},{"name":"core","consumption":6233139.0,"timestamp":1713778959.7278116},{"name":"dram","consumption":662680.0,"timestamp":1713778959.72772}],"timestamp":1713778959.7274637}]},{"host":{"consumption":15869498.0,"timestamp":1713778969.8930824,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152940437504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8485106.0,"domains":[{"name":"uncore","consumption":2520.0,"timestamp":1713778969.8003242},{"name":"core","consumption":6393264.0,"timestamp":1713778969.8000796},{"name":"dram","consumption":688495.0,"timestamp":1713778969.799851}],"timestamp":1713778969.7987456}]},{"host":{"consumption":19005580.0,"timestamp":1713778979.9788907,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152940474368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10917105.0,"domains":[{"name":"uncore","consumption":4318.0,"timestamp":1713778979.9062507},{"name":"core","consumption":8738286.0,"timestamp":1713778979.9061534},{"name":"dram","consumption":712746.0,"timestamp":1713778979.9060626}],"timestamp":1713778979.9056907}]},{"host":{"consumption":15889825.0,"timestamp":1713778990.047049,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152940253184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8307917.0,"domains":[{"name":"uncore","consumption":1852.0,"timestamp":1713778989.9862208},{"name":"core","consumption":6211961.0,"timestamp":1713778989.9862065},{"name":"dram","consumption":670371.0,"timestamp":1713778989.9861887}],"timestamp":1713778989.9860132}]},{"host":{"consumption":17511788.0,"timestamp":1713779000.15303,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152939466752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9808308.0,"domains":[{"name":"uncore","consumption":11485.0,"timestamp":1713779000.0560756},{"name":"core","consumption":7665499.0,"timestamp":1713779000.0558634},{"name":"dram","consumption":749424.0,"timestamp":1713779000.0556576}],"timestamp":1713779000.0546665}]},{"host":{"consumption":16421535.0,"timestamp":1713779010.2346416,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152939483136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8743779.0,"domains":[{"name":"uncore","consumption":4874.0,"timestamp":1713779010.1610498},{"name":"core","consumption":6634943.0,"timestamp":1713779010.160999},{"name":"dram","consumption":690548.0,"timestamp":1713779010.1609514}],"timestamp":1713779010.1607027}]},{"host":{"consumption":15680743.0,"timestamp":1713779020.3049817,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152939470848","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8219063.0,"domains":[{"name":"uncore","consumption":1095.0,"timestamp":1713779020.2429798},{"name":"core","consumption":6138614.0,"timestamp":1713779020.2429557},{"name":"dram","consumption":657723.0,"timestamp":1713779020.2429168}],"timestamp":1713779020.2425015}]},{"host":{"consumption":16498719.0,"timestamp":1713779030.3953385,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152939462656","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8948646.0,"domains":[{"name":"uncore","consumption":14617.0,"timestamp":1713779030.314326},{"name":"core","consumption":6824823.0,"timestamp":1713779030.3142323},{"name":"dram","consumption":712441.0,"timestamp":1713779030.314138}],"timestamp":1713779030.3135788}]},{"host":{"consumption":16712082.0,"timestamp":1713779040.472605,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152939425792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9076443.0,"domains":[{"name":"uncore","consumption":10636.0,"timestamp":1713779040.4022105},{"name":"core","consumption":6951836.0,"timestamp":1713779040.4021976},{"name":"dram","consumption":707277.0,"timestamp":1713779040.4021845}],"timestamp":1713779040.4019973}]},{"host":{"consumption":15970347.0,"timestamp":1713779050.498144,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152938647552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8387851.0,"domains":[{"name":"uncore","consumption":6850.0,"timestamp":1713779050.4789965},{"name":"core","consumption":6279063.0,"timestamp":1713779050.478985},{"name":"dram","consumption":687153.0,"timestamp":1713779050.4789732}],"timestamp":1713779050.4788008}]},{"host":{"consumption":16211361.0,"timestamp":1713779060.545239,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152938647552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8728988.0,"domains":[{"name":"uncore","consumption":7444.0,"timestamp":1713779060.5056376},{"name":"core","consumption":6644282.0,"timestamp":1713779060.505486},{"name":"dram","consumption":679755.0,"timestamp":1713779060.5053368}],"timestamp":1713779060.5046291}]},{"host":{"consumption":16573144.0,"timestamp":1713779070.6172113,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152938655744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8859013.0,"domains":[{"name":"uncore","consumption":18508.0,"timestamp":1713779070.55355},{"name":"core","consumption":6728934.0,"timestamp":1713779070.5535376},{"name":"dram","consumption":724941.0,"timestamp":1713779070.553524}],"timestamp":1713779070.553239}]},{"host":{"consumption":15968675.0,"timestamp":1713779080.7122705,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152938643456","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8540724.0,"domains":[{"name":"uncore","consumption":12393.0,"timestamp":1713779080.6296477},{"name":"core","consumption":6447208.0,"timestamp":1713779080.6296098},{"name":"dram","consumption":685847.0,"timestamp":1713779080.6295674}],"timestamp":1713779080.6282272}]},{"host":{"consumption":17910684.0,"timestamp":1713779090.8161547,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152938643456","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9905110.0,"domains":[{"name":"uncore","consumption":130444.0,"timestamp":1713779090.7213576},{"name":"core","consumption":7581105.0,"timestamp":1713779090.7212732},{"name":"dram","consumption":862300.0,"timestamp":1713779090.7211812}],"timestamp":1713779090.7209313}]},{"host":{"consumption":16826596.0,"timestamp":1713779100.904564,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937914368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9055155.0,"domains":[{"name":"uncore","consumption":77555.0,"timestamp":1713779100.8293986},{"name":"core","consumption":6808553.0,"timestamp":1713779100.8292298},{"name":"dram","consumption":782856.0,"timestamp":1713779100.8290398}],"timestamp":1713779100.827891}]},{"host":{"consumption":17954162.0,"timestamp":1713779110.9817984,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937918464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9903029.0,"domains":[{"name":"uncore","consumption":82085.0,"timestamp":1713779110.9119844},{"name":"core","consumption":7665349.0,"timestamp":1713779110.9119031},{"name":"dram","consumption":799713.0,"timestamp":1713779110.9118137}],"timestamp":1713779110.9115727}]},{"host":{"consumption":17036168.0,"timestamp":1713779121.0684495,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937918464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9400484.0,"domains":[{"name":"uncore","consumption":52179.0,"timestamp":1713779120.9925644},{"name":"core","consumption":7211028.0,"timestamp":1713779120.9924488},{"name":"dram","consumption":757602.0,"timestamp":1713779120.992229}],"timestamp":1713779120.9910352}]},{"host":{"consumption":17159628.0,"timestamp":1713779131.1472354,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937926656","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9362443.0,"domains":[{"name":"uncore","consumption":82304.0,"timestamp":1713779131.0772424},{"name":"core","consumption":7122046.0,"timestamp":1713779131.0770326},{"name":"dram","consumption":784989.0,"timestamp":1713779131.076822}],"timestamp":1713779131.0757334}]},{"host":{"consumption":16968178.0,"timestamp":1713779141.2149475,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937914368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9074315.0,"domains":[{"name":"uncore","consumption":90800.0,"timestamp":1713779141.1547177},{"name":"core","consumption":6826845.0,"timestamp":1713779141.1547048},{"name":"dram","consumption":796747.0,"timestamp":1713779141.1546912}],"timestamp":1713779141.154506}]},{"host":{"consumption":16517341.0,"timestamp":1713779151.3134944,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937127936","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8965330.0,"domains":[{"name":"uncore","consumption":70466.0,"timestamp":1713779151.2246838},{"name":"core","consumption":6762027.0,"timestamp":1713779151.2246084},{"name":"dram","consumption":755470.0,"timestamp":1713779151.2245271}],"timestamp":1713779151.2234595}]},{"host":{"consumption":17307484.0,"timestamp":1713779161.3909304,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937103360","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9325712.0,"domains":[{"name":"uncore","consumption":49885.0,"timestamp":1713779161.3223126},{"name":"core","consumption":7122705.0,"timestamp":1713779161.3223045},{"name":"dram","consumption":760077.0,"timestamp":1713779161.3222961}],"timestamp":1713779161.322125}]},{"host":{"consumption":18305468.0,"timestamp":1713779171.482923,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937058304","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10355362.0,"domains":[{"name":"uncore","consumption":79782.0,"timestamp":1713779171.4014454},{"name":"core","consumption":8073556.0,"timestamp":1713779171.4013734},{"name":"dram","consumption":816200.0,"timestamp":1713779171.4012926}],"timestamp":1713779171.4002924}]},{"host":{"consumption":18505456.0,"timestamp":1713779181.588552,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937054208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10421209.0,"domains":[{"name":"uncore","consumption":88634.0,"timestamp":1713779181.4965603},{"name":"core","consumption":8119319.0,"timestamp":1713779181.4964838},{"name":"dram","consumption":826216.0,"timestamp":1713779181.4963953}],"timestamp":1713779181.495405}]},{"host":{"consumption":17429780.0,"timestamp":1713779191.6565719,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937046016","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9426209.0,"domains":[{"name":"uncore","consumption":90578.0,"timestamp":1713779191.5973954},{"name":"core","consumption":7164819.0,"timestamp":1713779191.5973878},{"name":"dram","consumption":804677.0,"timestamp":1713779191.5973792}],"timestamp":1713779191.5971985}]},{"host":{"consumption":18172088.0,"timestamp":1713779201.753284,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152936247296","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10160605.0,"domains":[{"name":"uncore","consumption":134823.0,"timestamp":1713779201.665971},{"name":"core","consumption":7781540.0,"timestamp":1713779201.6658947},{"name":"dram","consumption":883729.0,"timestamp":1713779201.6658468}],"timestamp":1713779201.6647305}]},{"host":{"consumption":17235452.0,"timestamp":1713779211.821759,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152936243200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9298197.0,"domains":[{"name":"uncore","consumption":81811.0,"timestamp":1713779211.762119},{"name":"core","consumption":7048108.0,"timestamp":1713779211.7620697},{"name":"dram","consumption":800792.0,"timestamp":1713779211.762021}],"timestamp":1713779211.761791}]},{"host":{"consumption":17938002.0,"timestamp":1713779221.8977249,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152936206336","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9881089.0,"domains":[{"name":"uncore","consumption":119330.0,"timestamp":1713779221.8290174},{"name":"core","consumption":7557321.0,"timestamp":1713779221.828911},{"name":"dram","consumption":874837.0,"timestamp":1713779221.828804}],"timestamp":1713779221.8283737}]},{"host":{"consumption":16798002.0,"timestamp":1713779232.00544,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152936210432","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9176629.0,"domains":[{"name":"uncore","consumption":35129.0,"timestamp":1713779231.9062169},{"name":"core","consumption":6978706.0,"timestamp":1713779231.9061532},{"name":"dram","consumption":754076.0,"timestamp":1713779231.9060853}],"timestamp":1713779231.9051952}]},{"host":{"consumption":16507695.0,"timestamp":1713779242.0815477,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152935424000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8775265.0,"domains":[{"name":"uncore","consumption":9758.0,"timestamp":1713779242.0135086},{"name":"core","consumption":6661140.0,"timestamp":1713779242.0134947},{"name":"dram","consumption":708098.0,"timestamp":1713779242.0134768}],"timestamp":1713779242.0132875}]},{"host":{"consumption":15866538.0,"timestamp":1713779252.147115,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152935424000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8410933.0,"domains":[{"name":"uncore","consumption":1029.0,"timestamp":1713779252.0875256},{"name":"core","consumption":6316372.0,"timestamp":1713779252.0875032},{"name":"dram","consumption":678091.0,"timestamp":1713779252.0874794}],"timestamp":1713779252.0871027}]},{"host":{"consumption":15743678.0,"timestamp":1713779262.2271323,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152935444480","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8370854.0,"domains":[{"name":"uncore","consumption":497.0,"timestamp":1713779262.156445},{"name":"core","consumption":6289246.0,"timestamp":1713779262.1562335},{"name":"dram","consumption":666783.0,"timestamp":1713779262.1560237}],"timestamp":1713779262.1549752}]},{"host":{"consumption":17338976.0,"timestamp":1713779272.3032286,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152935452672","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9470847.0,"domains":[{"name":"uncore","consumption":27913.0,"timestamp":1713779272.234251},{"name":"core","consumption":7303088.0,"timestamp":1713779272.2342405},{"name":"dram","consumption":765635.0,"timestamp":1713779272.2342286}],"timestamp":1713779272.2340517}]},{"host":{"consumption":17239816.0,"timestamp":1713779282.369817,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152935456768","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9466944.0,"domains":[{"name":"uncore","consumption":23438.0,"timestamp":1713779282.309299},{"name":"core","consumption":7275337.0,"timestamp":1713779282.3092208},{"name":"dram","consumption":776075.0,"timestamp":1713779282.3091397}],"timestamp":1713779282.308864}]},{"host":{"consumption":16693718.0,"timestamp":1713779292.4723623,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152934440960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9121357.0,"domains":[{"name":"uncore","consumption":10145.0,"timestamp":1713779292.3796878},{"name":"core","consumption":6958026.0,"timestamp":1713779292.3794663},{"name":"dram","consumption":719963.0,"timestamp":1713779292.379243}],"timestamp":1713779292.3780332}]},{"host":{"consumption":15957342.0,"timestamp":1713779302.5373788,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152934440960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8397257.0,"domains":[{"name":"uncore","consumption":1063.0,"timestamp":1713779302.4803655},{"name":"core","consumption":6318118.0,"timestamp":1713779302.480347},{"name":"dram","consumption":670688.0,"timestamp":1713779302.4802632}],"timestamp":1713779302.4800878}]},{"host":{"consumption":16024489.0,"timestamp":1713779312.619052,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152934440960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8559341.0,"domains":[{"name":"uncore","consumption":6954.0,"timestamp":1713779312.5470173},{"name":"core","consumption":6448383.0,"timestamp":1713779312.5469255},{"name":"dram","consumption":694130.0,"timestamp":1713779312.5468543}],"timestamp":1713779312.5457187}]},{"host":{"consumption":23071216.0,"timestamp":1713779322.6947696,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152934428672","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14056033.0,"domains":[{"name":"uncore","consumption":36874.0,"timestamp":1713779322.6256273},{"name":"core","consumption":11559774.0,"timestamp":1713779322.625553},{"name":"dram","consumption":1058001.0,"timestamp":1713779322.6254654}],"timestamp":1713779322.625211}]},{"host":{"consumption":18695448.0,"timestamp":1713779332.7679017,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152934428672","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10441833.0,"domains":[{"name":"uncore","consumption":24983.0,"timestamp":1713779332.703242},{"name":"core","consumption":8137776.0,"timestamp":1713779332.703227},{"name":"dram","consumption":912053.0,"timestamp":1713779332.7032094}],"timestamp":1713779332.702921}]},{"host":{"consumption":17137862.0,"timestamp":1713779342.871163,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152933646336","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9457530.0,"domains":[{"name":"uncore","consumption":16191.0,"timestamp":1713779342.77958},{"name":"core","consumption":7307213.0,"timestamp":1713779342.779362},{"name":"dram","consumption":738719.0,"timestamp":1713779342.7791367}],"timestamp":1713779342.777919}]},{"host":{"consumption":22560276.0,"timestamp":1713779352.9509864,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152933654528","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14061832.0,"domains":[{"name":"uncore","consumption":11974.0,"timestamp":1713779352.881851},{"name":"core","consumption":11861738.0,"timestamp":1713779352.8817463},{"name":"dram","consumption":751037.0,"timestamp":1713779352.8815885}],"timestamp":1713779352.8806472}]},{"host":{"consumption":16085242.0,"timestamp":1713779363.019219,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152933662720","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8500506.0,"domains":[{"name":"uncore","consumption":1059.0,"timestamp":1713779362.9609694},{"name":"core","consumption":6413019.0,"timestamp":1713779362.960914},{"name":"dram","consumption":659915.0,"timestamp":1713779362.9608593}],"timestamp":1713779362.9605148}]},{"host":{"consumption":17489166.0,"timestamp":1713779373.0832603,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152933662720","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9708083.0,"domains":[{"name":"uncore","consumption":9800.0,"timestamp":1713779373.0251677},{"name":"core","consumption":7572027.0,"timestamp":1713779373.0251226},{"name":"dram","consumption":729759.0,"timestamp":1713779373.025079}],"timestamp":1713779373.0248156}]},{"host":{"consumption":16340626.0,"timestamp":1713779383.1590207,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152933662720","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8835945.0,"domains":[{"name":"uncore","consumption":4219.0,"timestamp":1713779383.092381},{"name":"core","consumption":6711124.0,"timestamp":1713779383.0921726},{"name":"dram","consumption":680159.0,"timestamp":1713779383.0919669}],"timestamp":1713779383.0910106}]},{"host":{"consumption":15704310.0,"timestamp":1713779393.2263083,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152932876288","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8199319.0,"domains":[{"name":"uncore","consumption":539.0,"timestamp":1713779393.1667635},{"name":"core","consumption":6129468.0,"timestamp":1713779393.1666791},{"name":"dram","consumption":660347.0,"timestamp":1713779393.166594}],"timestamp":1713779393.1663363}]},{"host":{"consumption":18256352.0,"timestamp":1713779403.321224,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152932839424","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10266820.0,"domains":[{"name":"uncore","consumption":133123.0,"timestamp":1713779403.2360106},{"name":"core","consumption":7905070.0,"timestamp":1713779403.2358053},{"name":"dram","consumption":915300.0,"timestamp":1713779403.2355986}],"timestamp":1713779403.2345705}]},{"host":{"consumption":16047888.0,"timestamp":1713779413.392738,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152932851712","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8439595.0,"domains":[{"name":"uncore","consumption":2823.0,"timestamp":1713779413.3298821},{"name":"core","consumption":6358749.0,"timestamp":1713779413.3298697},{"name":"dram","consumption":659196.0,"timestamp":1713779413.3298564}],"timestamp":1713779413.3295565}]},{"host":{"consumption":19185602.0,"timestamp":1713779423.4688756,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152932851712","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11159247.0,"domains":[{"name":"uncore","consumption":1666.0,"timestamp":1713779423.401538},{"name":"core","consumption":9036575.0,"timestamp":1713779423.4015303},{"name":"dram","consumption":748903.0,"timestamp":1713779423.401522}],"timestamp":1713779423.401344}]},{"host":{"consumption":19166384.0,"timestamp":1713779433.5555425,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152932839424","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10921425.0,"domains":[{"name":"uncore","consumption":136626.0,"timestamp":1713779433.475286},{"name":"core","consumption":8491875.0,"timestamp":1713779433.4752202},{"name":"dram","consumption":912724.0,"timestamp":1713779433.4751387}],"timestamp":1713779433.4742918}]},{"host":{"consumption":18883858.0,"timestamp":1713779443.6229477,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931336192","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10554818.0,"domains":[{"name":"uncore","consumption":105938.0,"timestamp":1713779443.5628278},{"name":"core","consumption":8209524.0,"timestamp":1713779443.5627787},{"name":"dram","consumption":865554.0,"timestamp":1713779443.5627296}],"timestamp":1713779443.5625181}]},{"host":{"consumption":16295558.0,"timestamp":1713779453.6936886,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931295232","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8739073.0,"domains":[{"name":"uncore","consumption":35852.0,"timestamp":1713779453.6323974},{"name":"core","consumption":6579468.0,"timestamp":1713779453.6323264},{"name":"dram","consumption":720932.0,"timestamp":1713779453.6322405}],"timestamp":1713779453.6312318}]},{"host":{"consumption":16279916.0,"timestamp":1713779463.7741277,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931291136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8762914.0,"domains":[{"name":"uncore","consumption":1521.0,"timestamp":1713779463.703506},{"name":"core","consumption":6655746.0,"timestamp":1713779463.7034302},{"name":"dram","consumption":675341.0,"timestamp":1713779463.7033434}],"timestamp":1713779463.7022796}]},{"host":{"consumption":16727345.0,"timestamp":1713779473.840159,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931274752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8895950.0,"domains":[{"name":"uncore","consumption":77330.0,"timestamp":1713779473.7809298},{"name":"core","consumption":6671507.0,"timestamp":1713779473.7809134},{"name":"dram","consumption":764552.0,"timestamp":1713779473.7808952}],"timestamp":1713779473.7806025}]},{"host":{"consumption":16210897.0,"timestamp":1713779483.9411294,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931274752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8743175.0,"domains":[{"name":"uncore","consumption":16663.0,"timestamp":1713779483.8499062},{"name":"core","consumption":6617284.0,"timestamp":1713779483.8498166},{"name":"dram","consumption":704106.0,"timestamp":1713779483.8496253}],"timestamp":1713779483.8484247}]},{"host":{"consumption":17165846.0,"timestamp":1713779494.0383985,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931274752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9361603.0,"domains":[{"name":"uncore","consumption":70871.0,"timestamp":1713779493.953605},{"name":"core","consumption":7143054.0,"timestamp":1713779493.9535053},{"name":"dram","consumption":776454.0,"timestamp":1713779493.9534185}],"timestamp":1713779493.9521666}]},{"host":{"consumption":17840616.0,"timestamp":1713779504.1096883,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931291136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9835030.0,"domains":[{"name":"uncore","consumption":90175.0,"timestamp":1713779504.04743},{"name":"core","consumption":7569733.0,"timestamp":1713779504.0473733},{"name":"dram","consumption":813438.0,"timestamp":1713779504.0472813}],"timestamp":1713779504.0470135}]},{"host":{"consumption":17128914.0,"timestamp":1713779514.1791308,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931287040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9267812.0,"domains":[{"name":"uncore","consumption":56707.0,"timestamp":1713779514.1174216},{"name":"core","consumption":7047781.0,"timestamp":1713779514.1173346},{"name":"dram","consumption":773637.0,"timestamp":1713779514.1172478}],"timestamp":1713779514.1169913}]},{"host":{"consumption":16322564.0,"timestamp":1713779524.2873058,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931729408","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8849237.0,"domains":[{"name":"uncore","consumption":2096.0,"timestamp":1713779524.1913843},{"name":"core","consumption":6739081.0,"timestamp":1713779524.1913111},{"name":"dram","consumption":683400.0,"timestamp":1713779524.19123}],"timestamp":1713779524.1902199}]},{"host":{"consumption":17575214.0,"timestamp":1713779534.4071152,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931737600","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9709254.0,"domains":[{"name":"uncore","consumption":60471.0,"timestamp":1713779534.2996848},{"name":"core","consumption":7499002.0,"timestamp":1713779534.2994568},{"name":"dram","consumption":780756.0,"timestamp":1713779534.2992313}],"timestamp":1713779534.298122}]},{"host":{"consumption":17105016.0,"timestamp":1713779544.4904342,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931262464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9221976.0,"domains":[{"name":"uncore","consumption":94565.0,"timestamp":1713779544.4205854},{"name":"core","consumption":6956324.0,"timestamp":1713779544.4205108},{"name":"dram","consumption":806910.0,"timestamp":1713779544.4204462}],"timestamp":1713779544.4196}]},{"host":{"consumption":18227336.0,"timestamp":1713779554.5570948,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931233792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10082923.0,"domains":[{"name":"uncore","consumption":106558.0,"timestamp":1713779554.4975998},{"name":"core","consumption":7786575.0,"timestamp":1713779554.4975178},{"name":"dram","consumption":851111.0,"timestamp":1713779554.4974356}],"timestamp":1713779554.4971888}]},{"host":{"consumption":16703315.0,"timestamp":1713779564.6220083,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931188736","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8981811.0,"domains":[{"name":"uncore","consumption":63781.0,"timestamp":1713779564.5626395},{"name":"core","consumption":6776199.0,"timestamp":1713779564.5626285},{"name":"dram","consumption":763114.0,"timestamp":1713779564.5626168}],"timestamp":1713779564.5624464}]},{"host":{"consumption":15787917.0,"timestamp":1713779574.7045534,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929509376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8419545.0,"domains":[{"name":"uncore","consumption":8504.0,"timestamp":1713779574.6319294},{"name":"core","consumption":6326119.0,"timestamp":1713779574.6318338},{"name":"dram","consumption":672605.0,"timestamp":1713779574.6316755}],"timestamp":1713779574.6305897}]},{"host":{"consumption":16278666.0,"timestamp":1713779584.7917998,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929501184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8720046.0,"domains":[{"name":"uncore","consumption":3087.0,"timestamp":1713779584.7122662},{"name":"core","consumption":6616021.0,"timestamp":1713779584.712216},{"name":"dram","consumption":679044.0,"timestamp":1713779584.7121239}],"timestamp":1713779584.7118733}]},{"host":{"consumption":16192413.0,"timestamp":1713779594.8682997,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929288192","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8538587.0,"domains":[{"name":"uncore","consumption":18110.0,"timestamp":1713779594.7989516},{"name":"core","consumption":6430985.0,"timestamp":1713779594.7989392},{"name":"dram","consumption":696370.0,"timestamp":1713779594.7989254}],"timestamp":1713779594.7987468}]},{"host":{"consumption":17835850.0,"timestamp":1713779604.970204,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929529856","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9970056.0,"domains":[{"name":"uncore","consumption":101592.0,"timestamp":1713779604.8777127},{"name":"core","consumption":7675927.0,"timestamp":1713779604.8776011},{"name":"dram","consumption":838750.0,"timestamp":1713779604.8774297}],"timestamp":1713779604.8764682}]},{"host":{"consumption":17223184.0,"timestamp":1713779615.0406623,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929525760","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9258594.0,"domains":[{"name":"uncore","consumption":68223.0,"timestamp":1713779614.9790304},{"name":"core","consumption":7045907.0,"timestamp":1713779614.9790175},{"name":"dram","consumption":780498.0,"timestamp":1713779614.9790006}],"timestamp":1713779614.9788198}]},{"host":{"consumption":17991076.0,"timestamp":1713779625.1449158,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929284096","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10078704.0,"domains":[{"name":"uncore","consumption":118137.0,"timestamp":1713779625.0504525},{"name":"core","consumption":7757337.0,"timestamp":1713779625.0503535},{"name":"dram","consumption":873133.0,"timestamp":1713779625.0502598}],"timestamp":1713779625.0497875}]},{"host":{"consumption":17513584.0,"timestamp":1713779635.2274506,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930615296","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9576783.0,"domains":[{"name":"uncore","consumption":60600.0,"timestamp":1713779635.1544077},{"name":"core","consumption":7359064.0,"timestamp":1713779635.1543975},{"name":"dram","consumption":791838.0,"timestamp":1713779635.1543856}],"timestamp":1713779635.1542053}]},{"host":{"consumption":16749170.0,"timestamp":1713779645.2966073,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930570240","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8959166.0,"domains":[{"name":"uncore","consumption":60839.0,"timestamp":1713779645.2337449},{"name":"core","consumption":6742250.0,"timestamp":1713779645.2336698},{"name":"dram","consumption":773558.0,"timestamp":1713779645.2335942}],"timestamp":1713779645.2333434}]},{"host":{"consumption":16989764.0,"timestamp":1713779655.3732345,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930533376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9272675.0,"domains":[{"name":"uncore","consumption":59885.0,"timestamp":1713779655.3095753},{"name":"core","consumption":7063394.0,"timestamp":1713779655.3094814},{"name":"dram","consumption":771307.0,"timestamp":1713779655.309377}],"timestamp":1713779655.307801}]},{"host":{"consumption":17140116.0,"timestamp":1713779665.4477272,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930557952","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9234038.0,"domains":[{"name":"uncore","consumption":103236.0,"timestamp":1713779665.3803775},{"name":"core","consumption":6960670.0,"timestamp":1713779665.3803644},{"name":"dram","consumption":814238.0,"timestamp":1713779665.3803484}],"timestamp":1713779665.3801663}]},{"host":{"consumption":16794568.0,"timestamp":1713779675.5222828,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929787904","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9103476.0,"domains":[{"name":"uncore","consumption":64554.0,"timestamp":1713779675.4545233},{"name":"core","consumption":6867707.0,"timestamp":1713779675.4544919},{"name":"dram","consumption":777281.0,"timestamp":1713779675.4544601}],"timestamp":1713779675.4539814}]},{"host":{"consumption":17113470.0,"timestamp":1713779685.595081,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929775616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9328894.0,"domains":[{"name":"uncore","consumption":19067.0,"timestamp":1713779685.5279496},{"name":"core","consumption":7172658.0,"timestamp":1713779685.5278647},{"name":"dram","consumption":742037.0,"timestamp":1713779685.5277736}],"timestamp":1713779685.5275266}]},{"host":{"consumption":15704562.0,"timestamp":1713779695.6625886,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929775616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8233994.0,"domains":[{"name":"uncore","consumption":1102.0,"timestamp":1713779695.6025162},{"name":"core","consumption":6144603.0,"timestamp":1713779695.6024885},{"name":"dram","consumption":668788.0,"timestamp":1713779695.6024578}],"timestamp":1713779695.6018517}]},{"host":{"consumption":15882993.0,"timestamp":1713779705.735946,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929751040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8425521.0,"domains":[{"name":"uncore","consumption":1454.0,"timestamp":1713779705.6728644},{"name":"core","consumption":6340254.0,"timestamp":1713779705.6726387},{"name":"dram","consumption":670527.0,"timestamp":1713779705.6724086}],"timestamp":1713779705.6713085}]},{"host":{"consumption":16453722.0,"timestamp":1713779715.8038971,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929751040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8795717.0,"domains":[{"name":"uncore","consumption":6570.0,"timestamp":1713779715.7429388},{"name":"core","consumption":6682553.0,"timestamp":1713779715.7428896},{"name":"dram","consumption":710866.0,"timestamp":1713779715.7428415}],"timestamp":1713779715.7425947}]},{"host":{"consumption":16692743.0,"timestamp":1713779725.8769696,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928927744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8983429.0,"domains":[{"name":"uncore","consumption":6177.0,"timestamp":1713779725.8109748},{"name":"core","consumption":6859291.0,"timestamp":1713779725.8109496},{"name":"dram","consumption":718471.0,"timestamp":1713779725.81092}],"timestamp":1713779725.8105166}]},{"host":{"consumption":19840064.0,"timestamp":1713779735.9461024,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928927744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11393125.0,"domains":[{"name":"uncore","consumption":141691.0,"timestamp":1713779735.8855553},{"name":"core","consumption":8977156.0,"timestamp":1713779735.885465},{"name":"dram","consumption":961187.0,"timestamp":1713779735.8853762}],"timestamp":1713779735.8851018}]},{"host":{"consumption":19636826.0,"timestamp":1713779746.0269625,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931147776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11356918.0,"domains":[{"name":"uncore","consumption":126888.0,"timestamp":1713779745.9565356},{"name":"core","consumption":8981053.0,"timestamp":1713779745.9562955},{"name":"dram","consumption":941938.0,"timestamp":1713779745.9560916}],"timestamp":1713779745.9550948}]},{"host":{"consumption":16313537.0,"timestamp":1713779756.1058164,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931155968","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8716770.0,"domains":[{"name":"uncore","consumption":20905.0,"timestamp":1713779756.038003},{"name":"core","consumption":6596741.0,"timestamp":1713779756.0379858},{"name":"dram","consumption":707044.0,"timestamp":1713779756.0379667}],"timestamp":1713779756.0376678}]},{"host":{"consumption":16918090.0,"timestamp":1713779766.183226,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931123200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9170174.0,"domains":[{"name":"uncore","consumption":41748.0,"timestamp":1713779766.113902},{"name":"core","consumption":7009524.0,"timestamp":1713779766.1138592},{"name":"dram","consumption":757000.0,"timestamp":1713779766.113809}],"timestamp":1713779766.1130364}]},{"host":{"consumption":17507772.0,"timestamp":1713779776.2492278,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930312192","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9599310.0,"domains":[{"name":"uncore","consumption":65255.0,"timestamp":1713779776.1901767},{"name":"core","consumption":7377123.0,"timestamp":1713779776.190158},{"name":"dram","consumption":795967.0,"timestamp":1713779776.1901379}],"timestamp":1713779776.1897933}]},{"host":{"consumption":17944728.0,"timestamp":1713779786.2990508,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930299904","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9929130.0,"domains":[{"name":"uncore","consumption":121277.0,"timestamp":1713779786.2559953},{"name":"core","consumption":7611465.0,"timestamp":1713779786.2559388},{"name":"dram","consumption":869828.0,"timestamp":1713779786.2558804}],"timestamp":1713779786.255555}]},{"host":{"consumption":15806296.0,"timestamp":1713779796.38416,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930299904","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8431951.0,"domains":[{"name":"uncore","consumption":8579.0,"timestamp":1713779796.3085017},{"name":"core","consumption":6340704.0,"timestamp":1713779796.30846},{"name":"dram","consumption":678331.0,"timestamp":1713779796.3084118}],"timestamp":1713779796.3074012}]},{"host":{"consumption":16830278.0,"timestamp":1713779806.4130023,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930287616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9066258.0,"domains":[{"name":"uncore","consumption":33532.0,"timestamp":1713779806.392121},{"name":"core","consumption":6909860.0,"timestamp":1713779806.3921049},{"name":"dram","consumption":747745.0,"timestamp":1713779806.3920863}],"timestamp":1713779806.391791}]},{"host":{"consumption":16742350.0,"timestamp":1713779816.496752,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930295808","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9069925.0,"domains":[{"name":"uncore","consumption":35908.0,"timestamp":1713779816.4222665},{"name":"core","consumption":6917287.0,"timestamp":1713779816.422244},{"name":"dram","consumption":753696.0,"timestamp":1713779816.4222198}],"timestamp":1713779816.4217944}]},{"host":{"consumption":18598028.0,"timestamp":1713779826.5682933,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929415168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10414533.0,"domains":[{"name":"uncore","consumption":62253.0,"timestamp":1713779826.5079713},{"name":"core","consumption":8149784.0,"timestamp":1713779826.507956},{"name":"dram","consumption":864867.0,"timestamp":1713779826.507944}],"timestamp":1713779826.507766}]},{"host":{"consumption":17745816.0,"timestamp":1713779836.6354957,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929415168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9828312.0,"domains":[{"name":"uncore","consumption":67946.0,"timestamp":1713779836.5758927},{"name":"core","consumption":7583864.0,"timestamp":1713779836.5757802},{"name":"dram","consumption":811525.0,"timestamp":1713779836.575659}],"timestamp":1713779836.575159}]},{"host":{"consumption":16928730.0,"timestamp":1713779846.7255683,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929406976","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9291236.0,"domains":[{"name":"uncore","consumption":46567.0,"timestamp":1713779846.6457388},{"name":"core","consumption":7111748.0,"timestamp":1713779846.645555},{"name":"dram","consumption":758997.0,"timestamp":1713779846.6453373}],"timestamp":1713779846.6443307}]},{"host":{"consumption":17730196.0,"timestamp":1713779856.7933705,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929394688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9746702.0,"domains":[{"name":"uncore","consumption":66806.0,"timestamp":1713779856.7338064},{"name":"core","consumption":7516328.0,"timestamp":1713779856.733795},{"name":"dram","consumption":802890.0,"timestamp":1713779856.7337487}],"timestamp":1713779856.7335174}]},{"host":{"consumption":16701234.0,"timestamp":1713779866.8598125,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929382400","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8984439.0,"domains":[{"name":"uncore","consumption":38110.0,"timestamp":1713779866.7994835},{"name":"core","consumption":6837004.0,"timestamp":1713779866.7994657},{"name":"dram","consumption":738887.0,"timestamp":1713779866.7994468}],"timestamp":1713779866.7991397}]},{"host":{"consumption":16168718.0,"timestamp":1713779876.9407325,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928595968","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8716505.0,"domains":[{"name":"uncore","consumption":22019.0,"timestamp":1713779876.8670633},{"name":"core","consumption":6591846.0,"timestamp":1713779876.8669202},{"name":"dram","consumption":697212.0,"timestamp":1713779876.8668}],"timestamp":1713779876.8663688}]},{"host":{"consumption":17151124.0,"timestamp":1713779887.0094666,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928354304","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9330917.0,"domains":[{"name":"uncore","consumption":39096.0,"timestamp":1713779886.9488132},{"name":"core","consumption":7153853.0,"timestamp":1713779886.9487278},{"name":"dram","consumption":752029.0,"timestamp":1713779886.948708}],"timestamp":1713779886.9484768}]},{"host":{"consumption":16187297.0,"timestamp":1713779897.083744,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928354304","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8583965.0,"domains":[{"name":"uncore","consumption":33198.0,"timestamp":1713779897.0164032},{"name":"core","consumption":6455976.0,"timestamp":1713779897.016392},{"name":"dram","consumption":713098.0,"timestamp":1713779897.0163796}],"timestamp":1713779897.0161853}]},{"host":{"consumption":16529308.0,"timestamp":1713779907.1551769,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928362496","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8980054.0,"domains":[{"name":"uncore","consumption":28349.0,"timestamp":1713779907.0899081},{"name":"core","consumption":6838676.0,"timestamp":1713779907.0898926},{"name":"dram","consumption":714382.0,"timestamp":1713779907.0898738}],"timestamp":1713779907.08959}]},{"host":{"consumption":19958728.0,"timestamp":1713779917.2240403,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152927580160","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11518857.0,"domains":[{"name":"uncore","consumption":92943.0,"timestamp":1713779917.164845},{"name":"core","consumption":9192476.0,"timestamp":1713779917.1647935},{"name":"dram","consumption":899580.0,"timestamp":1713779917.1647367}],"timestamp":1713779917.1644056}]},{"host":{"consumption":16834104.0,"timestamp":1713779927.2870233,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152926814208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9113495.0,"domains":[{"name":"uncore","consumption":83857.0,"timestamp":1713779927.233798},{"name":"core","consumption":6861679.0,"timestamp":1713779927.2336633},{"name":"dram","consumption":807548.0,"timestamp":1713779927.2335906}],"timestamp":1713779927.2326035}]},{"host":{"consumption":17433660.0,"timestamp":1713779937.3800478,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152926793728","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9562419.0,"domains":[{"name":"uncore","consumption":64596.0,"timestamp":1713779937.3012738},{"name":"core","consumption":7329209.0,"timestamp":1713779937.3011935},{"name":"dram","consumption":802988.0,"timestamp":1713779937.301089}],"timestamp":1713779937.3000836}]},{"host":{"consumption":18690064.0,"timestamp":1713779947.4075766,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152926441472","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10432291.0,"domains":[{"name":"uncore","consumption":125485.0,"timestamp":1713779947.3894734},{"name":"core","consumption":8074743.0,"timestamp":1713779947.3894615},{"name":"dram","consumption":893591.0,"timestamp":1713779947.389448}],"timestamp":1713779947.3892703}]},{"host":{"consumption":18660300.0,"timestamp":1713779957.4732935,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152926326784","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10490960.0,"domains":[{"name":"uncore","consumption":83533.0,"timestamp":1713779957.4134717},{"name":"core","consumption":8215404.0,"timestamp":1713779957.4134555},{"name":"dram","consumption":849327.0,"timestamp":1713779957.4134383}],"timestamp":1713779957.4132495}]},{"host":{"consumption":16391969.0,"timestamp":1713779967.5598154,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152926339072","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8839163.0,"domains":[{"name":"uncore","consumption":53621.0,"timestamp":1713779967.4802961},{"name":"core","consumption":6659806.0,"timestamp":1713779967.4801967},{"name":"dram","consumption":742988.0,"timestamp":1713779967.4801002}],"timestamp":1713779967.479557}]},{"host":{"consumption":21951676.0,"timestamp":1713779977.6288893,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152925077504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":13009377.0,"domains":[{"name":"uncore","consumption":171418.0,"timestamp":1713779977.5699525},{"name":"core","consumption":10494274.0,"timestamp":1713779977.5699186},{"name":"dram","consumption":1054027.0,"timestamp":1713779977.5698972}],"timestamp":1713779977.5695384}]},{"host":{"consumption":17424444.0,"timestamp":1713779987.7199197,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152925093888","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9580639.0,"domains":[{"name":"uncore","consumption":97375.0,"timestamp":1713779987.6388948},{"name":"core","consumption":7296496.0,"timestamp":1713779987.6386695},{"name":"dram","consumption":834796.0,"timestamp":1713779987.6384435}],"timestamp":1713779987.6372776}]},{"host":{"consumption":17152044.0,"timestamp":1713779997.7997684,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152925081600","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9324043.0,"domains":[{"name":"uncore","consumption":89158.0,"timestamp":1713779997.7300823},{"name":"core","consumption":7070095.0,"timestamp":1713779997.7300525},{"name":"dram","consumption":806334.0,"timestamp":1713779997.730023}],"timestamp":1713779997.72966}]},{"host":{"consumption":18110728.0,"timestamp":1713780007.8673046,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152924930048","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9974532.0,"domains":[{"name":"uncore","consumption":91229.0,"timestamp":1713780007.8069208},{"name":"core","consumption":7691338.0,"timestamp":1713780007.8069074},{"name":"dram","consumption":854391.0,"timestamp":1713780007.8068929}],"timestamp":1713780007.8066962}]},{"host":{"consumption":19110642.0,"timestamp":1713780017.9584239,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923848704","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10975758.0,"domains":[{"name":"uncore","consumption":125408.0,"timestamp":1713780017.8775215},{"name":"core","consumption":8623004.0,"timestamp":1713780017.877302},{"name":"dram","consumption":911132.0,"timestamp":1713780017.8770778}],"timestamp":1713780017.8759685}]},{"host":{"consumption":16496685.0,"timestamp":1713780028.0290504,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923607040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8802841.0,"domains":[{"name":"uncore","consumption":8221.0,"timestamp":1713780027.9665906},{"name":"core","consumption":6666437.0,"timestamp":1713780027.966497},{"name":"dram","consumption":706934.0,"timestamp":1713780027.966405}],"timestamp":1713780027.9661515}]},{"host":{"consumption":17864828.0,"timestamp":1713780038.0963285,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923607040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9806996.0,"domains":[{"name":"uncore","consumption":94211.0,"timestamp":1713780038.0367672},{"name":"core","consumption":7523153.0,"timestamp":1713780038.0366607},{"name":"dram","consumption":839409.0,"timestamp":1713780038.0365567}],"timestamp":1713780038.036152}]},{"host":{"consumption":16822748.0,"timestamp":1713780048.197644,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923602944","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9169791.0,"domains":[{"name":"uncore","consumption":39916.0,"timestamp":1713780048.1041873},{"name":"core","consumption":6993388.0,"timestamp":1713780048.1041183},{"name":"dram","consumption":750313.0,"timestamp":1713780048.1040213}],"timestamp":1713780048.1032753}]},{"host":{"consumption":18678872.0,"timestamp":1713780058.2663543,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923582464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10343402.0,"domains":[{"name":"uncore","consumption":148131.0,"timestamp":1713780058.2072103},{"name":"core","consumption":7957067.0,"timestamp":1713780058.2071245},{"name":"dram","consumption":922585.0,"timestamp":1713780058.2070394}],"timestamp":1713780058.206762}]},{"host":{"consumption":20213284.0,"timestamp":1713780068.3346663,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922902528","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11773470.0,"domains":[{"name":"uncore","consumption":165267.0,"timestamp":1713780068.2724028},{"name":"core","consumption":9340006.0,"timestamp":1713780068.2723184},{"name":"dram","consumption":969113.0,"timestamp":1713780068.2722268}],"timestamp":1713780068.2719815}]},{"host":{"consumption":16366371.0,"timestamp":1713780078.4416406,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922886144","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8721166.0,"domains":[{"name":"uncore","consumption":64272.0,"timestamp":1713780078.3451676},{"name":"core","consumption":6512325.0,"timestamp":1713780078.345093},{"name":"dram","consumption":748456.0,"timestamp":1713780078.3450117}],"timestamp":1713780078.344027}]},{"host":{"consumption":17225028.0,"timestamp":1713780088.5131757,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922845184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9339501.0,"domains":[{"name":"uncore","consumption":74996.0,"timestamp":1713780088.4505699},{"name":"core","consumption":7102138.0,"timestamp":1713780088.4504852},{"name":"dram","consumption":788502.0,"timestamp":1713780088.4503999}],"timestamp":1713780088.4501588}]},{"host":{"consumption":18659424.0,"timestamp":1713780098.5881214,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922779648","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10346767.0,"domains":[{"name":"uncore","consumption":130193.0,"timestamp":1713780098.5232346},{"name":"core","consumption":7939921.0,"timestamp":1713780098.5231893},{"name":"dram","consumption":895682.0,"timestamp":1713780098.5231113}],"timestamp":1713780098.5224936}]},{"host":{"consumption":16444576.0,"timestamp":1713780108.6186478,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922787840","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8880198.0,"domains":[{"name":"uncore","consumption":43704.0,"timestamp":1713780108.5964928},{"name":"core","consumption":6716779.0,"timestamp":1713780108.5964847},{"name":"dram","consumption":724613.0,"timestamp":1713780108.596476}],"timestamp":1713780108.5963082}]},{"host":{"consumption":15987688.0,"timestamp":1713780118.7135324,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921993216","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8475071.0,"domains":[{"name":"uncore","consumption":58115.0,"timestamp":1713780118.6261668},{"name":"core","consumption":6280401.0,"timestamp":1713780118.6257596},{"name":"dram","consumption":728529.0,"timestamp":1713780118.6256688}],"timestamp":1713780118.6246014}]},{"host":{"consumption":17768580.0,"timestamp":1713780128.7914293,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922071040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9732725.0,"domains":[{"name":"uncore","consumption":84270.0,"timestamp":1713780128.7218733},{"name":"core","consumption":7458569.0,"timestamp":1713780128.7218614},{"name":"dram","consumption":820409.0,"timestamp":1713780128.7218442}],"timestamp":1713780128.7216413}]},{"host":{"consumption":25197488.0,"timestamp":1713780138.8595648,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923095040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":15648575.0,"domains":[{"name":"uncore","consumption":186569.0,"timestamp":1713780138.7978957},{"name":"core","consumption":12988297.0,"timestamp":1713780138.7978852},{"name":"dram","consumption":1180341.0,"timestamp":1713780138.7978737}],"timestamp":1713780138.7977054}]},{"host":{"consumption":18156734.0,"timestamp":1713780148.946424,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923054080","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10132623.0,"domains":[{"name":"uncore","consumption":103642.0,"timestamp":1713780148.869245},{"name":"core","consumption":7766535.0,"timestamp":1713780148.8690507},{"name":"dram","consumption":868303.0,"timestamp":1713780148.868856}],"timestamp":1713780148.8679154}]},{"host":{"consumption":17462388.0,"timestamp":1713780159.0245426,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923058176","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9400848.0,"domains":[{"name":"uncore","consumption":130208.0,"timestamp":1713780158.9548566},{"name":"core","consumption":7058526.0,"timestamp":1713780158.9548037},{"name":"dram","consumption":837893.0,"timestamp":1713780158.9547517}],"timestamp":1713780158.954415}]},{"host":{"consumption":16515084.0,"timestamp":1713780169.1027718,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922292224","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8912045.0,"domains":[{"name":"uncore","consumption":56275.0,"timestamp":1713780169.0370355},{"name":"core","consumption":6696455.0,"timestamp":1713780169.036843},{"name":"dram","consumption":748289.0,"timestamp":1713780169.03664}],"timestamp":1713780169.035624}]},{"host":{"consumption":17234128.0,"timestamp":1713780179.181692,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922488832","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9349248.0,"domains":[{"name":"uncore","consumption":75361.0,"timestamp":1713780179.1137233},{"name":"core","consumption":7092576.0,"timestamp":1713780179.113675},{"name":"dram","consumption":784711.0,"timestamp":1713780179.1136}],"timestamp":1713780179.1133642}]},{"host":{"consumption":16280267.0,"timestamp":1713780189.2492008,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922189824","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8636319.0,"domains":[{"name":"uncore","consumption":1847.0,"timestamp":1713780189.1884017},{"name":"core","consumption":6489329.0,"timestamp":1713780189.1883214},{"name":"dram","consumption":683677.0,"timestamp":1713780189.1882293}],"timestamp":1713780189.187972}]},{"host":{"consumption":16865012.0,"timestamp":1713780199.346347,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922247168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9183841.0,"domains":[{"name":"uncore","consumption":80046.0,"timestamp":1713780199.2556705},{"name":"core","consumption":6932730.0,"timestamp":1713780199.2556493},{"name":"dram","consumption":785220.0,"timestamp":1713780199.2556274}],"timestamp":1713780199.255173}]},{"host":{"consumption":17039250.0,"timestamp":1713780209.3751934,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922247168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9130632.0,"domains":[{"name":"uncore","consumption":91907.0,"timestamp":1713780209.3558648},{"name":"core","consumption":6860084.0,"timestamp":1713780209.3558471},{"name":"dram","consumption":792901.0,"timestamp":1713780209.3558266}],"timestamp":1713780209.355492}]},{"host":{"consumption":16751239.0,"timestamp":1713780219.4551482,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921473024","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9034674.0,"domains":[{"name":"uncore","consumption":75270.0,"timestamp":1713780219.3855226},{"name":"core","consumption":6813405.0,"timestamp":1713780219.3853257},{"name":"dram","consumption":772855.0,"timestamp":1713780219.385124}],"timestamp":1713780219.3841703}]},{"host":{"consumption":17774460.0,"timestamp":1713780229.524461,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921468928","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9840644.0,"domains":[{"name":"uncore","consumption":41698.0,"timestamp":1713780229.4617844},{"name":"core","consumption":7597916.0,"timestamp":1713780229.461746},{"name":"dram","consumption":789141.0,"timestamp":1713780229.4616764}],"timestamp":1713780229.4615052}]},{"host":{"consumption":16548044.0,"timestamp":1713780239.6041903,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921468928","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8901559.0,"domains":[{"name":"uncore","consumption":81662.0,"timestamp":1713780239.5345984},{"name":"core","consumption":6664048.0,"timestamp":1713780239.5345175},{"name":"dram","consumption":761862.0,"timestamp":1713780239.5344326}],"timestamp":1713780239.5334642}]},{"host":{"consumption":15918624.0,"timestamp":1713780249.7040665,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921460736","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8471790.0,"domains":[{"name":"uncore","consumption":4954.0,"timestamp":1713780249.611915},{"name":"core","consumption":6378865.0,"timestamp":1713780249.6118298},{"name":"dram","consumption":667809.0,"timestamp":1713780249.6117435}],"timestamp":1713780249.61147}]},{"host":{"consumption":16587016.0,"timestamp":1713780259.7829344,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921489408","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8847106.0,"domains":[{"name":"uncore","consumption":22364.0,"timestamp":1713780259.715153},{"name":"core","consumption":6713265.0,"timestamp":1713780259.715137},{"name":"dram","consumption":701335.0,"timestamp":1713780259.715121}],"timestamp":1713780259.7149491}]},{"host":{"consumption":16002779.0,"timestamp":1713780269.8546379,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920682496","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8504106.0,"domains":[{"name":"uncore","consumption":28378.0,"timestamp":1713780269.7915666},{"name":"core","consumption":6376540.0,"timestamp":1713780269.7915485},{"name":"dram","consumption":700026.0,"timestamp":1713780269.791525}],"timestamp":1713780269.7912748}]},{"host":{"consumption":17727366.0,"timestamp":1713780279.9278245,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920690688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9801078.0,"domains":[{"name":"uncore","consumption":125739.0,"timestamp":1713780279.8642557},{"name":"core","consumption":7464919.0,"timestamp":1713780279.864206},{"name":"dram","consumption":857356.0,"timestamp":1713780279.8641577}],"timestamp":1713780279.8639498}]},{"host":{"consumption":17199318.0,"timestamp":1713780289.996472,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920678400","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9267992.0,"domains":[{"name":"uncore","consumption":93219.0,"timestamp":1713780289.9375477},{"name":"core","consumption":6993732.0,"timestamp":1713780289.937444},{"name":"dram","consumption":813090.0,"timestamp":1713780289.9373355}],"timestamp":1713780289.9369261}]},{"host":{"consumption":17862228.0,"timestamp":1713780300.0952427,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920653824","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9920753.0,"domains":[{"name":"uncore","consumption":138991.0,"timestamp":1713780300.0027535},{"name":"core","consumption":7562676.0,"timestamp":1713780300.0027092},{"name":"dram","consumption":868330.0,"timestamp":1713780300.0026588}],"timestamp":1713780300.0024266}]},{"host":{"consumption":17535352.0,"timestamp":1713780310.173602,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920670208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9444071.0,"domains":[{"name":"uncore","consumption":122325.0,"timestamp":1713780310.1045885},{"name":"core","consumption":7123599.0,"timestamp":1713780310.1045775},{"name":"dram","consumption":843803.0,"timestamp":1713780310.1045659}],"timestamp":1713780310.1043274}]},{"host":{"consumption":19852638.0,"timestamp":1713780320.253043,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152919711744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11449541.0,"domains":[{"name":"uncore","consumption":161591.0,"timestamp":1713780320.1800232},{"name":"core","consumption":9014875.0,"timestamp":1713780320.17994},{"name":"dram","consumption":977822.0,"timestamp":1713780320.1798527}],"timestamp":1713780320.1796048}]},{"host":{"consumption":19595548.0,"timestamp":1713780330.3317156,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920006656","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11149755.0,"domains":[{"name":"uncore","consumption":135976.0,"timestamp":1713780330.261975},{"name":"core","consumption":8766062.0,"timestamp":1713780330.2619638},{"name":"dram","consumption":953243.0,"timestamp":1713780330.2619512}],"timestamp":1713780330.2616751}]},{"host":{"consumption":17652408.0,"timestamp":1713780340.4371243,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152919994368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9835959.0,"domains":[{"name":"uncore","consumption":108571.0,"timestamp":1713780340.3444133},{"name":"core","consumption":7522078.0,"timestamp":1713780340.3443506},{"name":"dram","consumption":838063.0,"timestamp":1713780340.3442688}],"timestamp":1713780340.343363}]},{"host":{"consumption":17882748.0,"timestamp":1713780350.5371673,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920002560","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9902772.0,"domains":[{"name":"uncore","consumption":106477.0,"timestamp":1713780350.4496903},{"name":"core","consumption":7599399.0,"timestamp":1713780350.4495337},{"name":"dram","consumption":843081.0,"timestamp":1713780350.4493275}],"timestamp":1713780350.4482377}]},{"host":{"consumption":17670250.0,"timestamp":1713780360.6051776,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920010752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9645585.0,"domains":[{"name":"uncore","consumption":79829.0,"timestamp":1713780360.5458229},{"name":"core","consumption":7390739.0,"timestamp":1713780360.54581},{"name":"dram","consumption":826090.0,"timestamp":1713780360.5457416}],"timestamp":1713780360.5455098}]},{"host":{"consumption":18866160.0,"timestamp":1713780370.6962965,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152919023616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10737069.0,"domains":[{"name":"uncore","consumption":119230.0,"timestamp":1713780370.6140137},{"name":"core","consumption":8387813.0,"timestamp":1713780370.613971},{"name":"dram","consumption":894936.0,"timestamp":1713780370.6138923}],"timestamp":1713780370.6130822}]}] From f51323014186957d78fa9da8f907a90c05111ce4 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 23 Apr 2024 10:29:26 +0200 Subject: [PATCH 115/227] chore: remove duplicate requirements and csv log --- boagent/requirements.txt | 7 ----- data_witout_header.csv | 61 ---------------------------------------- 2 files changed, 68 deletions(-) delete mode 100644 boagent/requirements.txt delete mode 100644 data_witout_header.csv diff --git a/boagent/requirements.txt b/boagent/requirements.txt deleted file mode 100644 index be6f591..0000000 --- a/boagent/requirements.txt +++ /dev/null @@ -1,7 +0,0 @@ -fastapi==0.75.2 -uvicorn==0.17.6 -boaviztapi-sdk==0.1.2 -cpuid==0.0.10 -py-cpuinfo==8.0.0 -dataclasses -pre_commit diff --git a/data_witout_header.csv b/data_witout_header.csv deleted file mode 100644 index acfde48..0000000 --- a/data_witout_header.csv +++ /dev/null @@ -1,61 +0,0 @@ -2022/10/21 00:00:00,98,34,12,24,12,46.8,1176,2352,4586.4,1,890 -2022/10/21 00:05:00,96,35,15,22,11,42.9,1056,2112,4118.4,1,890 -2022/10/21 00:10:00,94,33,18,21,14,45.5,1316,1974,4277,1,890 -2022/10/21 00:15:00,92,23,22,23,16,50.7,1472,2116,4664.4,1,890 -2022/10/21 00:20:00,90,36,29,25,12,48.1,1080,2250,4329,1,890 -2022/10/21 00:25:00,88,44,22,28,15,55.9,1320,2464,4919.2,1,890 -2022/10/21 00:30:00,89,48,34,29,21,65,1869,2581,5785,1,890 -2022/10/21 00:35:00,97,57,34,32,13,58.5,1261,3104,5674.5,1,890 -2022/10/21 00:40:00,67,68,32,35,15,65,1005,2345,4355,1,890 -2022/10/21 00:45:00,66,90,31,23,12,45.5,792,1518,3003,1,890 -2022/10/21 00:50:00,66,87,59,24,11,45.5,726,1584,3003,1,890 -2022/10/21 00:55:00,98,78,70,34,16,65,1568,3332,6370,1,890 -2022/10/21 01:00:00,96,75,99,28,19,61.1,1824,2688,5865.6,2,890 -2022/10/21 01:05:00,94,45,40,27,22,63.7,2068,2538,5987.8,2,890 -2022/10/21 01:10:00,92,55,30,24,18,54.6,1656,2208,5023.2,2,890 -2022/10/21 01:15:00,90,34,22,22,14,46.8,1260,1980,4212,2,890 -2022/10/21 01:20:00,88,35,16,21,11,41.6,968,1848,3660.8,2,890 -2022/10/21 01:25:00,89,33,12,23,12,45.5,1068,2047,4049.5,2,890 -2022/10/21 01:30:00,97,23,15,25,11,46.8,1067,2425,4539.6,2,890 -2022/10/21 01:35:00,67,36,18,28,14,54.6,938,1876,3658.2,1,890 -2022/10/21 01:40:00,66,44,22,29,16,58.5,1056,1914,3861,1,890 -2022/10/21 01:45:00,98,48,29,32,12,57.2,1176,3136,5605.6,1,890 -2022/10/21 01:50:00,96,57,22,35,15,65,1440,3360,6240,1,890 -2022/10/21 01:55:00,94,68,34,23,21,57.2,1974,2162,5376.8,1,890 -2022/10/21 02:00:00,92,90,34,24,13,48.1,1196,2208,4425.2,1,890 -2022/10/21 02:05:00,90,87,32,34,15,63.7,1350,3060,5733,1,890 -2022/10/21 02:10:00,88,78,31,28,12,52,1056,2464,4576,1,890 -2022/10/21 02:15:00,89,75,59,27,11,49.4,979,2403,4396.6,1,890 -2022/10/21 02:20:00,97,45,70,24,16,52,1552,2328,5044,0,890 -2022/10/21 02:25:00,67,55,99,22,19,53.3,1273,1474,3571.1,0,890 -2022/10/21 02:30:00,66,34,40,21,22,55.9,1452,1386,3689.4,0,890 -2022/10/21 02:35:00,66,35,30,23,18,53.3,1188,1518,3517.8,0,890 -2022/10/21 02:40:00,98,33,22,25,14,50.7,1372,2450,4968.6,0,890 -2022/10/21 02:45:00,96,23,16,28,11,50.7,1056,2688,4867.2,0,890 -2022/10/21 02:50:00,94,36,12,29,12,53.3,1128,2726,5010.2,0,890 -2022/10/21 02:55:00,92,44,15,32,11,55.9,1012,2944,5142.8,0,890 -2022/10/21 03:00:00,90,48,18,35,14,63.7,1260,3150,5733,0,890 -2022/10/21 03:05:00,88,57,22,23,16,50.7,1408,2024,4461.6,1,890 -2022/10/21 03:10:00,89,68,29,24,12,46.8,1068,2136,4165.2,1,890 -2022/10/21 03:15:00,97,90,22,34,15,63.7,1455,3298,6178.9,1,890 -2022/10/21 03:20:00,67,87,34,28,21,63.7,1407,1876,4267.9,1,890 -2022/10/21 03:25:00,66,78,34,27,13,52,858,1782,3432,1,890 -2022/10/21 03:30:00,98,75,32,24,15,50.7,1470,2352,4968.6,1,890 -2022/10/21 03:35:00,96,45,31,22,12,44.2,1152,2112,4243.2,1,890 -2022/10/21 03:40:00,94,55,59,21,11,41.6,1034,1974,3910.4,1,890 -2022/10/21 03:45:00,92,34,70,23,16,50.7,1472,2116,4664.4,1,890 -2022/10/21 03:50:00,90,35,99,25,19,57.2,1710,2250,5148,1,890 -2022/10/21 03:55:00,88,33,40,28,22,65,1936,2464,5720,1,890 -2022/10/21 04:00:00,89,23,30,29,18,61.1,1602,2581,5437.9,1,890 -2022/10/21 04:05:00,97,36,22,32,12,57.2,1164,3104,5548.4,1,890 -2022/10/21 04:10:00,67,44,16,35,11,59.8,737,2345,4006.6,1,890 -2022/10/21 04:15:00,66,48,12,23,14,48.1,924,1518,3174.6,1,890 -2022/10/21 04:20:00,66,57,15,24,16,52,1056,1584,3432,2,890 -2022/10/21 04:25:00,98,68,18,24,12,46.8,1176,2352,4586.4,2,890 -2022/10/21 04:30:00,96,90,22,22,15,48.1,1440,2112,4617.6,2,890 -2022/10/21 04:35:00,94,34,29,21,21,54.6,1974,1974,5132.4,2,890 -2022/10/21 04:40:00,92,35,22,23,13,46.8,1196,2116,4305.6,2,890 -2022/10/21 04:45:00,90,33,34,25,15,52,1350,2250,4680,0,890 -2022/10/21 04:50:00,88,23,34,28,12,52,1056,2464,4576,0,890 -2022/10/21 04:55:00,89,36,32,29,11,52,979,2581,4628,0,890 -2022/10/21 05:00:00,97,44,31,32,16,62.4,1552,3104,6052.8,0,890 From 8d9bf259b92c18b216fefea88b766640d4a4857e Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 23 Apr 2024 10:53:28 +0200 Subject: [PATCH 116/227] refactor: send lshw error messages to stderr --- boagent/hardware/lshw.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py index a339c7b..0529c23 100644 --- a/boagent/hardware/lshw.py +++ b/boagent/hardware/lshw.py @@ -1,6 +1,5 @@ from shutil import which import subprocess -import logging import json import sys import re @@ -19,14 +18,13 @@ def is_tool(name): class Lshw: def __init__(self): if not is_tool("lshw"): - print("lshw does not seem to be installed.") + sys.stderr.write("lshw does not seem to be installed.") sys.exit(1) - try: data = subprocess.getoutput("lshw -quiet -json 2> /dev/null") json_data = json.loads(data) except json.JSONDecodeError: - print("lshw does not seem do be executed as root.") + sys.stderr.write("lshw does not seem do be executed as root.") sys.exit(1) # Starting from version 02.18, `lshw -json` wraps its result in a list # rather than returning directly a dictionary @@ -126,8 +124,8 @@ def find_storage(self, obj): self.disks.append(d) if "nvme" in obj["configuration"]["driver"]: if not is_tool("nvme"): - logging.error("nvme-cli >= 1.0 does not seem to be installed") - raise Exception("nvme-cli >= 1.0 does not seem to be installed") + sys.stderr.write("nvme-cli >= 1.0 does not seem to be installed") + sys.exit(1) try: nvme = json.loads( subprocess.check_output( @@ -220,7 +218,7 @@ def check_disk_vendor(self, model_string: str) -> str: check_string_for_numbers = bool(re.search("\\d", model_string)) if check_string_for_numbers: raise Exception( - "Lshw did not output an acceptable manufacturer name for this device." + "Lshw did not output a parsable manufacturer name for this device." ) else: return model_string @@ -257,10 +255,9 @@ def get_rotational_int(self, dev_path: str) -> int: rotational_fp = os.path.realpath( f"{SYS_BLOCK_PATH}{device}/queue/rotational", strict=True ) - print(rotational_fp) except OSError: - print("Rotational file was not found") + sys.stderr.write("Rotational file was not found") return 2 else: with open(rotational_fp, "r") as file: From 388277b7a7f2a2fdce76f7ce070fd5a0b62b9b41 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 23 Apr 2024 15:13:34 +0200 Subject: [PATCH 117/227] feat: parsing power_data for json query --- boagent/api/api.py | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 951fd60..cea2b8b 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -7,7 +7,6 @@ from pytz import UTC, utc from datetime import datetime, timedelta -from subprocess import run from typing import Dict, Any, Tuple, List, Optional, Union from croniter import croniter from fastapi import FastAPI, Response, Body @@ -18,7 +17,6 @@ from boagent.hardware.lshw import Lshw from .utils import ( iso8601_or_timestamp_as_timestamp, - format_scaphandre_json, format_prometheus_output, get_boavizta_api_client, sort_ram, @@ -470,11 +468,11 @@ def get_metrics( if measure_power: power_data = get_power_data(start_time, end_time) avg_power = power_data["avg_power"] - use_time_ratio = power_data["use_time_ratio"] + # use_time_ratio = power_data["use_time_ratio"] if "warning" in power_data: - res["emissions_calculation_data"]["energy_consumption_warning"] = ( - power_data["warning"] - ) + res["emissions_calculation_data"][ + "energy_consumption_warning" + ] = power_data["warning"] boaviztapi_data = query_machine_impact_data( model={}, @@ -608,18 +606,21 @@ def format_usage_request( def get_power_data(start_time, end_time): # Get all items of the json list where start_time <= host.timestamp <= end_time power_data = {} - formatted_scaphandre_json = format_scaphandre_json(POWER_DATA_FILE_PATH) - data = json.loads(formatted_scaphandre_json) - res = [e for e in data if start_time <= float(e["host"]["timestamp"]) <= end_time] - power_data["raw_data"] = res - power_data["avg_power"] = compute_average_consumption(res) - if end_time - start_time <= 3600: - power_data["warning"] = ( - "The time window is lower than one hour, but the energy consumption estimate is in " - "Watt.Hour. So this is an extrapolation of the power usage profile on one hour. Be " - "careful with this data. " - ) - return power_data + with open(POWER_DATA_FILE_PATH, "r") as power_data_file: + formatted_data = f"{power_data_file.read()}]" + data = json.loads(formatted_data) + queried_power_data = [ + e for e in data if start_time <= float(e["host"]["timestamp"]) <= end_time + ] + power_data["raw_data"] = queried_power_data + power_data["avg_power"] = compute_average_consumption(queried_power_data) + if end_time - start_time <= 3600: + power_data["warning"] = ( + "The time window is lower than one hour, but the energy consumption estimate is in " + "Watt.Hour. So this is an extrapolation of the power usage profile on one hour. Be " + "careful with this data. " + ) + return power_data def compute_average_consumption(power_data) -> float: From 9f08e45343591eeafe954a84b304ae2f8b0080ae Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 24 Apr 2024 14:34:32 +0200 Subject: [PATCH 118/227] refactor: typing for location and time_workload --- boagent/api/api.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index cea2b8b..107fdb5 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -7,6 +7,7 @@ from pytz import UTC, utc from datetime import datetime, timedelta +from pydantic import BaseModel from typing import Dict, Any, Tuple, List, Optional, Union from croniter import croniter from fastapi import FastAPI, Response, Body @@ -182,8 +183,7 @@ async def metrics( start_time: str = "0.0", end_time: str = "0.0", verbose: bool = False, - output: str = "json", - location: str = None, + location: str = "", measure_power: bool = True, lifetime: float = DEFAULT_LIFETIME, fetch_hardware: bool = False, @@ -209,7 +209,7 @@ async def query( start_time: str = "0.0", end_time: str = "0.0", verbose: bool = False, - location: Union[str, None] = None, + location: str = "EEE", measure_power: bool = True, lifetime: float = DEFAULT_LIFETIME, fetch_hardware: bool = False, @@ -234,6 +234,11 @@ async def query( ) +class WorkloadTime(BaseModel): + time_percentage: float = 0.0 + load_percentage: float = 0.0 + + time_workload_example = { "time_workload": [ {"time_percentage": 50, "load_percentage": 0}, @@ -248,11 +253,11 @@ async def query_with_time_workload( start_time: str = "0.0", end_time: str = "0.0", verbose: bool = False, - location: Union[str, None] = None, + location: str = "EEE", measure_power: bool = True, lifetime: float = DEFAULT_LIFETIME, fetch_hardware: bool = False, - time_workload: Union[float, list[dict[str, float]], None] = Body( + time_workload: Union[dict[str, float], dict[str, List[WorkloadTime]]] = Body( None, example=time_workload_example ), ): @@ -439,11 +444,11 @@ def get_metrics( start_time: float, end_time: float, verbose: bool, - location: Union[str, None], + location: str, measure_power: bool, lifetime: float, fetch_hardware: bool, - time_workload: Union[float, list[dict[str, float]], None] = None, + time_workload: Union[dict[str, float], dict[str, List[WorkloadTime]], None] = None, ): now: float = time.time() @@ -463,12 +468,10 @@ def get_metrics( res = {"emissions_calculation_data": {}} avg_power = None - use_time_ratio = None if measure_power: power_data = get_power_data(start_time, end_time) avg_power = power_data["avg_power"] - # use_time_ratio = power_data["use_time_ratio"] if "warning" in power_data: res["emissions_calculation_data"][ "energy_consumption_warning" @@ -478,7 +481,7 @@ def get_metrics( model={}, configuration=hardware_data, usage=format_usage_request( - start_time, end_time, avg_power, use_time_ratio, location, time_workload + start_time, end_time, avg_power, location, time_workload ), ) @@ -586,9 +589,8 @@ def format_usage_request( start_time: float, end_time: float, avg_power: Union[float, None] = None, - use_time_ratio: Union[float, None] = None, - location: Union[str, None] = None, - time_workload: Union[float, list[dict[str, int]], None] = None, + location: str = "EEE", + time_workload: Union[dict[str, float], dict[str, List[WorkloadTime]], None] = None, ): hours_use_time = (end_time - start_time) / 3600.0 kwargs_usage = {"hours_use_time": hours_use_time} @@ -596,8 +598,6 @@ def format_usage_request( kwargs_usage["usage_location"] = location if avg_power: kwargs_usage["avg_power"] = avg_power - if use_time_ratio: - kwargs_usage["use_time_ratio"] = use_time_ratio if time_workload: kwargs_usage["time_workload"] = time_workload return kwargs_usage From c5f5b0402c65340e1d484f5258c2444f2202ad14 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 24 Apr 2024 14:47:03 +0200 Subject: [PATCH 119/227] test: typing for time_workload --- tests/api/test_api_unit.py | 41 ++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 1dfc7ca..dc5e6e2 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -15,7 +15,7 @@ get_metrics, ) -from boagent.api.utils import format_scaphandre_json +# from boagent.api.utils import format_scaphandre_json current_dir = os.path.dirname(__file__) @@ -89,29 +89,26 @@ def test_format_usage_request_with_start_and_end_times(self): assert type(formatted_request) is dict assert "hours_use_time" in formatted_request - def test_format_usage_request_with_host_avg_consumption_use_time_ratio_and_location( + def test_format_usage_request_with_host_avg_consumption_and_location( self, ): location = "FRA" avg_power = 120 - use_time_ratio = 1 formatted_request = format_usage_request( start_time=self.start_time, end_time=self.end_time, location=location, avg_power=avg_power, - use_time_ratio=use_time_ratio, ) assert type(formatted_request) is dict assert "avg_power" in formatted_request - assert "use_time_ratio" in formatted_request assert "usage_location" in formatted_request def test_format_usage_request_with_time_workload_as_percentage(self): - time_workload = 50 + time_workload = {"time_workload": 50.0} formatted_request = format_usage_request( start_time=self.start_time, @@ -126,7 +123,8 @@ def test_format_usage_request_with_time_workload_as_percentage(self): class ComputeAvgConsumptionTest(TestCase): def test_compute_average_consumption(self): - power_data = format_scaphandre_json(f"{mock_power_data}") + with open(mock_power_data, "r") as power_data_file: + power_data = f"[{power_data_file.read()}]" data = json.loads(power_data) avg_host = compute_average_consumption(data) @@ -182,12 +180,14 @@ def test_get_power_data_with_short_time_interval( @patch("boagent.api.api.query_machine_impact_data") class GetMetricsNotVerboseNoScaphandreTest(TestCase): def setUp(self) -> None: - self.time_workload_as_percentage = 70 - self.time_workload_as_list_of_dicts = [ - {"time_percentage": 50, "load_percentage": 0}, - {"time_percentage": 25, "load_percentage": 60}, - {"time_percentage": 25, "load_percentage": 100}, - ] + self.time_workload_as_percentage = {"time_workload": 70.0} + self.time_workload_as_list_of_dicts = { + "time_workload": [ + {"time_percentage": 50, "load_percentage": 0}, + {"time_percentage": 25, "load_percentage": 60}, + {"time_percentage": 25, "load_percentage": 100}, + ] + } self.start_time = 1710837858 self.end_time = 1710841458 self.verbose = False @@ -255,12 +255,15 @@ def test_get_metrics_with_time_workload_as_list_of_dicts( @patch("boagent.api.api.query_machine_impact_data") class GetMetricsVerboseNoScaphandreTest(TestCase): def setUp(self) -> None: - self.time_workload_as_percentage = 70 - self.time_workload_as_list_of_dicts = [ - {"time_percentage": 50, "load_percentage": 0}, - {"time_percentage": 25, "load_percentage": 60}, - {"time_percentage": 25, "load_percentage": 100}, - ] + self.time_workload_as_percentage = {"time_workload": 70.0} + self.time_workload_as_list_of_dicts = { + "time_workload": [ + {"time_percentage": 50, "load_percentage": 0}, + {"time_percentage": 25, "load_percentage": 60}, + {"time_percentage": 25, "load_percentage": 100}, + ] + } + self.start_time = 1710837858 self.end_time = 1710841458 self.verbose = True From 68e4c78b4c6bf8756c0a12eafb8012711db78155 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 24 Apr 2024 16:11:03 +0200 Subject: [PATCH 120/227] feat: time_workload list as pydantic model, example in models --- boagent/api/api.py | 17 ++--------------- boagent/api/models.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 boagent/api/models.py diff --git a/boagent/api/api.py b/boagent/api/api.py index 107fdb5..27c40c0 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -7,7 +7,6 @@ from pytz import UTC, utc from datetime import datetime, timedelta -from pydantic import BaseModel from typing import Dict, Any, Tuple, List, Optional, Union from croniter import croniter from fastapi import FastAPI, Response, Body @@ -34,6 +33,8 @@ new_highlight_spikes, ) +from .models import WorkloadTime, time_workload_example + settings = Settings() HARDWARE_FILE_PATH = settings.hardware_file_path @@ -234,20 +235,6 @@ async def query( ) -class WorkloadTime(BaseModel): - time_percentage: float = 0.0 - load_percentage: float = 0.0 - - -time_workload_example = { - "time_workload": [ - {"time_percentage": 50, "load_percentage": 0}, - {"time_percentage": 25, "load_percentage": 60}, - {"time_percentage": 25, "load_percentage": 100}, - ] -} - - @app.post("/query", tags=["query"]) async def query_with_time_workload( start_time: str = "0.0", diff --git a/boagent/api/models.py b/boagent/api/models.py new file mode 100644 index 0000000..8d5d4d5 --- /dev/null +++ b/boagent/api/models.py @@ -0,0 +1,15 @@ +from pydantic import BaseModel + + +class WorkloadTime(BaseModel): + time_percentage: float = 0.0 + load_percentage: float = 0.0 + + +time_workload_example = { + "time_workload": [ + {"time_percentage": 50, "load_percentage": 0}, + {"time_percentage": 25, "load_percentage": 60}, + {"time_percentage": 25, "load_percentage": 100}, + ] +} From 4d2eebc33cd40f66be88cdd21956f489f49d893f Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 24 Apr 2024 17:48:17 +0200 Subject: [PATCH 121/227] feat: add warning in response when location is default or unset --- boagent/api/api.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/boagent/api/api.py b/boagent/api/api.py index 27c40c0..a90e292 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -456,6 +456,13 @@ def get_metrics( avg_power = None + if len(location) < 3 or location == "EEE": + res["location_warning"] = { + "warning_message": "Location is either set as default, or has not been set, and is therefore set to the default BoaviztAPI location. " + "Be aware that the presented results can be drastically different due to location. " + "It is recommended that you set the asset location with the corresponding country code, see: https://doc.api.boavizta.org/Explanations/usage/countries/" + } + if measure_power: power_data = get_power_data(start_time, end_time) avg_power = power_data["avg_power"] From b41596a61acefdee57afef7749d287d2fe6d7cd3 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 24 Apr 2024 17:49:21 +0200 Subject: [PATCH 122/227] test: warning message present when location is unset or default --- tests/api/test_api_unit.py | 45 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index dc5e6e2..276151e 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -250,6 +250,51 @@ def test_get_metrics_with_time_workload_as_list_of_dicts( assert "embedded_abiotic_resources_depletion" in metrics assert "embedded_primary_energy" in metrics + def test_get_metrics_with_default_location( + self, mocked_read_hardware_data, mocked_query_machine_impact_data + ): + + metrics = get_metrics( + self.start_time, + self.end_time, + self.verbose, + "EEE", + self.measure_power, + self.lifetime, + self.fetch_hardware, + self.time_workload_as_list_of_dicts, + ) + + mocked_read_hardware_data.return_value = self.hardware_data + mocked_query_machine_impact_data.return_value = self.boaviztapi_data + + assert type(metrics) is dict + assert "location_warning" in metrics + + def test_get_metrics_with_no_set_location( + self, mocked_read_hardware_data, mocked_query_machine_impact_data + ): + + empty_location = "" + + metrics = get_metrics( + self.start_time, + self.end_time, + self.verbose, + empty_location, + self.measure_power, + self.lifetime, + self.fetch_hardware, + self.time_workload_as_list_of_dicts, + ) + + mocked_read_hardware_data.return_value = self.hardware_data + mocked_query_machine_impact_data.return_value = self.boaviztapi_data + + print(len(empty_location)) + assert type(metrics) is dict + assert "location_warning" in metrics + @patch("boagent.api.api.read_hardware_data") @patch("boagent.api.api.query_machine_impact_data") From 122d1d256c89064aa91a913ea0ca9d796b88e26e Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 25 Apr 2024 18:38:11 +0200 Subject: [PATCH 123/227] feat: format prometheus output for verbose, total impacts and impacts per component --- boagent/api/utils.py | 60 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 11 deletions(-) diff --git a/boagent/api/utils.py b/boagent/api/utils.py index ff8d246..9bfe965 100644 --- a/boagent/api/utils.py +++ b/boagent/api/utils.py @@ -96,22 +96,60 @@ def format_prometheus_output(res): v["type"], v["value"], ) - # response += format_prometheus_metric("energy_consumption", "Energy consumed in the evaluation time window (evaluated at least for an hour, be careful if the time windows is lower than 1 hour), in Wh", "counter", res["emissions_calculation_data"]["energy_consumption"]) - else: - for x, y in v.items(): - if "value" in y and "type" in y: - if "description" not in y: - y["description"] = "TODO: define me" + if "boaviztapi_data" in v: + for impact_name, impact_items in v["boaviztapi_data"]["impacts"].items(): + if "unit" in impact_items: + if "description" not in impact_items: + impact_items["description"] = "TODO: define me" response += format_prometheus_metric( - "{}_{}".format(k, x), + "{}".format(impact_name), "{}. {}".format( - y["description"], - "In {} ({}).".format(y["long_unit"], y["unit"]), + impact_items["description"], + "In {}".format(impact_items["unit"]), + ), + "{} {}".format("embedded", "use"), + "{} {}".format( + f"embedded_impact: {impact_items['embedded']}", + f"use_impact: {impact_items['use']}", ), - y["type"], - y["value"], ) + for component_name, component_impacts in v["boaviztapi_data"]["verbose"].items(): + print(f"COMPONENT: {component_name}") + if "impacts" in component_impacts: + for impact, items in component_impacts["impacts"].items(): + if "description" not in items: + items["description"] = "TODO: define me" + response += format_prometheus_metric( + "{} {}".format(component_name, impact), + "{}. {}".format( + items["description"], + "In {}".format(items['unit']), + ), + "{} {}".format("embedded", "use"), + "{} {}".format( + f"embedded_impact: {items['embedded']}", + f"use_impact: {items['use']}", + ), + ) + else: + for x, y in v.items(): + if type(y) is float: + pass + else: + if "value" in y and "type" in y: + if "description" not in y: + y["description"] = "TODO: define me" + response += format_prometheus_metric( + "{}_{}".format(k, x), + "{}. {}".format( + y["description"], + "In {} ({}).".format(y["long_unit"], y["unit"]), + ), + y["type"], + y["value"], + ) + return response From 5109ab0fc3733a24ebaf3520ee68d55dae2726e8 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 25 Apr 2024 18:40:13 +0200 Subject: [PATCH 124/227] test: format prometheus output, with mocks --- tests/api/test_api_unit.py | 38 ++++++++++++++++++++++++ tests/mocks/get_metrics_not_verbose.json | 1 + tests/mocks/get_metrics_verbose.json | 1 + 3 files changed, 40 insertions(+) create mode 100644 tests/mocks/get_metrics_not_verbose.json create mode 100644 tests/mocks/get_metrics_verbose.json diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 276151e..28d8159 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -14,6 +14,7 @@ get_power_data, get_metrics, ) +from boagent.api.utils import format_prometheus_output # from boagent.api.utils import format_scaphandre_json @@ -30,6 +31,12 @@ mock_formatted_scaphandre = os.path.join( f"{current_dir}", "../mocks/formatted_power_data_one_hour.json" ) +mock_get_metrics_not_verbose = os.path.join( + f"{current_dir}", "../mocks/get_metrics_not_verbose.json" +) +mock_get_metrics_verbose = os.path.join( + f"{current_dir}", "../mocks/get_metrics_verbose.json" +) hardware_cli = os.path.join(f"{current_dir}", "../../boagent/hardware/hardware_cli.py") hardware_data = os.path.join(f"{current_dir}", "../../boagent/api/hardware_data.json") @@ -131,6 +138,37 @@ def test_compute_average_consumption(self): assert type(avg_host) is float +class FormatPrometheusOutput(TestCase): + + def setUp(self): + self.get_metrics_response_not_verbose_path = mock_get_metrics_not_verbose + self.get_metrics_response_verbose_path = mock_get_metrics_verbose + + def test_format_prometheus_output_with_get_metrics_not_verbose(self): + + with open(mock_get_metrics_not_verbose, "r") as json_response: + response_to_format = json.load(json_response) + + prometheus_output = format_prometheus_output(response_to_format) + + assert type(prometheus_output) is str + assert len(prometheus_output) > 1 + assert "TYPE" in prometheus_output + assert "HELP" in prometheus_output + + def test_format_prometheus_output_with_get_metrics_verbose(self): + + with open(mock_get_metrics_verbose, "r") as json_response: + response_to_format = json.load(json_response) + + prometheus_output = format_prometheus_output(response_to_format) + + assert type(prometheus_output) is str + assert len(prometheus_output) > 1 + assert "TYPE" in prometheus_output + assert "HELP" in prometheus_output + + class GetPowerDataTest(TestCase): def setUp(self) -> None: # One-hour interval diff --git a/tests/mocks/get_metrics_not_verbose.json b/tests/mocks/get_metrics_not_verbose.json new file mode 100644 index 0000000..6119b3e --- /dev/null +++ b/tests/mocks/get_metrics_not_verbose.json @@ -0,0 +1 @@ +{"emissions_calculation_data": {"energy_consumption_warning": "The time window is lower than one hour, but the energy consumption estimate is in Watt.Hour. So this is an extrapolation of the power usage profile on one hour. Be careful with this data. "}, "location_warning": {"warning_message": "Location is either set as default, or has not been set, and is therefore set to the default BoaviztAPI location. Be aware that the presented results can be drastically different due to location. It is recommended that you set the asset location with the corresponding country code, see: https://doc.api.boavizta.org/Explanations/usage/countries/"}, "total_operational_emissions": {"value": {"value": 40.72, "min": 40.72, "max": 40.72}, "description": "GHG emissions related to usage, from start_time to end_time.", "type": "gauge", "unit": "kg CO2eq", "long_unit": "kilograms CO2 equivalent"}, "total_operational_abiotic_resources_depletion": {"value": {"value": 6.883e-06, "min": 6.883e-06, "max": 6.883e-06}, "description": "Abiotic Resources Depletion (minerals & metals, ADPe) due to the usage phase.", "type": "gauge", "unit": "kgSbeq", "long_unit": "kilograms Antimony equivalent"}, "total_operational_primary_energy_consumed": {"value": {"value": 1379.0, "min": 1379.0, "max": 1379.0}, "description": "Primary Energy consumed due to the usage phase.", "type": "gauge", "unit": "MJ", "long_unit": "Mega Joules"}, "start_time": {"value": 1714047030.8907304, "description": "Start time for the evaluation, in timestamp format (seconds since 1970)", "type": "counter", "unit": "s", "long_unit": "seconds"}, "end_time": {"value": 1714050630.8907304, "description": "End time for the evaluation, in timestamp format (seconds since 1970)", "type": "counter", "unit": "s", "long_unit": "seconds"}, "average_power_measured": {"value": 3.0582353333333336, "description": "Average power measured from start_time to end_time", "type": "gauge", "unit": "W", "long_unit": "Watts"}, "embedded_emissions": {"value": 900.0, "description": "Embedded carbon emissions (manufacturing phase)", "type": "gauge", "unit": "kg CO2eq", "long_unit": "kilograms CO2 equivalent"}, "embedded_abiotic_resources_depletion": {"value": 0.14, "description": "Embedded abiotic ressources consumed (manufacturing phase)", "type": "gauge", "unit": "kg Sbeq", "long_unit": "kilograms ADP equivalent"}, "embedded_primary_energy": {"value": 13000.0, "description": "Embedded primary energy consumed (manufacturing phase)", "type": "gauge", "unit": "MJ", "long_unit": "Mega Joules"}} \ No newline at end of file diff --git a/tests/mocks/get_metrics_verbose.json b/tests/mocks/get_metrics_verbose.json new file mode 100644 index 0000000..2f9ba04 --- /dev/null +++ b/tests/mocks/get_metrics_verbose.json @@ -0,0 +1 @@ +{"emissions_calculation_data": {"energy_consumption_warning": "The time window is lower than one hour, but the energy consumption estimate is in Watt.Hour. So this is an extrapolation of the power usage profile on one hour. Be careful with this data. "}, "location_warning": {"warning_message": "Location is either set as default, or has not been set, and is therefore set to the default BoaviztAPI location. Be aware that the presented results can be drastically different due to location. It is recommended that you set the asset location with the corresponding country code, see: https://doc.api.boavizta.org/Explanations/usage/countries/"}, "total_operational_emissions": {"value": {"value": 38.77, "min": 38.77, "max": 38.77}, "description": "GHG emissions related to usage, from start_time to end_time.", "type": "gauge", "unit": "kg CO2eq", "long_unit": "kilograms CO2 equivalent"}, "total_operational_abiotic_resources_depletion": {"value": {"value": 6.553e-06, "min": 6.553e-06, "max": 6.553e-06}, "description": "Abiotic Resources Depletion (minerals & metals, ADPe) due to the usage phase.", "type": "gauge", "unit": "kgSbeq", "long_unit": "kilograms Antimony equivalent"}, "total_operational_primary_energy_consumed": {"value": {"value": 1313.0, "min": 1313.0, "max": 1313.0}, "description": "Primary Energy consumed due to the usage phase.", "type": "gauge", "unit": "MJ", "long_unit": "Mega Joules"}, "start_time": {"value": 1714047295.6773918, "description": "Start time for the evaluation, in timestamp format (seconds since 1970)", "type": "counter", "unit": "s", "long_unit": "seconds"}, "end_time": {"value": 1714050895.6773918, "description": "End time for the evaluation, in timestamp format (seconds since 1970)", "type": "counter", "unit": "s", "long_unit": "seconds"}, "average_power_measured": {"value": 2.911697275862069, "description": "Average power measured from start_time to end_time", "type": "gauge", "unit": "W", "long_unit": "Watts"}, "embedded_emissions": {"value": 900.0, "description": "Embedded carbon emissions (manufacturing phase)", "type": "gauge", "unit": "kg CO2eq", "long_unit": "kilograms CO2 equivalent"}, "embedded_abiotic_resources_depletion": {"value": 0.14, "description": "Embedded abiotic ressources consumed (manufacturing phase)", "type": "gauge", "unit": "kg Sbeq", "long_unit": "kilograms ADP equivalent"}, "embedded_primary_energy": {"value": 13000.0, "description": "Embedded primary energy consumed (manufacturing phase)", "type": "gauge", "unit": "MJ", "long_unit": "Mega Joules"}, "raw_data": {"hardware_data": {"disks": [{"units": 1, "logicalname": "/dev/nvme0n1", "manufacturer": "samsung", "type": "ssd", "capacity": 184}], "cpus": [{"units": 1, "name": "AMD Ryzen 5 5600H with Radeon Graphics", "vendor": "Advanced Micro Devices [AMD]", "core_units": "6"}], "rams": [{"units": 1, "manufacturer": "Samsung", "capacity": 8}]}, "resources_data": "not implemented yet", "boaviztapi_data": {"impacts": {"gwp": {"unit": "kgCO2eq", "description": "Total climate change", "embedded": {"value": 900.0, "min": 461.8, "max": 2089.0, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 38.77, "min": 38.77, "max": 38.77}}, "adp": {"unit": "kgSbeq", "description": "Use of minerals and fossil ressources", "embedded": {"value": 0.14, "min": 0.09758, "max": 0.2132, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 6.553e-06, "min": 6.553e-06, "max": 6.553e-06}}, "pe": {"unit": "MJ", "description": "Consumption of primary energy", "embedded": {"value": 13000.0, "min": 6138.0, "max": 27090.0, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 1313.0, "min": 1313.0, "max": 1313.0}}}, "verbose": {"duration": {"value": 35040.0, "unit": "hours"}, "ASSEMBLY-1": {"impacts": {"gwp": {"unit": "kgCO2eq", "description": "Total climate change", "embedded": {"value": 6.68, "min": 6.68, "max": 6.68, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "adp": {"unit": "kgSbeq", "description": "Use of minerals and fossil ressources", "embedded": {"value": 1.41e-06, "min": 1.41e-06, "max": 1.41e-06, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "pe": {"unit": "MJ", "description": "Consumption of primary energy", "embedded": {"value": 68.6, "min": 68.6, "max": 68.6, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}}, "units": {"value": 1, "status": "ARCHETYPE", "min": 1, "max": 1}, "duration": {"value": 35040.0, "unit": "hours"}}, "CPU-1": {"impacts": {"gwp": {"unit": "kgCO2eq", "description": "Total climate change", "embedded": {"value": 40.0, "min": 21.84, "max": 163.6, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 10000.0, "min": 587.5, "max": 28900.0}}, "adp": {"unit": "kgSbeq", "description": "Use of minerals and fossil ressources", "embedded": {"value": 0.04081, "min": 0.0408, "max": 0.04084, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 0.0016, "min": 0.0003382, "max": 0.006783}}, "pe": {"unit": "MJ", "description": "Consumption of primary energy", "embedded": {"value": 600.0, "min": 359.9, "max": 2267.0, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 300000.0, "min": 332.0, "max": 11960000.0, "warnings": ["Uncertainty from technical characteristics is very important. Results should be interpreted with caution (see min and max values)"]}}}, "units": {"value": 2.0, "status": "ARCHETYPE", "min": 2.0, "max": 2.0}, "die_size": {"value": 521.0, "status": "COMPLETED", "unit": "mm2", "source": "Average value for all families", "min": 41.2, "max": 3640.0}, "duration": {"value": 35040.0, "unit": "hours"}, "avg_power": {"value": 364.46, "status": "COMPLETED", "unit": "W", "min": 364.46, "max": 364.46}, "time_workload": {"value": 50.0, "status": "ARCHETYPE", "unit": "%", "min": 0.0, "max": 100.0}, "usage_location": {"value": "EEE", "status": "DEFAULT", "unit": "CodSP3 - NCS Country Codes - NATO"}, "use_time_ratio": {"value": 1.0, "status": "ARCHETYPE", "unit": "/1", "min": 1.0, "max": 1.0}, "hours_life_time": {"value": 35040.0, "status": "COMPLETED", "unit": "hours", "source": "from device", "min": 35040.0, "max": 35040.0}, "params": {"value": {"a": 171.2, "b": 0.0354, "c": 36.89, "d": -10.13}, "status": "ARCHETYPE"}, "gwp_factor": {"value": 0.38, "status": "DEFAULT", "unit": "kg CO2eq/kWh", "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", "min": 0.023, "max": 1.13161}, "adp_factor": {"value": 6.42317e-08, "status": "DEFAULT", "unit": "kg Sbeq/kWh", "source": "ADEME Base IMPACTS \u00ae", "min": 1.324e-08, "max": 2.65575e-07}, "pe_factor": {"value": 12.873, "status": "DEFAULT", "unit": "MJ/kWh", "source": "ADPf / (1-%renewable_energy)", "min": 0.013, "max": 468.15}}, "RAM-1": {"impacts": {"gwp": {"unit": "kgCO2eq", "description": "Total climate change", "embedded": {"value": 490.0, "min": 209.2, "max": 1179.0, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 8000.0, "min": 263.7, "max": 36040.0}}, "adp": {"unit": "kgSbeq", "description": "Use of minerals and fossil ressources", "embedded": {"value": 0.026, "min": 0.01523, "max": 0.04916, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 0.0013, "min": 0.0001518, "max": 0.008457}}, "pe": {"unit": "MJ", "description": "Consumption of primary energy", "embedded": {"value": 6000.0, "min": 2651.0, "max": 14720.0, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 300000.0, "min": 149.0, "max": 14910000.0, "warnings": ["Uncertainty from technical characteristics is very important. Results should be interpreted with caution (see min and max values)"]}}}, "units": {"value": 8.0, "status": "ARCHETYPE", "min": 6.0, "max": 10.0}, "capacity": {"value": 32.0, "status": "ARCHETYPE", "unit": "GB", "min": 32.0, "max": 32.0}, "density": {"value": 1.2443636363636363, "status": "COMPLETED", "unit": "GB/cm2", "source": "Average of 11 rows", "min": 0.625, "max": 2.375}, "duration": {"value": 35040.0, "unit": "hours"}, "avg_power": {"value": 72.704, "status": "COMPLETED", "unit": "W", "min": 54.52799999999999, "max": 90.88}, "time_workload": {"value": 50.0, "status": "ARCHETYPE", "unit": "%", "min": 0.0, "max": 100.0}, "usage_location": {"value": "EEE", "status": "DEFAULT", "unit": "CodSP3 - NCS Country Codes - NATO"}, "use_time_ratio": {"value": 1.0, "status": "ARCHETYPE", "unit": "/1", "min": 1.0, "max": 1.0}, "hours_life_time": {"value": 35040.0, "status": "COMPLETED", "unit": "hours", "source": "from device", "min": 35040.0, "max": 35040.0}, "params": {"value": {"a": 9.088}, "status": "COMPLETED", "source": "(ram_electrical_factor_per_go : 0.284) * (ram_capacity: 32.0) "}, "gwp_factor": {"value": 0.38, "status": "DEFAULT", "unit": "kg CO2eq/kWh", "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", "min": 0.023, "max": 1.13161}, "adp_factor": {"value": 6.42317e-08, "status": "DEFAULT", "unit": "kg Sbeq/kWh", "source": "ADEME Base IMPACTS \u00ae", "min": 1.324e-08, "max": 2.65575e-07}, "pe_factor": {"value": 12.873, "status": "DEFAULT", "unit": "MJ/kWh", "source": "ADPf / (1-%renewable_energy)", "min": 0.013, "max": 468.15}}, "SSD-1": {"impacts": {"gwp": {"unit": "kgCO2eq", "description": "Total climate change", "embedded": {"value": 50.0, "min": 23.53, "max": 281.0, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "adp": {"unit": "kgSbeq", "description": "Use of minerals and fossil ressources", "embedded": {"value": 0.0017, "min": 0.001055, "max": 0.008809, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "pe": {"unit": "MJ", "description": "Consumption of primary energy", "embedded": {"value": 600.0, "min": 290.2, "max": 3483.0, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}}, "units": {"value": 1.0, "status": "ARCHETYPE", "min": 1.0, "max": 2.0}, "capacity": {"value": 1000.0, "status": "ARCHETYPE", "unit": "GB", "min": 1000.0, "max": 1000.0}, "density": {"value": 54.8842105263158, "status": "COMPLETED", "unit": "GB/cm2", "source": "Average of 19 rows", "min": 16.4, "max": 128.0}, "duration": {"value": 35040.0, "unit": "hours"}}, "POWER_SUPPLY-1": {"impacts": {"gwp": {"unit": "kgCO2eq", "description": "Total climate change", "embedded": {"value": 150.0, "min": 48.6, "max": 243.0, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "adp": {"unit": "kgSbeq", "description": "Use of minerals and fossil ressources", "embedded": {"value": 0.05, "min": 0.0166, "max": 0.083, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "pe": {"unit": "MJ", "description": "Consumption of primary energy", "embedded": {"value": 2100.0, "min": 704.0, "max": 3520.0, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}}, "units": {"value": 2.0, "status": "ARCHETYPE", "min": 2.0, "max": 2.0}, "unit_weight": {"value": 2.99, "status": "ARCHETYPE", "unit": "kg", "min": 1.0, "max": 5.0}, "duration": {"value": 35040.0, "unit": "hours"}}, "CASE-1": {"impacts": {"gwp": {"unit": "kgCO2eq", "description": "Total climate change", "embedded": {"value": 150.0, "min": 85.9, "max": 150.0, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "adp": {"unit": "kgSbeq", "description": "Use of minerals and fossil ressources", "embedded": {"value": 0.0202, "min": 0.0202, "max": 0.02767, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "pe": {"unit": "MJ", "description": "Consumption of primary energy", "embedded": {"value": 2200.0, "min": 1229.0, "max": 2200.0, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}}, "units": {"value": 1, "status": "ARCHETYPE", "min": 1, "max": 1}, "case_type": {"value": "rack", "status": "ARCHETYPE"}, "duration": {"value": 35040.0, "unit": "hours"}}, "MOTHERBOARD-1": {"impacts": {"gwp": {"unit": "kgCO2eq", "description": "Total climate change", "embedded": {"value": 66.1, "min": 66.1, "max": 66.1, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "adp": {"unit": "kgSbeq", "description": "Use of minerals and fossil ressources", "embedded": {"value": 0.00369, "min": 0.00369, "max": 0.00369, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "pe": {"unit": "MJ", "description": "Consumption of primary energy", "embedded": {"value": 836.0, "min": 836.0, "max": 836.0, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}}, "units": {"value": 1, "status": "ARCHETYPE", "min": 1, "max": 1}, "duration": {"value": 35040.0, "unit": "hours"}}, "avg_power": {"value": 2.911697275862069, "status": "INPUT", "unit": "W"}, "usage_location": {"value": "EEE", "status": "INPUT", "unit": "CodSP3 - NCS Country Codes - NATO"}, "use_time_ratio": {"value": 1.0, "status": "ARCHETYPE", "unit": "/1", "min": 1.0, "max": 1.0}, "hours_life_time": {"value": 35040.0, "status": "COMPLETED", "unit": "hours", "source": "from device", "min": 35040.0, "max": 35040.0}, "gwp_factor": {"value": 0.38, "status": "COMPLETED", "unit": "kg CO2eq/kWh", "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", "min": 0.38, "max": 0.38}, "adp_factor": {"value": 6.42317e-08, "status": "COMPLETED", "unit": "kg Sbeq/kWh", "source": "ADEME Base IMPACTS \u00ae", "min": 6.42317e-08, "max": 6.42317e-08}, "pe_factor": {"value": 12.873, "status": "COMPLETED", "unit": "MJ/kWh", "source": "ADPf / (1-%renewable_energy)", "min": 12.873, "max": 12.873}, "units": {"value": 1, "status": "ARCHETYPE", "min": 1, "max": 1}}}, "start_time": 1714047295.6773918, "end_time": 1714050895.6773918, "power_data": {"raw_data": [{"host": {"consumption": 0.0, "timestamp": 1714050609.5303588, "components": {"disks": []}}, "consumers": [], "sockets": []}, {"host": {"consumption": 4837934.0, "timestamp": 1714050619.5760736, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3258818560", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 4829128.0, "domains": [{"name": "core", "consumption": 861910.0, "timestamp": 1714050619.534158}], "timestamp": 1714050619.5333738}]}, {"host": {"consumption": 4336772.0, "timestamp": 1714050629.6196637, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3257823232", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 4340778.0, "domains": [{"name": "core", "consumption": 340552.0, "timestamp": 1714050629.583029}], "timestamp": 1714050629.5823667}]}, {"host": {"consumption": 3959597.0, "timestamp": 1714050639.6662745, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3257794560", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 3963287.0, "domains": [{"name": "core", "consumption": 233109.0, "timestamp": 1714050639.626042}], "timestamp": 1714050639.6253095}]}, {"host": {"consumption": 2875749.0, "timestamp": 1714050649.7136774, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3257761792", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2880442.0, "domains": [{"name": "core", "consumption": 150432.0, "timestamp": 1714050649.673646}], "timestamp": 1714050649.6729755}]}, {"host": {"consumption": 2344716.0, "timestamp": 1714050659.7682877, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3257769984", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2342969.0, "domains": [{"name": "core", "consumption": 108567.0, "timestamp": 1714050659.7204263}], "timestamp": 1714050659.719766}]}, {"host": {"consumption": 2423952.0, "timestamp": 1714050669.8246953, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256954880", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2424140.0, "domains": [{"name": "core", "consumption": 157851.0, "timestamp": 1714050669.776394}], "timestamp": 1714050669.7757287}]}, {"host": {"consumption": 2386135.0, "timestamp": 1714050679.8799796, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256950784", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2384340.0, "domains": [{"name": "core", "consumption": 112721.0, "timestamp": 1714050679.8309493}], "timestamp": 1714050679.8301027}]}, {"host": {"consumption": 2422960.0, "timestamp": 1714050689.9413106, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3257040896", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2425202.0, "domains": [{"name": "core", "consumption": 88030.0, "timestamp": 1714050689.8877292}], "timestamp": 1714050689.8870673}]}, {"host": {"consumption": 2400792.0, "timestamp": 1714050699.9988215, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3257040896", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2400337.0, "domains": [{"name": "core", "consumption": 108788.0, "timestamp": 1714050699.9487965}], "timestamp": 1714050699.9480736}]}, {"host": {"consumption": 2377137.0, "timestamp": 1714050710.0650983, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256233984", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2378404.0, "domains": [{"name": "core", "consumption": 80929.0, "timestamp": 1714050710.0126016}], "timestamp": 1714050710.0119147}]}, {"host": {"consumption": 3453613.0, "timestamp": 1714050720.1119895, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256233984", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 3451031.0, "domains": [{"name": "core", "consumption": 143623.0, "timestamp": 1714050720.0730257}], "timestamp": 1714050720.072306}]}, {"host": {"consumption": 2391053.0, "timestamp": 1714050730.1596022, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256512512", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2390881.0, "domains": [{"name": "core", "consumption": 87937.0, "timestamp": 1714050730.119086}], "timestamp": 1714050730.1183357}]}, {"host": {"consumption": 2373410.0, "timestamp": 1714050740.2157648, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256500224", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2374401.0, "domains": [{"name": "core", "consumption": 85716.0, "timestamp": 1714050740.1680138}], "timestamp": 1714050740.1670768}]}, {"host": {"consumption": 3619855.0, "timestamp": 1714050750.2727349, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256270848", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 3618308.0, "domains": [{"name": "core", "consumption": 402310.0, "timestamp": 1714050750.223619}], "timestamp": 1714050750.2229202}]}, {"host": {"consumption": 2561285.0, "timestamp": 1714050760.3367336, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3255484416", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2548108.0, "domains": [{"name": "core", "consumption": 132357.0, "timestamp": 1714050760.283399}], "timestamp": 1714050760.2826276}]}, {"host": {"consumption": 2390917.0, "timestamp": 1714050770.399907, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3255496704", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2404677.0, "domains": [{"name": "core", "consumption": 73807.0, "timestamp": 1714050770.3503423}], "timestamp": 1714050770.3490674}]}, {"host": {"consumption": 2503232.0, "timestamp": 1714050780.452806, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3255484416", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2502490.0, "domains": [{"name": "core", "consumption": 104714.0, "timestamp": 1714050780.4068437}], "timestamp": 1714050780.4061348}]}, {"host": {"consumption": 2353636.0, "timestamp": 1714050790.5184891, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3255484416", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2347337.0, "domains": [{"name": "core", "consumption": 88720.0, "timestamp": 1714050790.4598715}], "timestamp": 1714050790.4591603}]}, {"host": {"consumption": 2576118.0, "timestamp": 1714050800.5747895, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256954880", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2583281.0, "domains": [{"name": "core", "consumption": 182473.0, "timestamp": 1714050800.5264494}], "timestamp": 1714050800.5257907}]}, {"host": {"consumption": 2406927.0, "timestamp": 1714050810.6301062, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256135680", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2406472.0, "domains": [{"name": "core", "consumption": 559061.0, "timestamp": 1714050810.581942}], "timestamp": 1714050810.5812838}]}, {"host": {"consumption": 3958908.0, "timestamp": 1714050820.685751, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3251761152", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 3950184.0, "domains": [{"name": "core", "consumption": 884193.0, "timestamp": 1714050820.6366255}], "timestamp": 1714050820.6359894}]}, {"host": {"consumption": 5963138.0, "timestamp": 1714050830.7515006, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3255197696", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 5974054.0, "domains": [{"name": "core", "consumption": 645767.0, "timestamp": 1714050830.6936398}], "timestamp": 1714050830.692971}]}, {"host": {"consumption": 2465605.0, "timestamp": 1714050840.8065033, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3255209984", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2466516.0, "domains": [{"name": "core", "consumption": 824598.0, "timestamp": 1714050840.758721}], "timestamp": 1714050840.7579138}]}, {"host": {"consumption": 2429380.0, "timestamp": 1714050850.8606722, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3255209984", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2430564.0, "domains": [{"name": "core", "consumption": 356691.0, "timestamp": 1714050850.8141007}], "timestamp": 1714050850.8134236}]}, {"host": {"consumption": 2520553.0, "timestamp": 1714050860.9165232, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3254431744", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2519423.0, "domains": [{"name": "core", "consumption": 975977.0, "timestamp": 1714050860.8676693}], "timestamp": 1714050860.8669431}]}, {"host": {"consumption": 3092541.0, "timestamp": 1714050870.9734244, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3254419456", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 3082233.0, "domains": [{"name": "core", "consumption": 369003.0, "timestamp": 1714050870.9234526}], "timestamp": 1714050870.922792}]}, {"host": {"consumption": 3812342.0, "timestamp": 1714050881.031177, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3254419456", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 3816419.0, "domains": [{"name": "core", "consumption": 173603.0, "timestamp": 1714050880.9800797}], "timestamp": 1714050880.9794118}]}, {"host": {"consumption": 3200964.0, "timestamp": 1714050891.0927029, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3254415360", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 3206864.0, "domains": [{"name": "core", "consumption": 102793.0, "timestamp": 1714050891.040935}], "timestamp": 1714050891.040277}]}], "avg_power": 2.911697275862069, "warning": "The time window is lower than one hour, but the energy consumption estimate is in Watt.Hour. So this is an extrapolation of the power usage profile on one hour. Be careful with this data. "}}, "electricity_carbon_intensity": {"value": 0.38, "description": "Carbon intensity of the electricity mix. Mix considered : EEE", "type": "gauge", "unit": "kg CO2eq / kWh", "long_unit": "Kilograms CO2 equivalent per KiloWattHour"}} \ No newline at end of file From 83d72a66760e51ca195453cce5d6220960ffdcbb Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 29 Apr 2024 15:05:39 +0200 Subject: [PATCH 125/227] feat: add verbose to format_prometheus_output, adjust to prometheus format --- boagent/api/api.py | 3 +- boagent/api/utils.py | 114 +++++++++++++++++++++++++------------------ 2 files changed, 69 insertions(+), 48 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index a90e292..4718a8a 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -199,7 +199,8 @@ async def metrics( measure_power, lifetime, fetch_hardware, - ) + ), + verbose, ), media_type="plain-text", ) diff --git a/boagent/api/utils.py b/boagent/api/utils.py index 9bfe965..bc008cf 100644 --- a/boagent/api/utils.py +++ b/boagent/api/utils.py @@ -82,56 +82,33 @@ def iso8601_or_timestamp_as_timestamp(iso_time: str) -> float: return float(iso_time) -def format_prometheus_output(res): +def format_prometheus_output(res, verbose: bool): response = "" for k, v in res.items(): if "value" in v and "type" in v: if "description" not in v: v["description"] = "TODO: define me" - response += format_prometheus_metric( - k, - "{}. {}".format( - v["description"], "In {} ({}).".format(v["long_unit"], v["unit"]) - ), - v["type"], - v["value"], - ) - if "boaviztapi_data" in v: - for impact_name, impact_items in v["boaviztapi_data"]["impacts"].items(): - if "unit" in impact_items: - if "description" not in impact_items: - impact_items["description"] = "TODO: define me" - response += format_prometheus_metric( - "{}".format(impact_name), - "{}. {}".format( - impact_items["description"], - "In {}".format(impact_items["unit"]), - ), - "{} {}".format("embedded", "use"), - "{} {}".format( - f"embedded_impact: {impact_items['embedded']}", - f"use_impact: {impact_items['use']}", - ), - ) - - for component_name, component_impacts in v["boaviztapi_data"]["verbose"].items(): - print(f"COMPONENT: {component_name}") - if "impacts" in component_impacts: - for impact, items in component_impacts["impacts"].items(): - if "description" not in items: - items["description"] = "TODO: define me" - response += format_prometheus_metric( - "{} {}".format(component_name, impact), - "{}. {}".format( - items["description"], - "In {}".format(items['unit']), - ), - "{} {}".format("embedded", "use"), - "{} {}".format( - f"embedded_impact: {items['embedded']}", - f"use_impact: {items['use']}", - ), - ) + if type(v["value"]) is float: + response += format_prometheus_metric( + k, + "{}. {}".format( + v["description"], + "In {} ({}).".format(v["long_unit"], v["unit"]), + ), + v["type"], + v["value"], + ) + if type(v["value"]) is dict: + response += format_prometheus_metric( + k, + "{}. {}".format( + v["description"], + "In {} ({}).".format(v["long_unit"], v["unit"]), + ), + v["type"], + v["value"]["value"], + ) + else: for x, y in v.items(): if type(y) is float: @@ -149,22 +126,65 @@ def format_prometheus_output(res): y["type"], y["value"], ) + if verbose: + if "boaviztapi_data" in v: + for impact_name, impact_items in v["boaviztapi_data"][ + "impacts" + ].items(): + if "unit" in impact_items: + embedded_impact_values = f"{{value={impact_items['embedded']['value']},min={impact_items['embedded']['min']},max={impact_items['embedded']['max']}}}" + response += format_prometheus_metric( + "{}".format(f"{impact_name}_total_impact"), + "{}. {}".format( + impact_items["description"], + "In {}".format(impact_items["unit"]), + ), + "{}".format("gauge"), + "{}".format( + f"{impact_items['embedded']['value']}", + ), + embedded_impact_values, + ) + + for component_name, component_impacts in v["boaviztapi_data"][ + "verbose" + ].items(): + print(f"COMPONENT: {component_name}") + formatted_component_name = component_name.lower().replace("-", "_") + if "impacts" in component_impacts: + for impact, items in component_impacts["impacts"].items(): + component_embedded_impact_values = f"{{value={items['embedded']['value']},min={items['embedded']['min']},max={items['embedded']['max']}}}" + response += format_prometheus_metric( + "{}".format( + f"{formatted_component_name}_{impact}_embedded_impact" + ), + "{}. {}".format( + items["description"], + "In {}".format(items["unit"]), + ), + "{}".format("gauge"), + "{}".format( + f"{items['embedded']['value']}", + ), + component_embedded_impact_values, + ) return response def format_prometheus_metric( - metric_name, metric_description, metric_type, metric_value + metric_name, metric_description, metric_type, metric_value, metric_label="" ): response = """# HELP {} {} # TYPE {} {} -{} {} +{}{} {} """.format( metric_name, metric_description, metric_name, metric_type, metric_name, + metric_label, metric_value, ) return response From 8c56973c6e722a9fed6a03ce3ca697288145950c Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 29 Apr 2024 15:41:07 +0200 Subject: [PATCH 126/227] feat: remove label, each impact value represented as one metric --- boagent/api/utils.py | 66 +++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/boagent/api/utils.py b/boagent/api/utils.py index bc008cf..4ea4b5d 100644 --- a/boagent/api/utils.py +++ b/boagent/api/utils.py @@ -132,59 +132,61 @@ def format_prometheus_output(res, verbose: bool): "impacts" ].items(): if "unit" in impact_items: - embedded_impact_values = f"{{value={impact_items['embedded']['value']},min={impact_items['embedded']['min']},max={impact_items['embedded']['max']}}}" - response += format_prometheus_metric( - "{}".format(f"{impact_name}_total_impact"), - "{}. {}".format( - impact_items["description"], - "In {}".format(impact_items["unit"]), - ), - "{}".format("gauge"), - "{}".format( - f"{impact_items['embedded']['value']}", - ), - embedded_impact_values, - ) + for value in impact_items["embedded"]: + if value == "warnings": + pass + else: + response += format_prometheus_metric( + "{}".format(f"{impact_name}_total_impact_{value}"), + "{}. {}".format( + impact_items["description"], + "In {}".format(impact_items["unit"]), + ), + "{}".format("gauge"), + "{}".format(f"{impact_items['embedded'][value]}"), + ) for component_name, component_impacts in v["boaviztapi_data"][ "verbose" ].items(): - print(f"COMPONENT: {component_name}") formatted_component_name = component_name.lower().replace("-", "_") if "impacts" in component_impacts: for impact, items in component_impacts["impacts"].items(): - component_embedded_impact_values = f"{{value={items['embedded']['value']},min={items['embedded']['min']},max={items['embedded']['max']}}}" - response += format_prometheus_metric( - "{}".format( - f"{formatted_component_name}_{impact}_embedded_impact" - ), - "{}. {}".format( - items["description"], - "In {}".format(items["unit"]), - ), - "{}".format("gauge"), - "{}".format( - f"{items['embedded']['value']}", - ), - component_embedded_impact_values, - ) + for component_embedded_impact_metric, value in items[ + "embedded" + ].items(): + if component_embedded_impact_metric == "warnings": + pass + else: + response += format_prometheus_metric( + "{}".format( + f"{formatted_component_name}_{impact}_embedded_impact_{component_embedded_impact_metric}" + ), + "{}. {}".format( + items["description"], + "In {}".format(items["unit"]), + ), + "{}".format("gauge"), + "{}".format( + f"{value}", + ), + ) return response def format_prometheus_metric( - metric_name, metric_description, metric_type, metric_value, metric_label="" + metric_name, metric_description, metric_type, metric_value ): response = """# HELP {} {} # TYPE {} {} -{}{} {} +{} {} """.format( metric_name, metric_description, metric_name, metric_type, metric_name, - metric_label, metric_value, ) return response From cf70015c4b389ad594de84f66162431b266e2978 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 29 Apr 2024 15:41:34 +0200 Subject: [PATCH 127/227] test: format_prometheus_output with verbose argument --- tests/api/test_api_unit.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 28d8159..ea111ff 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -139,17 +139,25 @@ def test_compute_average_consumption(self): class FormatPrometheusOutput(TestCase): - def setUp(self): self.get_metrics_response_not_verbose_path = mock_get_metrics_not_verbose self.get_metrics_response_verbose_path = mock_get_metrics_verbose + self.components = [ + "ASSEMBLY-1", + "CPU-1", + "RAM-1", + "SSD-1", + "POWER_SUPPLY-1", + "CASE-1", + "MOTHERBOARD-1", + ] def test_format_prometheus_output_with_get_metrics_not_verbose(self): with open(mock_get_metrics_not_verbose, "r") as json_response: response_to_format = json.load(json_response) - prometheus_output = format_prometheus_output(response_to_format) + prometheus_output = format_prometheus_output(response_to_format, verbose=False) assert type(prometheus_output) is str assert len(prometheus_output) > 1 @@ -161,12 +169,15 @@ def test_format_prometheus_output_with_get_metrics_verbose(self): with open(mock_get_metrics_verbose, "r") as json_response: response_to_format = json.load(json_response) - prometheus_output = format_prometheus_output(response_to_format) + prometheus_output = format_prometheus_output(response_to_format, verbose=True) + print(prometheus_output) assert type(prometheus_output) is str assert len(prometheus_output) > 1 assert "TYPE" in prometheus_output assert "HELP" in prometheus_output + assert all(component in prometheus_output for component in self.components) + assert False is True class GetPowerDataTest(TestCase): From 1ae9539c5c2147379716524eeeead07e447c0f91 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 29 Apr 2024 15:45:18 +0200 Subject: [PATCH 128/227] test: remove print output in test --- tests/api/test_api_unit.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index ea111ff..3c02f8f 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -171,13 +171,11 @@ def test_format_prometheus_output_with_get_metrics_verbose(self): prometheus_output = format_prometheus_output(response_to_format, verbose=True) - print(prometheus_output) assert type(prometheus_output) is str assert len(prometheus_output) > 1 assert "TYPE" in prometheus_output assert "HELP" in prometheus_output assert all(component in prometheus_output for component in self.components) - assert False is True class GetPowerDataTest(TestCase): From cf33a4ef972722f7f363710dc561d46adb48dd26 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 29 Apr 2024 15:56:54 +0200 Subject: [PATCH 129/227] fix: correct format of components to search in prometheus_output --- tests/api/test_api_unit.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 3c02f8f..90681be 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -16,8 +16,6 @@ ) from boagent.api.utils import format_prometheus_output -# from boagent.api.utils import format_scaphandre_json - current_dir = os.path.dirname(__file__) mock_power_data = os.path.join(f"{current_dir}", "../mocks/power_data.json") @@ -143,13 +141,13 @@ def setUp(self): self.get_metrics_response_not_verbose_path = mock_get_metrics_not_verbose self.get_metrics_response_verbose_path = mock_get_metrics_verbose self.components = [ - "ASSEMBLY-1", - "CPU-1", - "RAM-1", - "SSD-1", - "POWER_SUPPLY-1", - "CASE-1", - "MOTHERBOARD-1", + "assembly_1", + "cpu_1", + "ram_1", + "ssd_1", + "power_supply_1", + "case_1", + "motherboard_1", ] def test_format_prometheus_output_with_get_metrics_not_verbose(self): From 27d19b37da9610003c86e43c67351bf1dd6e701d Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 2 May 2024 15:30:32 +0200 Subject: [PATCH 130/227] doc: update README --- README.md | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 892a742..c094941 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,20 @@ This is an API, you could use either your browser, curl, or call it directly fro Once the API is running, a Swagger interface is available on [localhost:8000/docs](http://localhost:8000/docs). +## How it works + +Currently, Boagent only works for Linux systems. + +Boagent exposes multiple API endpoints, most notably `/query` and `/metrics`. Both will query an instance of [BoaviztAPI](https://doc.api.boavizta.org/) in order to give the environmental impacts +of the received hardware data. `/query` will return a response in JSON, and `/metrics` will return a response parsable by a Prometheus instance. If needed, both those +endpoints can return data from [Scaphandre](https://github.com/hubblo-org/scaphandre/) and give the energy consumption of components from the queried hardware. + +Presently, Boagent gets hardware data through a parsing of the output of `lshw`, a common utility available for Linux distributions that lists a lot of information of all +hardware components on a running computer. The code for this `Lshw` class is an adaptation of [netbox-agent](https://github.com/Solvik/netbox-agent)'s implementation. +`lshw`, to get all proper data needed by BoaviztAPI, needs to be executed as a privileged user with `sudo`. Boagent, executed with the available `docker-compose` file, +will run as privileged and will be able to receive the needed hardware data. At the moment, only data for the CPU, RAM and storage (either HDD or SSD) are parsed and sent to BoaviztAPI +in order to calculate impacts. + ### Run natively To run it : @@ -26,8 +40,7 @@ cd api/ uvicorn api:app --reload ``` -The app can run without root privileges, but you won't get full data about the RAM and get some warnings. -Run as root to have the best evaluation possible. +Boagent will not be able to return proper responses from its endpoints without root privileges in order to fetch hardware data. ### Run in a docker container @@ -55,7 +68,7 @@ Ensure that the version of BoaviztAPI SDK installed (see `requirements.txt`) is ### Scaphandre -To get power consumption metrics, you need [Scaphandre](https://github.com/hubblo-org/scaphandre) runnig in the background, with the json exporter. This will write power metrics to a file, that Boagent will read : +To get power consumption metrics, you need [Scaphandre](https://github.com/hubblo-org/scaphandre) running in the background, with the json exporter. This will write power metrics to a file, that Boagent will read : ``` scaphandre json -s 5 -f power_data.json From 66e30dac5d2940a9712ab1bdf5811aafee7196d6 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 2 May 2024 15:32:05 +0200 Subject: [PATCH 131/227] doc: update README --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index c094941..980113d 100644 --- a/README.md +++ b/README.md @@ -15,20 +15,6 @@ This is an API, you could use either your browser, curl, or call it directly fro Once the API is running, a Swagger interface is available on [localhost:8000/docs](http://localhost:8000/docs). -## How it works - -Currently, Boagent only works for Linux systems. - -Boagent exposes multiple API endpoints, most notably `/query` and `/metrics`. Both will query an instance of [BoaviztAPI](https://doc.api.boavizta.org/) in order to give the environmental impacts -of the received hardware data. `/query` will return a response in JSON, and `/metrics` will return a response parsable by a Prometheus instance. If needed, both those -endpoints can return data from [Scaphandre](https://github.com/hubblo-org/scaphandre/) and give the energy consumption of components from the queried hardware. - -Presently, Boagent gets hardware data through a parsing of the output of `lshw`, a common utility available for Linux distributions that lists a lot of information of all -hardware components on a running computer. The code for this `Lshw` class is an adaptation of [netbox-agent](https://github.com/Solvik/netbox-agent)'s implementation. -`lshw`, to get all proper data needed by BoaviztAPI, needs to be executed as a privileged user with `sudo`. Boagent, executed with the available `docker-compose` file, -will run as privileged and will be able to receive the needed hardware data. At the moment, only data for the CPU, RAM and storage (either HDD or SSD) are parsed and sent to BoaviztAPI -in order to calculate impacts. - ### Run natively To run it : @@ -92,6 +78,20 @@ You can set those variables in the following order (as interpreted by the tool): You can check the configuration applied by querying the `/info` route. +## How it works + +Currently, Boagent only works for Linux systems. + +Boagent exposes multiple API endpoints, most notably `/query` and `/metrics`. Both will query an instance of [BoaviztAPI](https://doc.api.boavizta.org/) in order to give the environmental impacts +of the received hardware data. `/query` will return a response in JSON, and `/metrics` will return a response parsable by a Prometheus instance. If needed, both those +endpoints can return data from [Scaphandre](https://github.com/hubblo-org/scaphandre/) and give the energy consumption of components from the queried hardware. + +Presently, Boagent gets hardware data through a parsing of the output of `lshw`, a common utility available for Linux distributions that lists a lot of information of all +hardware components on a running computer. The code for this `Lshw` class is an adaptation of [netbox-agent](https://github.com/Solvik/netbox-agent)'s implementation. +`lshw`, to get all proper data needed by BoaviztAPI, needs to be executed as a privileged user with `sudo`. Boagent, executed with the available `docker-compose` file, +will run as privileged and will be able to receive the needed hardware data. At the moment, only data for the CPU, RAM and storage (either HDD or SSD) are parsed and sent to BoaviztAPI +in order to calculate impacts. + ## Deeper explanations ### Environmental metrics From b19f5a43ca4be0597a04d77b5a581baf1712ae55 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 6 May 2024 12:34:14 +0200 Subject: [PATCH 132/227] config: using scaphandre-dev docker image --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index cb7cc48..a97ac13 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -31,7 +31,7 @@ services: - "./boagent:/home/boagent/boagent" scaphandre: - image: hubblo/scaphandre:1.0.0 + image: hubblo/scaphandre:dev privileged: true volumes: - type: bind From 08da128fe801589ab880783e156e32bd29e61bdd Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 6 May 2024 14:46:24 +0200 Subject: [PATCH 133/227] test: testing api endpoints with mocks --- tests/api/test_api_integration.py | 80 ++++++++++++++++++++++++++++--- 1 file changed, 73 insertions(+), 7 deletions(-) diff --git a/tests/api/test_api_integration.py b/tests/api/test_api_integration.py index afbb30f..1b021a6 100644 --- a/tests/api/test_api_integration.py +++ b/tests/api/test_api_integration.py @@ -1,6 +1,10 @@ +import json +import os + from datetime import datetime, timedelta from fastapi.testclient import TestClient from unittest import TestCase +from unittest.mock import patch from pytest import mark from boagent.api.config import Settings @@ -11,17 +15,39 @@ power_file_path="./tests/mocks/power_data.json", ) -from api import app # noqa +from boagent.api.api import app # noqa NOW_ISO8601 = datetime.now().isoformat() NOW_ISO8601_MINUS_ONE_MINUTE = datetime.fromisoformat(NOW_ISO8601) - timedelta( minutes=1 ) +current_dir = os.path.dirname(__file__) +mock_boaviztapi_response_not_verbose = os.path.join( + f"{current_dir}", "../mocks/boaviztapi_response_not_verbose.json" +) +mock_get_metrics_not_verbose = os.path.join( + f"{current_dir}", "../mocks/get_metrics_not_verbose.json" +) +mock_get_metrics_verbose = os.path.join( + f"{current_dir}", "../mocks/get_metrics_verbose.json" +) + client = TestClient(app) class ApiEndpointsTest(TestCase): + def setUp(self): + with open( + mock_boaviztapi_response_not_verbose, "r" + ) as boaviztapi_response_file: + self.boaviztapi_response_not_verbose = json.load(boaviztapi_response_file) + + with open(mock_get_metrics_not_verbose, "r") as get_metrics_not_verbose_file: + self.get_metrics_not_verbose = json.load(get_metrics_not_verbose_file) + with open(mock_get_metrics_verbose, "r") as get_metrics_verbose_file: + self.get_metrics_verbose = json.load(get_metrics_verbose_file) + def test_read_info(self): response = client.get("/info") assert response.status_code == 200 @@ -30,7 +56,28 @@ def test_read_web(self): response = client.get("/web") assert response.status_code == 200 - def test_read_metrics(self): + @patch("boagent.api.api.get_metrics") + def test_read_metrics_with_success(self, mocked_get_metrics): + + mocked_get_metrics.return_value = self.get_metrics_not_verbose + + params = { + "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", + "end_time": f"{NOW_ISO8601}", + "verbose": "false", + "location": "FRA", + "measure_power": "false", + "lifetime": 5, + "fetch_hardware": "false", + } + + response = client.get("/metrics", params=params) + assert response.status_code == 200 + + @patch("boagent.api.api.get_metrics") + def test_read_metrics_with_verbose_with_success(self, mocked_get_metrics): + + mocked_get_metrics.return_value = self.get_metrics_verbose params = { "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", @@ -46,7 +93,12 @@ def test_read_metrics(self): assert response.status_code == 200 @mark.query - def test_read_query_without_measure_power_and_fetch_hardware(self): + @patch("boagent.api.api.get_metrics") + def test_read_query_without_measure_power_and_fetch_hardware_with_success( + self, mocked_get_metrics + ): + + mocked_get_metrics.return_value = self.boaviztapi_response_not_verbose params = { "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", @@ -62,7 +114,10 @@ def test_read_query_without_measure_power_and_fetch_hardware(self): assert response.status_code == 200 @mark.query - def test_read_query_with_measure_power(self): + @patch("boagent.api.api.get_metrics") + def test_read_query_with_measure_power_with_success(self, mocked_get_metrics): + + mocked_get_metrics.return_value = self.get_metrics_not_verbose params = { "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", @@ -78,7 +133,10 @@ def test_read_query_with_measure_power(self): assert response.status_code == 200 @mark.query - def test_read_query_with_fetch_hardware(self): + @patch("boagent.api.api.get_metrics") + def test_read_query_with_fetch_hardware_with_success(self, mocked_get_metrics): + + mocked_get_metrics.return_value = self.get_metrics_not_verbose params = { "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", @@ -94,7 +152,10 @@ def test_read_query_with_fetch_hardware(self): assert response.status_code == 200 @mark.query - def test_read_query_with_measure_power_and_fetch_hardware(self): + @patch("boagent.api.api.get_metrics") + def test_read_query_with_measure_power_and_fetch_hardware(self, mocked_get_metrics): + + mocked_get_metrics.return_value = self.boaviztapi_response_not_verbose params = { "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", @@ -110,7 +171,12 @@ def test_read_query_with_measure_power_and_fetch_hardware(self): assert response.status_code == 200 @mark.query - def test_read_query_with_measure_power_and_fetch_hardware_verbose(self): + @patch("boagent.api.api.get_metrics") + def test_read_query_with_measure_power_and_fetch_hardware_verbose( + self, mocked_get_metrics + ): + + mocked_get_metrics.return_value = self.get_metrics_verbose params = { "start_time": f"{NOW_ISO8601_MINUS_ONE_MINUTE}", From f2e1dc7f8325b17294622c2b37a955e1b7a0a50e Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 6 May 2024 15:24:19 +0200 Subject: [PATCH 134/227] config: ignore virtual environment directory --- .dockerignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.dockerignore b/.dockerignore index 6b8710a..f1b636b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,2 @@ .git +venv From f54b5dcc28da89b79669d78467e1ae96e7ea3964 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 6 May 2024 15:24:58 +0200 Subject: [PATCH 135/227] config: remove cpuid dependencies --- requirements.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/requirements.txt b/requirements.txt index 08a7141..67b993e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,10 +8,7 @@ certifi==2022.9.24 cfgv==3.4.0 charset-normalizer==2.1.1 click==8.1.3 -cpuid==0.0.10 -cpuid-native==0.0.7 croniter==1.3.7 -Cython==0.29.37 dataclasses==0.6 distlib==0.3.8 exceptiongroup==1.2.0 @@ -36,11 +33,9 @@ py-cpuinfo==9.0.0 pydantic==2.6.4 pydantic-settings==2.2.1 pydantic_core==2.16.3 -pynetbox==6.1.2 pytest==8.0.2 python-dateutil==2.8.2 python-dotenv==0.21.0 -python-slugify==8.0.1 pytz==2022.5 PyYAML==6.0.1 requests==2.28.1 From 0bc4a718569574cd90212241572687b80ccfdb65 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 6 May 2024 15:27:48 +0200 Subject: [PATCH 136/227] refactor: cpu code not needed anymore by using lshw --- boagent/hardware/cpu.py | 66 ----------------------------------------- 1 file changed, 66 deletions(-) delete mode 100644 boagent/hardware/cpu.py diff --git a/boagent/hardware/cpu.py b/boagent/hardware/cpu.py deleted file mode 100644 index 79a64f7..0000000 --- a/boagent/hardware/cpu.py +++ /dev/null @@ -1,66 +0,0 @@ -from cpuinfo import get_cpu_info -from cpuid import cpuid, cpu_microarchitecture -from typing import TypeAlias - -from .lshw import Lshw - -CpuInfo: TypeAlias = list[dict[str, str | tuple | dict[str, str] | dict]] - -lshw_data = Lshw() - -""" def get_socket_number_linux(location: str = "/sys/devices/system/node/possible") -> int: - with open(location, 'r') as f: - data = f.read() - return int(data.split('-')[-1])+1 """ - - -def is_set(id: int, reg_idx: int, bit: int) -> str: - regs = cpuid(id) - - if (1 << bit) & regs[reg_idx]: - return "Yes" - else: - return "--" - - -def get_cpus(): - cpus = [] - cpu_data = lshw_data.cpus - for cpu in cpu_data: - cpus.append( - { - "vendor": cpu["vendor"], - "name": cpu["product"], - "microarch": cpu_microarchitecture(), - "cpu_info": get_cpu_info(), - } - ) - return cpus - - -""" -def get_cpus() -> CpuInfo: - cpu = [] - cpu_info = get_cpu_info() - for cpu_socket in range(get_socket_number_linux()): - cpu.append({ - "vendor": cpu_info['vendor_id_raw'], - "name": cpu_info['brand_raw'], - "microarch": cpu_microarchitecture(), - "vector_instructions": { - "sse": is_set(1, 3, 25), - "sse2": is_set(1, 3, 26), - "sse3": is_set(1, 2, 0), - "ssse3": is_set(1, 2, 9), - "sse4.1": is_set(1, 2, 19), - "sse4.2": is_set(1, 2, 20), - "sse4a": is_set(0x80000001, 2, 6), - "avx": is_set(1, 2, 28), - "avx2": is_set(7, 1, 5), - "bmi1": is_set(7, 1, 3), - "bmi2": is_set(7, 1, 8), - }, - "cpu_info": get_cpu_info(), - }) - return cpu -""" From bdf83a916d3110ca607b3a5a38e9c32645c710fc Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 6 May 2024 15:33:27 +0200 Subject: [PATCH 137/227] docs: update README, changes for installing boagent locally --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 980113d..6eb55aa 100644 --- a/README.md +++ b/README.md @@ -20,9 +20,8 @@ Once the API is running, a Swagger interface is available on [localhost:8000/doc To run it : ``` -cd boagent/ pip3 install -r requirements.txt -cd api/ +cd boagent/api/ uvicorn api:app --reload ``` From dec4eb4a8009e670373365648cb2d9750b9b18fe Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 6 May 2024 15:34:03 +0200 Subject: [PATCH 138/227] fix: remove useless items variable --- boagent/api/api.py | 1 - 1 file changed, 1 deletion(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 4718a8a..c7b9627 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -73,7 +73,6 @@ def configure_app(): app = configure_app() -items = {} @app.get("/info", tags=["info"]) From 7ffc2e55174c7e7d9282ffa02704c412f0a86d4e Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 6 May 2024 15:26:49 +0200 Subject: [PATCH 139/227] config: update dockerfile, lighter docker image with useless dependencies removal --- Dockerfile | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5fc81da..d02ec54 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,16 +2,10 @@ FROM python:3.10-slim LABEL org.opencontainers.image.authors="bpetit@hubblo.org" -RUN apt update && apt install gcc g++ -y - -RUN apt install lshw nvme-cli -y - -RUN apt-get install -y cron sqlite3 +RUN apt update && apt install lshw nvme-cli -y RUN useradd -ms /bin/bash boagent -#USER boagent - WORKDIR /home/boagent COPY requirements.txt requirements.txt @@ -20,12 +14,6 @@ RUN pip3 install -r requirements.txt ENV PATH $PATH:/home/boagent/.local/bin -WORKDIR /home/boagent/db - -RUN sqlite3 boagent.db - -WORKDIR /home/boagent - COPY . . EXPOSE 8000 From 65b8837393ca2850d66f8da57723611e9fd4cc23 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 6 May 2024 15:56:49 +0200 Subject: [PATCH 140/227] config: remove empty or useless files --- boagent/api/Query.yaml | 151 --------------------------------- boagent/hardware/AWS/README.md | 1 - boagent/hardware/README.md | 0 3 files changed, 152 deletions(-) delete mode 100644 boagent/api/Query.yaml delete mode 100644 boagent/hardware/AWS/README.md delete mode 100644 boagent/hardware/README.md diff --git a/boagent/api/Query.yaml b/boagent/api/Query.yaml deleted file mode 100644 index 5ea39eb..0000000 --- a/boagent/api/Query.yaml +++ /dev/null @@ -1,151 +0,0 @@ -openapi: 3.1.0 -info: - title: Query API - version: 1.0.0 - summary: >- - The query API allows you to determine the environmental footprint for - different types of scenarios (time-baed or machine-based). - description: >- - Use this API to get the environmental footprint for your any operation - happening on the server. - - - You can use a time-based query in order to get the carbon emissions that - have been created during the processing of a request or a background - operation (e.g. making a thumbnail). - - - If you simply want the environmental footprint of a running pod or virtual - machine, from when it started to now (or to when it stopped), you can query - using the pod or virtual machine identifier. - license: - name: GPL v3 - url: 'https://github.com/SDIAlliance/carbon-footprint-ssa/blob/main/LICENSE' -servers: - - url: 'http://localhost:3000' -paths: - /query: - parameters: [] - get: - summary: Get - operationId: get-query - description: 'Get the environmental footprint for a machine, pod or timeframe.' - parameters: - - schema: - type: string - format: uuid - in: query - name: k8s_pod_uuid - description: >- - Each pod in K8s has a unique identifier. UUIDs are standardized as - ISO/IEC 9834-8 and as ITU-T X.667. - - schema: - type: array - uniqueItems: true - behavior: Read Only - in: query - name: k8s_pod_uuids - description: Query multiple in pods in K8s based on UUID - - schema: - type: string - format: time - in: query - name: start_time - description: >- - Unix timestamp to specify from which point in time you want to - retrieve the footprint - - schema: - type: string - format: time - in: query - name: end_time - description: >- - Unix timestamp to specify until which point in time you want to get - the footprint for. If you only specify start_time and not end_time, - it will return the footprint up until the current moment. - - schema: - type: string - in: query - name: os_instance_id - description: >- - Query a specific OpenStack virtual machine, specified by its - instance ID - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: ../models/Environmental-Footprint.yaml - '400': - description: Bad Request - content: - application/json: - schema: - type: object - properties: - error_message: - type: string - examples: - Missing any filters: - value: - error_message: >- - At least one filter parameter has to be given: - k8s_pod_uuid, os_instance_id or start_time - '406': - description: Not Acceptable - content: - application/json: - schema: - type: object - properties: - errors: - type: array - items: - type: object - properties: - param: - type: string - message: - type: string - required: - - param - - message - required: - - errors - examples: - K8s Pod UUID invalid: - value: - errors: - - param: k8s_pod_uuid - message: Invalid pod uuid or not found. - Invalid start_time or end_time: - value: - errors: - - param: start_time - message: is not a valid unix timestamp - - param: end_time - message: is not a valid unix timestamp - Invalid OpenStack Instance: - value: - errors: - - param: os_instance_id - message: invalid instance identifier or not found - K8s Pod UUIDs not an array: - value: - errors: - - param: k8s_pod_uuids - message: must be an array of UUIDs - K8 Pod UUIDs contains invalid UUID: - value: - errors: - - param: k8s_pod_uuids - message: >- - contains an invalid UUID or not found: - the-uuid-should-be-here - '500': - description: Internal Server Error - '': - parameters: [] -components: - schemas: {} diff --git a/boagent/hardware/AWS/README.md b/boagent/hardware/AWS/README.md deleted file mode 100644 index 68c0e25..0000000 --- a/boagent/hardware/AWS/README.md +++ /dev/null @@ -1 +0,0 @@ -# Agent diff --git a/boagent/hardware/README.md b/boagent/hardware/README.md deleted file mode 100644 index e69de29..0000000 From 440ff985ccd44d66d3c829639df40aa0742ff4d9 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 6 May 2024 17:14:31 +0200 Subject: [PATCH 141/227] docs: change version in init --- boagent/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boagent/__init__.py b/boagent/__init__.py index 3726ce5..9638026 100644 --- a/boagent/__init__.py +++ b/boagent/__init__.py @@ -4,6 +4,6 @@ Monitoring agent/framework for evaluating the environmental impacts of a machine and its applications, including several to all steps of the life cycle of the machine and service, plus multiple criterias of impacts (not just CO2eq metrics / Global Warming Potential). Part of the efforts of https://boavizta.org/en and https://sdialliance.org/. """ -__version__ = "0.0.8" +__version__ = "0.0.9" __author__ = "Benoit Petit " __credits__ = "Boavizta contributors" From 5a42740a425a06035b3f3459bfe16c26a5e24d6b Mon Sep 17 00:00:00 2001 From: DE MERINGO Olivier Date: Fri, 24 May 2024 18:13:25 +0200 Subject: [PATCH 142/227] chore(ci): upgrade github actions following Node 16 deprecation --- .github/workflows/greenhack22.yml | 6 +++--- .github/workflows/release.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/greenhack22.yml b/.github/workflows/greenhack22.yml index 6a48369..2e17e2d 100644 --- a/.github/workflows/greenhack22.yml +++ b/.github/workflows/greenhack22.yml @@ -11,17 +11,17 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Setup Python 3 - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: '3.9' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4e0b715..5bf077d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,17 +10,17 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Setup Python 3 - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: '3.9' From b5c8fa75b7427f98fe7e041b7ffd0269e04be768 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 27 May 2024 17:54:54 +0200 Subject: [PATCH 143/227] feat: add process_embedded_impacts route, get_process_info function --- boagent/api/api.py | 49 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/boagent/api/api.py b/boagent/api/api.py index c7b9627..77341be 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -271,6 +271,55 @@ async def query_with_time_workload( ) +@app.get("/process_embedded_impacts") +async def process_embedded_impacts( + process: int = 0, + start_time: str = "0.0", + end_time: str = "0.0", + verbose: bool = False, + location: str = "EEE", + measure_power: bool = True, + lifetime: float = DEFAULT_LIFETIME, + fetch_hardware: bool = False, +): + + boaviztapi_data = get_metrics( + iso8601_or_timestamp_as_timestamp(start_time), + iso8601_or_timestamp_as_timestamp(end_time), + verbose, + location, + measure_power, + lifetime, + fetch_hardware, + ) + + gwp_impact = boaviztapi_data["embedded_emissions"]["value"] + adp_impact = boaviztapi_data["embedded_abiotic_resources_depletion"]["value"] + pe_impact = boaviztapi_data["embedded_primary_energy"]["value"] + host_impacts = { + "host_gwp_impact": gwp_impact, + "host_adp_impact": adp_impact, + "host_pe_impact": pe_impact, + } + + return host_impacts + + +def get_process_info(process_id): + with open(POWER_DATA_FILE_PATH, "r") as power_data_file: + format_data = f"{power_data_file.read()}]" + data = json.loads(format_data) + + process_info = list() + + for category in data: + for process in category["consumers"]: + if process["pid"] == process_id: + process_info_with_timestamp = f"{process['timestamp']}:{process}" + process_info.append(process_info_with_timestamp) + return process_info + + @app.get("/last_info") async def last_info(): res = { From fb9b929bb744d3e3f1c63f42376d3c6066bc24ca Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 27 May 2024 17:56:31 +0200 Subject: [PATCH 144/227] test: get_process_info --- tests/api/test_api_unit.py | 67 ++++++++++++++++++++++++++++++-------- 1 file changed, 53 insertions(+), 14 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 90681be..6db7792 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -13,6 +13,7 @@ compute_average_consumption, get_power_data, get_metrics, + get_process_info, ) from boagent.api.utils import format_prometheus_output @@ -29,6 +30,9 @@ mock_formatted_scaphandre = os.path.join( f"{current_dir}", "../mocks/formatted_power_data_one_hour.json" ) +mock_formatted_scaphandre_with_processes = os.path.join( + f"{current_dir}", "../mocks/formatted_scaphandre.json" +) mock_get_metrics_not_verbose = os.path.join( f"{current_dir}", "../mocks/get_metrics_not_verbose.json" ) @@ -187,12 +191,8 @@ def setUp(self) -> None: self.formatted_scaphandre = f"{mock_formatted_scaphandre}" - @patch("boagent.api.api.format_scaphandre_json") - def test_get_power_data(self, mocked_format_scaphandre_json): - - mocked_format_scaphandre_json.return_value = open( - mock_formatted_scaphandre, "r" - ).read() + @patch("boagent.api.api.POWER_DATA_FILE_PATH", mock_formatted_scaphandre) + def test_get_power_data(self): power_data = get_power_data(self.start_time, self.end_time) @@ -202,14 +202,8 @@ def test_get_power_data(self, mocked_format_scaphandre_json): assert type(power_data["avg_power"]) is float assert power_data["avg_power"] > 0 - @patch("boagent.api.api.format_scaphandre_json") - def test_get_power_data_with_short_time_interval( - self, mocked_format_scaphandre_json - ): - - mocked_format_scaphandre_json.return_value = open( - mock_formatted_scaphandre, "r" - ).read() + @patch("boagent.api.api.POWER_DATA_FILE_PATH", mock_formatted_scaphandre) + def test_get_power_data_with_short_time_interval(self): power_data = get_power_data( self.short_interval_start_time, self.short_interval_end_time @@ -479,6 +473,50 @@ def test_get_metrics_verbose_with_scaphandre( assert "power_data" in metrics["raw_data"] +class AllocateEmbeddedImpactForProcess(TestCase): + def setUp(self): + + self.start_time = 1710837858 + self.end_time = 1710841458 + self.verbose = False + self.location = "EEE" + self.measure_power = False + self.lifetime = 5.0 + self.fetch_hardware = False + + with open(mock_boaviztapi_response_not_verbose, "r") as boaviztapi_data: + self.boaviztapi_data = json.load(boaviztapi_data) + + @patch("boagent.api.api.query_machine_impact_data") + def test_get_total_embedded_impacts_for_host( + self, mocked_query_machine_impact_data + ): + + total_embedded_impacts_host = get_metrics( + self.start_time, + self.end_time, + self.verbose, + self.location, + self.measure_power, + self.lifetime, + self.fetch_hardware, + ) + + mocked_query_machine_impact_data.return_value = self.boaviztapi_data + + assert "embedded_emissions" in total_embedded_impacts_host + assert "embedded_abiotic_resources_depletion" in total_embedded_impacts_host + assert "embedded_primary_energy" in total_embedded_impacts_host + + @patch( + "boagent.api.api.POWER_DATA_FILE_PATH", mock_formatted_scaphandre_with_processes + ) + def test_get_process_info(self): + + process_details = get_process_info(2310) + assert type(process_details) is list + + loader = TestLoader() suite = TestSuite() @@ -489,3 +527,4 @@ def test_get_metrics_verbose_with_scaphandre( suite.addTests(loader.loadTestsFromTestCase(GetMetricsNotVerboseNoScaphandreTest)) suite.addTests(loader.loadTestsFromTestCase(GetMetricsVerboseNoScaphandreTest)) suite.addTests(loader.loadTestsFromTestCase(GetMetricsVerboseWithScaphandreTest)) +suite.addTests(loader.loadTestsFromTestCase(AllocateEmbeddedImpactForProcess)) From 585fee65193119204a75e3a6a49cc993ecc75309 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 27 May 2024 17:57:02 +0200 Subject: [PATCH 145/227] test: process_embedded_impacts route --- tests/api/test_api_integration.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/api/test_api_integration.py b/tests/api/test_api_integration.py index 1b021a6..e3679a5 100644 --- a/tests/api/test_api_integration.py +++ b/tests/api/test_api_integration.py @@ -191,6 +191,12 @@ def test_read_query_with_measure_power_and_fetch_hardware_verbose( response = client.get("/query", params=params) assert response.status_code == 200 + @patch("boagent.api.api.get_metrics") + def test_read_process_embedded_impacts(self, mocked_get_metrics): + mocked_get_metrics.return_value = self.get_metrics_not_verbose + response = client.get("/process_embedded_impacts") + assert response.status_code == 200 + def test_read_yearly_embedded(self): response = client.get("/yearly_embedded") assert response.status_code == 200 From dd5f4f2aac79b30c538a042e5639498ae0433163 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 29 May 2024 14:53:31 +0200 Subject: [PATCH 146/227] config: modify scaphandre container cmd to get processes and consumed resources --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index a97ac13..ceb39f9 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -41,7 +41,7 @@ services: source: /sys/class/powercap target: /sys/class/powercap - "powerdata:/app/data:rw" - command: [ "--no-header", "json", "-s", "10", "--max-top-consumers", "0", "-f", "/app/data/power_data.json" ] + command: [ "--no-header", "json", "-s", "10", "--resources", "-f", "/app/data/power_data.json" ] networks: - boagent-network From 674d50a682590d3d23ada789dc1d5363c72a8df5 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 29 May 2024 17:45:10 +0200 Subject: [PATCH 147/227] feat: calculate total ram for host, get ram usage by process and timestamp --- boagent/api/api.py | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 77341be..cbf9bf2 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -273,14 +273,14 @@ async def query_with_time_workload( @app.get("/process_embedded_impacts") async def process_embedded_impacts( - process: int = 0, + process_id: int = 0, start_time: str = "0.0", end_time: str = "0.0", verbose: bool = False, location: str = "EEE", measure_power: bool = True, lifetime: float = DEFAULT_LIFETIME, - fetch_hardware: bool = False, + fetch_hardware: bool = True, ): boaviztapi_data = get_metrics( @@ -302,6 +302,8 @@ async def process_embedded_impacts( "host_pe_impact": pe_impact, } + # process_info = get_process_info(process_id) + # host_ram_in_bytes = get_total_ram_in_bytes() return host_impacts @@ -315,11 +317,35 @@ def get_process_info(process_id): for category in data: for process in category["consumers"]: if process["pid"] == process_id: - process_info_with_timestamp = f"{process['timestamp']}:{process}" - process_info.append(process_info_with_timestamp) + process_info.append(process) return process_info +def get_total_ram_in_bytes(): + + hardware_data = get_hardware_data(True) + total_ram_capacity_in_gigabytes = 0 + + for unit in hardware_data["rams"]: + total_ram_capacity_in_gigabytes += unit["capacity"] + + total_ram_in_bytes = total_ram_capacity_in_gigabytes * 1073741824 + return total_ram_in_bytes + + +def get_process_ram_shares(process, ram_total): + + process_info = get_process_info(process) + process_ram_shares = list() + for timestamp in process_info: + process_ram_share = ( + int(timestamp["resources_usage"]["memory_usage"]) / ram_total + ) + process_ram_shares.append(process_ram_share) + + return process_ram_shares + + @app.get("/last_info") async def last_info(): res = { From 99a48401a2b906c28c08fb86da2247927eadf272 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 29 May 2024 17:46:04 +0200 Subject: [PATCH 148/227] test: process info, total ram for host, ram usage per process --- tests/api/test_api_unit.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 6db7792..d8fd290 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -14,6 +14,8 @@ get_power_data, get_metrics, get_process_info, + get_total_ram_in_bytes, + get_process_ram_shares, ) from boagent.api.utils import format_prometheus_output @@ -133,8 +135,8 @@ class ComputeAvgConsumptionTest(TestCase): def test_compute_average_consumption(self): with open(mock_power_data, "r") as power_data_file: - power_data = f"[{power_data_file.read()}]" - data = json.loads(power_data) + # power_data = f"[{power_data_file.read()}]" + data = json.load(power_data_file) avg_host = compute_average_consumption(data) assert type(avg_host) is float @@ -513,9 +515,28 @@ def test_get_total_embedded_impacts_for_host( ) def test_get_process_info(self): - process_details = get_process_info(2310) + process_details = get_process_info(70335) + for process in process_details: + print(process) + print( + f"{process['resources_usage']['cpu_usage']}{process['resources_usage']['cpu_usage_unit']}" + ) assert type(process_details) is list + def test_get_total_ram_in_bytes(self): + + total_ram_in_bytes = get_total_ram_in_bytes() + assert type(total_ram_in_bytes) is int + + @patch( + "boagent.api.api.POWER_DATA_FILE_PATH", mock_formatted_scaphandre_with_processes + ) + def test_get_process_ram_share_by_timestamp(self): + + process_ram_shares = get_process_ram_shares(70335, 8589934592) + + assert type(process_ram_shares) is list + loader = TestLoader() suite = TestSuite() From 822631950ab151d00f10c82d9aa127ce716e65ba Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 29 May 2024 17:46:51 +0200 Subject: [PATCH 149/227] test: mocks from scaphandre 1.0.0 --- tests/mocks/formatted_power_data_one_hour.json | 2 +- tests/mocks/formatted_scaphandre.json | 2 +- tests/mocks/power_data.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/mocks/formatted_power_data_one_hour.json b/tests/mocks/formatted_power_data_one_hour.json index 25c3aab..bad0bee 100644 --- a/tests/mocks/formatted_power_data_one_hour.json +++ b/tests/mocks/formatted_power_data_one_hour.json @@ -1 +1 @@ -[{"host":{"consumption":22839456.0,"timestamp":1713776733.1511338,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984608768","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14541315.0,"domains":[{"name":"uncore","consumption":45094.0,"timestamp":1713776733.0607731},{"name":"core","consumption":12269990.0,"timestamp":1713776733.0605369},{"name":"dram","consumption":852068.0,"timestamp":1713776733.0603411}],"timestamp":1713776733.0592344}]},{"host":{"consumption":16981000.0,"timestamp":1713776743.218813,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983822336","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9059081.0,"domains":[{"name":"uncore","consumption":48212.0,"timestamp":1713776743.158127},{"name":"core","consumption":6869789.0,"timestamp":1713776743.1580791},{"name":"dram","consumption":739943.0,"timestamp":1713776743.1580322}],"timestamp":1713776743.1577911}]},{"host":{"consumption":16722740.0,"timestamp":1713776753.3200343,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983838720","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9070029.0,"domains":[{"name":"uncore","consumption":46079.0,"timestamp":1713776753.2260823},{"name":"core","consumption":6879086.0,"timestamp":1713776753.2260573},{"name":"dram","consumption":740840.0,"timestamp":1713776753.226029}],"timestamp":1713776753.2255995}]},{"host":{"consumption":16845328.0,"timestamp":1713776763.3460875,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983805952","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9006139.0,"domains":[{"name":"uncore","consumption":28302.0,"timestamp":1713776763.3271012},{"name":"core","consumption":6842051.0,"timestamp":1713776763.327086},{"name":"dram","consumption":721432.0,"timestamp":1713776763.3270676}],"timestamp":1713776763.3268232}]},{"host":{"consumption":20178468.0,"timestamp":1713776773.3749685,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984961024","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11565690.0,"domains":[{"name":"uncore","consumption":138203.0,"timestamp":1713776773.3530092},{"name":"core","consumption":9056146.0,"timestamp":1713776773.352927},{"name":"dram","consumption":917219.0,"timestamp":1713776773.3528495}],"timestamp":1713776773.3525944}]},{"host":{"consumption":19320856.0,"timestamp":1713776783.4413419,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985849856","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10891636.0,"domains":[{"name":"uncore","consumption":100456.0,"timestamp":1713776783.381015},{"name":"core","consumption":8502546.0,"timestamp":1713776783.3810034},{"name":"dram","consumption":890911.0,"timestamp":1713776783.380984}],"timestamp":1713776783.3807747}]},{"host":{"consumption":18664104.0,"timestamp":1713776793.527114,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985829376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10461344.0,"domains":[{"name":"uncore","consumption":163930.0,"timestamp":1713776793.448991},{"name":"core","consumption":8026378.0,"timestamp":1713776793.4489007},{"name":"dram","consumption":912285.0,"timestamp":1713776793.4488075}],"timestamp":1713776793.447805}]},{"host":{"consumption":18027132.0,"timestamp":1713776803.6265707,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985821184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9899857.0,"domains":[{"name":"uncore","consumption":183041.0,"timestamp":1713776803.535488},{"name":"core","consumption":7494878.0,"timestamp":1713776803.5353925},{"name":"dram","consumption":884276.0,"timestamp":1713776803.535213}],"timestamp":1713776803.5343165}]},{"host":{"consumption":17484540.0,"timestamp":1713776813.6934764,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985829376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9464936.0,"domains":[{"name":"uncore","consumption":73310.0,"timestamp":1713776813.6352477},{"name":"core","consumption":7223027.0,"timestamp":1713776813.6351972},{"name":"dram","consumption":785048.0,"timestamp":1713776813.6351457}],"timestamp":1713776813.6348221}]},{"host":{"consumption":16846520.0,"timestamp":1713776823.7871494,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985829376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9133689.0,"domains":[{"name":"uncore","consumption":80251.0,"timestamp":1713776823.7018094},{"name":"core","consumption":6899394.0,"timestamp":1713776823.701636},{"name":"dram","consumption":780682.0,"timestamp":1713776823.701415}],"timestamp":1713776823.700346}]},{"host":{"consumption":19366870.0,"timestamp":1713776833.8774304,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985022464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10976765.0,"domains":[{"name":"uncore","consumption":150406.0,"timestamp":1713776833.7932224},{"name":"core","consumption":8548469.0,"timestamp":1713776833.793142},{"name":"dram","consumption":908710.0,"timestamp":1713776833.7930572}],"timestamp":1713776833.7928212}]},{"host":{"consumption":19660644.0,"timestamp":1713776843.9498193,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984977408","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11163514.0,"domains":[{"name":"uncore","consumption":187910.0,"timestamp":1713776843.8866582},{"name":"core","consumption":8677972.0,"timestamp":1713776843.8865824},{"name":"dram","consumption":988746.0,"timestamp":1713776843.8864777}],"timestamp":1713776843.8854172}]},{"host":{"consumption":16384468.0,"timestamp":1713776854.0142157,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984907776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8733699.0,"domains":[{"name":"uncore","consumption":1097.0,"timestamp":1713776853.9547465},{"name":"core","consumption":6632548.0,"timestamp":1713776853.9547296},{"name":"dram","consumption":676655.0,"timestamp":1713776853.9547124}],"timestamp":1713776853.9544137}]},{"host":{"consumption":16174939.0,"timestamp":1713776864.10159,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984915968","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8709866.0,"domains":[{"name":"uncore","consumption":22437.0,"timestamp":1713776864.0224054},{"name":"core","consumption":6586726.0,"timestamp":1713776864.0221882},{"name":"dram","consumption":702673.0,"timestamp":1713776864.0219984}],"timestamp":1713776864.020949}]},{"host":{"consumption":16641214.0,"timestamp":1713776874.1272652,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984899584","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8941654.0,"domains":[{"name":"uncore","consumption":30573.0,"timestamp":1713776874.1079433},{"name":"core","consumption":6783195.0,"timestamp":1713776874.1078608},{"name":"dram","consumption":713687.0,"timestamp":1713776874.1077807}],"timestamp":1713776874.1074984}]},{"host":{"consumption":17742036.0,"timestamp":1713776884.1930141,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983883776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9792363.0,"domains":[{"name":"uncore","consumption":12237.0,"timestamp":1713776884.1331985},{"name":"core","consumption":7611253.0,"timestamp":1713776884.1331136},{"name":"dram","consumption":702807.0,"timestamp":1713776884.1330287}],"timestamp":1713776884.1327791}]},{"host":{"consumption":16045425.0,"timestamp":1713776894.2987273,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983871488","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8638578.0,"domains":[{"name":"uncore","consumption":19957.0,"timestamp":1713776894.200897},{"name":"core","consumption":6520352.0,"timestamp":1713776894.2008362},{"name":"dram","consumption":699931.0,"timestamp":1713776894.2007725}],"timestamp":1713776894.1999118}]},{"host":{"consumption":16224034.0,"timestamp":1713776904.3735363,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983871488","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8631907.0,"domains":[{"name":"uncore","consumption":7713.0,"timestamp":1713776904.3059886},{"name":"core","consumption":6542680.0,"timestamp":1713776904.3059006},{"name":"dram","consumption":672715.0,"timestamp":1713776904.305835}],"timestamp":1713776904.305626}]},{"host":{"consumption":16846048.0,"timestamp":1713776914.4393625,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983826432","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9056345.0,"domains":[{"name":"uncore","consumption":6483.0,"timestamp":1713776914.37817},{"name":"core","consumption":6914729.0,"timestamp":1713776914.3780758},{"name":"dram","consumption":717895.0,"timestamp":1713776914.3779886}],"timestamp":1713776914.377803}]},{"host":{"consumption":17085022.0,"timestamp":1713776924.5196557,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983781376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9334116.0,"domains":[{"name":"uncore","consumption":59258.0,"timestamp":1713776924.4472995},{"name":"core","consumption":7110072.0,"timestamp":1713776924.4470918},{"name":"dram","consumption":777071.0,"timestamp":1713776924.446896}],"timestamp":1713776924.4458892}]},{"host":{"consumption":18274012.0,"timestamp":1713776934.5888944,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982667264","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10051529.0,"domains":[{"name":"uncore","consumption":87871.0,"timestamp":1713776934.5258956},{"name":"core","consumption":7730027.0,"timestamp":1713776934.5258844},{"name":"dram","consumption":840146.0,"timestamp":1713776934.5258706}],"timestamp":1713776934.5256615}]},{"host":{"consumption":17763572.0,"timestamp":1713776944.6601112,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982642688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9823252.0,"domains":[{"name":"uncore","consumption":111906.0,"timestamp":1713776944.5963216},{"name":"core","consumption":7510654.0,"timestamp":1713776944.5962281},{"name":"dram","consumption":842703.0,"timestamp":1713776944.596136}],"timestamp":1713776944.5958858}]},{"host":{"consumption":18286144.0,"timestamp":1713776954.6996922,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982642688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10133228.0,"domains":[{"name":"uncore","consumption":123874.0,"timestamp":1713776954.6674545},{"name":"core","consumption":7752282.0,"timestamp":1713776954.6673684},{"name":"dram","consumption":947740.0,"timestamp":1713776954.6672251}],"timestamp":1713776954.6666923}]},{"host":{"consumption":19241480.0,"timestamp":1713776964.7721376,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982634496","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10905721.0,"domains":[{"name":"uncore","consumption":139415.0,"timestamp":1713776964.7069016},{"name":"core","consumption":8461981.0,"timestamp":1713776964.7067893},{"name":"dram","consumption":1017923.0,"timestamp":1713776964.7066824}],"timestamp":1713776964.7062266}]},{"host":{"consumption":16724868.0,"timestamp":1713776974.8404372,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982601728","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8937357.0,"domains":[{"name":"uncore","consumption":24044.0,"timestamp":1713776974.7793686},{"name":"core","consumption":6779412.0,"timestamp":1713776974.7793553},{"name":"dram","consumption":725967.0,"timestamp":1713776974.779332}],"timestamp":1713776974.7790234}]},{"host":{"consumption":16168697.0,"timestamp":1713776984.9150546,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981815296","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8730403.0,"domains":[{"name":"uncore","consumption":14129.0,"timestamp":1713776984.8483362},{"name":"core","consumption":6612168.0,"timestamp":1713776984.8482864},{"name":"dram","consumption":685285.0,"timestamp":1713776984.8482223}],"timestamp":1713776984.8473754}]},{"host":{"consumption":16972942.0,"timestamp":1713776994.9903839,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981815296","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9338204.0,"domains":[{"name":"uncore","consumption":4683.0,"timestamp":1713776994.9218297},{"name":"core","consumption":7238084.0,"timestamp":1713776994.9218106},{"name":"dram","consumption":670005.0,"timestamp":1713776994.9217336}],"timestamp":1713776994.9214137}]},{"host":{"consumption":19904440.0,"timestamp":1713777005.0633216,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981807104","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11469411.0,"domains":[{"name":"uncore","consumption":14218.0,"timestamp":1713777004.996468},{"name":"core","consumption":9234698.0,"timestamp":1713777004.9964507},{"name":"dram","consumption":802499.0,"timestamp":1713777004.9964309}],"timestamp":1713777004.9962282}]},{"host":{"consumption":23821914.0,"timestamp":1713777015.1340816,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982241280","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14857354.0,"domains":[{"name":"uncore","consumption":90502.0,"timestamp":1713777015.0712984},{"name":"core","consumption":12383485.0,"timestamp":1713777015.0712466},{"name":"dram","consumption":972342.0,"timestamp":1713777015.0711875}],"timestamp":1713777015.0708177}]},{"host":{"consumption":18002080.0,"timestamp":1713777025.1986918,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982192128","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9977895.0,"domains":[{"name":"uncore","consumption":85695.0,"timestamp":1713777025.1393635},{"name":"core","consumption":7701050.0,"timestamp":1713777025.139356},{"name":"dram","consumption":792326.0,"timestamp":1713777025.1393478}],"timestamp":1713777025.1391838}]},{"host":{"consumption":17680458.0,"timestamp":1713777035.27853,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981131264","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9743090.0,"domains":[{"name":"uncore","consumption":70435.0,"timestamp":1713777035.2058847},{"name":"core","consumption":7439096.0,"timestamp":1713777035.2058249},{"name":"dram","consumption":804227.0,"timestamp":1713777035.2057557}],"timestamp":1713777035.204923}]},{"host":{"consumption":18357346.0,"timestamp":1713777045.337737,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152980979712","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10192130.0,"domains":[{"name":"uncore","consumption":74988.0,"timestamp":1713777045.286384},{"name":"core","consumption":7816444.0,"timestamp":1713777045.286365},{"name":"dram","consumption":810440.0,"timestamp":1713777045.2863448}],"timestamp":1713777045.2858868}]},{"host":{"consumption":17990072.0,"timestamp":1713777055.4065242,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152980873216","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9824797.0,"domains":[{"name":"uncore","consumption":77175.0,"timestamp":1713777055.3453813},{"name":"core","consumption":7495410.0,"timestamp":1713777055.345311},{"name":"dram","consumption":805234.0,"timestamp":1713777055.3452392}],"timestamp":1713777055.344998}]},{"host":{"consumption":17519172.0,"timestamp":1713777065.503242,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152980742144","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9647848.0,"domains":[{"name":"uncore","consumption":56186.0,"timestamp":1713777065.4142375},{"name":"core","consumption":7358347.0,"timestamp":1713777065.414192},{"name":"dram","consumption":773846.0,"timestamp":1713777065.4141448}],"timestamp":1713777065.4134197}]},{"host":{"consumption":17891032.0,"timestamp":1713777075.5509567,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982196224","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9832698.0,"domains":[{"name":"uncore","consumption":61244.0,"timestamp":1713777075.5105214},{"name":"core","consumption":7536060.0,"timestamp":1713777075.5104876},{"name":"dram","consumption":777253.0,"timestamp":1713777075.5104597}],"timestamp":1713777075.510103}]},{"host":{"consumption":17815084.0,"timestamp":1713777085.6228104,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981295104","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9678532.0,"domains":[{"name":"uncore","consumption":61632.0,"timestamp":1713777085.561123},{"name":"core","consumption":7380698.0,"timestamp":1713777085.5611074},{"name":"dram","consumption":786439.0,"timestamp":1713777085.5610945}],"timestamp":1713777085.5609138}]},{"host":{"consumption":17694360.0,"timestamp":1713777095.7247462,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981151744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9802988.0,"domains":[{"name":"uncore","consumption":71710.0,"timestamp":1713777095.6316407},{"name":"core","consumption":7503412.0,"timestamp":1713777095.6314514},{"name":"dram","consumption":804160.0,"timestamp":1713777095.6312304}],"timestamp":1713777095.6302629}]},{"host":{"consumption":18129474.0,"timestamp":1713777105.790891,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981102592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9953748.0,"domains":[{"name":"uncore","consumption":72152.0,"timestamp":1713777105.7319067},{"name":"core","consumption":7662805.0,"timestamp":1713777105.731818},{"name":"dram","consumption":816287.0,"timestamp":1713777105.7317307}],"timestamp":1713777105.7314792}]},{"host":{"consumption":15953801.0,"timestamp":1713777115.8627741,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981102592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8530278.0,"domains":[{"name":"uncore","consumption":11961.0,"timestamp":1713777115.7994144},{"name":"core","consumption":6420022.0,"timestamp":1713777115.7991927},{"name":"dram","consumption":677953.0,"timestamp":1713777115.79897}],"timestamp":1713777115.7978327}]},{"host":{"consumption":16938940.0,"timestamp":1713777125.9474034,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981114880","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9192264.0,"domains":[{"name":"uncore","consumption":54261.0,"timestamp":1713777125.8688385},{"name":"core","consumption":6987367.0,"timestamp":1713777125.8688178},{"name":"dram","consumption":759677.0,"timestamp":1713777125.8688}],"timestamp":1713777125.8685436}]},{"host":{"consumption":17084550.0,"timestamp":1713777136.0318727,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152980295680","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9322397.0,"domains":[{"name":"uncore","consumption":24124.0,"timestamp":1713777135.953332},{"name":"core","consumption":7153078.0,"timestamp":1713777135.9532452},{"name":"dram","consumption":730172.0,"timestamp":1713777135.9531567}],"timestamp":1713777135.9529128}]},{"host":{"consumption":17661328.0,"timestamp":1713777146.0986826,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152974946304","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9637077.0,"domains":[{"name":"uncore","consumption":25416.0,"timestamp":1713777146.0393763},{"name":"core","consumption":7339891.0,"timestamp":1713777146.0393615},{"name":"dram","consumption":738663.0,"timestamp":1713777146.0393455}],"timestamp":1713777146.0390542}]},{"host":{"consumption":16707994.0,"timestamp":1713777156.2043657,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152974888960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9161977.0,"domains":[{"name":"uncore","consumption":16447.0,"timestamp":1713777156.1071963},{"name":"core","consumption":7019542.0,"timestamp":1713777156.1069677},{"name":"dram","consumption":710408.0,"timestamp":1713777156.1067336}],"timestamp":1713777156.1055775}]},{"host":{"consumption":17207338.0,"timestamp":1713777166.2376916,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152974888960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9286949.0,"domains":[{"name":"uncore","consumption":76193.0,"timestamp":1713777166.2133067},{"name":"core","consumption":7053232.0,"timestamp":1713777166.2132885},{"name":"dram","consumption":782137.0,"timestamp":1713777166.213268}],"timestamp":1713777166.212981}]},{"host":{"consumption":17584212.0,"timestamp":1713777176.2885852,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152974868480","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9738880.0,"domains":[{"name":"uncore","consumption":55203.0,"timestamp":1713777176.2469187},{"name":"core","consumption":7530107.0,"timestamp":1713777176.2468045},{"name":"dram","consumption":756529.0,"timestamp":1713777176.2466614}],"timestamp":1713777176.2450926}]},{"host":{"consumption":17274468.0,"timestamp":1713777186.3227236,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973860864","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9410312.0,"domains":[{"name":"uncore","consumption":83281.0,"timestamp":1713777186.2982764},{"name":"core","consumption":7170252.0,"timestamp":1713777186.2982504},{"name":"dram","consumption":788001.0,"timestamp":1713777186.2982068}],"timestamp":1713777186.297853}]},{"host":{"consumption":16231953.0,"timestamp":1713777196.3952644,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973860864","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8575499.0,"domains":[{"name":"uncore","consumption":17611.0,"timestamp":1713777196.3278553},{"name":"core","consumption":6479625.0,"timestamp":1713777196.327841},{"name":"dram","consumption":684457.0,"timestamp":1713777196.3278232}],"timestamp":1713777196.3276503}]},{"host":{"consumption":17897220.0,"timestamp":1713777206.4610589,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973869056","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9950755.0,"domains":[{"name":"uncore","consumption":24972.0,"timestamp":1713777206.399892},{"name":"core","consumption":7791134.0,"timestamp":1713777206.3998756},{"name":"dram","consumption":764722.0,"timestamp":1713777206.399863}],"timestamp":1713777206.3996723}]},{"host":{"consumption":24343926.0,"timestamp":1713777216.5693893,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973824000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":15427863.0,"domains":[{"name":"uncore","consumption":19596.0,"timestamp":1713777216.4696398},{"name":"core","consumption":13038636.0,"timestamp":1713777216.4694428},{"name":"dram","consumption":907260.0,"timestamp":1713777216.4692278}],"timestamp":1713777216.4682693}]},{"host":{"consumption":18454150.0,"timestamp":1713777226.634701,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973021184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10223166.0,"domains":[{"name":"uncore","consumption":92544.0,"timestamp":1713777226.5767918},{"name":"core","consumption":7945179.0,"timestamp":1713777226.5767102},{"name":"dram","consumption":811552.0,"timestamp":1713777226.5766191}],"timestamp":1713777226.5763497}]},{"host":{"consumption":16529560.0,"timestamp":1713777236.7167804,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973000704","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8944020.0,"domains":[{"name":"uncore","consumption":35589.0,"timestamp":1713777236.642004},{"name":"core","consumption":6789653.0,"timestamp":1713777236.6419218},{"name":"dram","consumption":717853.0,"timestamp":1713777236.6418812}],"timestamp":1713777236.6410005}]},{"host":{"consumption":16775695.0,"timestamp":1713777246.7846277,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152972972032","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8951850.0,"domains":[{"name":"uncore","consumption":26276.0,"timestamp":1713777246.7229867},{"name":"core","consumption":6796287.0,"timestamp":1713777246.7229757},{"name":"dram","consumption":704799.0,"timestamp":1713777246.7229636}],"timestamp":1713777246.7227092}]},{"host":{"consumption":15556533.0,"timestamp":1713777256.8788333,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152972976128","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8236154.0,"domains":[{"name":"uncore","consumption":1030.0,"timestamp":1713777256.7930374},{"name":"core","consumption":6168328.0,"timestamp":1713777256.7928183},{"name":"dram","consumption":645843.0,"timestamp":1713777256.7925932}],"timestamp":1713777256.7914505}]},{"host":{"consumption":17937068.0,"timestamp":1713777266.9760392,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152972910592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9924039.0,"domains":[{"name":"uncore","consumption":88172.0,"timestamp":1713777266.8877187},{"name":"core","consumption":7630807.0,"timestamp":1713777266.8876908},{"name":"dram","consumption":803316.0,"timestamp":1713777266.8876681}],"timestamp":1713777266.8873644}]},{"host":{"consumption":18454380.0,"timestamp":1713777277.0442383,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152971960320","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10182132.0,"domains":[{"name":"uncore","consumption":74447.0,"timestamp":1713777276.9832406},{"name":"core","consumption":7849393.0,"timestamp":1713777276.9832327},{"name":"dram","consumption":817975.0,"timestamp":1713777276.983224}],"timestamp":1713777276.9830406}]},{"host":{"consumption":17266296.0,"timestamp":1713777287.113659,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152971816960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9419215.0,"domains":[{"name":"uncore","consumption":49091.0,"timestamp":1713777287.0527253},{"name":"core","consumption":7157526.0,"timestamp":1713777287.052653},{"name":"dram","consumption":756459.0,"timestamp":1713777287.0525587}],"timestamp":1713777287.0514598}]},{"host":{"consumption":17562162.0,"timestamp":1713777297.214952,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152971739136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9647698.0,"domains":[{"name":"uncore","consumption":65355.0,"timestamp":1713777297.1191518},{"name":"core","consumption":7371870.0,"timestamp":1713777297.1191337},{"name":"dram","consumption":790216.0,"timestamp":1713777297.1191046}],"timestamp":1713777297.1187286}]},{"host":{"consumption":20346536.0,"timestamp":1713777307.293429,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152971628544","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11724314.0,"domains":[{"name":"uncore","consumption":163220.0,"timestamp":1713777307.2234144},{"name":"core","consumption":9303487.0,"timestamp":1713777307.2233179},{"name":"dram","consumption":975655.0,"timestamp":1713777307.2232158}],"timestamp":1713777307.222858}]},{"host":{"consumption":19801178.0,"timestamp":1713777317.359613,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152971571200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11231485.0,"domains":[{"name":"uncore","consumption":198577.0,"timestamp":1713777317.2983823},{"name":"core","consumption":8713569.0,"timestamp":1713777317.298366},{"name":"dram","consumption":991540.0,"timestamp":1713777317.298354}],"timestamp":1713777317.2981806}]},{"host":{"consumption":17649494.0,"timestamp":1713777327.449634,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152970821632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9688075.0,"domains":[{"name":"uncore","consumption":110425.0,"timestamp":1713777327.3674223},{"name":"core","consumption":7351944.0,"timestamp":1713777327.367366},{"name":"dram","consumption":839885.0,"timestamp":1713777327.3672998}],"timestamp":1713777327.3664134}]},{"host":{"consumption":18980238.0,"timestamp":1713777337.5194466,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152970706944","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10592785.0,"domains":[{"name":"uncore","consumption":83956.0,"timestamp":1713777337.4586651},{"name":"core","consumption":8247316.0,"timestamp":1713777337.4586465},{"name":"dram","consumption":857625.0,"timestamp":1713777337.4586263}],"timestamp":1713777337.4583135}]},{"host":{"consumption":21691694.0,"timestamp":1713777347.583959,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152969510912","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12880346.0,"domains":[{"name":"uncore","consumption":131259.0,"timestamp":1713777347.524417},{"name":"core","consumption":10396386.0,"timestamp":1713777347.5243325},{"name":"dram","consumption":957926.0,"timestamp":1713777347.5242443}],"timestamp":1713777347.523989}]},{"host":{"consumption":18650282.0,"timestamp":1713777357.6647134,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152969199616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10580498.0,"domains":[{"name":"uncore","consumption":89075.0,"timestamp":1713777357.5921497},{"name":"core","consumption":8275383.0,"timestamp":1713777357.5919557},{"name":"dram","consumption":853215.0,"timestamp":1713777357.5917592}],"timestamp":1713777357.5907595}]},{"host":{"consumption":18892164.0,"timestamp":1713777367.7330296,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152969150464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10560693.0,"domains":[{"name":"uncore","consumption":104854.0,"timestamp":1713777367.6705291},{"name":"core","consumption":8228723.0,"timestamp":1713777367.6705165},{"name":"dram","consumption":873054.0,"timestamp":1713777367.670503}],"timestamp":1713777367.670317}]},{"host":{"consumption":18655484.0,"timestamp":1713777377.8278155,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152968314880","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10547207.0,"domains":[{"name":"uncore","consumption":119447.0,"timestamp":1713777377.7424407},{"name":"core","consumption":8202705.0,"timestamp":1713777377.742352},{"name":"dram","consumption":864928.0,"timestamp":1713777377.7422514}],"timestamp":1713777377.7406278}]},{"host":{"consumption":19839508.0,"timestamp":1713777387.8977547,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152967557120","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11226931.0,"domains":[{"name":"uncore","consumption":147733.0,"timestamp":1713777387.8355281},{"name":"core","consumption":8815164.0,"timestamp":1713777387.8355043},{"name":"dram","consumption":930749.0,"timestamp":1713777387.8354752}],"timestamp":1713777387.8351617}]},{"host":{"consumption":19093878.0,"timestamp":1713777397.972775,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152967593984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10841222.0,"domains":[{"name":"uncore","consumption":125816.0,"timestamp":1713777397.9035504},{"name":"core","consumption":8468717.0,"timestamp":1713777397.9035375},{"name":"dram","consumption":904159.0,"timestamp":1713777397.9035237}],"timestamp":1713777397.9033375}]},{"host":{"consumption":17952432.0,"timestamp":1713777408.0408626,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152967356416","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9946246.0,"domains":[{"name":"uncore","consumption":78989.0,"timestamp":1713777407.9787939},{"name":"core","consumption":7660487.0,"timestamp":1713777407.9787714},{"name":"dram","consumption":821510.0,"timestamp":1713777407.978734}],"timestamp":1713777407.9782877}]},{"host":{"consumption":17320856.0,"timestamp":1713777418.1319575,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152967344128","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9461335.0,"domains":[{"name":"uncore","consumption":69949.0,"timestamp":1713777418.0463884},{"name":"core","consumption":7215506.0,"timestamp":1713777418.0463102},{"name":"dram","consumption":788687.0,"timestamp":1713777418.046224}],"timestamp":1713777418.0459182}]},{"host":{"consumption":17474848.0,"timestamp":1713777428.2004583,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966549504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9409248.0,"domains":[{"name":"uncore","consumption":95253.0,"timestamp":1713777428.1390185},{"name":"core","consumption":7122726.0,"timestamp":1713777428.1390052},{"name":"dram","consumption":809644.0,"timestamp":1713777428.1389885}],"timestamp":1713777428.1387415}]},{"host":{"consumption":16820736.0,"timestamp":1713777438.3035433,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966549504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9165546.0,"domains":[{"name":"uncore","consumption":108143.0,"timestamp":1713777438.2093804},{"name":"core","consumption":6890045.0,"timestamp":1713777438.209173},{"name":"dram","consumption":796038.0,"timestamp":1713777438.2089665}],"timestamp":1713777438.2079842}]},{"host":{"consumption":16727609.0,"timestamp":1713777448.3768816,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966549504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8939919.0,"domains":[{"name":"uncore","consumption":71607.0,"timestamp":1713777448.3114433},{"name":"core","consumption":6727186.0,"timestamp":1713777448.3114324},{"name":"dram","consumption":750922.0,"timestamp":1713777448.3114202}],"timestamp":1713777448.3112388}]},{"host":{"consumption":16308847.0,"timestamp":1713777458.4427474,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966553600","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8585879.0,"domains":[{"name":"uncore","consumption":47079.0,"timestamp":1713777458.3821568},{"name":"core","consumption":6422585.0,"timestamp":1713777458.3821454},{"name":"dram","consumption":715525.0,"timestamp":1713777458.382133}],"timestamp":1713777458.3819559}]},{"host":{"consumption":17582196.0,"timestamp":1713777468.5505536,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966561792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9790577.0,"domains":[{"name":"uncore","consumption":115877.0,"timestamp":1713777468.449387},{"name":"core","consumption":7484325.0,"timestamp":1713777468.4491963},{"name":"dram","consumption":842199.0,"timestamp":1713777468.448999}],"timestamp":1713777468.4479294}]},{"host":{"consumption":21082234.0,"timestamp":1713777478.6427877,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965779456","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12303180.0,"domains":[{"name":"uncore","consumption":201535.0,"timestamp":1713777478.5594313},{"name":"core","consumption":9761258.0,"timestamp":1713777478.5593724},{"name":"dram","consumption":1047614.0,"timestamp":1713777478.559312}],"timestamp":1713777478.5590181}]},{"host":{"consumption":18089648.0,"timestamp":1713777488.7118351,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965562368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9918908.0,"domains":[{"name":"uncore","consumption":117238.0,"timestamp":1713777488.6492963},{"name":"core","consumption":7574489.0,"timestamp":1713777488.6491983},{"name":"dram","consumption":894123.0,"timestamp":1713777488.6491091}],"timestamp":1713777488.6487775}]},{"host":{"consumption":16313611.0,"timestamp":1713777498.7860672,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965505024","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8774291.0,"domains":[{"name":"uncore","consumption":28373.0,"timestamp":1713777498.7166615},{"name":"core","consumption":6648229.0,"timestamp":1713777498.7166505},{"name":"dram","consumption":703226.0,"timestamp":1713777498.716639}],"timestamp":1713777498.7164707}]},{"host":{"consumption":15908766.0,"timestamp":1713777508.8507597,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965505024","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8388403.0,"domains":[{"name":"uncore","consumption":2084.0,"timestamp":1713777508.7911139},{"name":"core","consumption":6325376.0,"timestamp":1713777508.791101},{"name":"dram","consumption":653991.0,"timestamp":1713777508.7910852}],"timestamp":1713777508.790909}]},{"host":{"consumption":15899949.0,"timestamp":1713777518.9272132,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965505024","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8448667.0,"domains":[{"name":"uncore","consumption":7016.0,"timestamp":1713777518.8562863},{"name":"core","consumption":6357922.0,"timestamp":1713777518.8561907},{"name":"dram","consumption":679596.0,"timestamp":1713777518.8560758}],"timestamp":1713777518.8557153}]},{"host":{"consumption":16183745.0,"timestamp":1713777529.0078616,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152964710400","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8689172.0,"domains":[{"name":"uncore","consumption":5571.0,"timestamp":1713777528.935464},{"name":"core","consumption":6591279.0,"timestamp":1713777528.935428},{"name":"dram","consumption":676487.0,"timestamp":1713777528.9353883}],"timestamp":1713777528.9345155}]},{"host":{"consumption":15916104.0,"timestamp":1713777539.0753608,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152964685824","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8294892.0,"domains":[{"name":"uncore","consumption":14249.0,"timestamp":1713777539.0141416},{"name":"core","consumption":6169550.0,"timestamp":1713777539.0141294},{"name":"dram","consumption":674498.0,"timestamp":1713777539.01411}],"timestamp":1713777539.0138464}]},{"host":{"consumption":16209632.0,"timestamp":1713777549.1478362,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152964677632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8713013.0,"domains":[{"name":"uncore","consumption":21256.0,"timestamp":1713777549.0809667},{"name":"core","consumption":6591171.0,"timestamp":1713777549.080948},{"name":"dram","consumption":686833.0,"timestamp":1713777549.080928}],"timestamp":1713777549.0806618}]},{"host":{"consumption":16297672.0,"timestamp":1713777559.2131064,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966852608","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8636431.0,"domains":[{"name":"uncore","consumption":17554.0,"timestamp":1713777559.1536322},{"name":"core","consumption":6528329.0,"timestamp":1713777559.153618},{"name":"dram","consumption":687476.0,"timestamp":1713777559.1536024}],"timestamp":1713777559.1534212}]},{"host":{"consumption":16613624.0,"timestamp":1713777569.2817764,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966840320","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8982682.0,"domains":[{"name":"uncore","consumption":14080.0,"timestamp":1713777569.2191489},{"name":"core","consumption":6835346.0,"timestamp":1713777569.219115},{"name":"dram","consumption":686288.0,"timestamp":1713777569.2190804}],"timestamp":1713777569.2186477}]},{"host":{"consumption":15928445.0,"timestamp":1713777579.3524537,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966041600","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8482414.0,"domains":[{"name":"uncore","consumption":8813.0,"timestamp":1713777579.2880456},{"name":"core","consumption":6404099.0,"timestamp":1713777579.287951},{"name":"dram","consumption":667569.0,"timestamp":1713777579.287852}],"timestamp":1713777579.2874703}]},{"host":{"consumption":15866381.0,"timestamp":1713777589.4253757,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966049792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8423159.0,"domains":[{"name":"uncore","consumption":496.0,"timestamp":1713777589.357418},{"name":"core","consumption":6360998.0,"timestamp":1713777589.3573365},{"name":"dram","consumption":654786.0,"timestamp":1713777589.3572474}],"timestamp":1713777589.3570118}]},{"host":{"consumption":15883202.0,"timestamp":1713777599.500007,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966049792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8349347.0,"domains":[{"name":"uncore","consumption":1114.0,"timestamp":1713777599.431466},{"name":"core","consumption":6300350.0,"timestamp":1713777599.4314551},{"name":"dram","consumption":651057.0,"timestamp":1713777599.4314435}],"timestamp":1713777599.4312637}]},{"host":{"consumption":16583735.0,"timestamp":1713777609.577641,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966057984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8933031.0,"domains":[{"name":"uncore","consumption":16167.0,"timestamp":1713777609.5073316},{"name":"core","consumption":6814868.0,"timestamp":1713777609.5073144},{"name":"dram","consumption":724313.0,"timestamp":1713777609.5072951}],"timestamp":1713777609.5069907}]},{"host":{"consumption":16225616.0,"timestamp":1713777619.6726906,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965238784","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8753202.0,"domains":[{"name":"uncore","consumption":5866.0,"timestamp":1713777619.5885262},{"name":"core","consumption":6647838.0,"timestamp":1713777619.588443},{"name":"dram","consumption":698294.0,"timestamp":1713777619.5883377}],"timestamp":1713777619.587323}]},{"host":{"consumption":16452231.0,"timestamp":1713777629.7383971,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965230592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8740273.0,"domains":[{"name":"uncore","consumption":7131.0,"timestamp":1713777629.6791177},{"name":"core","consumption":6637624.0,"timestamp":1713777629.6791074},{"name":"dram","consumption":683510.0,"timestamp":1713777629.6790953}],"timestamp":1713777629.678914}]},{"host":{"consumption":15823927.0,"timestamp":1713777639.7776556,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965206016","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8402048.0,"domains":[{"name":"uncore","consumption":0.0,"timestamp":1713777639.7470057},{"name":"core","consumption":6336968.0,"timestamp":1713777639.746783},{"name":"dram","consumption":651596.0,"timestamp":1713777639.7465599}],"timestamp":1713777639.7453885}]},{"host":{"consumption":20210992.0,"timestamp":1713777649.8567626,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152964087808","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11645443.0,"domains":[{"name":"uncore","consumption":166251.0,"timestamp":1713777649.7856688},{"name":"core","consumption":9154307.0,"timestamp":1713777649.7855568},{"name":"dram","consumption":959337.0,"timestamp":1713777649.7854187}],"timestamp":1713777649.7847738}]},{"host":{"consumption":18315888.0,"timestamp":1713777659.9245737,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152964091904","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10023681.0,"domains":[{"name":"uncore","consumption":101881.0,"timestamp":1713777659.862742},{"name":"core","consumption":7680835.0,"timestamp":1713777659.8626509},{"name":"dram","consumption":855120.0,"timestamp":1713777659.8625586}],"timestamp":1713777659.8622923}]},{"host":{"consumption":18779222.0,"timestamp":1713777669.9968607,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152963125248","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10526377.0,"domains":[{"name":"uncore","consumption":169323.0,"timestamp":1713777669.934799},{"name":"core","consumption":8078254.0,"timestamp":1713777669.9346042},{"name":"dram","consumption":936328.0,"timestamp":1713777669.9344296}],"timestamp":1713777669.9331813}]},{"host":{"consumption":19123404.0,"timestamp":1713777680.0693,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152963768320","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10781109.0,"domains":[{"name":"uncore","consumption":113506.0,"timestamp":1713777680.0042026},{"name":"core","consumption":8356430.0,"timestamp":1713777680.0040424},{"name":"dram","consumption":875108.0,"timestamp":1713777680.0038862}],"timestamp":1713777680.0032423}]},{"host":{"consumption":16658693.0,"timestamp":1713777690.1361642,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152963764224","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8869032.0,"domains":[{"name":"uncore","consumption":40817.0,"timestamp":1713777690.0751405},{"name":"core","consumption":6706145.0,"timestamp":1713777690.0750535},{"name":"dram","consumption":736214.0,"timestamp":1713777690.0749643}],"timestamp":1713777690.0747101}]},{"host":{"consumption":15931695.0,"timestamp":1713777700.2205713,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152963739648","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8498349.0,"domains":[{"name":"uncore","consumption":37672.0,"timestamp":1713777700.1458943},{"name":"core","consumption":6345941.0,"timestamp":1713777700.1457095},{"name":"dram","consumption":712412.0,"timestamp":1713777700.1454847}],"timestamp":1713777700.1442876}]},{"host":{"consumption":15856558.0,"timestamp":1713777710.3048334,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152963735552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8405044.0,"domains":[{"name":"uncore","consumption":1059.0,"timestamp":1713777710.228694},{"name":"core","consumption":6337611.0,"timestamp":1713777710.2286005},{"name":"dram","consumption":654882.0,"timestamp":1713777710.2285113}],"timestamp":1713777710.228153}]},{"host":{"consumption":15731130.0,"timestamp":1713777720.3704264,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152962949120","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8187628.0,"domains":[{"name":"uncore","consumption":16242.0,"timestamp":1713777720.3109682},{"name":"core","consumption":6095751.0,"timestamp":1713777720.3108895},{"name":"dram","consumption":679307.0,"timestamp":1713777720.3108082}],"timestamp":1713777720.3105443}]},{"host":{"consumption":16210695.0,"timestamp":1713777730.4636085,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152962957312","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8795062.0,"domains":[{"name":"uncore","consumption":16315.0,"timestamp":1713777730.3778632},{"name":"core","consumption":6706404.0,"timestamp":1713777730.3778448},{"name":"dram","consumption":685067.0,"timestamp":1713777730.3778222}],"timestamp":1713777730.377493}]},{"host":{"consumption":16040021.0,"timestamp":1713777740.5394042,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152962924544","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8431943.0,"domains":[{"name":"uncore","consumption":9415.0,"timestamp":1713777740.4708369},{"name":"core","consumption":6360303.0,"timestamp":1713777740.4708252},{"name":"dram","consumption":672710.0,"timestamp":1713777740.4708118}],"timestamp":1713777740.4706376}]},{"host":{"consumption":17075332.0,"timestamp":1713777750.6046717,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152962924544","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9383489.0,"domains":[{"name":"uncore","consumption":19158.0,"timestamp":1713777750.5443146},{"name":"core","consumption":7245646.0,"timestamp":1713777750.544299},{"name":"dram","consumption":694105.0,"timestamp":1713777750.5442803}],"timestamp":1713777750.544087}]},{"host":{"consumption":16038221.0,"timestamp":1713777760.7143607,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152962920448","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8620729.0,"domains":[{"name":"uncore","consumption":34230.0,"timestamp":1713777760.6133876},{"name":"core","consumption":6495974.0,"timestamp":1713777760.6132631},{"name":"dram","consumption":708761.0,"timestamp":1713777760.6130996}],"timestamp":1713777760.611765}]},{"host":{"consumption":18562744.0,"timestamp":1713777770.7854593,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152961789952","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10167510.0,"domains":[{"name":"uncore","consumption":85764.0,"timestamp":1713777770.7238543},{"name":"core","consumption":7782228.0,"timestamp":1713777770.7238424},{"name":"dram","consumption":824070.0,"timestamp":1713777770.7238216}],"timestamp":1713777770.723569}]},{"host":{"consumption":17822256.0,"timestamp":1713777780.8563392,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152961662976","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9776705.0,"domains":[{"name":"uncore","consumption":65075.0,"timestamp":1713777780.79145},{"name":"core","consumption":7445099.0,"timestamp":1713777780.791433},{"name":"dram","consumption":800301.0,"timestamp":1713777780.791413}],"timestamp":1713777780.7911453}]},{"host":{"consumption":17887402.0,"timestamp":1713777790.9230866,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152961298432","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9885649.0,"domains":[{"name":"uncore","consumption":43824.0,"timestamp":1713777790.863574},{"name":"core","consumption":7646417.0,"timestamp":1713777790.8635585},{"name":"dram","consumption":772986.0,"timestamp":1713777790.8635464}],"timestamp":1713777790.863358}]},{"host":{"consumption":16965574.0,"timestamp":1713777800.9973304,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152961216512","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9200041.0,"domains":[{"name":"uncore","consumption":56064.0,"timestamp":1713777800.933654},{"name":"core","consumption":6970620.0,"timestamp":1713777800.933577},{"name":"dram","consumption":772481.0,"timestamp":1713777800.933496}],"timestamp":1713777800.9316926}]},{"host":{"consumption":17400900.0,"timestamp":1713777811.0945747,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152961224704","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9707364.0,"domains":[{"name":"uncore","consumption":22511.0,"timestamp":1713777811.0058458},{"name":"core","consumption":7574528.0,"timestamp":1713777811.005728},{"name":"dram","consumption":694298.0,"timestamp":1713777811.005565}],"timestamp":1713777811.0046043}]},{"host":{"consumption":22693084.0,"timestamp":1713777821.1748168,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152960417792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14066250.0,"domains":[{"name":"uncore","consumption":20233.0,"timestamp":1713777821.1053782},{"name":"core","consumption":11756106.0,"timestamp":1713777821.1052055},{"name":"dram","consumption":747530.0,"timestamp":1713777821.1050317}],"timestamp":1713777821.1041722}]},{"host":{"consumption":17230540.0,"timestamp":1713777831.2208235,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152960409600","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9318668.0,"domains":[{"name":"uncore","consumption":73312.0,"timestamp":1713777831.1806302},{"name":"core","consumption":7098818.0,"timestamp":1713777831.180615},{"name":"dram","consumption":790496.0,"timestamp":1713777831.180598}],"timestamp":1713777831.1804144}]},{"host":{"consumption":17543072.0,"timestamp":1713777841.323959,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152960290816","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9691442.0,"domains":[{"name":"uncore","consumption":65266.0,"timestamp":1713777841.2299023},{"name":"core","consumption":7379468.0,"timestamp":1713777841.2298503},{"name":"dram","consumption":771439.0,"timestamp":1713777841.229734}],"timestamp":1713777841.2287185}]},{"host":{"consumption":18375540.0,"timestamp":1713777851.393677,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152960143360","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10071285.0,"domains":[{"name":"uncore","consumption":95768.0,"timestamp":1713777851.332009},{"name":"core","consumption":7713945.0,"timestamp":1713777851.3319974},{"name":"dram","consumption":835902.0,"timestamp":1713777851.3319821}],"timestamp":1713777851.3318}]},{"host":{"consumption":17726560.0,"timestamp":1713777861.4610617,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152960004096","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9741501.0,"domains":[{"name":"uncore","consumption":67079.0,"timestamp":1713777861.4008732},{"name":"core","consumption":7442516.0,"timestamp":1713777861.4008353},{"name":"dram","consumption":793650.0,"timestamp":1713777861.4008021}],"timestamp":1713777861.4003146}]},{"host":{"consumption":17449610.0,"timestamp":1713777871.5619464,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152959102976","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9601990.0,"domains":[{"name":"uncore","consumption":60339.0,"timestamp":1713777871.4696467},{"name":"core","consumption":7300906.0,"timestamp":1713777871.4694824},{"name":"dram","consumption":769847.0,"timestamp":1713777871.4692864}],"timestamp":1713777871.4681816}]},{"host":{"consumption":18067604.0,"timestamp":1713777881.5899308,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958939136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9903128.0,"domains":[{"name":"uncore","consumption":86261.0,"timestamp":1713777881.5700386},{"name":"core","consumption":7576518.0,"timestamp":1713777881.570027},{"name":"dram","consumption":818160.0,"timestamp":1713777881.570015}],"timestamp":1713777881.5698082}]},{"host":{"consumption":18114310.0,"timestamp":1713777891.6597648,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958910464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10051117.0,"domains":[{"name":"uncore","consumption":119266.0,"timestamp":1713777891.595267},{"name":"core","consumption":7688228.0,"timestamp":1713777891.5952513},{"name":"dram","consumption":875669.0,"timestamp":1713777891.5952399}],"timestamp":1713777891.5950556}]},{"host":{"consumption":17982304.0,"timestamp":1713777901.7224674,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958914560","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9921893.0,"domains":[{"name":"uncore","consumption":105382.0,"timestamp":1713777901.6688368},{"name":"core","consumption":7614912.0,"timestamp":1713777901.6687794},{"name":"dram","consumption":821355.0,"timestamp":1713777901.6687136}],"timestamp":1713777901.6678514}]},{"host":{"consumption":16229753.0,"timestamp":1713777911.8222022,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958902272","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8694883.0,"domains":[{"name":"uncore","consumption":13136.0,"timestamp":1713777911.7282002},{"name":"core","consumption":6587707.0,"timestamp":1713777911.7281888},{"name":"dram","consumption":687165.0,"timestamp":1713777911.7281759}],"timestamp":1713777911.7280076}]},{"host":{"consumption":16616626.0,"timestamp":1713777921.8897438,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958091264","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8844863.0,"domains":[{"name":"uncore","consumption":6247.0,"timestamp":1713777921.8297477},{"name":"core","consumption":6710053.0,"timestamp":1713777921.829701},{"name":"dram","consumption":696847.0,"timestamp":1713777921.8296196}],"timestamp":1713777921.8293762}]},{"host":{"consumption":24247360.0,"timestamp":1713777931.9538066,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958078976","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":15254459.0,"domains":[{"name":"uncore","consumption":35481.0,"timestamp":1713777931.8947358},{"name":"core","consumption":12941539.0,"timestamp":1713777931.894722},{"name":"dram","consumption":962834.0,"timestamp":1713777931.8947082}],"timestamp":1713777931.8945222}]},{"host":{"consumption":20532328.0,"timestamp":1713777942.0455108,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958062592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12224716.0,"domains":[{"name":"uncore","consumption":99571.0,"timestamp":1713777941.9616747},{"name":"core","consumption":9892754.0,"timestamp":1713777941.9615881},{"name":"dram","consumption":849291.0,"timestamp":1713777941.9614494}],"timestamp":1713777941.9605832}]},{"host":{"consumption":16474318.0,"timestamp":1713777952.0709994,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958062592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8771281.0,"domains":[{"name":"uncore","consumption":30979.0,"timestamp":1713777952.052795},{"name":"core","consumption":6620660.0,"timestamp":1713777952.0527837},{"name":"dram","consumption":715171.0,"timestamp":1713777952.0527718}],"timestamp":1713777952.0525928}]},{"host":{"consumption":17493240.0,"timestamp":1713777962.1385055,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958066688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9531806.0,"domains":[{"name":"uncore","consumption":131463.0,"timestamp":1713777962.0778706},{"name":"core","consumption":7202853.0,"timestamp":1713777962.0778282},{"name":"dram","consumption":833088.0,"timestamp":1713777962.0777817}],"timestamp":1713777962.0771358}]},{"host":{"consumption":17458548.0,"timestamp":1713777972.24492,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152957239296","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9531299.0,"domains":[{"name":"uncore","consumption":127349.0,"timestamp":1713777972.1469042},{"name":"core","consumption":7191604.0,"timestamp":1713777972.1468406},{"name":"dram","consumption":825182.0,"timestamp":1713777972.1467702}],"timestamp":1713777972.1457498}]},{"host":{"consumption":17862440.0,"timestamp":1713777982.3326883,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152957214720","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9769459.0,"domains":[{"name":"uncore","consumption":179092.0,"timestamp":1713777982.252346},{"name":"core","consumption":7372610.0,"timestamp":1713777982.252256},{"name":"dram","consumption":884528.0,"timestamp":1713777982.2521672}],"timestamp":1713777982.251912}]},{"host":{"consumption":18233520.0,"timestamp":1713777992.4027348,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152957206528","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10080855.0,"domains":[{"name":"uncore","consumption":104562.0,"timestamp":1713777992.3419394},{"name":"core","consumption":7790676.0,"timestamp":1713777992.3419151},{"name":"dram","consumption":820201.0,"timestamp":1713777992.341895}],"timestamp":1713777992.3415523}]},{"host":{"consumption":19109640.0,"timestamp":1713778002.4701629,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152956878848","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10871542.0,"domains":[{"name":"uncore","consumption":115419.0,"timestamp":1713778002.4089096},{"name":"core","consumption":8515008.0,"timestamp":1713778002.4088027},{"name":"dram","consumption":916167.0,"timestamp":1713778002.4086978}],"timestamp":1713778002.4082537}]},{"host":{"consumption":18408262.0,"timestamp":1713778012.5528898,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152956362752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10342927.0,"domains":[{"name":"uncore","consumption":82893.0,"timestamp":1713778012.4801257},{"name":"core","consumption":8061710.0,"timestamp":1713778012.4799323},{"name":"dram","consumption":842357.0,"timestamp":1713778012.479757}],"timestamp":1713778012.4787397}]},{"host":{"consumption":19840854.0,"timestamp":1713778022.6270146,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152956350464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11335704.0,"domains":[{"name":"uncore","consumption":163135.0,"timestamp":1713778022.55935},{"name":"core","consumption":8897139.0,"timestamp":1713778022.5593307},{"name":"dram","consumption":981078.0,"timestamp":1713778022.5593092}],"timestamp":1713778022.5589626}]},{"host":{"consumption":17312974.0,"timestamp":1713778032.7117648,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152956309504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9499735.0,"domains":[{"name":"uncore","consumption":87710.0,"timestamp":1713778032.6362305},{"name":"core","consumption":7215070.0,"timestamp":1713778032.6359973},{"name":"dram","consumption":811384.0,"timestamp":1713778032.6357644}],"timestamp":1713778032.6345541}]},{"host":{"consumption":18126974.0,"timestamp":1713778042.7790456,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152956256256","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10049458.0,"domains":[{"name":"uncore","consumption":100679.0,"timestamp":1713778042.7184296},{"name":"core","consumption":7772194.0,"timestamp":1713778042.718339},{"name":"dram","consumption":809173.0,"timestamp":1713778042.7182584}],"timestamp":1713778042.7180066}]},{"host":{"consumption":17990110.0,"timestamp":1713778052.845718,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955977728","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9860508.0,"domains":[{"name":"uncore","consumption":132729.0,"timestamp":1713778052.7844014},{"name":"core","consumption":7515147.0,"timestamp":1713778052.7843919},{"name":"dram","consumption":877302.0,"timestamp":1713778052.784381}],"timestamp":1713778052.7841396}]},{"host":{"consumption":19102024.0,"timestamp":1713778062.9095144,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955179008","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10795199.0,"domains":[{"name":"uncore","consumption":191009.0,"timestamp":1713778062.855294},{"name":"core","consumption":8332341.0,"timestamp":1713778062.8551056},{"name":"dram","consumption":993144.0,"timestamp":1713778062.8549147}],"timestamp":1713778062.853756}]},{"host":{"consumption":17932420.0,"timestamp":1713778072.9832215,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955179008","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9801198.0,"domains":[{"name":"uncore","consumption":119654.0,"timestamp":1713778072.9159064},{"name":"core","consumption":7465131.0,"timestamp":1713778072.915892},{"name":"dram","consumption":868349.0,"timestamp":1713778072.9158764}],"timestamp":1713778072.9157023}]},{"host":{"consumption":15665550.0,"timestamp":1713778083.0535884,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954957824","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8236872.0,"domains":[{"name":"uncore","consumption":1435.0,"timestamp":1713778082.9920995},{"name":"core","consumption":6126665.0,"timestamp":1713778082.9918785},{"name":"dram","consumption":660562.0,"timestamp":1713778082.991654}],"timestamp":1713778082.9904716}]},{"host":{"consumption":16120235.0,"timestamp":1713778093.1263516,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954728448","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8520780.0,"domains":[{"name":"uncore","consumption":21778.0,"timestamp":1713778093.058785},{"name":"core","consumption":6411878.0,"timestamp":1713778093.0587704},{"name":"dram","consumption":687990.0,"timestamp":1713778093.058755}],"timestamp":1713778093.0585763}]},{"host":{"consumption":16046596.0,"timestamp":1713778103.2007499,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954716160","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8483392.0,"domains":[{"name":"uncore","consumption":24553.0,"timestamp":1713778103.1311922},{"name":"core","consumption":6374043.0,"timestamp":1713778103.131181},{"name":"dram","consumption":697553.0,"timestamp":1713778103.1311667}],"timestamp":1713778103.1309865}]},{"host":{"consumption":15957042.0,"timestamp":1713778113.261549,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953991168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8526762.0,"domains":[{"name":"uncore","consumption":9305.0,"timestamp":1713778113.2123566},{"name":"core","consumption":6414746.0,"timestamp":1713778113.2122111},{"name":"dram","consumption":668618.0,"timestamp":1713778113.2119734}],"timestamp":1713778113.2108254}]},{"host":{"consumption":15601428.0,"timestamp":1713778123.3766108,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953991168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8257602.0,"domains":[{"name":"uncore","consumption":1073.0,"timestamp":1713778123.2738173},{"name":"core","consumption":6212498.0,"timestamp":1713778123.273661},{"name":"dram","consumption":645039.0,"timestamp":1713778123.2734315}],"timestamp":1713778123.2723062}]},{"host":{"consumption":19030572.0,"timestamp":1713778133.4485748,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955719680","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10675758.0,"domains":[{"name":"uncore","consumption":111651.0,"timestamp":1713778133.3864427},{"name":"core","consumption":8321683.0,"timestamp":1713778133.386427},{"name":"dram","consumption":880649.0,"timestamp":1713778133.3864074}],"timestamp":1713778133.3861651}]},{"host":{"consumption":18044690.0,"timestamp":1713778143.5153856,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955723776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9966501.0,"domains":[{"name":"uncore","consumption":99055.0,"timestamp":1713778143.4558403},{"name":"core","consumption":7658628.0,"timestamp":1713778143.4558094},{"name":"dram","consumption":839877.0,"timestamp":1713778143.4557405}],"timestamp":1713778143.4554782}]},{"host":{"consumption":16208644.0,"timestamp":1713778153.6035,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955723776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8720445.0,"domains":[{"name":"uncore","consumption":28104.0,"timestamp":1713778153.5237722},{"name":"core","consumption":6585610.0,"timestamp":1713778153.5237236},{"name":"dram","consumption":708395.0,"timestamp":1713778153.5236516}],"timestamp":1713778153.522603}]},{"host":{"consumption":16021691.0,"timestamp":1713778163.6856952,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954953728","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8491445.0,"domains":[{"name":"uncore","consumption":12070.0,"timestamp":1713778163.6114707},{"name":"core","consumption":6391293.0,"timestamp":1713778163.611446},{"name":"dram","consumption":680306.0,"timestamp":1713778163.6114204}],"timestamp":1713778163.6108978}]},{"host":{"consumption":16108650.0,"timestamp":1713778173.75182,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954937344","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8471021.0,"domains":[{"name":"uncore","consumption":13198.0,"timestamp":1713778173.6924863},{"name":"core","consumption":6370185.0,"timestamp":1713778173.692438},{"name":"dram","consumption":680392.0,"timestamp":1713778173.6923525}],"timestamp":1713778173.6921015}]},{"host":{"consumption":16630331.0,"timestamp":1713778183.8555284,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954843136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9040092.0,"domains":[{"name":"uncore","consumption":11112.0,"timestamp":1713778183.7604535},{"name":"core","consumption":6876670.0,"timestamp":1713778183.760376},{"name":"dram","consumption":709599.0,"timestamp":1713778183.7602925}],"timestamp":1713778183.759236}]},{"host":{"consumption":20623596.0,"timestamp":1713778193.9633613,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954834944","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12148391.0,"domains":[{"name":"uncore","consumption":75015.0,"timestamp":1713778193.8707},{"name":"core","consumption":9812882.0,"timestamp":1713778193.8706245},{"name":"dram","consumption":899764.0,"timestamp":1713778193.870541}],"timestamp":1713778193.8694522}]},{"host":{"consumption":17016802.0,"timestamp":1713778204.034221,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954843136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9095368.0,"domains":[{"name":"uncore","consumption":66745.0,"timestamp":1713778203.9716375},{"name":"core","consumption":6873280.0,"timestamp":1713778203.9716249},{"name":"dram","consumption":784929.0,"timestamp":1713778203.97161}],"timestamp":1713778203.971305}]},{"host":{"consumption":17112820.0,"timestamp":1713778214.1344874,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954105856","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9360768.0,"domains":[{"name":"uncore","consumption":60661.0,"timestamp":1713778214.0423117},{"name":"core","consumption":7127434.0,"timestamp":1713778214.0422997},{"name":"dram","consumption":773353.0,"timestamp":1713778214.0422854}],"timestamp":1713778214.0420032}]},{"host":{"consumption":18903108.0,"timestamp":1713778224.2335865,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953991168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10563515.0,"domains":[{"name":"uncore","consumption":114829.0,"timestamp":1713778224.1482656},{"name":"core","consumption":8165978.0,"timestamp":1713778224.1480432},{"name":"dram","consumption":893129.0,"timestamp":1713778224.147817}],"timestamp":1713778224.1467283}]},{"host":{"consumption":16815078.0,"timestamp":1713778234.3094904,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953987072","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9073328.0,"domains":[{"name":"uncore","consumption":33808.0,"timestamp":1713778234.2399542},{"name":"core","consumption":6896834.0,"timestamp":1713778234.2399182},{"name":"dram","consumption":742332.0,"timestamp":1713778234.2398176}],"timestamp":1713778234.239405}]},{"host":{"consumption":16468905.0,"timestamp":1713778244.334961,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953974784","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8726411.0,"domains":[{"name":"uncore","consumption":51516.0,"timestamp":1713778244.31644},{"name":"core","consumption":6539256.0,"timestamp":1713778244.3163552},{"name":"dram","consumption":757700.0,"timestamp":1713778244.3162642}],"timestamp":1713778244.316021}]},{"host":{"consumption":16805254.0,"timestamp":1713778254.4097855,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953974784","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9099256.0,"domains":[{"name":"uncore","consumption":44680.0,"timestamp":1713778254.340396},{"name":"core","consumption":6936122.0,"timestamp":1713778254.3403227},{"name":"dram","consumption":744308.0,"timestamp":1713778254.3402247}],"timestamp":1713778254.3399541}]},{"host":{"consumption":16182486.0,"timestamp":1713778264.4898,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953188352","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8616916.0,"domains":[{"name":"uncore","consumption":22437.0,"timestamp":1713778264.4189432},{"name":"core","consumption":6478810.0,"timestamp":1713778264.4188635},{"name":"dram","consumption":722628.0,"timestamp":1713778264.4188013}],"timestamp":1713778264.4178174}]},{"host":{"consumption":17305524.0,"timestamp":1713778274.592418,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953188352","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9435582.0,"domains":[{"name":"uncore","consumption":76477.0,"timestamp":1713778274.4962804},{"name":"core","consumption":7187148.0,"timestamp":1713778274.4961896},{"name":"dram","consumption":795758.0,"timestamp":1713778274.4960816}],"timestamp":1713778274.4958107}]},{"host":{"consumption":18785188.0,"timestamp":1713778284.6705709,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953167872","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10446739.0,"domains":[{"name":"uncore","consumption":125444.0,"timestamp":1713778284.6004436},{"name":"core","consumption":8087918.0,"timestamp":1713778284.6003916},{"name":"dram","consumption":890058.0,"timestamp":1713778284.6003404}],"timestamp":1713778284.6000745}]},{"host":{"consumption":16213882.0,"timestamp":1713778294.7732277,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953221120","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8737510.0,"domains":[{"name":"uncore","consumption":16673.0,"timestamp":1713778294.6817791},{"name":"core","consumption":6622020.0,"timestamp":1713778294.6817255},{"name":"dram","consumption":691778.0,"timestamp":1713778294.6816595}],"timestamp":1713778294.6806479}]},{"host":{"consumption":16841598.0,"timestamp":1713778304.8395026,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953221120","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8990070.0,"domains":[{"name":"uncore","consumption":67261.0,"timestamp":1713778304.7806199},{"name":"core","consumption":6786066.0,"timestamp":1713778304.780608},{"name":"dram","consumption":772277.0,"timestamp":1713778304.7805893}],"timestamp":1713778304.7802932}]},{"host":{"consumption":15886529.0,"timestamp":1713778314.9193351,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152952422400","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8469075.0,"domains":[{"name":"uncore","consumption":13107.0,"timestamp":1713778314.8479078},{"name":"core","consumption":6378442.0,"timestamp":1713778314.8478038},{"name":"dram","consumption":681078.0,"timestamp":1713778314.847698}],"timestamp":1713778314.8471231}]},{"host":{"consumption":16300617.0,"timestamp":1713778324.9993405,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152952422400","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8713816.0,"domains":[{"name":"uncore","consumption":22667.0,"timestamp":1713778324.9289382},{"name":"core","consumption":6595842.0,"timestamp":1713778324.9288406},{"name":"dram","consumption":698723.0,"timestamp":1713778324.9287448}],"timestamp":1713778324.9282732}]},{"host":{"consumption":16274175.0,"timestamp":1713778335.0838835,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152952406016","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8685893.0,"domains":[{"name":"uncore","consumption":1072.0,"timestamp":1713778335.0060637},{"name":"core","consumption":6599734.0,"timestamp":1713778335.006051},{"name":"dram","consumption":684139.0,"timestamp":1713778335.0060375}],"timestamp":1713778335.0058546}]},{"host":{"consumption":15490132.0,"timestamp":1713778345.1519918,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152952406016","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8027108.0,"domains":[{"name":"uncore","consumption":1077.0,"timestamp":1713778345.0918274},{"name":"core","consumption":5970722.0,"timestamp":1713778345.091758},{"name":"dram","consumption":649692.0,"timestamp":1713778345.0917196}],"timestamp":1713778345.090986}]},{"host":{"consumption":15852559.0,"timestamp":1713778355.2326415,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152952401920","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8466667.0,"domains":[{"name":"uncore","consumption":1024.0,"timestamp":1713778355.1580641},{"name":"core","consumption":6413722.0,"timestamp":1713778355.1580014},{"name":"dram","consumption":649999.0,"timestamp":1713778355.157901}],"timestamp":1713778355.157543}]},{"host":{"consumption":16240695.0,"timestamp":1713778365.3005126,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152951627776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8585786.0,"domains":[{"name":"uncore","consumption":4891.0,"timestamp":1713778365.2409782},{"name":"core","consumption":6503272.0,"timestamp":1713778365.240959},{"name":"dram","consumption":685492.0,"timestamp":1713778365.2409384}],"timestamp":1713778365.2406104}]},{"host":{"consumption":16741456.0,"timestamp":1713778375.3824499,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152951611392","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9067325.0,"domains":[{"name":"uncore","consumption":28774.0,"timestamp":1713778375.3098996},{"name":"core","consumption":6902248.0,"timestamp":1713778375.3098242},{"name":"dram","consumption":751734.0,"timestamp":1713778375.309668}],"timestamp":1713778375.3084521}]},{"host":{"consumption":16094570.0,"timestamp":1713778385.4497921,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152951390208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8522783.0,"domains":[{"name":"uncore","consumption":3094.0,"timestamp":1713778385.3902752},{"name":"core","consumption":6430091.0,"timestamp":1713778385.3902605},{"name":"dram","consumption":675185.0,"timestamp":1713778385.3902447}],"timestamp":1713778385.3900678}]},{"host":{"consumption":15702383.0,"timestamp":1713778395.5490887,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152951390208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8299491.0,"domains":[{"name":"uncore","consumption":1303.0,"timestamp":1713778395.4573636},{"name":"core","consumption":6229972.0,"timestamp":1713778395.4572694},{"name":"dram","consumption":672905.0,"timestamp":1713778395.4571745}],"timestamp":1713778395.4568045}]},{"host":{"consumption":15926298.0,"timestamp":1713778405.6472604,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152950620160","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8407060.0,"domains":[{"name":"uncore","consumption":2913.0,"timestamp":1713778405.5561535},{"name":"core","consumption":6320935.0,"timestamp":1713778405.5561402},{"name":"dram","consumption":664250.0,"timestamp":1713778405.5561228}],"timestamp":1713778405.5559301}]},{"host":{"consumption":17106012.0,"timestamp":1713778415.7178535,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152950579200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9104477.0,"domains":[{"name":"uncore","consumption":86591.0,"timestamp":1713778415.6561277},{"name":"core","consumption":6853135.0,"timestamp":1713778415.656116},{"name":"dram","consumption":814963.0,"timestamp":1713778415.6561036}],"timestamp":1713778415.655915}]},{"host":{"consumption":20155688.0,"timestamp":1713778425.8072379,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152950501376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11732790.0,"domains":[{"name":"uncore","consumption":153072.0,"timestamp":1713778425.72294},{"name":"core","consumption":9271947.0,"timestamp":1713778425.7229323},{"name":"dram","consumption":959340.0,"timestamp":1713778425.722924}],"timestamp":1713778425.7227395}]},{"host":{"consumption":18600844.0,"timestamp":1713778435.892952,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152950497280","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10397299.0,"domains":[{"name":"uncore","consumption":127204.0,"timestamp":1713778435.8201876},{"name":"core","consumption":8062494.0,"timestamp":1713778435.8201532},{"name":"dram","consumption":901573.0,"timestamp":1713778435.8201234}],"timestamp":1713778435.8196468}]},{"host":{"consumption":18800292.0,"timestamp":1713778445.989877,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152950484992","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10658923.0,"domains":[{"name":"uncore","consumption":87654.0,"timestamp":1713778445.899361},{"name":"core","consumption":8358092.0,"timestamp":1713778445.899273},{"name":"dram","consumption":863223.0,"timestamp":1713778445.8991795}],"timestamp":1713778445.8988254}]},{"host":{"consumption":16503893.0,"timestamp":1713778456.0580692,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152949698560","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8760128.0,"domains":[{"name":"uncore","consumption":24881.0,"timestamp":1713778455.9982858},{"name":"core","consumption":6619273.0,"timestamp":1713778455.998271},{"name":"dram","consumption":722279.0,"timestamp":1713778455.9982567}],"timestamp":1713778455.9980743}]},{"host":{"consumption":16004728.0,"timestamp":1713778466.1401925,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152949706752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8535786.0,"domains":[{"name":"uncore","consumption":21513.0,"timestamp":1713778466.0670831},{"name":"core","consumption":6396448.0,"timestamp":1713778466.0669842},{"name":"dram","consumption":709696.0,"timestamp":1713778466.0668886}],"timestamp":1713778466.065791}]},{"host":{"consumption":15714509.0,"timestamp":1713778476.2077904,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152949694464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8224187.0,"domains":[{"name":"uncore","consumption":593.0,"timestamp":1713778476.1474054},{"name":"core","consumption":6164270.0,"timestamp":1713778476.147317},{"name":"dram","consumption":658405.0,"timestamp":1713778476.1472273}],"timestamp":1713778476.1469781}]},{"host":{"consumption":15509596.0,"timestamp":1713778486.2828846,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152949694464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8095696.0,"domains":[{"name":"uncore","consumption":1121.0,"timestamp":1713778486.2131784},{"name":"core","consumption":6029805.0,"timestamp":1713778486.2131019},{"name":"dram","consumption":658380.0,"timestamp":1713778486.2130163}],"timestamp":1713778486.2127774}]},{"host":{"consumption":15917170.0,"timestamp":1713778496.3726666,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152949686272","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8507946.0,"domains":[{"name":"uncore","consumption":508.0,"timestamp":1713778496.293669},{"name":"core","consumption":6425052.0,"timestamp":1713778496.2935703},{"name":"dram","consumption":674278.0,"timestamp":1713778496.293475}],"timestamp":1713778496.293092}]},{"host":{"consumption":17460936.0,"timestamp":1713778506.4403293,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152948645888","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9438790.0,"domains":[{"name":"uncore","consumption":63186.0,"timestamp":1713778506.3801222},{"name":"core","consumption":7188739.0,"timestamp":1713778506.3801115},{"name":"dram","consumption":801605.0,"timestamp":1713778506.3800988}],"timestamp":1713778506.37992}]},{"host":{"consumption":17647596.0,"timestamp":1713778516.467086,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152948502528","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9673203.0,"domains":[{"name":"uncore","consumption":63288.0,"timestamp":1713778516.4464781},{"name":"core","consumption":7367384.0,"timestamp":1713778516.4464595},{"name":"dram","consumption":781762.0,"timestamp":1713778516.4464357}],"timestamp":1713778516.4461293}]},{"host":{"consumption":17998264.0,"timestamp":1713778526.5498712,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152948396032","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9922432.0,"domains":[{"name":"uncore","consumption":93941.0,"timestamp":1713778526.4760978},{"name":"core","consumption":7568352.0,"timestamp":1713778526.47608},{"name":"dram","consumption":827088.0,"timestamp":1713778526.4760604}],"timestamp":1713778526.475664}]},{"host":{"consumption":17919348.0,"timestamp":1713778536.6171196,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152948281344","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9716069.0,"domains":[{"name":"uncore","consumption":91981.0,"timestamp":1713778536.55687},{"name":"core","consumption":7362954.0,"timestamp":1713778536.5568569},{"name":"dram","consumption":822564.0,"timestamp":1713778536.5568407}],"timestamp":1713778536.5566506}]},{"host":{"consumption":17562222.0,"timestamp":1713778546.7132726,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152948137984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9642658.0,"domains":[{"name":"uncore","consumption":83211.0,"timestamp":1713778546.6262805},{"name":"core","consumption":7284240.0,"timestamp":1713778546.6260839},{"name":"dram","consumption":808179.0,"timestamp":1713778546.6259797}],"timestamp":1713778546.624852}]},{"host":{"consumption":17814228.0,"timestamp":1713778556.7811947,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152947236864","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9663190.0,"domains":[{"name":"uncore","consumption":63607.0,"timestamp":1713778556.720838},{"name":"core","consumption":7354302.0,"timestamp":1713778556.720753},{"name":"dram","consumption":790565.0,"timestamp":1713778556.7206686}],"timestamp":1713778556.7204156}]},{"host":{"consumption":17404296.0,"timestamp":1713778566.870133,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152947122176","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9502488.0,"domains":[{"name":"uncore","consumption":50750.0,"timestamp":1713778566.7870471},{"name":"core","consumption":7210500.0,"timestamp":1713778566.78702},{"name":"dram","consumption":761710.0,"timestamp":1713778566.7869334}],"timestamp":1713778566.78662}]},{"host":{"consumption":16562229.0,"timestamp":1713778576.9380562,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152947113984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8787423.0,"domains":[{"name":"uncore","consumption":33913.0,"timestamp":1713778576.8780177},{"name":"core","consumption":6621239.0,"timestamp":1713778576.8779504},{"name":"dram","consumption":738578.0,"timestamp":1713778576.877923}],"timestamp":1713778576.8776152}]},{"host":{"consumption":16660833.0,"timestamp":1713778587.025769,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152947113984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9023139.0,"domains":[{"name":"uncore","consumption":36360.0,"timestamp":1713778586.9464016},{"name":"core","consumption":6847376.0,"timestamp":1713778586.9463885},{"name":"dram","consumption":750955.0,"timestamp":1713778586.9463744}],"timestamp":1713778586.9455016}]},{"host":{"consumption":27157940.0,"timestamp":1713778597.0935817,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152947126272","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":17499112.0,"domains":[{"name":"uncore","consumption":35800.0,"timestamp":1713778597.0323348},{"name":"core","consumption":15083170.0,"timestamp":1713778597.0323172},{"name":"dram","consumption":1039158.0,"timestamp":1713778597.0322983}],"timestamp":1713778597.032109}]},{"host":{"consumption":28478488.0,"timestamp":1713778607.1648693,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152946339840","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":18714750.0,"domains":[{"name":"uncore","consumption":44761.0,"timestamp":1713778607.1008992},{"name":"core","consumption":16264204.0,"timestamp":1713778607.1008866},{"name":"dram","consumption":1128004.0,"timestamp":1713778607.1008732}],"timestamp":1713778607.1006866}]},{"host":{"consumption":18499788.0,"timestamp":1713778617.2449539,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152946348032","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10543282.0,"domains":[{"name":"uncore","consumption":35862.0,"timestamp":1713778617.1762187},{"name":"core","consumption":8301560.0,"timestamp":1713778617.1761572},{"name":"dram","consumption":822909.0,"timestamp":1713778617.176089}],"timestamp":1713778617.175215}]},{"host":{"consumption":23262280.0,"timestamp":1713778627.2894037,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152946331648","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14149683.0,"domains":[{"name":"uncore","consumption":42079.0,"timestamp":1713778627.251147},{"name":"core","consumption":11705086.0,"timestamp":1713778627.2510552},{"name":"dram","consumption":1064990.0,"timestamp":1713778627.2509615}],"timestamp":1713778627.2506926}]},{"host":{"consumption":21524196.0,"timestamp":1713778637.3684716,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152946331648","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":13009110.0,"domains":[{"name":"uncore","consumption":28453.0,"timestamp":1713778637.2985888},{"name":"core","consumption":10682544.0,"timestamp":1713778637.2984},{"name":"dram","consumption":871337.0,"timestamp":1713778637.298218}],"timestamp":1713778637.297285}]},{"host":{"consumption":18142652.0,"timestamp":1713778647.434562,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152946593792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10150490.0,"domains":[{"name":"uncore","consumption":4452.0,"timestamp":1713778647.3748107},{"name":"core","consumption":7951602.0,"timestamp":1713778647.3747218},{"name":"dram","consumption":701909.0,"timestamp":1713778647.3746347}],"timestamp":1713778647.3743806}]},{"host":{"consumption":17666958.0,"timestamp":1713778657.503115,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152945795072","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9798788.0,"domains":[{"name":"uncore","consumption":50984.0,"timestamp":1713778657.440225},{"name":"core","consumption":7597266.0,"timestamp":1713778657.4401462},{"name":"dram","consumption":746821.0,"timestamp":1713778657.440057}],"timestamp":1713778657.4398046}]},{"host":{"consumption":19220484.0,"timestamp":1713778667.5885675,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152945782784","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11069197.0,"domains":[{"name":"uncore","consumption":77207.0,"timestamp":1713778667.5139923},{"name":"core","consumption":8749279.0,"timestamp":1713778667.5138848},{"name":"dram","consumption":857648.0,"timestamp":1713778667.5138164}],"timestamp":1713778667.5128698}]},{"host":{"consumption":20951024.0,"timestamp":1713778677.6627448,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152945745920","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12430102.0,"domains":[{"name":"uncore","consumption":69874.0,"timestamp":1713778677.599442},{"name":"core","consumption":10106482.0,"timestamp":1713778677.5993917},{"name":"dram","consumption":841225.0,"timestamp":1713778677.5993023}],"timestamp":1713778677.5990338}]},{"host":{"consumption":16926342.0,"timestamp":1713778687.7279685,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152945446912","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9035822.0,"domains":[{"name":"uncore","consumption":56728.0,"timestamp":1713778687.6679056},{"name":"core","consumption":6790726.0,"timestamp":1713778687.6678214},{"name":"dram","consumption":761855.0,"timestamp":1713778687.667737}],"timestamp":1713778687.66746}]},{"host":{"consumption":19875748.0,"timestamp":1713778697.7560825,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152945446912","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11318247.0,"domains":[{"name":"uncore","consumption":157622.0,"timestamp":1713778697.733742},{"name":"core","consumption":8787961.0,"timestamp":1713778697.733689},{"name":"dram","consumption":926546.0,"timestamp":1713778697.7336307}],"timestamp":1713778697.7332962}]},{"host":{"consumption":17565808.0,"timestamp":1713778707.8432217,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152944713728","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9708976.0,"domains":[{"name":"uncore","consumption":68045.0,"timestamp":1713778707.7646315},{"name":"core","consumption":7454607.0,"timestamp":1713778707.7645397},{"name":"dram","consumption":792112.0,"timestamp":1713778707.7644496}],"timestamp":1713778707.7642076}]},{"host":{"consumption":16271821.0,"timestamp":1713778717.9177754,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152944709632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8585741.0,"domains":[{"name":"uncore","consumption":16722.0,"timestamp":1713778717.8493693},{"name":"core","consumption":6444695.0,"timestamp":1713778717.8493614},{"name":"dram","consumption":704756.0,"timestamp":1713778717.8493526}],"timestamp":1713778717.849184}]},{"host":{"consumption":16705390.0,"timestamp":1713778728.0240765,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152944709632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9099752.0,"domains":[{"name":"uncore","consumption":64872.0,"timestamp":1713778727.9277136},{"name":"core","consumption":6869289.0,"timestamp":1713778727.9276729},{"name":"dram","consumption":778874.0,"timestamp":1713778727.9276247}],"timestamp":1713778727.9262896}]},{"host":{"consumption":17832512.0,"timestamp":1713778738.0924132,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152944668672","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9709509.0,"domains":[{"name":"uncore","consumption":75912.0,"timestamp":1713778738.0317535},{"name":"core","consumption":7418628.0,"timestamp":1713778738.031738},{"name":"dram","consumption":823897.0,"timestamp":1713778738.031726}],"timestamp":1713778738.0315561}]},{"host":{"consumption":20198180.0,"timestamp":1713778748.160627,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152944652288","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11694763.0,"domains":[{"name":"uncore","consumption":142257.0,"timestamp":1713778748.09847},{"name":"core","consumption":9226643.0,"timestamp":1713778748.0983844},{"name":"dram","consumption":969974.0,"timestamp":1713778748.0982988}],"timestamp":1713778748.0980463}]},{"host":{"consumption":15958849.0,"timestamp":1713778758.2308273,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943874048","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8529656.0,"domains":[{"name":"uncore","consumption":11485.0,"timestamp":1713778758.1690784},{"name":"core","consumption":6410123.0,"timestamp":1713778758.1689932},{"name":"dram","consumption":681797.0,"timestamp":1713778758.1689286}],"timestamp":1713778758.16806}]},{"host":{"consumption":24738866.0,"timestamp":1713778768.262927,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943882240","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":15562587.0,"domains":[{"name":"uncore","consumption":81832.0,"timestamp":1713778768.2387984},{"name":"core","consumption":13186542.0,"timestamp":1713778768.2387848},{"name":"dram","consumption":1013336.0,"timestamp":1713778768.2387707}],"timestamp":1713778768.2385335}]},{"host":{"consumption":19744614.0,"timestamp":1713778778.331345,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943849472","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11519386.0,"domains":[{"name":"uncore","consumption":22756.0,"timestamp":1713778778.2697496},{"name":"core","consumption":9316394.0,"timestamp":1713778778.2697268},{"name":"dram","consumption":812384.0,"timestamp":1713778778.2696981}],"timestamp":1713778778.269317}]},{"host":{"consumption":19459386.0,"timestamp":1713778788.4409165,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943845376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11461473.0,"domains":[{"name":"uncore","consumption":31296.0,"timestamp":1713778788.3407662},{"name":"core","consumption":9237161.0,"timestamp":1713778788.340537},{"name":"dram","consumption":827642.0,"timestamp":1713778788.3403227}],"timestamp":1713778788.33934}]},{"host":{"consumption":18436102.0,"timestamp":1713778798.5504792,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943853568","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10466570.0,"domains":[{"name":"uncore","consumption":29233.0,"timestamp":1713778798.45015},{"name":"core","consumption":8261108.0,"timestamp":1713778798.4501016},{"name":"dram","consumption":796075.0,"timestamp":1713778798.4500134}],"timestamp":1713778798.4496686}]},{"host":{"consumption":20001496.0,"timestamp":1713778808.640647,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943067136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11704517.0,"domains":[{"name":"uncore","consumption":54240.0,"timestamp":1713778808.5617294},{"name":"core","consumption":9452224.0,"timestamp":1713778808.5616283},{"name":"dram","consumption":781040.0,"timestamp":1713778808.5615287}],"timestamp":1713778808.5606935}]},{"host":{"consumption":18077090.0,"timestamp":1713778818.710855,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943054848","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9995364.0,"domains":[{"name":"uncore","consumption":92504.0,"timestamp":1713778818.6501791},{"name":"core","consumption":7699817.0,"timestamp":1713778818.6500888},{"name":"dram","consumption":822687.0,"timestamp":1713778818.6499984}],"timestamp":1713778818.6497564}]},{"host":{"consumption":16362333.0,"timestamp":1713778828.80112,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943038464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8835574.0,"domains":[{"name":"uncore","consumption":27299.0,"timestamp":1713778828.7198443},{"name":"core","consumption":6682977.0,"timestamp":1713778828.719802},{"name":"dram","consumption":712363.0,"timestamp":1713778828.7197506}],"timestamp":1713778828.7187848}]},{"host":{"consumption":16467553.0,"timestamp":1713778838.877483,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943026176","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8775517.0,"domains":[{"name":"uncore","consumption":29910.0,"timestamp":1713778838.8084548},{"name":"core","consumption":6634164.0,"timestamp":1713778838.808442},{"name":"dram","consumption":710494.0,"timestamp":1713778838.8084257}],"timestamp":1713778838.8082528}]},{"host":{"consumption":16077070.0,"timestamp":1713778848.9446871,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152942239744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8514501.0,"domains":[{"name":"uncore","consumption":20074.0,"timestamp":1713778848.8842096},{"name":"core","consumption":6378392.0,"timestamp":1713778848.884195},{"name":"dram","consumption":687720.0,"timestamp":1713778848.884182}],"timestamp":1713778848.8840048}]},{"host":{"consumption":16118377.0,"timestamp":1713778859.024553,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152942026752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8688166.0,"domains":[{"name":"uncore","consumption":1685.0,"timestamp":1713778858.9515653},{"name":"core","consumption":6589562.0,"timestamp":1713778858.9514425},{"name":"dram","consumption":662978.0,"timestamp":1713778858.9513195}],"timestamp":1713778858.95085}]},{"host":{"consumption":15860850.0,"timestamp":1713778869.0948727,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152942051328","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8282485.0,"domains":[{"name":"uncore","consumption":7841.0,"timestamp":1713778869.0309985},{"name":"core","consumption":6195926.0,"timestamp":1713778869.0309856},{"name":"dram","consumption":662119.0,"timestamp":1713778869.0309694}],"timestamp":1713778869.0307913}]},{"host":{"consumption":15820916.0,"timestamp":1713778879.1628766,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152942051328","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8353632.0,"domains":[{"name":"uncore","consumption":2339.0,"timestamp":1713778879.103162},{"name":"core","consumption":6269642.0,"timestamp":1713778879.1031518},{"name":"dram","consumption":669379.0,"timestamp":1713778879.1031404}],"timestamp":1713778879.1029003}]},{"host":{"consumption":28507276.0,"timestamp":1713778889.2309678,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152942063616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":18768124.0,"domains":[{"name":"uncore","consumption":41915.0,"timestamp":1713778889.1694262},{"name":"core","consumption":16377608.0,"timestamp":1713778889.1694157},{"name":"dram","consumption":1118404.0,"timestamp":1713778889.1694038}],"timestamp":1713778889.1691332}]},{"host":{"consumption":20713548.0,"timestamp":1713778899.3085809,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152941256704","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12419683.0,"domains":[{"name":"uncore","consumption":15095.0,"timestamp":1713778899.2372148},{"name":"core","consumption":10194320.0,"timestamp":1713778899.2372034},{"name":"dram","consumption":838509.0,"timestamp":1713778899.2371914}],"timestamp":1713778899.2369263}]},{"host":{"consumption":19035308.0,"timestamp":1713778909.378997,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152941264896","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10928281.0,"domains":[{"name":"uncore","consumption":3688.0,"timestamp":1713778909.3157477},{"name":"core","consumption":8781333.0,"timestamp":1713778909.315735},{"name":"dram","consumption":726519.0,"timestamp":1713778909.3157215}],"timestamp":1713778909.3154285}]},{"host":{"consumption":16065870.0,"timestamp":1713778919.4597495,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152941244416","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8535028.0,"domains":[{"name":"uncore","consumption":1672.0,"timestamp":1713778919.387487},{"name":"core","consumption":6419199.0,"timestamp":1713778919.387414},{"name":"dram","consumption":689804.0,"timestamp":1713778919.3873172}],"timestamp":1713778919.3863416}]},{"host":{"consumption":17734752.0,"timestamp":1713778929.5379992,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152941248512","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9834249.0,"domains":[{"name":"uncore","consumption":23697.0,"timestamp":1713778929.465888},{"name":"core","consumption":7633540.0,"timestamp":1713778929.465871},{"name":"dram","consumption":764096.0,"timestamp":1713778929.4658518}],"timestamp":1713778929.4655876}]},{"host":{"consumption":15843842.0,"timestamp":1713778939.6145253,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152941248512","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8270132.0,"domains":[{"name":"uncore","consumption":3185.0,"timestamp":1713778939.5446556},{"name":"core","consumption":6191850.0,"timestamp":1713778939.5445673},{"name":"dram","consumption":666510.0,"timestamp":1713778939.5444832}],"timestamp":1713778939.544224}]},{"host":{"consumption":16050476.0,"timestamp":1713778949.7187426,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152940462080","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8640127.0,"domains":[{"name":"uncore","consumption":6901.0,"timestamp":1713778949.627088},{"name":"core","consumption":6530049.0,"timestamp":1713778949.6270237},{"name":"dram","consumption":681281.0,"timestamp":1713778949.6269534}],"timestamp":1713778949.6258066}]},{"host":{"consumption":15882139.0,"timestamp":1713778959.7902706,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152940457984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8307277.0,"domains":[{"name":"uncore","consumption":567.0,"timestamp":1713778959.72786},{"name":"core","consumption":6233139.0,"timestamp":1713778959.7278116},{"name":"dram","consumption":662680.0,"timestamp":1713778959.72772}],"timestamp":1713778959.7274637}]},{"host":{"consumption":15869498.0,"timestamp":1713778969.8930824,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152940437504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8485106.0,"domains":[{"name":"uncore","consumption":2520.0,"timestamp":1713778969.8003242},{"name":"core","consumption":6393264.0,"timestamp":1713778969.8000796},{"name":"dram","consumption":688495.0,"timestamp":1713778969.799851}],"timestamp":1713778969.7987456}]},{"host":{"consumption":19005580.0,"timestamp":1713778979.9788907,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152940474368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10917105.0,"domains":[{"name":"uncore","consumption":4318.0,"timestamp":1713778979.9062507},{"name":"core","consumption":8738286.0,"timestamp":1713778979.9061534},{"name":"dram","consumption":712746.0,"timestamp":1713778979.9060626}],"timestamp":1713778979.9056907}]},{"host":{"consumption":15889825.0,"timestamp":1713778990.047049,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152940253184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8307917.0,"domains":[{"name":"uncore","consumption":1852.0,"timestamp":1713778989.9862208},{"name":"core","consumption":6211961.0,"timestamp":1713778989.9862065},{"name":"dram","consumption":670371.0,"timestamp":1713778989.9861887}],"timestamp":1713778989.9860132}]},{"host":{"consumption":17511788.0,"timestamp":1713779000.15303,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152939466752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9808308.0,"domains":[{"name":"uncore","consumption":11485.0,"timestamp":1713779000.0560756},{"name":"core","consumption":7665499.0,"timestamp":1713779000.0558634},{"name":"dram","consumption":749424.0,"timestamp":1713779000.0556576}],"timestamp":1713779000.0546665}]},{"host":{"consumption":16421535.0,"timestamp":1713779010.2346416,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152939483136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8743779.0,"domains":[{"name":"uncore","consumption":4874.0,"timestamp":1713779010.1610498},{"name":"core","consumption":6634943.0,"timestamp":1713779010.160999},{"name":"dram","consumption":690548.0,"timestamp":1713779010.1609514}],"timestamp":1713779010.1607027}]},{"host":{"consumption":15680743.0,"timestamp":1713779020.3049817,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152939470848","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8219063.0,"domains":[{"name":"uncore","consumption":1095.0,"timestamp":1713779020.2429798},{"name":"core","consumption":6138614.0,"timestamp":1713779020.2429557},{"name":"dram","consumption":657723.0,"timestamp":1713779020.2429168}],"timestamp":1713779020.2425015}]},{"host":{"consumption":16498719.0,"timestamp":1713779030.3953385,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152939462656","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8948646.0,"domains":[{"name":"uncore","consumption":14617.0,"timestamp":1713779030.314326},{"name":"core","consumption":6824823.0,"timestamp":1713779030.3142323},{"name":"dram","consumption":712441.0,"timestamp":1713779030.314138}],"timestamp":1713779030.3135788}]},{"host":{"consumption":16712082.0,"timestamp":1713779040.472605,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152939425792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9076443.0,"domains":[{"name":"uncore","consumption":10636.0,"timestamp":1713779040.4022105},{"name":"core","consumption":6951836.0,"timestamp":1713779040.4021976},{"name":"dram","consumption":707277.0,"timestamp":1713779040.4021845}],"timestamp":1713779040.4019973}]},{"host":{"consumption":15970347.0,"timestamp":1713779050.498144,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152938647552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8387851.0,"domains":[{"name":"uncore","consumption":6850.0,"timestamp":1713779050.4789965},{"name":"core","consumption":6279063.0,"timestamp":1713779050.478985},{"name":"dram","consumption":687153.0,"timestamp":1713779050.4789732}],"timestamp":1713779050.4788008}]},{"host":{"consumption":16211361.0,"timestamp":1713779060.545239,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152938647552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8728988.0,"domains":[{"name":"uncore","consumption":7444.0,"timestamp":1713779060.5056376},{"name":"core","consumption":6644282.0,"timestamp":1713779060.505486},{"name":"dram","consumption":679755.0,"timestamp":1713779060.5053368}],"timestamp":1713779060.5046291}]},{"host":{"consumption":16573144.0,"timestamp":1713779070.6172113,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152938655744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8859013.0,"domains":[{"name":"uncore","consumption":18508.0,"timestamp":1713779070.55355},{"name":"core","consumption":6728934.0,"timestamp":1713779070.5535376},{"name":"dram","consumption":724941.0,"timestamp":1713779070.553524}],"timestamp":1713779070.553239}]},{"host":{"consumption":15968675.0,"timestamp":1713779080.7122705,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152938643456","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8540724.0,"domains":[{"name":"uncore","consumption":12393.0,"timestamp":1713779080.6296477},{"name":"core","consumption":6447208.0,"timestamp":1713779080.6296098},{"name":"dram","consumption":685847.0,"timestamp":1713779080.6295674}],"timestamp":1713779080.6282272}]},{"host":{"consumption":17910684.0,"timestamp":1713779090.8161547,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152938643456","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9905110.0,"domains":[{"name":"uncore","consumption":130444.0,"timestamp":1713779090.7213576},{"name":"core","consumption":7581105.0,"timestamp":1713779090.7212732},{"name":"dram","consumption":862300.0,"timestamp":1713779090.7211812}],"timestamp":1713779090.7209313}]},{"host":{"consumption":16826596.0,"timestamp":1713779100.904564,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937914368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9055155.0,"domains":[{"name":"uncore","consumption":77555.0,"timestamp":1713779100.8293986},{"name":"core","consumption":6808553.0,"timestamp":1713779100.8292298},{"name":"dram","consumption":782856.0,"timestamp":1713779100.8290398}],"timestamp":1713779100.827891}]},{"host":{"consumption":17954162.0,"timestamp":1713779110.9817984,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937918464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9903029.0,"domains":[{"name":"uncore","consumption":82085.0,"timestamp":1713779110.9119844},{"name":"core","consumption":7665349.0,"timestamp":1713779110.9119031},{"name":"dram","consumption":799713.0,"timestamp":1713779110.9118137}],"timestamp":1713779110.9115727}]},{"host":{"consumption":17036168.0,"timestamp":1713779121.0684495,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937918464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9400484.0,"domains":[{"name":"uncore","consumption":52179.0,"timestamp":1713779120.9925644},{"name":"core","consumption":7211028.0,"timestamp":1713779120.9924488},{"name":"dram","consumption":757602.0,"timestamp":1713779120.992229}],"timestamp":1713779120.9910352}]},{"host":{"consumption":17159628.0,"timestamp":1713779131.1472354,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937926656","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9362443.0,"domains":[{"name":"uncore","consumption":82304.0,"timestamp":1713779131.0772424},{"name":"core","consumption":7122046.0,"timestamp":1713779131.0770326},{"name":"dram","consumption":784989.0,"timestamp":1713779131.076822}],"timestamp":1713779131.0757334}]},{"host":{"consumption":16968178.0,"timestamp":1713779141.2149475,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937914368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9074315.0,"domains":[{"name":"uncore","consumption":90800.0,"timestamp":1713779141.1547177},{"name":"core","consumption":6826845.0,"timestamp":1713779141.1547048},{"name":"dram","consumption":796747.0,"timestamp":1713779141.1546912}],"timestamp":1713779141.154506}]},{"host":{"consumption":16517341.0,"timestamp":1713779151.3134944,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937127936","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8965330.0,"domains":[{"name":"uncore","consumption":70466.0,"timestamp":1713779151.2246838},{"name":"core","consumption":6762027.0,"timestamp":1713779151.2246084},{"name":"dram","consumption":755470.0,"timestamp":1713779151.2245271}],"timestamp":1713779151.2234595}]},{"host":{"consumption":17307484.0,"timestamp":1713779161.3909304,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937103360","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9325712.0,"domains":[{"name":"uncore","consumption":49885.0,"timestamp":1713779161.3223126},{"name":"core","consumption":7122705.0,"timestamp":1713779161.3223045},{"name":"dram","consumption":760077.0,"timestamp":1713779161.3222961}],"timestamp":1713779161.322125}]},{"host":{"consumption":18305468.0,"timestamp":1713779171.482923,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937058304","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10355362.0,"domains":[{"name":"uncore","consumption":79782.0,"timestamp":1713779171.4014454},{"name":"core","consumption":8073556.0,"timestamp":1713779171.4013734},{"name":"dram","consumption":816200.0,"timestamp":1713779171.4012926}],"timestamp":1713779171.4002924}]},{"host":{"consumption":18505456.0,"timestamp":1713779181.588552,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937054208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10421209.0,"domains":[{"name":"uncore","consumption":88634.0,"timestamp":1713779181.4965603},{"name":"core","consumption":8119319.0,"timestamp":1713779181.4964838},{"name":"dram","consumption":826216.0,"timestamp":1713779181.4963953}],"timestamp":1713779181.495405}]},{"host":{"consumption":17429780.0,"timestamp":1713779191.6565719,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937046016","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9426209.0,"domains":[{"name":"uncore","consumption":90578.0,"timestamp":1713779191.5973954},{"name":"core","consumption":7164819.0,"timestamp":1713779191.5973878},{"name":"dram","consumption":804677.0,"timestamp":1713779191.5973792}],"timestamp":1713779191.5971985}]},{"host":{"consumption":18172088.0,"timestamp":1713779201.753284,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152936247296","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10160605.0,"domains":[{"name":"uncore","consumption":134823.0,"timestamp":1713779201.665971},{"name":"core","consumption":7781540.0,"timestamp":1713779201.6658947},{"name":"dram","consumption":883729.0,"timestamp":1713779201.6658468}],"timestamp":1713779201.6647305}]},{"host":{"consumption":17235452.0,"timestamp":1713779211.821759,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152936243200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9298197.0,"domains":[{"name":"uncore","consumption":81811.0,"timestamp":1713779211.762119},{"name":"core","consumption":7048108.0,"timestamp":1713779211.7620697},{"name":"dram","consumption":800792.0,"timestamp":1713779211.762021}],"timestamp":1713779211.761791}]},{"host":{"consumption":17938002.0,"timestamp":1713779221.8977249,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152936206336","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9881089.0,"domains":[{"name":"uncore","consumption":119330.0,"timestamp":1713779221.8290174},{"name":"core","consumption":7557321.0,"timestamp":1713779221.828911},{"name":"dram","consumption":874837.0,"timestamp":1713779221.828804}],"timestamp":1713779221.8283737}]},{"host":{"consumption":16798002.0,"timestamp":1713779232.00544,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152936210432","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9176629.0,"domains":[{"name":"uncore","consumption":35129.0,"timestamp":1713779231.9062169},{"name":"core","consumption":6978706.0,"timestamp":1713779231.9061532},{"name":"dram","consumption":754076.0,"timestamp":1713779231.9060853}],"timestamp":1713779231.9051952}]},{"host":{"consumption":16507695.0,"timestamp":1713779242.0815477,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152935424000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8775265.0,"domains":[{"name":"uncore","consumption":9758.0,"timestamp":1713779242.0135086},{"name":"core","consumption":6661140.0,"timestamp":1713779242.0134947},{"name":"dram","consumption":708098.0,"timestamp":1713779242.0134768}],"timestamp":1713779242.0132875}]},{"host":{"consumption":15866538.0,"timestamp":1713779252.147115,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152935424000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8410933.0,"domains":[{"name":"uncore","consumption":1029.0,"timestamp":1713779252.0875256},{"name":"core","consumption":6316372.0,"timestamp":1713779252.0875032},{"name":"dram","consumption":678091.0,"timestamp":1713779252.0874794}],"timestamp":1713779252.0871027}]},{"host":{"consumption":15743678.0,"timestamp":1713779262.2271323,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152935444480","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8370854.0,"domains":[{"name":"uncore","consumption":497.0,"timestamp":1713779262.156445},{"name":"core","consumption":6289246.0,"timestamp":1713779262.1562335},{"name":"dram","consumption":666783.0,"timestamp":1713779262.1560237}],"timestamp":1713779262.1549752}]},{"host":{"consumption":17338976.0,"timestamp":1713779272.3032286,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152935452672","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9470847.0,"domains":[{"name":"uncore","consumption":27913.0,"timestamp":1713779272.234251},{"name":"core","consumption":7303088.0,"timestamp":1713779272.2342405},{"name":"dram","consumption":765635.0,"timestamp":1713779272.2342286}],"timestamp":1713779272.2340517}]},{"host":{"consumption":17239816.0,"timestamp":1713779282.369817,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152935456768","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9466944.0,"domains":[{"name":"uncore","consumption":23438.0,"timestamp":1713779282.309299},{"name":"core","consumption":7275337.0,"timestamp":1713779282.3092208},{"name":"dram","consumption":776075.0,"timestamp":1713779282.3091397}],"timestamp":1713779282.308864}]},{"host":{"consumption":16693718.0,"timestamp":1713779292.4723623,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152934440960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9121357.0,"domains":[{"name":"uncore","consumption":10145.0,"timestamp":1713779292.3796878},{"name":"core","consumption":6958026.0,"timestamp":1713779292.3794663},{"name":"dram","consumption":719963.0,"timestamp":1713779292.379243}],"timestamp":1713779292.3780332}]},{"host":{"consumption":15957342.0,"timestamp":1713779302.5373788,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152934440960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8397257.0,"domains":[{"name":"uncore","consumption":1063.0,"timestamp":1713779302.4803655},{"name":"core","consumption":6318118.0,"timestamp":1713779302.480347},{"name":"dram","consumption":670688.0,"timestamp":1713779302.4802632}],"timestamp":1713779302.4800878}]},{"host":{"consumption":16024489.0,"timestamp":1713779312.619052,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152934440960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8559341.0,"domains":[{"name":"uncore","consumption":6954.0,"timestamp":1713779312.5470173},{"name":"core","consumption":6448383.0,"timestamp":1713779312.5469255},{"name":"dram","consumption":694130.0,"timestamp":1713779312.5468543}],"timestamp":1713779312.5457187}]},{"host":{"consumption":23071216.0,"timestamp":1713779322.6947696,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152934428672","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14056033.0,"domains":[{"name":"uncore","consumption":36874.0,"timestamp":1713779322.6256273},{"name":"core","consumption":11559774.0,"timestamp":1713779322.625553},{"name":"dram","consumption":1058001.0,"timestamp":1713779322.6254654}],"timestamp":1713779322.625211}]},{"host":{"consumption":18695448.0,"timestamp":1713779332.7679017,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152934428672","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10441833.0,"domains":[{"name":"uncore","consumption":24983.0,"timestamp":1713779332.703242},{"name":"core","consumption":8137776.0,"timestamp":1713779332.703227},{"name":"dram","consumption":912053.0,"timestamp":1713779332.7032094}],"timestamp":1713779332.702921}]},{"host":{"consumption":17137862.0,"timestamp":1713779342.871163,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152933646336","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9457530.0,"domains":[{"name":"uncore","consumption":16191.0,"timestamp":1713779342.77958},{"name":"core","consumption":7307213.0,"timestamp":1713779342.779362},{"name":"dram","consumption":738719.0,"timestamp":1713779342.7791367}],"timestamp":1713779342.777919}]},{"host":{"consumption":22560276.0,"timestamp":1713779352.9509864,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152933654528","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14061832.0,"domains":[{"name":"uncore","consumption":11974.0,"timestamp":1713779352.881851},{"name":"core","consumption":11861738.0,"timestamp":1713779352.8817463},{"name":"dram","consumption":751037.0,"timestamp":1713779352.8815885}],"timestamp":1713779352.8806472}]},{"host":{"consumption":16085242.0,"timestamp":1713779363.019219,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152933662720","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8500506.0,"domains":[{"name":"uncore","consumption":1059.0,"timestamp":1713779362.9609694},{"name":"core","consumption":6413019.0,"timestamp":1713779362.960914},{"name":"dram","consumption":659915.0,"timestamp":1713779362.9608593}],"timestamp":1713779362.9605148}]},{"host":{"consumption":17489166.0,"timestamp":1713779373.0832603,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152933662720","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9708083.0,"domains":[{"name":"uncore","consumption":9800.0,"timestamp":1713779373.0251677},{"name":"core","consumption":7572027.0,"timestamp":1713779373.0251226},{"name":"dram","consumption":729759.0,"timestamp":1713779373.025079}],"timestamp":1713779373.0248156}]},{"host":{"consumption":16340626.0,"timestamp":1713779383.1590207,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152933662720","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8835945.0,"domains":[{"name":"uncore","consumption":4219.0,"timestamp":1713779383.092381},{"name":"core","consumption":6711124.0,"timestamp":1713779383.0921726},{"name":"dram","consumption":680159.0,"timestamp":1713779383.0919669}],"timestamp":1713779383.0910106}]},{"host":{"consumption":15704310.0,"timestamp":1713779393.2263083,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152932876288","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8199319.0,"domains":[{"name":"uncore","consumption":539.0,"timestamp":1713779393.1667635},{"name":"core","consumption":6129468.0,"timestamp":1713779393.1666791},{"name":"dram","consumption":660347.0,"timestamp":1713779393.166594}],"timestamp":1713779393.1663363}]},{"host":{"consumption":18256352.0,"timestamp":1713779403.321224,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152932839424","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10266820.0,"domains":[{"name":"uncore","consumption":133123.0,"timestamp":1713779403.2360106},{"name":"core","consumption":7905070.0,"timestamp":1713779403.2358053},{"name":"dram","consumption":915300.0,"timestamp":1713779403.2355986}],"timestamp":1713779403.2345705}]},{"host":{"consumption":16047888.0,"timestamp":1713779413.392738,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152932851712","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8439595.0,"domains":[{"name":"uncore","consumption":2823.0,"timestamp":1713779413.3298821},{"name":"core","consumption":6358749.0,"timestamp":1713779413.3298697},{"name":"dram","consumption":659196.0,"timestamp":1713779413.3298564}],"timestamp":1713779413.3295565}]},{"host":{"consumption":19185602.0,"timestamp":1713779423.4688756,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152932851712","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11159247.0,"domains":[{"name":"uncore","consumption":1666.0,"timestamp":1713779423.401538},{"name":"core","consumption":9036575.0,"timestamp":1713779423.4015303},{"name":"dram","consumption":748903.0,"timestamp":1713779423.401522}],"timestamp":1713779423.401344}]},{"host":{"consumption":19166384.0,"timestamp":1713779433.5555425,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152932839424","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10921425.0,"domains":[{"name":"uncore","consumption":136626.0,"timestamp":1713779433.475286},{"name":"core","consumption":8491875.0,"timestamp":1713779433.4752202},{"name":"dram","consumption":912724.0,"timestamp":1713779433.4751387}],"timestamp":1713779433.4742918}]},{"host":{"consumption":18883858.0,"timestamp":1713779443.6229477,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931336192","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10554818.0,"domains":[{"name":"uncore","consumption":105938.0,"timestamp":1713779443.5628278},{"name":"core","consumption":8209524.0,"timestamp":1713779443.5627787},{"name":"dram","consumption":865554.0,"timestamp":1713779443.5627296}],"timestamp":1713779443.5625181}]},{"host":{"consumption":16295558.0,"timestamp":1713779453.6936886,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931295232","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8739073.0,"domains":[{"name":"uncore","consumption":35852.0,"timestamp":1713779453.6323974},{"name":"core","consumption":6579468.0,"timestamp":1713779453.6323264},{"name":"dram","consumption":720932.0,"timestamp":1713779453.6322405}],"timestamp":1713779453.6312318}]},{"host":{"consumption":16279916.0,"timestamp":1713779463.7741277,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931291136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8762914.0,"domains":[{"name":"uncore","consumption":1521.0,"timestamp":1713779463.703506},{"name":"core","consumption":6655746.0,"timestamp":1713779463.7034302},{"name":"dram","consumption":675341.0,"timestamp":1713779463.7033434}],"timestamp":1713779463.7022796}]},{"host":{"consumption":16727345.0,"timestamp":1713779473.840159,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931274752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8895950.0,"domains":[{"name":"uncore","consumption":77330.0,"timestamp":1713779473.7809298},{"name":"core","consumption":6671507.0,"timestamp":1713779473.7809134},{"name":"dram","consumption":764552.0,"timestamp":1713779473.7808952}],"timestamp":1713779473.7806025}]},{"host":{"consumption":16210897.0,"timestamp":1713779483.9411294,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931274752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8743175.0,"domains":[{"name":"uncore","consumption":16663.0,"timestamp":1713779483.8499062},{"name":"core","consumption":6617284.0,"timestamp":1713779483.8498166},{"name":"dram","consumption":704106.0,"timestamp":1713779483.8496253}],"timestamp":1713779483.8484247}]},{"host":{"consumption":17165846.0,"timestamp":1713779494.0383985,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931274752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9361603.0,"domains":[{"name":"uncore","consumption":70871.0,"timestamp":1713779493.953605},{"name":"core","consumption":7143054.0,"timestamp":1713779493.9535053},{"name":"dram","consumption":776454.0,"timestamp":1713779493.9534185}],"timestamp":1713779493.9521666}]},{"host":{"consumption":17840616.0,"timestamp":1713779504.1096883,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931291136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9835030.0,"domains":[{"name":"uncore","consumption":90175.0,"timestamp":1713779504.04743},{"name":"core","consumption":7569733.0,"timestamp":1713779504.0473733},{"name":"dram","consumption":813438.0,"timestamp":1713779504.0472813}],"timestamp":1713779504.0470135}]},{"host":{"consumption":17128914.0,"timestamp":1713779514.1791308,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931287040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9267812.0,"domains":[{"name":"uncore","consumption":56707.0,"timestamp":1713779514.1174216},{"name":"core","consumption":7047781.0,"timestamp":1713779514.1173346},{"name":"dram","consumption":773637.0,"timestamp":1713779514.1172478}],"timestamp":1713779514.1169913}]},{"host":{"consumption":16322564.0,"timestamp":1713779524.2873058,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931729408","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8849237.0,"domains":[{"name":"uncore","consumption":2096.0,"timestamp":1713779524.1913843},{"name":"core","consumption":6739081.0,"timestamp":1713779524.1913111},{"name":"dram","consumption":683400.0,"timestamp":1713779524.19123}],"timestamp":1713779524.1902199}]},{"host":{"consumption":17575214.0,"timestamp":1713779534.4071152,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931737600","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9709254.0,"domains":[{"name":"uncore","consumption":60471.0,"timestamp":1713779534.2996848},{"name":"core","consumption":7499002.0,"timestamp":1713779534.2994568},{"name":"dram","consumption":780756.0,"timestamp":1713779534.2992313}],"timestamp":1713779534.298122}]},{"host":{"consumption":17105016.0,"timestamp":1713779544.4904342,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931262464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9221976.0,"domains":[{"name":"uncore","consumption":94565.0,"timestamp":1713779544.4205854},{"name":"core","consumption":6956324.0,"timestamp":1713779544.4205108},{"name":"dram","consumption":806910.0,"timestamp":1713779544.4204462}],"timestamp":1713779544.4196}]},{"host":{"consumption":18227336.0,"timestamp":1713779554.5570948,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931233792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10082923.0,"domains":[{"name":"uncore","consumption":106558.0,"timestamp":1713779554.4975998},{"name":"core","consumption":7786575.0,"timestamp":1713779554.4975178},{"name":"dram","consumption":851111.0,"timestamp":1713779554.4974356}],"timestamp":1713779554.4971888}]},{"host":{"consumption":16703315.0,"timestamp":1713779564.6220083,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931188736","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8981811.0,"domains":[{"name":"uncore","consumption":63781.0,"timestamp":1713779564.5626395},{"name":"core","consumption":6776199.0,"timestamp":1713779564.5626285},{"name":"dram","consumption":763114.0,"timestamp":1713779564.5626168}],"timestamp":1713779564.5624464}]},{"host":{"consumption":15787917.0,"timestamp":1713779574.7045534,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929509376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8419545.0,"domains":[{"name":"uncore","consumption":8504.0,"timestamp":1713779574.6319294},{"name":"core","consumption":6326119.0,"timestamp":1713779574.6318338},{"name":"dram","consumption":672605.0,"timestamp":1713779574.6316755}],"timestamp":1713779574.6305897}]},{"host":{"consumption":16278666.0,"timestamp":1713779584.7917998,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929501184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8720046.0,"domains":[{"name":"uncore","consumption":3087.0,"timestamp":1713779584.7122662},{"name":"core","consumption":6616021.0,"timestamp":1713779584.712216},{"name":"dram","consumption":679044.0,"timestamp":1713779584.7121239}],"timestamp":1713779584.7118733}]},{"host":{"consumption":16192413.0,"timestamp":1713779594.8682997,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929288192","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8538587.0,"domains":[{"name":"uncore","consumption":18110.0,"timestamp":1713779594.7989516},{"name":"core","consumption":6430985.0,"timestamp":1713779594.7989392},{"name":"dram","consumption":696370.0,"timestamp":1713779594.7989254}],"timestamp":1713779594.7987468}]},{"host":{"consumption":17835850.0,"timestamp":1713779604.970204,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929529856","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9970056.0,"domains":[{"name":"uncore","consumption":101592.0,"timestamp":1713779604.8777127},{"name":"core","consumption":7675927.0,"timestamp":1713779604.8776011},{"name":"dram","consumption":838750.0,"timestamp":1713779604.8774297}],"timestamp":1713779604.8764682}]},{"host":{"consumption":17223184.0,"timestamp":1713779615.0406623,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929525760","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9258594.0,"domains":[{"name":"uncore","consumption":68223.0,"timestamp":1713779614.9790304},{"name":"core","consumption":7045907.0,"timestamp":1713779614.9790175},{"name":"dram","consumption":780498.0,"timestamp":1713779614.9790006}],"timestamp":1713779614.9788198}]},{"host":{"consumption":17991076.0,"timestamp":1713779625.1449158,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929284096","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10078704.0,"domains":[{"name":"uncore","consumption":118137.0,"timestamp":1713779625.0504525},{"name":"core","consumption":7757337.0,"timestamp":1713779625.0503535},{"name":"dram","consumption":873133.0,"timestamp":1713779625.0502598}],"timestamp":1713779625.0497875}]},{"host":{"consumption":17513584.0,"timestamp":1713779635.2274506,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930615296","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9576783.0,"domains":[{"name":"uncore","consumption":60600.0,"timestamp":1713779635.1544077},{"name":"core","consumption":7359064.0,"timestamp":1713779635.1543975},{"name":"dram","consumption":791838.0,"timestamp":1713779635.1543856}],"timestamp":1713779635.1542053}]},{"host":{"consumption":16749170.0,"timestamp":1713779645.2966073,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930570240","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8959166.0,"domains":[{"name":"uncore","consumption":60839.0,"timestamp":1713779645.2337449},{"name":"core","consumption":6742250.0,"timestamp":1713779645.2336698},{"name":"dram","consumption":773558.0,"timestamp":1713779645.2335942}],"timestamp":1713779645.2333434}]},{"host":{"consumption":16989764.0,"timestamp":1713779655.3732345,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930533376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9272675.0,"domains":[{"name":"uncore","consumption":59885.0,"timestamp":1713779655.3095753},{"name":"core","consumption":7063394.0,"timestamp":1713779655.3094814},{"name":"dram","consumption":771307.0,"timestamp":1713779655.309377}],"timestamp":1713779655.307801}]},{"host":{"consumption":17140116.0,"timestamp":1713779665.4477272,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930557952","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9234038.0,"domains":[{"name":"uncore","consumption":103236.0,"timestamp":1713779665.3803775},{"name":"core","consumption":6960670.0,"timestamp":1713779665.3803644},{"name":"dram","consumption":814238.0,"timestamp":1713779665.3803484}],"timestamp":1713779665.3801663}]},{"host":{"consumption":16794568.0,"timestamp":1713779675.5222828,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929787904","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9103476.0,"domains":[{"name":"uncore","consumption":64554.0,"timestamp":1713779675.4545233},{"name":"core","consumption":6867707.0,"timestamp":1713779675.4544919},{"name":"dram","consumption":777281.0,"timestamp":1713779675.4544601}],"timestamp":1713779675.4539814}]},{"host":{"consumption":17113470.0,"timestamp":1713779685.595081,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929775616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9328894.0,"domains":[{"name":"uncore","consumption":19067.0,"timestamp":1713779685.5279496},{"name":"core","consumption":7172658.0,"timestamp":1713779685.5278647},{"name":"dram","consumption":742037.0,"timestamp":1713779685.5277736}],"timestamp":1713779685.5275266}]},{"host":{"consumption":15704562.0,"timestamp":1713779695.6625886,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929775616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8233994.0,"domains":[{"name":"uncore","consumption":1102.0,"timestamp":1713779695.6025162},{"name":"core","consumption":6144603.0,"timestamp":1713779695.6024885},{"name":"dram","consumption":668788.0,"timestamp":1713779695.6024578}],"timestamp":1713779695.6018517}]},{"host":{"consumption":15882993.0,"timestamp":1713779705.735946,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929751040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8425521.0,"domains":[{"name":"uncore","consumption":1454.0,"timestamp":1713779705.6728644},{"name":"core","consumption":6340254.0,"timestamp":1713779705.6726387},{"name":"dram","consumption":670527.0,"timestamp":1713779705.6724086}],"timestamp":1713779705.6713085}]},{"host":{"consumption":16453722.0,"timestamp":1713779715.8038971,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929751040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8795717.0,"domains":[{"name":"uncore","consumption":6570.0,"timestamp":1713779715.7429388},{"name":"core","consumption":6682553.0,"timestamp":1713779715.7428896},{"name":"dram","consumption":710866.0,"timestamp":1713779715.7428415}],"timestamp":1713779715.7425947}]},{"host":{"consumption":16692743.0,"timestamp":1713779725.8769696,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928927744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8983429.0,"domains":[{"name":"uncore","consumption":6177.0,"timestamp":1713779725.8109748},{"name":"core","consumption":6859291.0,"timestamp":1713779725.8109496},{"name":"dram","consumption":718471.0,"timestamp":1713779725.81092}],"timestamp":1713779725.8105166}]},{"host":{"consumption":19840064.0,"timestamp":1713779735.9461024,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928927744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11393125.0,"domains":[{"name":"uncore","consumption":141691.0,"timestamp":1713779735.8855553},{"name":"core","consumption":8977156.0,"timestamp":1713779735.885465},{"name":"dram","consumption":961187.0,"timestamp":1713779735.8853762}],"timestamp":1713779735.8851018}]},{"host":{"consumption":19636826.0,"timestamp":1713779746.0269625,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931147776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11356918.0,"domains":[{"name":"uncore","consumption":126888.0,"timestamp":1713779745.9565356},{"name":"core","consumption":8981053.0,"timestamp":1713779745.9562955},{"name":"dram","consumption":941938.0,"timestamp":1713779745.9560916}],"timestamp":1713779745.9550948}]},{"host":{"consumption":16313537.0,"timestamp":1713779756.1058164,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931155968","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8716770.0,"domains":[{"name":"uncore","consumption":20905.0,"timestamp":1713779756.038003},{"name":"core","consumption":6596741.0,"timestamp":1713779756.0379858},{"name":"dram","consumption":707044.0,"timestamp":1713779756.0379667}],"timestamp":1713779756.0376678}]},{"host":{"consumption":16918090.0,"timestamp":1713779766.183226,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931123200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9170174.0,"domains":[{"name":"uncore","consumption":41748.0,"timestamp":1713779766.113902},{"name":"core","consumption":7009524.0,"timestamp":1713779766.1138592},{"name":"dram","consumption":757000.0,"timestamp":1713779766.113809}],"timestamp":1713779766.1130364}]},{"host":{"consumption":17507772.0,"timestamp":1713779776.2492278,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930312192","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9599310.0,"domains":[{"name":"uncore","consumption":65255.0,"timestamp":1713779776.1901767},{"name":"core","consumption":7377123.0,"timestamp":1713779776.190158},{"name":"dram","consumption":795967.0,"timestamp":1713779776.1901379}],"timestamp":1713779776.1897933}]},{"host":{"consumption":17944728.0,"timestamp":1713779786.2990508,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930299904","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9929130.0,"domains":[{"name":"uncore","consumption":121277.0,"timestamp":1713779786.2559953},{"name":"core","consumption":7611465.0,"timestamp":1713779786.2559388},{"name":"dram","consumption":869828.0,"timestamp":1713779786.2558804}],"timestamp":1713779786.255555}]},{"host":{"consumption":15806296.0,"timestamp":1713779796.38416,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930299904","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8431951.0,"domains":[{"name":"uncore","consumption":8579.0,"timestamp":1713779796.3085017},{"name":"core","consumption":6340704.0,"timestamp":1713779796.30846},{"name":"dram","consumption":678331.0,"timestamp":1713779796.3084118}],"timestamp":1713779796.3074012}]},{"host":{"consumption":16830278.0,"timestamp":1713779806.4130023,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930287616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9066258.0,"domains":[{"name":"uncore","consumption":33532.0,"timestamp":1713779806.392121},{"name":"core","consumption":6909860.0,"timestamp":1713779806.3921049},{"name":"dram","consumption":747745.0,"timestamp":1713779806.3920863}],"timestamp":1713779806.391791}]},{"host":{"consumption":16742350.0,"timestamp":1713779816.496752,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930295808","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9069925.0,"domains":[{"name":"uncore","consumption":35908.0,"timestamp":1713779816.4222665},{"name":"core","consumption":6917287.0,"timestamp":1713779816.422244},{"name":"dram","consumption":753696.0,"timestamp":1713779816.4222198}],"timestamp":1713779816.4217944}]},{"host":{"consumption":18598028.0,"timestamp":1713779826.5682933,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929415168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10414533.0,"domains":[{"name":"uncore","consumption":62253.0,"timestamp":1713779826.5079713},{"name":"core","consumption":8149784.0,"timestamp":1713779826.507956},{"name":"dram","consumption":864867.0,"timestamp":1713779826.507944}],"timestamp":1713779826.507766}]},{"host":{"consumption":17745816.0,"timestamp":1713779836.6354957,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929415168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9828312.0,"domains":[{"name":"uncore","consumption":67946.0,"timestamp":1713779836.5758927},{"name":"core","consumption":7583864.0,"timestamp":1713779836.5757802},{"name":"dram","consumption":811525.0,"timestamp":1713779836.575659}],"timestamp":1713779836.575159}]},{"host":{"consumption":16928730.0,"timestamp":1713779846.7255683,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929406976","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9291236.0,"domains":[{"name":"uncore","consumption":46567.0,"timestamp":1713779846.6457388},{"name":"core","consumption":7111748.0,"timestamp":1713779846.645555},{"name":"dram","consumption":758997.0,"timestamp":1713779846.6453373}],"timestamp":1713779846.6443307}]},{"host":{"consumption":17730196.0,"timestamp":1713779856.7933705,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929394688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9746702.0,"domains":[{"name":"uncore","consumption":66806.0,"timestamp":1713779856.7338064},{"name":"core","consumption":7516328.0,"timestamp":1713779856.733795},{"name":"dram","consumption":802890.0,"timestamp":1713779856.7337487}],"timestamp":1713779856.7335174}]},{"host":{"consumption":16701234.0,"timestamp":1713779866.8598125,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929382400","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8984439.0,"domains":[{"name":"uncore","consumption":38110.0,"timestamp":1713779866.7994835},{"name":"core","consumption":6837004.0,"timestamp":1713779866.7994657},{"name":"dram","consumption":738887.0,"timestamp":1713779866.7994468}],"timestamp":1713779866.7991397}]},{"host":{"consumption":16168718.0,"timestamp":1713779876.9407325,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928595968","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8716505.0,"domains":[{"name":"uncore","consumption":22019.0,"timestamp":1713779876.8670633},{"name":"core","consumption":6591846.0,"timestamp":1713779876.8669202},{"name":"dram","consumption":697212.0,"timestamp":1713779876.8668}],"timestamp":1713779876.8663688}]},{"host":{"consumption":17151124.0,"timestamp":1713779887.0094666,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928354304","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9330917.0,"domains":[{"name":"uncore","consumption":39096.0,"timestamp":1713779886.9488132},{"name":"core","consumption":7153853.0,"timestamp":1713779886.9487278},{"name":"dram","consumption":752029.0,"timestamp":1713779886.948708}],"timestamp":1713779886.9484768}]},{"host":{"consumption":16187297.0,"timestamp":1713779897.083744,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928354304","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8583965.0,"domains":[{"name":"uncore","consumption":33198.0,"timestamp":1713779897.0164032},{"name":"core","consumption":6455976.0,"timestamp":1713779897.016392},{"name":"dram","consumption":713098.0,"timestamp":1713779897.0163796}],"timestamp":1713779897.0161853}]},{"host":{"consumption":16529308.0,"timestamp":1713779907.1551769,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928362496","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8980054.0,"domains":[{"name":"uncore","consumption":28349.0,"timestamp":1713779907.0899081},{"name":"core","consumption":6838676.0,"timestamp":1713779907.0898926},{"name":"dram","consumption":714382.0,"timestamp":1713779907.0898738}],"timestamp":1713779907.08959}]},{"host":{"consumption":19958728.0,"timestamp":1713779917.2240403,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152927580160","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11518857.0,"domains":[{"name":"uncore","consumption":92943.0,"timestamp":1713779917.164845},{"name":"core","consumption":9192476.0,"timestamp":1713779917.1647935},{"name":"dram","consumption":899580.0,"timestamp":1713779917.1647367}],"timestamp":1713779917.1644056}]},{"host":{"consumption":16834104.0,"timestamp":1713779927.2870233,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152926814208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9113495.0,"domains":[{"name":"uncore","consumption":83857.0,"timestamp":1713779927.233798},{"name":"core","consumption":6861679.0,"timestamp":1713779927.2336633},{"name":"dram","consumption":807548.0,"timestamp":1713779927.2335906}],"timestamp":1713779927.2326035}]},{"host":{"consumption":17433660.0,"timestamp":1713779937.3800478,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152926793728","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9562419.0,"domains":[{"name":"uncore","consumption":64596.0,"timestamp":1713779937.3012738},{"name":"core","consumption":7329209.0,"timestamp":1713779937.3011935},{"name":"dram","consumption":802988.0,"timestamp":1713779937.301089}],"timestamp":1713779937.3000836}]},{"host":{"consumption":18690064.0,"timestamp":1713779947.4075766,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152926441472","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10432291.0,"domains":[{"name":"uncore","consumption":125485.0,"timestamp":1713779947.3894734},{"name":"core","consumption":8074743.0,"timestamp":1713779947.3894615},{"name":"dram","consumption":893591.0,"timestamp":1713779947.389448}],"timestamp":1713779947.3892703}]},{"host":{"consumption":18660300.0,"timestamp":1713779957.4732935,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152926326784","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10490960.0,"domains":[{"name":"uncore","consumption":83533.0,"timestamp":1713779957.4134717},{"name":"core","consumption":8215404.0,"timestamp":1713779957.4134555},{"name":"dram","consumption":849327.0,"timestamp":1713779957.4134383}],"timestamp":1713779957.4132495}]},{"host":{"consumption":16391969.0,"timestamp":1713779967.5598154,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152926339072","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8839163.0,"domains":[{"name":"uncore","consumption":53621.0,"timestamp":1713779967.4802961},{"name":"core","consumption":6659806.0,"timestamp":1713779967.4801967},{"name":"dram","consumption":742988.0,"timestamp":1713779967.4801002}],"timestamp":1713779967.479557}]},{"host":{"consumption":21951676.0,"timestamp":1713779977.6288893,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152925077504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":13009377.0,"domains":[{"name":"uncore","consumption":171418.0,"timestamp":1713779977.5699525},{"name":"core","consumption":10494274.0,"timestamp":1713779977.5699186},{"name":"dram","consumption":1054027.0,"timestamp":1713779977.5698972}],"timestamp":1713779977.5695384}]},{"host":{"consumption":17424444.0,"timestamp":1713779987.7199197,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152925093888","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9580639.0,"domains":[{"name":"uncore","consumption":97375.0,"timestamp":1713779987.6388948},{"name":"core","consumption":7296496.0,"timestamp":1713779987.6386695},{"name":"dram","consumption":834796.0,"timestamp":1713779987.6384435}],"timestamp":1713779987.6372776}]},{"host":{"consumption":17152044.0,"timestamp":1713779997.7997684,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152925081600","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9324043.0,"domains":[{"name":"uncore","consumption":89158.0,"timestamp":1713779997.7300823},{"name":"core","consumption":7070095.0,"timestamp":1713779997.7300525},{"name":"dram","consumption":806334.0,"timestamp":1713779997.730023}],"timestamp":1713779997.72966}]},{"host":{"consumption":18110728.0,"timestamp":1713780007.8673046,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152924930048","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9974532.0,"domains":[{"name":"uncore","consumption":91229.0,"timestamp":1713780007.8069208},{"name":"core","consumption":7691338.0,"timestamp":1713780007.8069074},{"name":"dram","consumption":854391.0,"timestamp":1713780007.8068929}],"timestamp":1713780007.8066962}]},{"host":{"consumption":19110642.0,"timestamp":1713780017.9584239,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923848704","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10975758.0,"domains":[{"name":"uncore","consumption":125408.0,"timestamp":1713780017.8775215},{"name":"core","consumption":8623004.0,"timestamp":1713780017.877302},{"name":"dram","consumption":911132.0,"timestamp":1713780017.8770778}],"timestamp":1713780017.8759685}]},{"host":{"consumption":16496685.0,"timestamp":1713780028.0290504,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923607040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8802841.0,"domains":[{"name":"uncore","consumption":8221.0,"timestamp":1713780027.9665906},{"name":"core","consumption":6666437.0,"timestamp":1713780027.966497},{"name":"dram","consumption":706934.0,"timestamp":1713780027.966405}],"timestamp":1713780027.9661515}]},{"host":{"consumption":17864828.0,"timestamp":1713780038.0963285,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923607040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9806996.0,"domains":[{"name":"uncore","consumption":94211.0,"timestamp":1713780038.0367672},{"name":"core","consumption":7523153.0,"timestamp":1713780038.0366607},{"name":"dram","consumption":839409.0,"timestamp":1713780038.0365567}],"timestamp":1713780038.036152}]},{"host":{"consumption":16822748.0,"timestamp":1713780048.197644,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923602944","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9169791.0,"domains":[{"name":"uncore","consumption":39916.0,"timestamp":1713780048.1041873},{"name":"core","consumption":6993388.0,"timestamp":1713780048.1041183},{"name":"dram","consumption":750313.0,"timestamp":1713780048.1040213}],"timestamp":1713780048.1032753}]},{"host":{"consumption":18678872.0,"timestamp":1713780058.2663543,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923582464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10343402.0,"domains":[{"name":"uncore","consumption":148131.0,"timestamp":1713780058.2072103},{"name":"core","consumption":7957067.0,"timestamp":1713780058.2071245},{"name":"dram","consumption":922585.0,"timestamp":1713780058.2070394}],"timestamp":1713780058.206762}]},{"host":{"consumption":20213284.0,"timestamp":1713780068.3346663,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922902528","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11773470.0,"domains":[{"name":"uncore","consumption":165267.0,"timestamp":1713780068.2724028},{"name":"core","consumption":9340006.0,"timestamp":1713780068.2723184},{"name":"dram","consumption":969113.0,"timestamp":1713780068.2722268}],"timestamp":1713780068.2719815}]},{"host":{"consumption":16366371.0,"timestamp":1713780078.4416406,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922886144","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8721166.0,"domains":[{"name":"uncore","consumption":64272.0,"timestamp":1713780078.3451676},{"name":"core","consumption":6512325.0,"timestamp":1713780078.345093},{"name":"dram","consumption":748456.0,"timestamp":1713780078.3450117}],"timestamp":1713780078.344027}]},{"host":{"consumption":17225028.0,"timestamp":1713780088.5131757,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922845184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9339501.0,"domains":[{"name":"uncore","consumption":74996.0,"timestamp":1713780088.4505699},{"name":"core","consumption":7102138.0,"timestamp":1713780088.4504852},{"name":"dram","consumption":788502.0,"timestamp":1713780088.4503999}],"timestamp":1713780088.4501588}]},{"host":{"consumption":18659424.0,"timestamp":1713780098.5881214,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922779648","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10346767.0,"domains":[{"name":"uncore","consumption":130193.0,"timestamp":1713780098.5232346},{"name":"core","consumption":7939921.0,"timestamp":1713780098.5231893},{"name":"dram","consumption":895682.0,"timestamp":1713780098.5231113}],"timestamp":1713780098.5224936}]},{"host":{"consumption":16444576.0,"timestamp":1713780108.6186478,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922787840","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8880198.0,"domains":[{"name":"uncore","consumption":43704.0,"timestamp":1713780108.5964928},{"name":"core","consumption":6716779.0,"timestamp":1713780108.5964847},{"name":"dram","consumption":724613.0,"timestamp":1713780108.596476}],"timestamp":1713780108.5963082}]},{"host":{"consumption":15987688.0,"timestamp":1713780118.7135324,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921993216","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8475071.0,"domains":[{"name":"uncore","consumption":58115.0,"timestamp":1713780118.6261668},{"name":"core","consumption":6280401.0,"timestamp":1713780118.6257596},{"name":"dram","consumption":728529.0,"timestamp":1713780118.6256688}],"timestamp":1713780118.6246014}]},{"host":{"consumption":17768580.0,"timestamp":1713780128.7914293,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922071040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9732725.0,"domains":[{"name":"uncore","consumption":84270.0,"timestamp":1713780128.7218733},{"name":"core","consumption":7458569.0,"timestamp":1713780128.7218614},{"name":"dram","consumption":820409.0,"timestamp":1713780128.7218442}],"timestamp":1713780128.7216413}]},{"host":{"consumption":25197488.0,"timestamp":1713780138.8595648,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923095040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":15648575.0,"domains":[{"name":"uncore","consumption":186569.0,"timestamp":1713780138.7978957},{"name":"core","consumption":12988297.0,"timestamp":1713780138.7978852},{"name":"dram","consumption":1180341.0,"timestamp":1713780138.7978737}],"timestamp":1713780138.7977054}]},{"host":{"consumption":18156734.0,"timestamp":1713780148.946424,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923054080","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10132623.0,"domains":[{"name":"uncore","consumption":103642.0,"timestamp":1713780148.869245},{"name":"core","consumption":7766535.0,"timestamp":1713780148.8690507},{"name":"dram","consumption":868303.0,"timestamp":1713780148.868856}],"timestamp":1713780148.8679154}]},{"host":{"consumption":17462388.0,"timestamp":1713780159.0245426,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923058176","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9400848.0,"domains":[{"name":"uncore","consumption":130208.0,"timestamp":1713780158.9548566},{"name":"core","consumption":7058526.0,"timestamp":1713780158.9548037},{"name":"dram","consumption":837893.0,"timestamp":1713780158.9547517}],"timestamp":1713780158.954415}]},{"host":{"consumption":16515084.0,"timestamp":1713780169.1027718,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922292224","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8912045.0,"domains":[{"name":"uncore","consumption":56275.0,"timestamp":1713780169.0370355},{"name":"core","consumption":6696455.0,"timestamp":1713780169.036843},{"name":"dram","consumption":748289.0,"timestamp":1713780169.03664}],"timestamp":1713780169.035624}]},{"host":{"consumption":17234128.0,"timestamp":1713780179.181692,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922488832","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9349248.0,"domains":[{"name":"uncore","consumption":75361.0,"timestamp":1713780179.1137233},{"name":"core","consumption":7092576.0,"timestamp":1713780179.113675},{"name":"dram","consumption":784711.0,"timestamp":1713780179.1136}],"timestamp":1713780179.1133642}]},{"host":{"consumption":16280267.0,"timestamp":1713780189.2492008,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922189824","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8636319.0,"domains":[{"name":"uncore","consumption":1847.0,"timestamp":1713780189.1884017},{"name":"core","consumption":6489329.0,"timestamp":1713780189.1883214},{"name":"dram","consumption":683677.0,"timestamp":1713780189.1882293}],"timestamp":1713780189.187972}]},{"host":{"consumption":16865012.0,"timestamp":1713780199.346347,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922247168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9183841.0,"domains":[{"name":"uncore","consumption":80046.0,"timestamp":1713780199.2556705},{"name":"core","consumption":6932730.0,"timestamp":1713780199.2556493},{"name":"dram","consumption":785220.0,"timestamp":1713780199.2556274}],"timestamp":1713780199.255173}]},{"host":{"consumption":17039250.0,"timestamp":1713780209.3751934,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922247168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9130632.0,"domains":[{"name":"uncore","consumption":91907.0,"timestamp":1713780209.3558648},{"name":"core","consumption":6860084.0,"timestamp":1713780209.3558471},{"name":"dram","consumption":792901.0,"timestamp":1713780209.3558266}],"timestamp":1713780209.355492}]},{"host":{"consumption":16751239.0,"timestamp":1713780219.4551482,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921473024","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9034674.0,"domains":[{"name":"uncore","consumption":75270.0,"timestamp":1713780219.3855226},{"name":"core","consumption":6813405.0,"timestamp":1713780219.3853257},{"name":"dram","consumption":772855.0,"timestamp":1713780219.385124}],"timestamp":1713780219.3841703}]},{"host":{"consumption":17774460.0,"timestamp":1713780229.524461,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921468928","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9840644.0,"domains":[{"name":"uncore","consumption":41698.0,"timestamp":1713780229.4617844},{"name":"core","consumption":7597916.0,"timestamp":1713780229.461746},{"name":"dram","consumption":789141.0,"timestamp":1713780229.4616764}],"timestamp":1713780229.4615052}]},{"host":{"consumption":16548044.0,"timestamp":1713780239.6041903,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921468928","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8901559.0,"domains":[{"name":"uncore","consumption":81662.0,"timestamp":1713780239.5345984},{"name":"core","consumption":6664048.0,"timestamp":1713780239.5345175},{"name":"dram","consumption":761862.0,"timestamp":1713780239.5344326}],"timestamp":1713780239.5334642}]},{"host":{"consumption":15918624.0,"timestamp":1713780249.7040665,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921460736","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8471790.0,"domains":[{"name":"uncore","consumption":4954.0,"timestamp":1713780249.611915},{"name":"core","consumption":6378865.0,"timestamp":1713780249.6118298},{"name":"dram","consumption":667809.0,"timestamp":1713780249.6117435}],"timestamp":1713780249.61147}]},{"host":{"consumption":16587016.0,"timestamp":1713780259.7829344,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921489408","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8847106.0,"domains":[{"name":"uncore","consumption":22364.0,"timestamp":1713780259.715153},{"name":"core","consumption":6713265.0,"timestamp":1713780259.715137},{"name":"dram","consumption":701335.0,"timestamp":1713780259.715121}],"timestamp":1713780259.7149491}]},{"host":{"consumption":16002779.0,"timestamp":1713780269.8546379,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920682496","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8504106.0,"domains":[{"name":"uncore","consumption":28378.0,"timestamp":1713780269.7915666},{"name":"core","consumption":6376540.0,"timestamp":1713780269.7915485},{"name":"dram","consumption":700026.0,"timestamp":1713780269.791525}],"timestamp":1713780269.7912748}]},{"host":{"consumption":17727366.0,"timestamp":1713780279.9278245,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920690688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9801078.0,"domains":[{"name":"uncore","consumption":125739.0,"timestamp":1713780279.8642557},{"name":"core","consumption":7464919.0,"timestamp":1713780279.864206},{"name":"dram","consumption":857356.0,"timestamp":1713780279.8641577}],"timestamp":1713780279.8639498}]},{"host":{"consumption":17199318.0,"timestamp":1713780289.996472,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920678400","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9267992.0,"domains":[{"name":"uncore","consumption":93219.0,"timestamp":1713780289.9375477},{"name":"core","consumption":6993732.0,"timestamp":1713780289.937444},{"name":"dram","consumption":813090.0,"timestamp":1713780289.9373355}],"timestamp":1713780289.9369261}]},{"host":{"consumption":17862228.0,"timestamp":1713780300.0952427,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920653824","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9920753.0,"domains":[{"name":"uncore","consumption":138991.0,"timestamp":1713780300.0027535},{"name":"core","consumption":7562676.0,"timestamp":1713780300.0027092},{"name":"dram","consumption":868330.0,"timestamp":1713780300.0026588}],"timestamp":1713780300.0024266}]},{"host":{"consumption":17535352.0,"timestamp":1713780310.173602,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920670208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9444071.0,"domains":[{"name":"uncore","consumption":122325.0,"timestamp":1713780310.1045885},{"name":"core","consumption":7123599.0,"timestamp":1713780310.1045775},{"name":"dram","consumption":843803.0,"timestamp":1713780310.1045659}],"timestamp":1713780310.1043274}]},{"host":{"consumption":19852638.0,"timestamp":1713780320.253043,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152919711744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11449541.0,"domains":[{"name":"uncore","consumption":161591.0,"timestamp":1713780320.1800232},{"name":"core","consumption":9014875.0,"timestamp":1713780320.17994},{"name":"dram","consumption":977822.0,"timestamp":1713780320.1798527}],"timestamp":1713780320.1796048}]},{"host":{"consumption":19595548.0,"timestamp":1713780330.3317156,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920006656","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11149755.0,"domains":[{"name":"uncore","consumption":135976.0,"timestamp":1713780330.261975},{"name":"core","consumption":8766062.0,"timestamp":1713780330.2619638},{"name":"dram","consumption":953243.0,"timestamp":1713780330.2619512}],"timestamp":1713780330.2616751}]},{"host":{"consumption":17652408.0,"timestamp":1713780340.4371243,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152919994368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9835959.0,"domains":[{"name":"uncore","consumption":108571.0,"timestamp":1713780340.3444133},{"name":"core","consumption":7522078.0,"timestamp":1713780340.3443506},{"name":"dram","consumption":838063.0,"timestamp":1713780340.3442688}],"timestamp":1713780340.343363}]},{"host":{"consumption":17882748.0,"timestamp":1713780350.5371673,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920002560","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9902772.0,"domains":[{"name":"uncore","consumption":106477.0,"timestamp":1713780350.4496903},{"name":"core","consumption":7599399.0,"timestamp":1713780350.4495337},{"name":"dram","consumption":843081.0,"timestamp":1713780350.4493275}],"timestamp":1713780350.4482377}]},{"host":{"consumption":17670250.0,"timestamp":1713780360.6051776,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920010752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9645585.0,"domains":[{"name":"uncore","consumption":79829.0,"timestamp":1713780360.5458229},{"name":"core","consumption":7390739.0,"timestamp":1713780360.54581},{"name":"dram","consumption":826090.0,"timestamp":1713780360.5457416}],"timestamp":1713780360.5455098}]},{"host":{"consumption":18866160.0,"timestamp":1713780370.6962965,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152919023616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10737069.0,"domains":[{"name":"uncore","consumption":119230.0,"timestamp":1713780370.6140137},{"name":"core","consumption":8387813.0,"timestamp":1713780370.613971},{"name":"dram","consumption":894936.0,"timestamp":1713780370.6138923}],"timestamp":1713780370.6130822}]}] +[{"host":{"consumption":22839456.0,"timestamp":1713776733.1511338,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984608768","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14541315.0,"domains":[{"name":"uncore","consumption":45094.0,"timestamp":1713776733.0607731},{"name":"core","consumption":12269990.0,"timestamp":1713776733.0605369},{"name":"dram","consumption":852068.0,"timestamp":1713776733.0603411}],"timestamp":1713776733.0592344}]},{"host":{"consumption":16981000.0,"timestamp":1713776743.218813,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983822336","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9059081.0,"domains":[{"name":"uncore","consumption":48212.0,"timestamp":1713776743.158127},{"name":"core","consumption":6869789.0,"timestamp":1713776743.1580791},{"name":"dram","consumption":739943.0,"timestamp":1713776743.1580322}],"timestamp":1713776743.1577911}]},{"host":{"consumption":16722740.0,"timestamp":1713776753.3200343,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983838720","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9070029.0,"domains":[{"name":"uncore","consumption":46079.0,"timestamp":1713776753.2260823},{"name":"core","consumption":6879086.0,"timestamp":1713776753.2260573},{"name":"dram","consumption":740840.0,"timestamp":1713776753.226029}],"timestamp":1713776753.2255995}]},{"host":{"consumption":16845328.0,"timestamp":1713776763.3460875,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983805952","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9006139.0,"domains":[{"name":"uncore","consumption":28302.0,"timestamp":1713776763.3271012},{"name":"core","consumption":6842051.0,"timestamp":1713776763.327086},{"name":"dram","consumption":721432.0,"timestamp":1713776763.3270676}],"timestamp":1713776763.3268232}]},{"host":{"consumption":20178468.0,"timestamp":1713776773.3749685,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984961024","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11565690.0,"domains":[{"name":"uncore","consumption":138203.0,"timestamp":1713776773.3530092},{"name":"core","consumption":9056146.0,"timestamp":1713776773.352927},{"name":"dram","consumption":917219.0,"timestamp":1713776773.3528495}],"timestamp":1713776773.3525944}]},{"host":{"consumption":19320856.0,"timestamp":1713776783.4413419,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985849856","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10891636.0,"domains":[{"name":"uncore","consumption":100456.0,"timestamp":1713776783.381015},{"name":"core","consumption":8502546.0,"timestamp":1713776783.3810034},{"name":"dram","consumption":890911.0,"timestamp":1713776783.380984}],"timestamp":1713776783.3807747}]},{"host":{"consumption":18664104.0,"timestamp":1713776793.527114,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985829376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10461344.0,"domains":[{"name":"uncore","consumption":163930.0,"timestamp":1713776793.448991},{"name":"core","consumption":8026378.0,"timestamp":1713776793.4489007},{"name":"dram","consumption":912285.0,"timestamp":1713776793.4488075}],"timestamp":1713776793.447805}]},{"host":{"consumption":18027132.0,"timestamp":1713776803.6265707,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985821184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9899857.0,"domains":[{"name":"uncore","consumption":183041.0,"timestamp":1713776803.535488},{"name":"core","consumption":7494878.0,"timestamp":1713776803.5353925},{"name":"dram","consumption":884276.0,"timestamp":1713776803.535213}],"timestamp":1713776803.5343165}]},{"host":{"consumption":17484540.0,"timestamp":1713776813.6934764,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985829376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9464936.0,"domains":[{"name":"uncore","consumption":73310.0,"timestamp":1713776813.6352477},{"name":"core","consumption":7223027.0,"timestamp":1713776813.6351972},{"name":"dram","consumption":785048.0,"timestamp":1713776813.6351457}],"timestamp":1713776813.6348221}]},{"host":{"consumption":16846520.0,"timestamp":1713776823.7871494,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985829376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9133689.0,"domains":[{"name":"uncore","consumption":80251.0,"timestamp":1713776823.7018094},{"name":"core","consumption":6899394.0,"timestamp":1713776823.701636},{"name":"dram","consumption":780682.0,"timestamp":1713776823.701415}],"timestamp":1713776823.700346}]},{"host":{"consumption":19366870.0,"timestamp":1713776833.8774304,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152985022464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10976765.0,"domains":[{"name":"uncore","consumption":150406.0,"timestamp":1713776833.7932224},{"name":"core","consumption":8548469.0,"timestamp":1713776833.793142},{"name":"dram","consumption":908710.0,"timestamp":1713776833.7930572}],"timestamp":1713776833.7928212}]},{"host":{"consumption":19660644.0,"timestamp":1713776843.9498193,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984977408","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11163514.0,"domains":[{"name":"uncore","consumption":187910.0,"timestamp":1713776843.8866582},{"name":"core","consumption":8677972.0,"timestamp":1713776843.8865824},{"name":"dram","consumption":988746.0,"timestamp":1713776843.8864777}],"timestamp":1713776843.8854172}]},{"host":{"consumption":16384468.0,"timestamp":1713776854.0142157,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984907776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8733699.0,"domains":[{"name":"uncore","consumption":1097.0,"timestamp":1713776853.9547465},{"name":"core","consumption":6632548.0,"timestamp":1713776853.9547296},{"name":"dram","consumption":676655.0,"timestamp":1713776853.9547124}],"timestamp":1713776853.9544137}]},{"host":{"consumption":16174939.0,"timestamp":1713776864.10159,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984915968","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8709866.0,"domains":[{"name":"uncore","consumption":22437.0,"timestamp":1713776864.0224054},{"name":"core","consumption":6586726.0,"timestamp":1713776864.0221882},{"name":"dram","consumption":702673.0,"timestamp":1713776864.0219984}],"timestamp":1713776864.020949}]},{"host":{"consumption":16641214.0,"timestamp":1713776874.1272652,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152984899584","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8941654.0,"domains":[{"name":"uncore","consumption":30573.0,"timestamp":1713776874.1079433},{"name":"core","consumption":6783195.0,"timestamp":1713776874.1078608},{"name":"dram","consumption":713687.0,"timestamp":1713776874.1077807}],"timestamp":1713776874.1074984}]},{"host":{"consumption":17742036.0,"timestamp":1713776884.1930141,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983883776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9792363.0,"domains":[{"name":"uncore","consumption":12237.0,"timestamp":1713776884.1331985},{"name":"core","consumption":7611253.0,"timestamp":1713776884.1331136},{"name":"dram","consumption":702807.0,"timestamp":1713776884.1330287}],"timestamp":1713776884.1327791}]},{"host":{"consumption":16045425.0,"timestamp":1713776894.2987273,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983871488","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8638578.0,"domains":[{"name":"uncore","consumption":19957.0,"timestamp":1713776894.200897},{"name":"core","consumption":6520352.0,"timestamp":1713776894.2008362},{"name":"dram","consumption":699931.0,"timestamp":1713776894.2007725}],"timestamp":1713776894.1999118}]},{"host":{"consumption":16224034.0,"timestamp":1713776904.3735363,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983871488","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8631907.0,"domains":[{"name":"uncore","consumption":7713.0,"timestamp":1713776904.3059886},{"name":"core","consumption":6542680.0,"timestamp":1713776904.3059006},{"name":"dram","consumption":672715.0,"timestamp":1713776904.305835}],"timestamp":1713776904.305626}]},{"host":{"consumption":16846048.0,"timestamp":1713776914.4393625,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983826432","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9056345.0,"domains":[{"name":"uncore","consumption":6483.0,"timestamp":1713776914.37817},{"name":"core","consumption":6914729.0,"timestamp":1713776914.3780758},{"name":"dram","consumption":717895.0,"timestamp":1713776914.3779886}],"timestamp":1713776914.377803}]},{"host":{"consumption":17085022.0,"timestamp":1713776924.5196557,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152983781376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9334116.0,"domains":[{"name":"uncore","consumption":59258.0,"timestamp":1713776924.4472995},{"name":"core","consumption":7110072.0,"timestamp":1713776924.4470918},{"name":"dram","consumption":777071.0,"timestamp":1713776924.446896}],"timestamp":1713776924.4458892}]},{"host":{"consumption":18274012.0,"timestamp":1713776934.5888944,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982667264","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10051529.0,"domains":[{"name":"uncore","consumption":87871.0,"timestamp":1713776934.5258956},{"name":"core","consumption":7730027.0,"timestamp":1713776934.5258844},{"name":"dram","consumption":840146.0,"timestamp":1713776934.5258706}],"timestamp":1713776934.5256615}]},{"host":{"consumption":17763572.0,"timestamp":1713776944.6601112,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982642688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9823252.0,"domains":[{"name":"uncore","consumption":111906.0,"timestamp":1713776944.5963216},{"name":"core","consumption":7510654.0,"timestamp":1713776944.5962281},{"name":"dram","consumption":842703.0,"timestamp":1713776944.596136}],"timestamp":1713776944.5958858}]},{"host":{"consumption":18286144.0,"timestamp":1713776954.6996922,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982642688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10133228.0,"domains":[{"name":"uncore","consumption":123874.0,"timestamp":1713776954.6674545},{"name":"core","consumption":7752282.0,"timestamp":1713776954.6673684},{"name":"dram","consumption":947740.0,"timestamp":1713776954.6672251}],"timestamp":1713776954.6666923}]},{"host":{"consumption":19241480.0,"timestamp":1713776964.7721376,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982634496","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10905721.0,"domains":[{"name":"uncore","consumption":139415.0,"timestamp":1713776964.7069016},{"name":"core","consumption":8461981.0,"timestamp":1713776964.7067893},{"name":"dram","consumption":1017923.0,"timestamp":1713776964.7066824}],"timestamp":1713776964.7062266}]},{"host":{"consumption":16724868.0,"timestamp":1713776974.8404372,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982601728","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8937357.0,"domains":[{"name":"uncore","consumption":24044.0,"timestamp":1713776974.7793686},{"name":"core","consumption":6779412.0,"timestamp":1713776974.7793553},{"name":"dram","consumption":725967.0,"timestamp":1713776974.779332}],"timestamp":1713776974.7790234}]},{"host":{"consumption":16168697.0,"timestamp":1713776984.9150546,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981815296","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8730403.0,"domains":[{"name":"uncore","consumption":14129.0,"timestamp":1713776984.8483362},{"name":"core","consumption":6612168.0,"timestamp":1713776984.8482864},{"name":"dram","consumption":685285.0,"timestamp":1713776984.8482223}],"timestamp":1713776984.8473754}]},{"host":{"consumption":16972942.0,"timestamp":1713776994.9903839,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981815296","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9338204.0,"domains":[{"name":"uncore","consumption":4683.0,"timestamp":1713776994.9218297},{"name":"core","consumption":7238084.0,"timestamp":1713776994.9218106},{"name":"dram","consumption":670005.0,"timestamp":1713776994.9217336}],"timestamp":1713776994.9214137}]},{"host":{"consumption":19904440.0,"timestamp":1713777005.0633216,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981807104","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11469411.0,"domains":[{"name":"uncore","consumption":14218.0,"timestamp":1713777004.996468},{"name":"core","consumption":9234698.0,"timestamp":1713777004.9964507},{"name":"dram","consumption":802499.0,"timestamp":1713777004.9964309}],"timestamp":1713777004.9962282}]},{"host":{"consumption":23821914.0,"timestamp":1713777015.1340816,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982241280","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14857354.0,"domains":[{"name":"uncore","consumption":90502.0,"timestamp":1713777015.0712984},{"name":"core","consumption":12383485.0,"timestamp":1713777015.0712466},{"name":"dram","consumption":972342.0,"timestamp":1713777015.0711875}],"timestamp":1713777015.0708177}]},{"host":{"consumption":18002080.0,"timestamp":1713777025.1986918,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982192128","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9977895.0,"domains":[{"name":"uncore","consumption":85695.0,"timestamp":1713777025.1393635},{"name":"core","consumption":7701050.0,"timestamp":1713777025.139356},{"name":"dram","consumption":792326.0,"timestamp":1713777025.1393478}],"timestamp":1713777025.1391838}]},{"host":{"consumption":17680458.0,"timestamp":1713777035.27853,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981131264","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9743090.0,"domains":[{"name":"uncore","consumption":70435.0,"timestamp":1713777035.2058847},{"name":"core","consumption":7439096.0,"timestamp":1713777035.2058249},{"name":"dram","consumption":804227.0,"timestamp":1713777035.2057557}],"timestamp":1713777035.204923}]},{"host":{"consumption":18357346.0,"timestamp":1713777045.337737,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152980979712","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10192130.0,"domains":[{"name":"uncore","consumption":74988.0,"timestamp":1713777045.286384},{"name":"core","consumption":7816444.0,"timestamp":1713777045.286365},{"name":"dram","consumption":810440.0,"timestamp":1713777045.2863448}],"timestamp":1713777045.2858868}]},{"host":{"consumption":17990072.0,"timestamp":1713777055.4065242,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152980873216","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9824797.0,"domains":[{"name":"uncore","consumption":77175.0,"timestamp":1713777055.3453813},{"name":"core","consumption":7495410.0,"timestamp":1713777055.345311},{"name":"dram","consumption":805234.0,"timestamp":1713777055.3452392}],"timestamp":1713777055.344998}]},{"host":{"consumption":17519172.0,"timestamp":1713777065.503242,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152980742144","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9647848.0,"domains":[{"name":"uncore","consumption":56186.0,"timestamp":1713777065.4142375},{"name":"core","consumption":7358347.0,"timestamp":1713777065.414192},{"name":"dram","consumption":773846.0,"timestamp":1713777065.4141448}],"timestamp":1713777065.4134197}]},{"host":{"consumption":17891032.0,"timestamp":1713777075.5509567,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152982196224","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9832698.0,"domains":[{"name":"uncore","consumption":61244.0,"timestamp":1713777075.5105214},{"name":"core","consumption":7536060.0,"timestamp":1713777075.5104876},{"name":"dram","consumption":777253.0,"timestamp":1713777075.5104597}],"timestamp":1713777075.510103}]},{"host":{"consumption":17815084.0,"timestamp":1713777085.6228104,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981295104","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9678532.0,"domains":[{"name":"uncore","consumption":61632.0,"timestamp":1713777085.561123},{"name":"core","consumption":7380698.0,"timestamp":1713777085.5611074},{"name":"dram","consumption":786439.0,"timestamp":1713777085.5610945}],"timestamp":1713777085.5609138}]},{"host":{"consumption":17694360.0,"timestamp":1713777095.7247462,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981151744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9802988.0,"domains":[{"name":"uncore","consumption":71710.0,"timestamp":1713777095.6316407},{"name":"core","consumption":7503412.0,"timestamp":1713777095.6314514},{"name":"dram","consumption":804160.0,"timestamp":1713777095.6312304}],"timestamp":1713777095.6302629}]},{"host":{"consumption":18129474.0,"timestamp":1713777105.790891,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981102592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9953748.0,"domains":[{"name":"uncore","consumption":72152.0,"timestamp":1713777105.7319067},{"name":"core","consumption":7662805.0,"timestamp":1713777105.731818},{"name":"dram","consumption":816287.0,"timestamp":1713777105.7317307}],"timestamp":1713777105.7314792}]},{"host":{"consumption":15953801.0,"timestamp":1713777115.8627741,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981102592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8530278.0,"domains":[{"name":"uncore","consumption":11961.0,"timestamp":1713777115.7994144},{"name":"core","consumption":6420022.0,"timestamp":1713777115.7991927},{"name":"dram","consumption":677953.0,"timestamp":1713777115.79897}],"timestamp":1713777115.7978327}]},{"host":{"consumption":16938940.0,"timestamp":1713777125.9474034,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152981114880","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9192264.0,"domains":[{"name":"uncore","consumption":54261.0,"timestamp":1713777125.8688385},{"name":"core","consumption":6987367.0,"timestamp":1713777125.8688178},{"name":"dram","consumption":759677.0,"timestamp":1713777125.8688}],"timestamp":1713777125.8685436}]},{"host":{"consumption":17084550.0,"timestamp":1713777136.0318727,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152980295680","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9322397.0,"domains":[{"name":"uncore","consumption":24124.0,"timestamp":1713777135.953332},{"name":"core","consumption":7153078.0,"timestamp":1713777135.9532452},{"name":"dram","consumption":730172.0,"timestamp":1713777135.9531567}],"timestamp":1713777135.9529128}]},{"host":{"consumption":17661328.0,"timestamp":1713777146.0986826,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152974946304","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9637077.0,"domains":[{"name":"uncore","consumption":25416.0,"timestamp":1713777146.0393763},{"name":"core","consumption":7339891.0,"timestamp":1713777146.0393615},{"name":"dram","consumption":738663.0,"timestamp":1713777146.0393455}],"timestamp":1713777146.0390542}]},{"host":{"consumption":16707994.0,"timestamp":1713777156.2043657,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152974888960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9161977.0,"domains":[{"name":"uncore","consumption":16447.0,"timestamp":1713777156.1071963},{"name":"core","consumption":7019542.0,"timestamp":1713777156.1069677},{"name":"dram","consumption":710408.0,"timestamp":1713777156.1067336}],"timestamp":1713777156.1055775}]},{"host":{"consumption":17207338.0,"timestamp":1713777166.2376916,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152974888960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9286949.0,"domains":[{"name":"uncore","consumption":76193.0,"timestamp":1713777166.2133067},{"name":"core","consumption":7053232.0,"timestamp":1713777166.2132885},{"name":"dram","consumption":782137.0,"timestamp":1713777166.213268}],"timestamp":1713777166.212981}]},{"host":{"consumption":17584212.0,"timestamp":1713777176.2885852,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152974868480","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9738880.0,"domains":[{"name":"uncore","consumption":55203.0,"timestamp":1713777176.2469187},{"name":"core","consumption":7530107.0,"timestamp":1713777176.2468045},{"name":"dram","consumption":756529.0,"timestamp":1713777176.2466614}],"timestamp":1713777176.2450926}]},{"host":{"consumption":17274468.0,"timestamp":1713777186.3227236,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973860864","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9410312.0,"domains":[{"name":"uncore","consumption":83281.0,"timestamp":1713777186.2982764},{"name":"core","consumption":7170252.0,"timestamp":1713777186.2982504},{"name":"dram","consumption":788001.0,"timestamp":1713777186.2982068}],"timestamp":1713777186.297853}]},{"host":{"consumption":16231953.0,"timestamp":1713777196.3952644,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973860864","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8575499.0,"domains":[{"name":"uncore","consumption":17611.0,"timestamp":1713777196.3278553},{"name":"core","consumption":6479625.0,"timestamp":1713777196.327841},{"name":"dram","consumption":684457.0,"timestamp":1713777196.3278232}],"timestamp":1713777196.3276503}]},{"host":{"consumption":17897220.0,"timestamp":1713777206.4610589,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973869056","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9950755.0,"domains":[{"name":"uncore","consumption":24972.0,"timestamp":1713777206.399892},{"name":"core","consumption":7791134.0,"timestamp":1713777206.3998756},{"name":"dram","consumption":764722.0,"timestamp":1713777206.399863}],"timestamp":1713777206.3996723}]},{"host":{"consumption":24343926.0,"timestamp":1713777216.5693893,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973824000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":15427863.0,"domains":[{"name":"uncore","consumption":19596.0,"timestamp":1713777216.4696398},{"name":"core","consumption":13038636.0,"timestamp":1713777216.4694428},{"name":"dram","consumption":907260.0,"timestamp":1713777216.4692278}],"timestamp":1713777216.4682693}]},{"host":{"consumption":18454150.0,"timestamp":1713777226.634701,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973021184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10223166.0,"domains":[{"name":"uncore","consumption":92544.0,"timestamp":1713777226.5767918},{"name":"core","consumption":7945179.0,"timestamp":1713777226.5767102},{"name":"dram","consumption":811552.0,"timestamp":1713777226.5766191}],"timestamp":1713777226.5763497}]},{"host":{"consumption":16529560.0,"timestamp":1713777236.7167804,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152973000704","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8944020.0,"domains":[{"name":"uncore","consumption":35589.0,"timestamp":1713777236.642004},{"name":"core","consumption":6789653.0,"timestamp":1713777236.6419218},{"name":"dram","consumption":717853.0,"timestamp":1713777236.6418812}],"timestamp":1713777236.6410005}]},{"host":{"consumption":16775695.0,"timestamp":1713777246.7846277,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152972972032","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8951850.0,"domains":[{"name":"uncore","consumption":26276.0,"timestamp":1713777246.7229867},{"name":"core","consumption":6796287.0,"timestamp":1713777246.7229757},{"name":"dram","consumption":704799.0,"timestamp":1713777246.7229636}],"timestamp":1713777246.7227092}]},{"host":{"consumption":15556533.0,"timestamp":1713777256.8788333,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152972976128","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8236154.0,"domains":[{"name":"uncore","consumption":1030.0,"timestamp":1713777256.7930374},{"name":"core","consumption":6168328.0,"timestamp":1713777256.7928183},{"name":"dram","consumption":645843.0,"timestamp":1713777256.7925932}],"timestamp":1713777256.7914505}]},{"host":{"consumption":17937068.0,"timestamp":1713777266.9760392,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152972910592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9924039.0,"domains":[{"name":"uncore","consumption":88172.0,"timestamp":1713777266.8877187},{"name":"core","consumption":7630807.0,"timestamp":1713777266.8876908},{"name":"dram","consumption":803316.0,"timestamp":1713777266.8876681}],"timestamp":1713777266.8873644}]},{"host":{"consumption":18454380.0,"timestamp":1713777277.0442383,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152971960320","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10182132.0,"domains":[{"name":"uncore","consumption":74447.0,"timestamp":1713777276.9832406},{"name":"core","consumption":7849393.0,"timestamp":1713777276.9832327},{"name":"dram","consumption":817975.0,"timestamp":1713777276.983224}],"timestamp":1713777276.9830406}]},{"host":{"consumption":17266296.0,"timestamp":1713777287.113659,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152971816960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9419215.0,"domains":[{"name":"uncore","consumption":49091.0,"timestamp":1713777287.0527253},{"name":"core","consumption":7157526.0,"timestamp":1713777287.052653},{"name":"dram","consumption":756459.0,"timestamp":1713777287.0525587}],"timestamp":1713777287.0514598}]},{"host":{"consumption":17562162.0,"timestamp":1713777297.214952,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152971739136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9647698.0,"domains":[{"name":"uncore","consumption":65355.0,"timestamp":1713777297.1191518},{"name":"core","consumption":7371870.0,"timestamp":1713777297.1191337},{"name":"dram","consumption":790216.0,"timestamp":1713777297.1191046}],"timestamp":1713777297.1187286}]},{"host":{"consumption":20346536.0,"timestamp":1713777307.293429,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152971628544","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11724314.0,"domains":[{"name":"uncore","consumption":163220.0,"timestamp":1713777307.2234144},{"name":"core","consumption":9303487.0,"timestamp":1713777307.2233179},{"name":"dram","consumption":975655.0,"timestamp":1713777307.2232158}],"timestamp":1713777307.222858}]},{"host":{"consumption":19801178.0,"timestamp":1713777317.359613,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152971571200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11231485.0,"domains":[{"name":"uncore","consumption":198577.0,"timestamp":1713777317.2983823},{"name":"core","consumption":8713569.0,"timestamp":1713777317.298366},{"name":"dram","consumption":991540.0,"timestamp":1713777317.298354}],"timestamp":1713777317.2981806}]},{"host":{"consumption":17649494.0,"timestamp":1713777327.449634,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152970821632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9688075.0,"domains":[{"name":"uncore","consumption":110425.0,"timestamp":1713777327.3674223},{"name":"core","consumption":7351944.0,"timestamp":1713777327.367366},{"name":"dram","consumption":839885.0,"timestamp":1713777327.3672998}],"timestamp":1713777327.3664134}]},{"host":{"consumption":18980238.0,"timestamp":1713777337.5194466,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152970706944","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10592785.0,"domains":[{"name":"uncore","consumption":83956.0,"timestamp":1713777337.4586651},{"name":"core","consumption":8247316.0,"timestamp":1713777337.4586465},{"name":"dram","consumption":857625.0,"timestamp":1713777337.4586263}],"timestamp":1713777337.4583135}]},{"host":{"consumption":21691694.0,"timestamp":1713777347.583959,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152969510912","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12880346.0,"domains":[{"name":"uncore","consumption":131259.0,"timestamp":1713777347.524417},{"name":"core","consumption":10396386.0,"timestamp":1713777347.5243325},{"name":"dram","consumption":957926.0,"timestamp":1713777347.5242443}],"timestamp":1713777347.523989}]},{"host":{"consumption":18650282.0,"timestamp":1713777357.6647134,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152969199616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10580498.0,"domains":[{"name":"uncore","consumption":89075.0,"timestamp":1713777357.5921497},{"name":"core","consumption":8275383.0,"timestamp":1713777357.5919557},{"name":"dram","consumption":853215.0,"timestamp":1713777357.5917592}],"timestamp":1713777357.5907595}]},{"host":{"consumption":18892164.0,"timestamp":1713777367.7330296,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152969150464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10560693.0,"domains":[{"name":"uncore","consumption":104854.0,"timestamp":1713777367.6705291},{"name":"core","consumption":8228723.0,"timestamp":1713777367.6705165},{"name":"dram","consumption":873054.0,"timestamp":1713777367.670503}],"timestamp":1713777367.670317}]},{"host":{"consumption":18655484.0,"timestamp":1713777377.8278155,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152968314880","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10547207.0,"domains":[{"name":"uncore","consumption":119447.0,"timestamp":1713777377.7424407},{"name":"core","consumption":8202705.0,"timestamp":1713777377.742352},{"name":"dram","consumption":864928.0,"timestamp":1713777377.7422514}],"timestamp":1713777377.7406278}]},{"host":{"consumption":19839508.0,"timestamp":1713777387.8977547,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152967557120","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11226931.0,"domains":[{"name":"uncore","consumption":147733.0,"timestamp":1713777387.8355281},{"name":"core","consumption":8815164.0,"timestamp":1713777387.8355043},{"name":"dram","consumption":930749.0,"timestamp":1713777387.8354752}],"timestamp":1713777387.8351617}]},{"host":{"consumption":19093878.0,"timestamp":1713777397.972775,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152967593984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10841222.0,"domains":[{"name":"uncore","consumption":125816.0,"timestamp":1713777397.9035504},{"name":"core","consumption":8468717.0,"timestamp":1713777397.9035375},{"name":"dram","consumption":904159.0,"timestamp":1713777397.9035237}],"timestamp":1713777397.9033375}]},{"host":{"consumption":17952432.0,"timestamp":1713777408.0408626,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152967356416","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9946246.0,"domains":[{"name":"uncore","consumption":78989.0,"timestamp":1713777407.9787939},{"name":"core","consumption":7660487.0,"timestamp":1713777407.9787714},{"name":"dram","consumption":821510.0,"timestamp":1713777407.978734}],"timestamp":1713777407.9782877}]},{"host":{"consumption":17320856.0,"timestamp":1713777418.1319575,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152967344128","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9461335.0,"domains":[{"name":"uncore","consumption":69949.0,"timestamp":1713777418.0463884},{"name":"core","consumption":7215506.0,"timestamp":1713777418.0463102},{"name":"dram","consumption":788687.0,"timestamp":1713777418.046224}],"timestamp":1713777418.0459182}]},{"host":{"consumption":17474848.0,"timestamp":1713777428.2004583,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966549504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9409248.0,"domains":[{"name":"uncore","consumption":95253.0,"timestamp":1713777428.1390185},{"name":"core","consumption":7122726.0,"timestamp":1713777428.1390052},{"name":"dram","consumption":809644.0,"timestamp":1713777428.1389885}],"timestamp":1713777428.1387415}]},{"host":{"consumption":16820736.0,"timestamp":1713777438.3035433,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966549504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9165546.0,"domains":[{"name":"uncore","consumption":108143.0,"timestamp":1713777438.2093804},{"name":"core","consumption":6890045.0,"timestamp":1713777438.209173},{"name":"dram","consumption":796038.0,"timestamp":1713777438.2089665}],"timestamp":1713777438.2079842}]},{"host":{"consumption":16727609.0,"timestamp":1713777448.3768816,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966549504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8939919.0,"domains":[{"name":"uncore","consumption":71607.0,"timestamp":1713777448.3114433},{"name":"core","consumption":6727186.0,"timestamp":1713777448.3114324},{"name":"dram","consumption":750922.0,"timestamp":1713777448.3114202}],"timestamp":1713777448.3112388}]},{"host":{"consumption":16308847.0,"timestamp":1713777458.4427474,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966553600","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8585879.0,"domains":[{"name":"uncore","consumption":47079.0,"timestamp":1713777458.3821568},{"name":"core","consumption":6422585.0,"timestamp":1713777458.3821454},{"name":"dram","consumption":715525.0,"timestamp":1713777458.382133}],"timestamp":1713777458.3819559}]},{"host":{"consumption":17582196.0,"timestamp":1713777468.5505536,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966561792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9790577.0,"domains":[{"name":"uncore","consumption":115877.0,"timestamp":1713777468.449387},{"name":"core","consumption":7484325.0,"timestamp":1713777468.4491963},{"name":"dram","consumption":842199.0,"timestamp":1713777468.448999}],"timestamp":1713777468.4479294}]},{"host":{"consumption":21082234.0,"timestamp":1713777478.6427877,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965779456","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12303180.0,"domains":[{"name":"uncore","consumption":201535.0,"timestamp":1713777478.5594313},{"name":"core","consumption":9761258.0,"timestamp":1713777478.5593724},{"name":"dram","consumption":1047614.0,"timestamp":1713777478.559312}],"timestamp":1713777478.5590181}]},{"host":{"consumption":18089648.0,"timestamp":1713777488.7118351,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965562368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9918908.0,"domains":[{"name":"uncore","consumption":117238.0,"timestamp":1713777488.6492963},{"name":"core","consumption":7574489.0,"timestamp":1713777488.6491983},{"name":"dram","consumption":894123.0,"timestamp":1713777488.6491091}],"timestamp":1713777488.6487775}]},{"host":{"consumption":16313611.0,"timestamp":1713777498.7860672,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965505024","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8774291.0,"domains":[{"name":"uncore","consumption":28373.0,"timestamp":1713777498.7166615},{"name":"core","consumption":6648229.0,"timestamp":1713777498.7166505},{"name":"dram","consumption":703226.0,"timestamp":1713777498.716639}],"timestamp":1713777498.7164707}]},{"host":{"consumption":15908766.0,"timestamp":1713777508.8507597,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965505024","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8388403.0,"domains":[{"name":"uncore","consumption":2084.0,"timestamp":1713777508.7911139},{"name":"core","consumption":6325376.0,"timestamp":1713777508.791101},{"name":"dram","consumption":653991.0,"timestamp":1713777508.7910852}],"timestamp":1713777508.790909}]},{"host":{"consumption":15899949.0,"timestamp":1713777518.9272132,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965505024","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8448667.0,"domains":[{"name":"uncore","consumption":7016.0,"timestamp":1713777518.8562863},{"name":"core","consumption":6357922.0,"timestamp":1713777518.8561907},{"name":"dram","consumption":679596.0,"timestamp":1713777518.8560758}],"timestamp":1713777518.8557153}]},{"host":{"consumption":16183745.0,"timestamp":1713777529.0078616,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152964710400","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8689172.0,"domains":[{"name":"uncore","consumption":5571.0,"timestamp":1713777528.935464},{"name":"core","consumption":6591279.0,"timestamp":1713777528.935428},{"name":"dram","consumption":676487.0,"timestamp":1713777528.9353883}],"timestamp":1713777528.9345155}]},{"host":{"consumption":15916104.0,"timestamp":1713777539.0753608,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152964685824","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8294892.0,"domains":[{"name":"uncore","consumption":14249.0,"timestamp":1713777539.0141416},{"name":"core","consumption":6169550.0,"timestamp":1713777539.0141294},{"name":"dram","consumption":674498.0,"timestamp":1713777539.01411}],"timestamp":1713777539.0138464}]},{"host":{"consumption":16209632.0,"timestamp":1713777549.1478362,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152964677632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8713013.0,"domains":[{"name":"uncore","consumption":21256.0,"timestamp":1713777549.0809667},{"name":"core","consumption":6591171.0,"timestamp":1713777549.080948},{"name":"dram","consumption":686833.0,"timestamp":1713777549.080928}],"timestamp":1713777549.0806618}]},{"host":{"consumption":16297672.0,"timestamp":1713777559.2131064,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966852608","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8636431.0,"domains":[{"name":"uncore","consumption":17554.0,"timestamp":1713777559.1536322},{"name":"core","consumption":6528329.0,"timestamp":1713777559.153618},{"name":"dram","consumption":687476.0,"timestamp":1713777559.1536024}],"timestamp":1713777559.1534212}]},{"host":{"consumption":16613624.0,"timestamp":1713777569.2817764,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966840320","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8982682.0,"domains":[{"name":"uncore","consumption":14080.0,"timestamp":1713777569.2191489},{"name":"core","consumption":6835346.0,"timestamp":1713777569.219115},{"name":"dram","consumption":686288.0,"timestamp":1713777569.2190804}],"timestamp":1713777569.2186477}]},{"host":{"consumption":15928445.0,"timestamp":1713777579.3524537,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966041600","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8482414.0,"domains":[{"name":"uncore","consumption":8813.0,"timestamp":1713777579.2880456},{"name":"core","consumption":6404099.0,"timestamp":1713777579.287951},{"name":"dram","consumption":667569.0,"timestamp":1713777579.287852}],"timestamp":1713777579.2874703}]},{"host":{"consumption":15866381.0,"timestamp":1713777589.4253757,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966049792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8423159.0,"domains":[{"name":"uncore","consumption":496.0,"timestamp":1713777589.357418},{"name":"core","consumption":6360998.0,"timestamp":1713777589.3573365},{"name":"dram","consumption":654786.0,"timestamp":1713777589.3572474}],"timestamp":1713777589.3570118}]},{"host":{"consumption":15883202.0,"timestamp":1713777599.500007,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966049792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8349347.0,"domains":[{"name":"uncore","consumption":1114.0,"timestamp":1713777599.431466},{"name":"core","consumption":6300350.0,"timestamp":1713777599.4314551},{"name":"dram","consumption":651057.0,"timestamp":1713777599.4314435}],"timestamp":1713777599.4312637}]},{"host":{"consumption":16583735.0,"timestamp":1713777609.577641,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152966057984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8933031.0,"domains":[{"name":"uncore","consumption":16167.0,"timestamp":1713777609.5073316},{"name":"core","consumption":6814868.0,"timestamp":1713777609.5073144},{"name":"dram","consumption":724313.0,"timestamp":1713777609.5072951}],"timestamp":1713777609.5069907}]},{"host":{"consumption":16225616.0,"timestamp":1713777619.6726906,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965238784","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8753202.0,"domains":[{"name":"uncore","consumption":5866.0,"timestamp":1713777619.5885262},{"name":"core","consumption":6647838.0,"timestamp":1713777619.588443},{"name":"dram","consumption":698294.0,"timestamp":1713777619.5883377}],"timestamp":1713777619.587323}]},{"host":{"consumption":16452231.0,"timestamp":1713777629.7383971,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965230592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8740273.0,"domains":[{"name":"uncore","consumption":7131.0,"timestamp":1713777629.6791177},{"name":"core","consumption":6637624.0,"timestamp":1713777629.6791074},{"name":"dram","consumption":683510.0,"timestamp":1713777629.6790953}],"timestamp":1713777629.678914}]},{"host":{"consumption":15823927.0,"timestamp":1713777639.7776556,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152965206016","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8402048.0,"domains":[{"name":"uncore","consumption":0.0,"timestamp":1713777639.7470057},{"name":"core","consumption":6336968.0,"timestamp":1713777639.746783},{"name":"dram","consumption":651596.0,"timestamp":1713777639.7465599}],"timestamp":1713777639.7453885}]},{"host":{"consumption":20210992.0,"timestamp":1713777649.8567626,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152964087808","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11645443.0,"domains":[{"name":"uncore","consumption":166251.0,"timestamp":1713777649.7856688},{"name":"core","consumption":9154307.0,"timestamp":1713777649.7855568},{"name":"dram","consumption":959337.0,"timestamp":1713777649.7854187}],"timestamp":1713777649.7847738}]},{"host":{"consumption":18315888.0,"timestamp":1713777659.9245737,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152964091904","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10023681.0,"domains":[{"name":"uncore","consumption":101881.0,"timestamp":1713777659.862742},{"name":"core","consumption":7680835.0,"timestamp":1713777659.8626509},{"name":"dram","consumption":855120.0,"timestamp":1713777659.8625586}],"timestamp":1713777659.8622923}]},{"host":{"consumption":18779222.0,"timestamp":1713777669.9968607,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152963125248","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10526377.0,"domains":[{"name":"uncore","consumption":169323.0,"timestamp":1713777669.934799},{"name":"core","consumption":8078254.0,"timestamp":1713777669.9346042},{"name":"dram","consumption":936328.0,"timestamp":1713777669.9344296}],"timestamp":1713777669.9331813}]},{"host":{"consumption":19123404.0,"timestamp":1713777680.0693,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152963768320","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10781109.0,"domains":[{"name":"uncore","consumption":113506.0,"timestamp":1713777680.0042026},{"name":"core","consumption":8356430.0,"timestamp":1713777680.0040424},{"name":"dram","consumption":875108.0,"timestamp":1713777680.0038862}],"timestamp":1713777680.0032423}]},{"host":{"consumption":16658693.0,"timestamp":1713777690.1361642,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152963764224","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8869032.0,"domains":[{"name":"uncore","consumption":40817.0,"timestamp":1713777690.0751405},{"name":"core","consumption":6706145.0,"timestamp":1713777690.0750535},{"name":"dram","consumption":736214.0,"timestamp":1713777690.0749643}],"timestamp":1713777690.0747101}]},{"host":{"consumption":15931695.0,"timestamp":1713777700.2205713,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152963739648","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8498349.0,"domains":[{"name":"uncore","consumption":37672.0,"timestamp":1713777700.1458943},{"name":"core","consumption":6345941.0,"timestamp":1713777700.1457095},{"name":"dram","consumption":712412.0,"timestamp":1713777700.1454847}],"timestamp":1713777700.1442876}]},{"host":{"consumption":15856558.0,"timestamp":1713777710.3048334,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152963735552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8405044.0,"domains":[{"name":"uncore","consumption":1059.0,"timestamp":1713777710.228694},{"name":"core","consumption":6337611.0,"timestamp":1713777710.2286005},{"name":"dram","consumption":654882.0,"timestamp":1713777710.2285113}],"timestamp":1713777710.228153}]},{"host":{"consumption":15731130.0,"timestamp":1713777720.3704264,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152962949120","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8187628.0,"domains":[{"name":"uncore","consumption":16242.0,"timestamp":1713777720.3109682},{"name":"core","consumption":6095751.0,"timestamp":1713777720.3108895},{"name":"dram","consumption":679307.0,"timestamp":1713777720.3108082}],"timestamp":1713777720.3105443}]},{"host":{"consumption":16210695.0,"timestamp":1713777730.4636085,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152962957312","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8795062.0,"domains":[{"name":"uncore","consumption":16315.0,"timestamp":1713777730.3778632},{"name":"core","consumption":6706404.0,"timestamp":1713777730.3778448},{"name":"dram","consumption":685067.0,"timestamp":1713777730.3778222}],"timestamp":1713777730.377493}]},{"host":{"consumption":16040021.0,"timestamp":1713777740.5394042,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152962924544","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8431943.0,"domains":[{"name":"uncore","consumption":9415.0,"timestamp":1713777740.4708369},{"name":"core","consumption":6360303.0,"timestamp":1713777740.4708252},{"name":"dram","consumption":672710.0,"timestamp":1713777740.4708118}],"timestamp":1713777740.4706376}]},{"host":{"consumption":17075332.0,"timestamp":1713777750.6046717,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152962924544","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9383489.0,"domains":[{"name":"uncore","consumption":19158.0,"timestamp":1713777750.5443146},{"name":"core","consumption":7245646.0,"timestamp":1713777750.544299},{"name":"dram","consumption":694105.0,"timestamp":1713777750.5442803}],"timestamp":1713777750.544087}]},{"host":{"consumption":16038221.0,"timestamp":1713777760.7143607,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152962920448","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8620729.0,"domains":[{"name":"uncore","consumption":34230.0,"timestamp":1713777760.6133876},{"name":"core","consumption":6495974.0,"timestamp":1713777760.6132631},{"name":"dram","consumption":708761.0,"timestamp":1713777760.6130996}],"timestamp":1713777760.611765}]},{"host":{"consumption":18562744.0,"timestamp":1713777770.7854593,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152961789952","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10167510.0,"domains":[{"name":"uncore","consumption":85764.0,"timestamp":1713777770.7238543},{"name":"core","consumption":7782228.0,"timestamp":1713777770.7238424},{"name":"dram","consumption":824070.0,"timestamp":1713777770.7238216}],"timestamp":1713777770.723569}]},{"host":{"consumption":17822256.0,"timestamp":1713777780.8563392,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152961662976","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9776705.0,"domains":[{"name":"uncore","consumption":65075.0,"timestamp":1713777780.79145},{"name":"core","consumption":7445099.0,"timestamp":1713777780.791433},{"name":"dram","consumption":800301.0,"timestamp":1713777780.791413}],"timestamp":1713777780.7911453}]},{"host":{"consumption":17887402.0,"timestamp":1713777790.9230866,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152961298432","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9885649.0,"domains":[{"name":"uncore","consumption":43824.0,"timestamp":1713777790.863574},{"name":"core","consumption":7646417.0,"timestamp":1713777790.8635585},{"name":"dram","consumption":772986.0,"timestamp":1713777790.8635464}],"timestamp":1713777790.863358}]},{"host":{"consumption":16965574.0,"timestamp":1713777800.9973304,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152961216512","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9200041.0,"domains":[{"name":"uncore","consumption":56064.0,"timestamp":1713777800.933654},{"name":"core","consumption":6970620.0,"timestamp":1713777800.933577},{"name":"dram","consumption":772481.0,"timestamp":1713777800.933496}],"timestamp":1713777800.9316926}]},{"host":{"consumption":17400900.0,"timestamp":1713777811.0945747,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152961224704","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9707364.0,"domains":[{"name":"uncore","consumption":22511.0,"timestamp":1713777811.0058458},{"name":"core","consumption":7574528.0,"timestamp":1713777811.005728},{"name":"dram","consumption":694298.0,"timestamp":1713777811.005565}],"timestamp":1713777811.0046043}]},{"host":{"consumption":22693084.0,"timestamp":1713777821.1748168,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152960417792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14066250.0,"domains":[{"name":"uncore","consumption":20233.0,"timestamp":1713777821.1053782},{"name":"core","consumption":11756106.0,"timestamp":1713777821.1052055},{"name":"dram","consumption":747530.0,"timestamp":1713777821.1050317}],"timestamp":1713777821.1041722}]},{"host":{"consumption":17230540.0,"timestamp":1713777831.2208235,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152960409600","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9318668.0,"domains":[{"name":"uncore","consumption":73312.0,"timestamp":1713777831.1806302},{"name":"core","consumption":7098818.0,"timestamp":1713777831.180615},{"name":"dram","consumption":790496.0,"timestamp":1713777831.180598}],"timestamp":1713777831.1804144}]},{"host":{"consumption":17543072.0,"timestamp":1713777841.323959,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152960290816","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9691442.0,"domains":[{"name":"uncore","consumption":65266.0,"timestamp":1713777841.2299023},{"name":"core","consumption":7379468.0,"timestamp":1713777841.2298503},{"name":"dram","consumption":771439.0,"timestamp":1713777841.229734}],"timestamp":1713777841.2287185}]},{"host":{"consumption":18375540.0,"timestamp":1713777851.393677,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152960143360","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10071285.0,"domains":[{"name":"uncore","consumption":95768.0,"timestamp":1713777851.332009},{"name":"core","consumption":7713945.0,"timestamp":1713777851.3319974},{"name":"dram","consumption":835902.0,"timestamp":1713777851.3319821}],"timestamp":1713777851.3318}]},{"host":{"consumption":17726560.0,"timestamp":1713777861.4610617,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152960004096","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9741501.0,"domains":[{"name":"uncore","consumption":67079.0,"timestamp":1713777861.4008732},{"name":"core","consumption":7442516.0,"timestamp":1713777861.4008353},{"name":"dram","consumption":793650.0,"timestamp":1713777861.4008021}],"timestamp":1713777861.4003146}]},{"host":{"consumption":17449610.0,"timestamp":1713777871.5619464,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152959102976","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9601990.0,"domains":[{"name":"uncore","consumption":60339.0,"timestamp":1713777871.4696467},{"name":"core","consumption":7300906.0,"timestamp":1713777871.4694824},{"name":"dram","consumption":769847.0,"timestamp":1713777871.4692864}],"timestamp":1713777871.4681816}]},{"host":{"consumption":18067604.0,"timestamp":1713777881.5899308,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958939136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9903128.0,"domains":[{"name":"uncore","consumption":86261.0,"timestamp":1713777881.5700386},{"name":"core","consumption":7576518.0,"timestamp":1713777881.570027},{"name":"dram","consumption":818160.0,"timestamp":1713777881.570015}],"timestamp":1713777881.5698082}]},{"host":{"consumption":18114310.0,"timestamp":1713777891.6597648,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958910464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10051117.0,"domains":[{"name":"uncore","consumption":119266.0,"timestamp":1713777891.595267},{"name":"core","consumption":7688228.0,"timestamp":1713777891.5952513},{"name":"dram","consumption":875669.0,"timestamp":1713777891.5952399}],"timestamp":1713777891.5950556}]},{"host":{"consumption":17982304.0,"timestamp":1713777901.7224674,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958914560","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9921893.0,"domains":[{"name":"uncore","consumption":105382.0,"timestamp":1713777901.6688368},{"name":"core","consumption":7614912.0,"timestamp":1713777901.6687794},{"name":"dram","consumption":821355.0,"timestamp":1713777901.6687136}],"timestamp":1713777901.6678514}]},{"host":{"consumption":16229753.0,"timestamp":1713777911.8222022,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958902272","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8694883.0,"domains":[{"name":"uncore","consumption":13136.0,"timestamp":1713777911.7282002},{"name":"core","consumption":6587707.0,"timestamp":1713777911.7281888},{"name":"dram","consumption":687165.0,"timestamp":1713777911.7281759}],"timestamp":1713777911.7280076}]},{"host":{"consumption":16616626.0,"timestamp":1713777921.8897438,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958091264","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8844863.0,"domains":[{"name":"uncore","consumption":6247.0,"timestamp":1713777921.8297477},{"name":"core","consumption":6710053.0,"timestamp":1713777921.829701},{"name":"dram","consumption":696847.0,"timestamp":1713777921.8296196}],"timestamp":1713777921.8293762}]},{"host":{"consumption":24247360.0,"timestamp":1713777931.9538066,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958078976","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":15254459.0,"domains":[{"name":"uncore","consumption":35481.0,"timestamp":1713777931.8947358},{"name":"core","consumption":12941539.0,"timestamp":1713777931.894722},{"name":"dram","consumption":962834.0,"timestamp":1713777931.8947082}],"timestamp":1713777931.8945222}]},{"host":{"consumption":20532328.0,"timestamp":1713777942.0455108,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958062592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12224716.0,"domains":[{"name":"uncore","consumption":99571.0,"timestamp":1713777941.9616747},{"name":"core","consumption":9892754.0,"timestamp":1713777941.9615881},{"name":"dram","consumption":849291.0,"timestamp":1713777941.9614494}],"timestamp":1713777941.9605832}]},{"host":{"consumption":16474318.0,"timestamp":1713777952.0709994,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958062592","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8771281.0,"domains":[{"name":"uncore","consumption":30979.0,"timestamp":1713777952.052795},{"name":"core","consumption":6620660.0,"timestamp":1713777952.0527837},{"name":"dram","consumption":715171.0,"timestamp":1713777952.0527718}],"timestamp":1713777952.0525928}]},{"host":{"consumption":17493240.0,"timestamp":1713777962.1385055,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152958066688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9531806.0,"domains":[{"name":"uncore","consumption":131463.0,"timestamp":1713777962.0778706},{"name":"core","consumption":7202853.0,"timestamp":1713777962.0778282},{"name":"dram","consumption":833088.0,"timestamp":1713777962.0777817}],"timestamp":1713777962.0771358}]},{"host":{"consumption":17458548.0,"timestamp":1713777972.24492,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152957239296","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9531299.0,"domains":[{"name":"uncore","consumption":127349.0,"timestamp":1713777972.1469042},{"name":"core","consumption":7191604.0,"timestamp":1713777972.1468406},{"name":"dram","consumption":825182.0,"timestamp":1713777972.1467702}],"timestamp":1713777972.1457498}]},{"host":{"consumption":17862440.0,"timestamp":1713777982.3326883,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152957214720","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9769459.0,"domains":[{"name":"uncore","consumption":179092.0,"timestamp":1713777982.252346},{"name":"core","consumption":7372610.0,"timestamp":1713777982.252256},{"name":"dram","consumption":884528.0,"timestamp":1713777982.2521672}],"timestamp":1713777982.251912}]},{"host":{"consumption":18233520.0,"timestamp":1713777992.4027348,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152957206528","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10080855.0,"domains":[{"name":"uncore","consumption":104562.0,"timestamp":1713777992.3419394},{"name":"core","consumption":7790676.0,"timestamp":1713777992.3419151},{"name":"dram","consumption":820201.0,"timestamp":1713777992.341895}],"timestamp":1713777992.3415523}]},{"host":{"consumption":19109640.0,"timestamp":1713778002.4701629,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152956878848","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10871542.0,"domains":[{"name":"uncore","consumption":115419.0,"timestamp":1713778002.4089096},{"name":"core","consumption":8515008.0,"timestamp":1713778002.4088027},{"name":"dram","consumption":916167.0,"timestamp":1713778002.4086978}],"timestamp":1713778002.4082537}]},{"host":{"consumption":18408262.0,"timestamp":1713778012.5528898,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152956362752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10342927.0,"domains":[{"name":"uncore","consumption":82893.0,"timestamp":1713778012.4801257},{"name":"core","consumption":8061710.0,"timestamp":1713778012.4799323},{"name":"dram","consumption":842357.0,"timestamp":1713778012.479757}],"timestamp":1713778012.4787397}]},{"host":{"consumption":19840854.0,"timestamp":1713778022.6270146,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152956350464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11335704.0,"domains":[{"name":"uncore","consumption":163135.0,"timestamp":1713778022.55935},{"name":"core","consumption":8897139.0,"timestamp":1713778022.5593307},{"name":"dram","consumption":981078.0,"timestamp":1713778022.5593092}],"timestamp":1713778022.5589626}]},{"host":{"consumption":17312974.0,"timestamp":1713778032.7117648,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152956309504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9499735.0,"domains":[{"name":"uncore","consumption":87710.0,"timestamp":1713778032.6362305},{"name":"core","consumption":7215070.0,"timestamp":1713778032.6359973},{"name":"dram","consumption":811384.0,"timestamp":1713778032.6357644}],"timestamp":1713778032.6345541}]},{"host":{"consumption":18126974.0,"timestamp":1713778042.7790456,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152956256256","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10049458.0,"domains":[{"name":"uncore","consumption":100679.0,"timestamp":1713778042.7184296},{"name":"core","consumption":7772194.0,"timestamp":1713778042.718339},{"name":"dram","consumption":809173.0,"timestamp":1713778042.7182584}],"timestamp":1713778042.7180066}]},{"host":{"consumption":17990110.0,"timestamp":1713778052.845718,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955977728","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9860508.0,"domains":[{"name":"uncore","consumption":132729.0,"timestamp":1713778052.7844014},{"name":"core","consumption":7515147.0,"timestamp":1713778052.7843919},{"name":"dram","consumption":877302.0,"timestamp":1713778052.784381}],"timestamp":1713778052.7841396}]},{"host":{"consumption":19102024.0,"timestamp":1713778062.9095144,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955179008","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10795199.0,"domains":[{"name":"uncore","consumption":191009.0,"timestamp":1713778062.855294},{"name":"core","consumption":8332341.0,"timestamp":1713778062.8551056},{"name":"dram","consumption":993144.0,"timestamp":1713778062.8549147}],"timestamp":1713778062.853756}]},{"host":{"consumption":17932420.0,"timestamp":1713778072.9832215,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955179008","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9801198.0,"domains":[{"name":"uncore","consumption":119654.0,"timestamp":1713778072.9159064},{"name":"core","consumption":7465131.0,"timestamp":1713778072.915892},{"name":"dram","consumption":868349.0,"timestamp":1713778072.9158764}],"timestamp":1713778072.9157023}]},{"host":{"consumption":15665550.0,"timestamp":1713778083.0535884,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954957824","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8236872.0,"domains":[{"name":"uncore","consumption":1435.0,"timestamp":1713778082.9920995},{"name":"core","consumption":6126665.0,"timestamp":1713778082.9918785},{"name":"dram","consumption":660562.0,"timestamp":1713778082.991654}],"timestamp":1713778082.9904716}]},{"host":{"consumption":16120235.0,"timestamp":1713778093.1263516,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954728448","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8520780.0,"domains":[{"name":"uncore","consumption":21778.0,"timestamp":1713778093.058785},{"name":"core","consumption":6411878.0,"timestamp":1713778093.0587704},{"name":"dram","consumption":687990.0,"timestamp":1713778093.058755}],"timestamp":1713778093.0585763}]},{"host":{"consumption":16046596.0,"timestamp":1713778103.2007499,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954716160","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8483392.0,"domains":[{"name":"uncore","consumption":24553.0,"timestamp":1713778103.1311922},{"name":"core","consumption":6374043.0,"timestamp":1713778103.131181},{"name":"dram","consumption":697553.0,"timestamp":1713778103.1311667}],"timestamp":1713778103.1309865}]},{"host":{"consumption":15957042.0,"timestamp":1713778113.261549,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953991168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8526762.0,"domains":[{"name":"uncore","consumption":9305.0,"timestamp":1713778113.2123566},{"name":"core","consumption":6414746.0,"timestamp":1713778113.2122111},{"name":"dram","consumption":668618.0,"timestamp":1713778113.2119734}],"timestamp":1713778113.2108254}]},{"host":{"consumption":15601428.0,"timestamp":1713778123.3766108,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953991168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8257602.0,"domains":[{"name":"uncore","consumption":1073.0,"timestamp":1713778123.2738173},{"name":"core","consumption":6212498.0,"timestamp":1713778123.273661},{"name":"dram","consumption":645039.0,"timestamp":1713778123.2734315}],"timestamp":1713778123.2723062}]},{"host":{"consumption":19030572.0,"timestamp":1713778133.4485748,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955719680","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10675758.0,"domains":[{"name":"uncore","consumption":111651.0,"timestamp":1713778133.3864427},{"name":"core","consumption":8321683.0,"timestamp":1713778133.386427},{"name":"dram","consumption":880649.0,"timestamp":1713778133.3864074}],"timestamp":1713778133.3861651}]},{"host":{"consumption":18044690.0,"timestamp":1713778143.5153856,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955723776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9966501.0,"domains":[{"name":"uncore","consumption":99055.0,"timestamp":1713778143.4558403},{"name":"core","consumption":7658628.0,"timestamp":1713778143.4558094},{"name":"dram","consumption":839877.0,"timestamp":1713778143.4557405}],"timestamp":1713778143.4554782}]},{"host":{"consumption":16208644.0,"timestamp":1713778153.6035,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152955723776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8720445.0,"domains":[{"name":"uncore","consumption":28104.0,"timestamp":1713778153.5237722},{"name":"core","consumption":6585610.0,"timestamp":1713778153.5237236},{"name":"dram","consumption":708395.0,"timestamp":1713778153.5236516}],"timestamp":1713778153.522603}]},{"host":{"consumption":16021691.0,"timestamp":1713778163.6856952,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954953728","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8491445.0,"domains":[{"name":"uncore","consumption":12070.0,"timestamp":1713778163.6114707},{"name":"core","consumption":6391293.0,"timestamp":1713778163.611446},{"name":"dram","consumption":680306.0,"timestamp":1713778163.6114204}],"timestamp":1713778163.6108978}]},{"host":{"consumption":16108650.0,"timestamp":1713778173.75182,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954937344","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8471021.0,"domains":[{"name":"uncore","consumption":13198.0,"timestamp":1713778173.6924863},{"name":"core","consumption":6370185.0,"timestamp":1713778173.692438},{"name":"dram","consumption":680392.0,"timestamp":1713778173.6923525}],"timestamp":1713778173.6921015}]},{"host":{"consumption":16630331.0,"timestamp":1713778183.8555284,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954843136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9040092.0,"domains":[{"name":"uncore","consumption":11112.0,"timestamp":1713778183.7604535},{"name":"core","consumption":6876670.0,"timestamp":1713778183.760376},{"name":"dram","consumption":709599.0,"timestamp":1713778183.7602925}],"timestamp":1713778183.759236}]},{"host":{"consumption":20623596.0,"timestamp":1713778193.9633613,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954834944","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12148391.0,"domains":[{"name":"uncore","consumption":75015.0,"timestamp":1713778193.8707},{"name":"core","consumption":9812882.0,"timestamp":1713778193.8706245},{"name":"dram","consumption":899764.0,"timestamp":1713778193.870541}],"timestamp":1713778193.8694522}]},{"host":{"consumption":17016802.0,"timestamp":1713778204.034221,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954843136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9095368.0,"domains":[{"name":"uncore","consumption":66745.0,"timestamp":1713778203.9716375},{"name":"core","consumption":6873280.0,"timestamp":1713778203.9716249},{"name":"dram","consumption":784929.0,"timestamp":1713778203.97161}],"timestamp":1713778203.971305}]},{"host":{"consumption":17112820.0,"timestamp":1713778214.1344874,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152954105856","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9360768.0,"domains":[{"name":"uncore","consumption":60661.0,"timestamp":1713778214.0423117},{"name":"core","consumption":7127434.0,"timestamp":1713778214.0422997},{"name":"dram","consumption":773353.0,"timestamp":1713778214.0422854}],"timestamp":1713778214.0420032}]},{"host":{"consumption":18903108.0,"timestamp":1713778224.2335865,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953991168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10563515.0,"domains":[{"name":"uncore","consumption":114829.0,"timestamp":1713778224.1482656},{"name":"core","consumption":8165978.0,"timestamp":1713778224.1480432},{"name":"dram","consumption":893129.0,"timestamp":1713778224.147817}],"timestamp":1713778224.1467283}]},{"host":{"consumption":16815078.0,"timestamp":1713778234.3094904,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953987072","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9073328.0,"domains":[{"name":"uncore","consumption":33808.0,"timestamp":1713778234.2399542},{"name":"core","consumption":6896834.0,"timestamp":1713778234.2399182},{"name":"dram","consumption":742332.0,"timestamp":1713778234.2398176}],"timestamp":1713778234.239405}]},{"host":{"consumption":16468905.0,"timestamp":1713778244.334961,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953974784","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8726411.0,"domains":[{"name":"uncore","consumption":51516.0,"timestamp":1713778244.31644},{"name":"core","consumption":6539256.0,"timestamp":1713778244.3163552},{"name":"dram","consumption":757700.0,"timestamp":1713778244.3162642}],"timestamp":1713778244.316021}]},{"host":{"consumption":16805254.0,"timestamp":1713778254.4097855,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953974784","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9099256.0,"domains":[{"name":"uncore","consumption":44680.0,"timestamp":1713778254.340396},{"name":"core","consumption":6936122.0,"timestamp":1713778254.3403227},{"name":"dram","consumption":744308.0,"timestamp":1713778254.3402247}],"timestamp":1713778254.3399541}]},{"host":{"consumption":16182486.0,"timestamp":1713778264.4898,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953188352","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8616916.0,"domains":[{"name":"uncore","consumption":22437.0,"timestamp":1713778264.4189432},{"name":"core","consumption":6478810.0,"timestamp":1713778264.4188635},{"name":"dram","consumption":722628.0,"timestamp":1713778264.4188013}],"timestamp":1713778264.4178174}]},{"host":{"consumption":17305524.0,"timestamp":1713778274.592418,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953188352","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9435582.0,"domains":[{"name":"uncore","consumption":76477.0,"timestamp":1713778274.4962804},{"name":"core","consumption":7187148.0,"timestamp":1713778274.4961896},{"name":"dram","consumption":795758.0,"timestamp":1713778274.4960816}],"timestamp":1713778274.4958107}]},{"host":{"consumption":18785188.0,"timestamp":1713778284.6705709,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953167872","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10446739.0,"domains":[{"name":"uncore","consumption":125444.0,"timestamp":1713778284.6004436},{"name":"core","consumption":8087918.0,"timestamp":1713778284.6003916},{"name":"dram","consumption":890058.0,"timestamp":1713778284.6003404}],"timestamp":1713778284.6000745}]},{"host":{"consumption":16213882.0,"timestamp":1713778294.7732277,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953221120","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8737510.0,"domains":[{"name":"uncore","consumption":16673.0,"timestamp":1713778294.6817791},{"name":"core","consumption":6622020.0,"timestamp":1713778294.6817255},{"name":"dram","consumption":691778.0,"timestamp":1713778294.6816595}],"timestamp":1713778294.6806479}]},{"host":{"consumption":16841598.0,"timestamp":1713778304.8395026,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152953221120","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8990070.0,"domains":[{"name":"uncore","consumption":67261.0,"timestamp":1713778304.7806199},{"name":"core","consumption":6786066.0,"timestamp":1713778304.780608},{"name":"dram","consumption":772277.0,"timestamp":1713778304.7805893}],"timestamp":1713778304.7802932}]},{"host":{"consumption":15886529.0,"timestamp":1713778314.9193351,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152952422400","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8469075.0,"domains":[{"name":"uncore","consumption":13107.0,"timestamp":1713778314.8479078},{"name":"core","consumption":6378442.0,"timestamp":1713778314.8478038},{"name":"dram","consumption":681078.0,"timestamp":1713778314.847698}],"timestamp":1713778314.8471231}]},{"host":{"consumption":16300617.0,"timestamp":1713778324.9993405,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152952422400","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8713816.0,"domains":[{"name":"uncore","consumption":22667.0,"timestamp":1713778324.9289382},{"name":"core","consumption":6595842.0,"timestamp":1713778324.9288406},{"name":"dram","consumption":698723.0,"timestamp":1713778324.9287448}],"timestamp":1713778324.9282732}]},{"host":{"consumption":16274175.0,"timestamp":1713778335.0838835,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152952406016","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8685893.0,"domains":[{"name":"uncore","consumption":1072.0,"timestamp":1713778335.0060637},{"name":"core","consumption":6599734.0,"timestamp":1713778335.006051},{"name":"dram","consumption":684139.0,"timestamp":1713778335.0060375}],"timestamp":1713778335.0058546}]},{"host":{"consumption":15490132.0,"timestamp":1713778345.1519918,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152952406016","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8027108.0,"domains":[{"name":"uncore","consumption":1077.0,"timestamp":1713778345.0918274},{"name":"core","consumption":5970722.0,"timestamp":1713778345.091758},{"name":"dram","consumption":649692.0,"timestamp":1713778345.0917196}],"timestamp":1713778345.090986}]},{"host":{"consumption":15852559.0,"timestamp":1713778355.2326415,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152952401920","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8466667.0,"domains":[{"name":"uncore","consumption":1024.0,"timestamp":1713778355.1580641},{"name":"core","consumption":6413722.0,"timestamp":1713778355.1580014},{"name":"dram","consumption":649999.0,"timestamp":1713778355.157901}],"timestamp":1713778355.157543}]},{"host":{"consumption":16240695.0,"timestamp":1713778365.3005126,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152951627776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8585786.0,"domains":[{"name":"uncore","consumption":4891.0,"timestamp":1713778365.2409782},{"name":"core","consumption":6503272.0,"timestamp":1713778365.240959},{"name":"dram","consumption":685492.0,"timestamp":1713778365.2409384}],"timestamp":1713778365.2406104}]},{"host":{"consumption":16741456.0,"timestamp":1713778375.3824499,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152951611392","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9067325.0,"domains":[{"name":"uncore","consumption":28774.0,"timestamp":1713778375.3098996},{"name":"core","consumption":6902248.0,"timestamp":1713778375.3098242},{"name":"dram","consumption":751734.0,"timestamp":1713778375.309668}],"timestamp":1713778375.3084521}]},{"host":{"consumption":16094570.0,"timestamp":1713778385.4497921,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152951390208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8522783.0,"domains":[{"name":"uncore","consumption":3094.0,"timestamp":1713778385.3902752},{"name":"core","consumption":6430091.0,"timestamp":1713778385.3902605},{"name":"dram","consumption":675185.0,"timestamp":1713778385.3902447}],"timestamp":1713778385.3900678}]},{"host":{"consumption":15702383.0,"timestamp":1713778395.5490887,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152951390208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8299491.0,"domains":[{"name":"uncore","consumption":1303.0,"timestamp":1713778395.4573636},{"name":"core","consumption":6229972.0,"timestamp":1713778395.4572694},{"name":"dram","consumption":672905.0,"timestamp":1713778395.4571745}],"timestamp":1713778395.4568045}]},{"host":{"consumption":15926298.0,"timestamp":1713778405.6472604,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152950620160","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8407060.0,"domains":[{"name":"uncore","consumption":2913.0,"timestamp":1713778405.5561535},{"name":"core","consumption":6320935.0,"timestamp":1713778405.5561402},{"name":"dram","consumption":664250.0,"timestamp":1713778405.5561228}],"timestamp":1713778405.5559301}]},{"host":{"consumption":17106012.0,"timestamp":1713778415.7178535,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152950579200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9104477.0,"domains":[{"name":"uncore","consumption":86591.0,"timestamp":1713778415.6561277},{"name":"core","consumption":6853135.0,"timestamp":1713778415.656116},{"name":"dram","consumption":814963.0,"timestamp":1713778415.6561036}],"timestamp":1713778415.655915}]},{"host":{"consumption":20155688.0,"timestamp":1713778425.8072379,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152950501376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11732790.0,"domains":[{"name":"uncore","consumption":153072.0,"timestamp":1713778425.72294},{"name":"core","consumption":9271947.0,"timestamp":1713778425.7229323},{"name":"dram","consumption":959340.0,"timestamp":1713778425.722924}],"timestamp":1713778425.7227395}]},{"host":{"consumption":18600844.0,"timestamp":1713778435.892952,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152950497280","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10397299.0,"domains":[{"name":"uncore","consumption":127204.0,"timestamp":1713778435.8201876},{"name":"core","consumption":8062494.0,"timestamp":1713778435.8201532},{"name":"dram","consumption":901573.0,"timestamp":1713778435.8201234}],"timestamp":1713778435.8196468}]},{"host":{"consumption":18800292.0,"timestamp":1713778445.989877,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152950484992","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10658923.0,"domains":[{"name":"uncore","consumption":87654.0,"timestamp":1713778445.899361},{"name":"core","consumption":8358092.0,"timestamp":1713778445.899273},{"name":"dram","consumption":863223.0,"timestamp":1713778445.8991795}],"timestamp":1713778445.8988254}]},{"host":{"consumption":16503893.0,"timestamp":1713778456.0580692,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152949698560","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8760128.0,"domains":[{"name":"uncore","consumption":24881.0,"timestamp":1713778455.9982858},{"name":"core","consumption":6619273.0,"timestamp":1713778455.998271},{"name":"dram","consumption":722279.0,"timestamp":1713778455.9982567}],"timestamp":1713778455.9980743}]},{"host":{"consumption":16004728.0,"timestamp":1713778466.1401925,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152949706752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8535786.0,"domains":[{"name":"uncore","consumption":21513.0,"timestamp":1713778466.0670831},{"name":"core","consumption":6396448.0,"timestamp":1713778466.0669842},{"name":"dram","consumption":709696.0,"timestamp":1713778466.0668886}],"timestamp":1713778466.065791}]},{"host":{"consumption":15714509.0,"timestamp":1713778476.2077904,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152949694464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8224187.0,"domains":[{"name":"uncore","consumption":593.0,"timestamp":1713778476.1474054},{"name":"core","consumption":6164270.0,"timestamp":1713778476.147317},{"name":"dram","consumption":658405.0,"timestamp":1713778476.1472273}],"timestamp":1713778476.1469781}]},{"host":{"consumption":15509596.0,"timestamp":1713778486.2828846,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152949694464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8095696.0,"domains":[{"name":"uncore","consumption":1121.0,"timestamp":1713778486.2131784},{"name":"core","consumption":6029805.0,"timestamp":1713778486.2131019},{"name":"dram","consumption":658380.0,"timestamp":1713778486.2130163}],"timestamp":1713778486.2127774}]},{"host":{"consumption":15917170.0,"timestamp":1713778496.3726666,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152949686272","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8507946.0,"domains":[{"name":"uncore","consumption":508.0,"timestamp":1713778496.293669},{"name":"core","consumption":6425052.0,"timestamp":1713778496.2935703},{"name":"dram","consumption":674278.0,"timestamp":1713778496.293475}],"timestamp":1713778496.293092}]},{"host":{"consumption":17460936.0,"timestamp":1713778506.4403293,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152948645888","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9438790.0,"domains":[{"name":"uncore","consumption":63186.0,"timestamp":1713778506.3801222},{"name":"core","consumption":7188739.0,"timestamp":1713778506.3801115},{"name":"dram","consumption":801605.0,"timestamp":1713778506.3800988}],"timestamp":1713778506.37992}]},{"host":{"consumption":17647596.0,"timestamp":1713778516.467086,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152948502528","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9673203.0,"domains":[{"name":"uncore","consumption":63288.0,"timestamp":1713778516.4464781},{"name":"core","consumption":7367384.0,"timestamp":1713778516.4464595},{"name":"dram","consumption":781762.0,"timestamp":1713778516.4464357}],"timestamp":1713778516.4461293}]},{"host":{"consumption":17998264.0,"timestamp":1713778526.5498712,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152948396032","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9922432.0,"domains":[{"name":"uncore","consumption":93941.0,"timestamp":1713778526.4760978},{"name":"core","consumption":7568352.0,"timestamp":1713778526.47608},{"name":"dram","consumption":827088.0,"timestamp":1713778526.4760604}],"timestamp":1713778526.475664}]},{"host":{"consumption":17919348.0,"timestamp":1713778536.6171196,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152948281344","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9716069.0,"domains":[{"name":"uncore","consumption":91981.0,"timestamp":1713778536.55687},{"name":"core","consumption":7362954.0,"timestamp":1713778536.5568569},{"name":"dram","consumption":822564.0,"timestamp":1713778536.5568407}],"timestamp":1713778536.5566506}]},{"host":{"consumption":17562222.0,"timestamp":1713778546.7132726,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152948137984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9642658.0,"domains":[{"name":"uncore","consumption":83211.0,"timestamp":1713778546.6262805},{"name":"core","consumption":7284240.0,"timestamp":1713778546.6260839},{"name":"dram","consumption":808179.0,"timestamp":1713778546.6259797}],"timestamp":1713778546.624852}]},{"host":{"consumption":17814228.0,"timestamp":1713778556.7811947,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152947236864","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9663190.0,"domains":[{"name":"uncore","consumption":63607.0,"timestamp":1713778556.720838},{"name":"core","consumption":7354302.0,"timestamp":1713778556.720753},{"name":"dram","consumption":790565.0,"timestamp":1713778556.7206686}],"timestamp":1713778556.7204156}]},{"host":{"consumption":17404296.0,"timestamp":1713778566.870133,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152947122176","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9502488.0,"domains":[{"name":"uncore","consumption":50750.0,"timestamp":1713778566.7870471},{"name":"core","consumption":7210500.0,"timestamp":1713778566.78702},{"name":"dram","consumption":761710.0,"timestamp":1713778566.7869334}],"timestamp":1713778566.78662}]},{"host":{"consumption":16562229.0,"timestamp":1713778576.9380562,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152947113984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8787423.0,"domains":[{"name":"uncore","consumption":33913.0,"timestamp":1713778576.8780177},{"name":"core","consumption":6621239.0,"timestamp":1713778576.8779504},{"name":"dram","consumption":738578.0,"timestamp":1713778576.877923}],"timestamp":1713778576.8776152}]},{"host":{"consumption":16660833.0,"timestamp":1713778587.025769,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152947113984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9023139.0,"domains":[{"name":"uncore","consumption":36360.0,"timestamp":1713778586.9464016},{"name":"core","consumption":6847376.0,"timestamp":1713778586.9463885},{"name":"dram","consumption":750955.0,"timestamp":1713778586.9463744}],"timestamp":1713778586.9455016}]},{"host":{"consumption":27157940.0,"timestamp":1713778597.0935817,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152947126272","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":17499112.0,"domains":[{"name":"uncore","consumption":35800.0,"timestamp":1713778597.0323348},{"name":"core","consumption":15083170.0,"timestamp":1713778597.0323172},{"name":"dram","consumption":1039158.0,"timestamp":1713778597.0322983}],"timestamp":1713778597.032109}]},{"host":{"consumption":28478488.0,"timestamp":1713778607.1648693,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152946339840","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":18714750.0,"domains":[{"name":"uncore","consumption":44761.0,"timestamp":1713778607.1008992},{"name":"core","consumption":16264204.0,"timestamp":1713778607.1008866},{"name":"dram","consumption":1128004.0,"timestamp":1713778607.1008732}],"timestamp":1713778607.1006866}]},{"host":{"consumption":18499788.0,"timestamp":1713778617.2449539,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152946348032","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10543282.0,"domains":[{"name":"uncore","consumption":35862.0,"timestamp":1713778617.1762187},{"name":"core","consumption":8301560.0,"timestamp":1713778617.1761572},{"name":"dram","consumption":822909.0,"timestamp":1713778617.176089}],"timestamp":1713778617.175215}]},{"host":{"consumption":23262280.0,"timestamp":1713778627.2894037,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152946331648","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14149683.0,"domains":[{"name":"uncore","consumption":42079.0,"timestamp":1713778627.251147},{"name":"core","consumption":11705086.0,"timestamp":1713778627.2510552},{"name":"dram","consumption":1064990.0,"timestamp":1713778627.2509615}],"timestamp":1713778627.2506926}]},{"host":{"consumption":21524196.0,"timestamp":1713778637.3684716,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152946331648","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":13009110.0,"domains":[{"name":"uncore","consumption":28453.0,"timestamp":1713778637.2985888},{"name":"core","consumption":10682544.0,"timestamp":1713778637.2984},{"name":"dram","consumption":871337.0,"timestamp":1713778637.298218}],"timestamp":1713778637.297285}]},{"host":{"consumption":18142652.0,"timestamp":1713778647.434562,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152946593792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10150490.0,"domains":[{"name":"uncore","consumption":4452.0,"timestamp":1713778647.3748107},{"name":"core","consumption":7951602.0,"timestamp":1713778647.3747218},{"name":"dram","consumption":701909.0,"timestamp":1713778647.3746347}],"timestamp":1713778647.3743806}]},{"host":{"consumption":17666958.0,"timestamp":1713778657.503115,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152945795072","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9798788.0,"domains":[{"name":"uncore","consumption":50984.0,"timestamp":1713778657.440225},{"name":"core","consumption":7597266.0,"timestamp":1713778657.4401462},{"name":"dram","consumption":746821.0,"timestamp":1713778657.440057}],"timestamp":1713778657.4398046}]},{"host":{"consumption":19220484.0,"timestamp":1713778667.5885675,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152945782784","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11069197.0,"domains":[{"name":"uncore","consumption":77207.0,"timestamp":1713778667.5139923},{"name":"core","consumption":8749279.0,"timestamp":1713778667.5138848},{"name":"dram","consumption":857648.0,"timestamp":1713778667.5138164}],"timestamp":1713778667.5128698}]},{"host":{"consumption":20951024.0,"timestamp":1713778677.6627448,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152945745920","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12430102.0,"domains":[{"name":"uncore","consumption":69874.0,"timestamp":1713778677.599442},{"name":"core","consumption":10106482.0,"timestamp":1713778677.5993917},{"name":"dram","consumption":841225.0,"timestamp":1713778677.5993023}],"timestamp":1713778677.5990338}]},{"host":{"consumption":16926342.0,"timestamp":1713778687.7279685,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152945446912","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9035822.0,"domains":[{"name":"uncore","consumption":56728.0,"timestamp":1713778687.6679056},{"name":"core","consumption":6790726.0,"timestamp":1713778687.6678214},{"name":"dram","consumption":761855.0,"timestamp":1713778687.667737}],"timestamp":1713778687.66746}]},{"host":{"consumption":19875748.0,"timestamp":1713778697.7560825,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152945446912","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11318247.0,"domains":[{"name":"uncore","consumption":157622.0,"timestamp":1713778697.733742},{"name":"core","consumption":8787961.0,"timestamp":1713778697.733689},{"name":"dram","consumption":926546.0,"timestamp":1713778697.7336307}],"timestamp":1713778697.7332962}]},{"host":{"consumption":17565808.0,"timestamp":1713778707.8432217,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152944713728","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9708976.0,"domains":[{"name":"uncore","consumption":68045.0,"timestamp":1713778707.7646315},{"name":"core","consumption":7454607.0,"timestamp":1713778707.7645397},{"name":"dram","consumption":792112.0,"timestamp":1713778707.7644496}],"timestamp":1713778707.7642076}]},{"host":{"consumption":16271821.0,"timestamp":1713778717.9177754,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152944709632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8585741.0,"domains":[{"name":"uncore","consumption":16722.0,"timestamp":1713778717.8493693},{"name":"core","consumption":6444695.0,"timestamp":1713778717.8493614},{"name":"dram","consumption":704756.0,"timestamp":1713778717.8493526}],"timestamp":1713778717.849184}]},{"host":{"consumption":16705390.0,"timestamp":1713778728.0240765,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152944709632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9099752.0,"domains":[{"name":"uncore","consumption":64872.0,"timestamp":1713778727.9277136},{"name":"core","consumption":6869289.0,"timestamp":1713778727.9276729},{"name":"dram","consumption":778874.0,"timestamp":1713778727.9276247}],"timestamp":1713778727.9262896}]},{"host":{"consumption":17832512.0,"timestamp":1713778738.0924132,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152944668672","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9709509.0,"domains":[{"name":"uncore","consumption":75912.0,"timestamp":1713778738.0317535},{"name":"core","consumption":7418628.0,"timestamp":1713778738.031738},{"name":"dram","consumption":823897.0,"timestamp":1713778738.031726}],"timestamp":1713778738.0315561}]},{"host":{"consumption":20198180.0,"timestamp":1713778748.160627,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152944652288","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11694763.0,"domains":[{"name":"uncore","consumption":142257.0,"timestamp":1713778748.09847},{"name":"core","consumption":9226643.0,"timestamp":1713778748.0983844},{"name":"dram","consumption":969974.0,"timestamp":1713778748.0982988}],"timestamp":1713778748.0980463}]},{"host":{"consumption":15958849.0,"timestamp":1713778758.2308273,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943874048","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8529656.0,"domains":[{"name":"uncore","consumption":11485.0,"timestamp":1713778758.1690784},{"name":"core","consumption":6410123.0,"timestamp":1713778758.1689932},{"name":"dram","consumption":681797.0,"timestamp":1713778758.1689286}],"timestamp":1713778758.16806}]},{"host":{"consumption":24738866.0,"timestamp":1713778768.262927,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943882240","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":15562587.0,"domains":[{"name":"uncore","consumption":81832.0,"timestamp":1713778768.2387984},{"name":"core","consumption":13186542.0,"timestamp":1713778768.2387848},{"name":"dram","consumption":1013336.0,"timestamp":1713778768.2387707}],"timestamp":1713778768.2385335}]},{"host":{"consumption":19744614.0,"timestamp":1713778778.331345,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943849472","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11519386.0,"domains":[{"name":"uncore","consumption":22756.0,"timestamp":1713778778.2697496},{"name":"core","consumption":9316394.0,"timestamp":1713778778.2697268},{"name":"dram","consumption":812384.0,"timestamp":1713778778.2696981}],"timestamp":1713778778.269317}]},{"host":{"consumption":19459386.0,"timestamp":1713778788.4409165,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943845376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11461473.0,"domains":[{"name":"uncore","consumption":31296.0,"timestamp":1713778788.3407662},{"name":"core","consumption":9237161.0,"timestamp":1713778788.340537},{"name":"dram","consumption":827642.0,"timestamp":1713778788.3403227}],"timestamp":1713778788.33934}]},{"host":{"consumption":18436102.0,"timestamp":1713778798.5504792,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943853568","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10466570.0,"domains":[{"name":"uncore","consumption":29233.0,"timestamp":1713778798.45015},{"name":"core","consumption":8261108.0,"timestamp":1713778798.4501016},{"name":"dram","consumption":796075.0,"timestamp":1713778798.4500134}],"timestamp":1713778798.4496686}]},{"host":{"consumption":20001496.0,"timestamp":1713778808.640647,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943067136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11704517.0,"domains":[{"name":"uncore","consumption":54240.0,"timestamp":1713778808.5617294},{"name":"core","consumption":9452224.0,"timestamp":1713778808.5616283},{"name":"dram","consumption":781040.0,"timestamp":1713778808.5615287}],"timestamp":1713778808.5606935}]},{"host":{"consumption":18077090.0,"timestamp":1713778818.710855,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943054848","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9995364.0,"domains":[{"name":"uncore","consumption":92504.0,"timestamp":1713778818.6501791},{"name":"core","consumption":7699817.0,"timestamp":1713778818.6500888},{"name":"dram","consumption":822687.0,"timestamp":1713778818.6499984}],"timestamp":1713778818.6497564}]},{"host":{"consumption":16362333.0,"timestamp":1713778828.80112,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943038464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8835574.0,"domains":[{"name":"uncore","consumption":27299.0,"timestamp":1713778828.7198443},{"name":"core","consumption":6682977.0,"timestamp":1713778828.719802},{"name":"dram","consumption":712363.0,"timestamp":1713778828.7197506}],"timestamp":1713778828.7187848}]},{"host":{"consumption":16467553.0,"timestamp":1713778838.877483,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152943026176","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8775517.0,"domains":[{"name":"uncore","consumption":29910.0,"timestamp":1713778838.8084548},{"name":"core","consumption":6634164.0,"timestamp":1713778838.808442},{"name":"dram","consumption":710494.0,"timestamp":1713778838.8084257}],"timestamp":1713778838.8082528}]},{"host":{"consumption":16077070.0,"timestamp":1713778848.9446871,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152942239744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8514501.0,"domains":[{"name":"uncore","consumption":20074.0,"timestamp":1713778848.8842096},{"name":"core","consumption":6378392.0,"timestamp":1713778848.884195},{"name":"dram","consumption":687720.0,"timestamp":1713778848.884182}],"timestamp":1713778848.8840048}]},{"host":{"consumption":16118377.0,"timestamp":1713778859.024553,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152942026752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8688166.0,"domains":[{"name":"uncore","consumption":1685.0,"timestamp":1713778858.9515653},{"name":"core","consumption":6589562.0,"timestamp":1713778858.9514425},{"name":"dram","consumption":662978.0,"timestamp":1713778858.9513195}],"timestamp":1713778858.95085}]},{"host":{"consumption":15860850.0,"timestamp":1713778869.0948727,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152942051328","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8282485.0,"domains":[{"name":"uncore","consumption":7841.0,"timestamp":1713778869.0309985},{"name":"core","consumption":6195926.0,"timestamp":1713778869.0309856},{"name":"dram","consumption":662119.0,"timestamp":1713778869.0309694}],"timestamp":1713778869.0307913}]},{"host":{"consumption":15820916.0,"timestamp":1713778879.1628766,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152942051328","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8353632.0,"domains":[{"name":"uncore","consumption":2339.0,"timestamp":1713778879.103162},{"name":"core","consumption":6269642.0,"timestamp":1713778879.1031518},{"name":"dram","consumption":669379.0,"timestamp":1713778879.1031404}],"timestamp":1713778879.1029003}]},{"host":{"consumption":28507276.0,"timestamp":1713778889.2309678,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152942063616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":18768124.0,"domains":[{"name":"uncore","consumption":41915.0,"timestamp":1713778889.1694262},{"name":"core","consumption":16377608.0,"timestamp":1713778889.1694157},{"name":"dram","consumption":1118404.0,"timestamp":1713778889.1694038}],"timestamp":1713778889.1691332}]},{"host":{"consumption":20713548.0,"timestamp":1713778899.3085809,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152941256704","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":12419683.0,"domains":[{"name":"uncore","consumption":15095.0,"timestamp":1713778899.2372148},{"name":"core","consumption":10194320.0,"timestamp":1713778899.2372034},{"name":"dram","consumption":838509.0,"timestamp":1713778899.2371914}],"timestamp":1713778899.2369263}]},{"host":{"consumption":19035308.0,"timestamp":1713778909.378997,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152941264896","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10928281.0,"domains":[{"name":"uncore","consumption":3688.0,"timestamp":1713778909.3157477},{"name":"core","consumption":8781333.0,"timestamp":1713778909.315735},{"name":"dram","consumption":726519.0,"timestamp":1713778909.3157215}],"timestamp":1713778909.3154285}]},{"host":{"consumption":16065870.0,"timestamp":1713778919.4597495,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152941244416","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8535028.0,"domains":[{"name":"uncore","consumption":1672.0,"timestamp":1713778919.387487},{"name":"core","consumption":6419199.0,"timestamp":1713778919.387414},{"name":"dram","consumption":689804.0,"timestamp":1713778919.3873172}],"timestamp":1713778919.3863416}]},{"host":{"consumption":17734752.0,"timestamp":1713778929.5379992,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152941248512","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9834249.0,"domains":[{"name":"uncore","consumption":23697.0,"timestamp":1713778929.465888},{"name":"core","consumption":7633540.0,"timestamp":1713778929.465871},{"name":"dram","consumption":764096.0,"timestamp":1713778929.4658518}],"timestamp":1713778929.4655876}]},{"host":{"consumption":15843842.0,"timestamp":1713778939.6145253,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152941248512","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8270132.0,"domains":[{"name":"uncore","consumption":3185.0,"timestamp":1713778939.5446556},{"name":"core","consumption":6191850.0,"timestamp":1713778939.5445673},{"name":"dram","consumption":666510.0,"timestamp":1713778939.5444832}],"timestamp":1713778939.544224}]},{"host":{"consumption":16050476.0,"timestamp":1713778949.7187426,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152940462080","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8640127.0,"domains":[{"name":"uncore","consumption":6901.0,"timestamp":1713778949.627088},{"name":"core","consumption":6530049.0,"timestamp":1713778949.6270237},{"name":"dram","consumption":681281.0,"timestamp":1713778949.6269534}],"timestamp":1713778949.6258066}]},{"host":{"consumption":15882139.0,"timestamp":1713778959.7902706,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152940457984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8307277.0,"domains":[{"name":"uncore","consumption":567.0,"timestamp":1713778959.72786},{"name":"core","consumption":6233139.0,"timestamp":1713778959.7278116},{"name":"dram","consumption":662680.0,"timestamp":1713778959.72772}],"timestamp":1713778959.7274637}]},{"host":{"consumption":15869498.0,"timestamp":1713778969.8930824,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152940437504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8485106.0,"domains":[{"name":"uncore","consumption":2520.0,"timestamp":1713778969.8003242},{"name":"core","consumption":6393264.0,"timestamp":1713778969.8000796},{"name":"dram","consumption":688495.0,"timestamp":1713778969.799851}],"timestamp":1713778969.7987456}]},{"host":{"consumption":19005580.0,"timestamp":1713778979.9788907,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152940474368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10917105.0,"domains":[{"name":"uncore","consumption":4318.0,"timestamp":1713778979.9062507},{"name":"core","consumption":8738286.0,"timestamp":1713778979.9061534},{"name":"dram","consumption":712746.0,"timestamp":1713778979.9060626}],"timestamp":1713778979.9056907}]},{"host":{"consumption":15889825.0,"timestamp":1713778990.047049,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152940253184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8307917.0,"domains":[{"name":"uncore","consumption":1852.0,"timestamp":1713778989.9862208},{"name":"core","consumption":6211961.0,"timestamp":1713778989.9862065},{"name":"dram","consumption":670371.0,"timestamp":1713778989.9861887}],"timestamp":1713778989.9860132}]},{"host":{"consumption":17511788.0,"timestamp":1713779000.15303,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152939466752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9808308.0,"domains":[{"name":"uncore","consumption":11485.0,"timestamp":1713779000.0560756},{"name":"core","consumption":7665499.0,"timestamp":1713779000.0558634},{"name":"dram","consumption":749424.0,"timestamp":1713779000.0556576}],"timestamp":1713779000.0546665}]},{"host":{"consumption":16421535.0,"timestamp":1713779010.2346416,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152939483136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8743779.0,"domains":[{"name":"uncore","consumption":4874.0,"timestamp":1713779010.1610498},{"name":"core","consumption":6634943.0,"timestamp":1713779010.160999},{"name":"dram","consumption":690548.0,"timestamp":1713779010.1609514}],"timestamp":1713779010.1607027}]},{"host":{"consumption":15680743.0,"timestamp":1713779020.3049817,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152939470848","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8219063.0,"domains":[{"name":"uncore","consumption":1095.0,"timestamp":1713779020.2429798},{"name":"core","consumption":6138614.0,"timestamp":1713779020.2429557},{"name":"dram","consumption":657723.0,"timestamp":1713779020.2429168}],"timestamp":1713779020.2425015}]},{"host":{"consumption":16498719.0,"timestamp":1713779030.3953385,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152939462656","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8948646.0,"domains":[{"name":"uncore","consumption":14617.0,"timestamp":1713779030.314326},{"name":"core","consumption":6824823.0,"timestamp":1713779030.3142323},{"name":"dram","consumption":712441.0,"timestamp":1713779030.314138}],"timestamp":1713779030.3135788}]},{"host":{"consumption":16712082.0,"timestamp":1713779040.472605,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152939425792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9076443.0,"domains":[{"name":"uncore","consumption":10636.0,"timestamp":1713779040.4022105},{"name":"core","consumption":6951836.0,"timestamp":1713779040.4021976},{"name":"dram","consumption":707277.0,"timestamp":1713779040.4021845}],"timestamp":1713779040.4019973}]},{"host":{"consumption":15970347.0,"timestamp":1713779050.498144,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152938647552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8387851.0,"domains":[{"name":"uncore","consumption":6850.0,"timestamp":1713779050.4789965},{"name":"core","consumption":6279063.0,"timestamp":1713779050.478985},{"name":"dram","consumption":687153.0,"timestamp":1713779050.4789732}],"timestamp":1713779050.4788008}]},{"host":{"consumption":16211361.0,"timestamp":1713779060.545239,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152938647552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8728988.0,"domains":[{"name":"uncore","consumption":7444.0,"timestamp":1713779060.5056376},{"name":"core","consumption":6644282.0,"timestamp":1713779060.505486},{"name":"dram","consumption":679755.0,"timestamp":1713779060.5053368}],"timestamp":1713779060.5046291}]},{"host":{"consumption":16573144.0,"timestamp":1713779070.6172113,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152938655744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8859013.0,"domains":[{"name":"uncore","consumption":18508.0,"timestamp":1713779070.55355},{"name":"core","consumption":6728934.0,"timestamp":1713779070.5535376},{"name":"dram","consumption":724941.0,"timestamp":1713779070.553524}],"timestamp":1713779070.553239}]},{"host":{"consumption":15968675.0,"timestamp":1713779080.7122705,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152938643456","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8540724.0,"domains":[{"name":"uncore","consumption":12393.0,"timestamp":1713779080.6296477},{"name":"core","consumption":6447208.0,"timestamp":1713779080.6296098},{"name":"dram","consumption":685847.0,"timestamp":1713779080.6295674}],"timestamp":1713779080.6282272}]},{"host":{"consumption":17910684.0,"timestamp":1713779090.8161547,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152938643456","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9905110.0,"domains":[{"name":"uncore","consumption":130444.0,"timestamp":1713779090.7213576},{"name":"core","consumption":7581105.0,"timestamp":1713779090.7212732},{"name":"dram","consumption":862300.0,"timestamp":1713779090.7211812}],"timestamp":1713779090.7209313}]},{"host":{"consumption":16826596.0,"timestamp":1713779100.904564,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937914368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9055155.0,"domains":[{"name":"uncore","consumption":77555.0,"timestamp":1713779100.8293986},{"name":"core","consumption":6808553.0,"timestamp":1713779100.8292298},{"name":"dram","consumption":782856.0,"timestamp":1713779100.8290398}],"timestamp":1713779100.827891}]},{"host":{"consumption":17954162.0,"timestamp":1713779110.9817984,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937918464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9903029.0,"domains":[{"name":"uncore","consumption":82085.0,"timestamp":1713779110.9119844},{"name":"core","consumption":7665349.0,"timestamp":1713779110.9119031},{"name":"dram","consumption":799713.0,"timestamp":1713779110.9118137}],"timestamp":1713779110.9115727}]},{"host":{"consumption":17036168.0,"timestamp":1713779121.0684495,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937918464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9400484.0,"domains":[{"name":"uncore","consumption":52179.0,"timestamp":1713779120.9925644},{"name":"core","consumption":7211028.0,"timestamp":1713779120.9924488},{"name":"dram","consumption":757602.0,"timestamp":1713779120.992229}],"timestamp":1713779120.9910352}]},{"host":{"consumption":17159628.0,"timestamp":1713779131.1472354,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937926656","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9362443.0,"domains":[{"name":"uncore","consumption":82304.0,"timestamp":1713779131.0772424},{"name":"core","consumption":7122046.0,"timestamp":1713779131.0770326},{"name":"dram","consumption":784989.0,"timestamp":1713779131.076822}],"timestamp":1713779131.0757334}]},{"host":{"consumption":16968178.0,"timestamp":1713779141.2149475,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937914368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9074315.0,"domains":[{"name":"uncore","consumption":90800.0,"timestamp":1713779141.1547177},{"name":"core","consumption":6826845.0,"timestamp":1713779141.1547048},{"name":"dram","consumption":796747.0,"timestamp":1713779141.1546912}],"timestamp":1713779141.154506}]},{"host":{"consumption":16517341.0,"timestamp":1713779151.3134944,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937127936","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8965330.0,"domains":[{"name":"uncore","consumption":70466.0,"timestamp":1713779151.2246838},{"name":"core","consumption":6762027.0,"timestamp":1713779151.2246084},{"name":"dram","consumption":755470.0,"timestamp":1713779151.2245271}],"timestamp":1713779151.2234595}]},{"host":{"consumption":17307484.0,"timestamp":1713779161.3909304,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937103360","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9325712.0,"domains":[{"name":"uncore","consumption":49885.0,"timestamp":1713779161.3223126},{"name":"core","consumption":7122705.0,"timestamp":1713779161.3223045},{"name":"dram","consumption":760077.0,"timestamp":1713779161.3222961}],"timestamp":1713779161.322125}]},{"host":{"consumption":18305468.0,"timestamp":1713779171.482923,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937058304","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10355362.0,"domains":[{"name":"uncore","consumption":79782.0,"timestamp":1713779171.4014454},{"name":"core","consumption":8073556.0,"timestamp":1713779171.4013734},{"name":"dram","consumption":816200.0,"timestamp":1713779171.4012926}],"timestamp":1713779171.4002924}]},{"host":{"consumption":18505456.0,"timestamp":1713779181.588552,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937054208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10421209.0,"domains":[{"name":"uncore","consumption":88634.0,"timestamp":1713779181.4965603},{"name":"core","consumption":8119319.0,"timestamp":1713779181.4964838},{"name":"dram","consumption":826216.0,"timestamp":1713779181.4963953}],"timestamp":1713779181.495405}]},{"host":{"consumption":17429780.0,"timestamp":1713779191.6565719,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152937046016","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9426209.0,"domains":[{"name":"uncore","consumption":90578.0,"timestamp":1713779191.5973954},{"name":"core","consumption":7164819.0,"timestamp":1713779191.5973878},{"name":"dram","consumption":804677.0,"timestamp":1713779191.5973792}],"timestamp":1713779191.5971985}]},{"host":{"consumption":18172088.0,"timestamp":1713779201.753284,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152936247296","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10160605.0,"domains":[{"name":"uncore","consumption":134823.0,"timestamp":1713779201.665971},{"name":"core","consumption":7781540.0,"timestamp":1713779201.6658947},{"name":"dram","consumption":883729.0,"timestamp":1713779201.6658468}],"timestamp":1713779201.6647305}]},{"host":{"consumption":17235452.0,"timestamp":1713779211.821759,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152936243200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9298197.0,"domains":[{"name":"uncore","consumption":81811.0,"timestamp":1713779211.762119},{"name":"core","consumption":7048108.0,"timestamp":1713779211.7620697},{"name":"dram","consumption":800792.0,"timestamp":1713779211.762021}],"timestamp":1713779211.761791}]},{"host":{"consumption":17938002.0,"timestamp":1713779221.8977249,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152936206336","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9881089.0,"domains":[{"name":"uncore","consumption":119330.0,"timestamp":1713779221.8290174},{"name":"core","consumption":7557321.0,"timestamp":1713779221.828911},{"name":"dram","consumption":874837.0,"timestamp":1713779221.828804}],"timestamp":1713779221.8283737}]},{"host":{"consumption":16798002.0,"timestamp":1713779232.00544,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152936210432","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9176629.0,"domains":[{"name":"uncore","consumption":35129.0,"timestamp":1713779231.9062169},{"name":"core","consumption":6978706.0,"timestamp":1713779231.9061532},{"name":"dram","consumption":754076.0,"timestamp":1713779231.9060853}],"timestamp":1713779231.9051952}]},{"host":{"consumption":16507695.0,"timestamp":1713779242.0815477,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152935424000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8775265.0,"domains":[{"name":"uncore","consumption":9758.0,"timestamp":1713779242.0135086},{"name":"core","consumption":6661140.0,"timestamp":1713779242.0134947},{"name":"dram","consumption":708098.0,"timestamp":1713779242.0134768}],"timestamp":1713779242.0132875}]},{"host":{"consumption":15866538.0,"timestamp":1713779252.147115,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152935424000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8410933.0,"domains":[{"name":"uncore","consumption":1029.0,"timestamp":1713779252.0875256},{"name":"core","consumption":6316372.0,"timestamp":1713779252.0875032},{"name":"dram","consumption":678091.0,"timestamp":1713779252.0874794}],"timestamp":1713779252.0871027}]},{"host":{"consumption":15743678.0,"timestamp":1713779262.2271323,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152935444480","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8370854.0,"domains":[{"name":"uncore","consumption":497.0,"timestamp":1713779262.156445},{"name":"core","consumption":6289246.0,"timestamp":1713779262.1562335},{"name":"dram","consumption":666783.0,"timestamp":1713779262.1560237}],"timestamp":1713779262.1549752}]},{"host":{"consumption":17338976.0,"timestamp":1713779272.3032286,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152935452672","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9470847.0,"domains":[{"name":"uncore","consumption":27913.0,"timestamp":1713779272.234251},{"name":"core","consumption":7303088.0,"timestamp":1713779272.2342405},{"name":"dram","consumption":765635.0,"timestamp":1713779272.2342286}],"timestamp":1713779272.2340517}]},{"host":{"consumption":17239816.0,"timestamp":1713779282.369817,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152935456768","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9466944.0,"domains":[{"name":"uncore","consumption":23438.0,"timestamp":1713779282.309299},{"name":"core","consumption":7275337.0,"timestamp":1713779282.3092208},{"name":"dram","consumption":776075.0,"timestamp":1713779282.3091397}],"timestamp":1713779282.308864}]},{"host":{"consumption":16693718.0,"timestamp":1713779292.4723623,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152934440960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9121357.0,"domains":[{"name":"uncore","consumption":10145.0,"timestamp":1713779292.3796878},{"name":"core","consumption":6958026.0,"timestamp":1713779292.3794663},{"name":"dram","consumption":719963.0,"timestamp":1713779292.379243}],"timestamp":1713779292.3780332}]},{"host":{"consumption":15957342.0,"timestamp":1713779302.5373788,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152934440960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8397257.0,"domains":[{"name":"uncore","consumption":1063.0,"timestamp":1713779302.4803655},{"name":"core","consumption":6318118.0,"timestamp":1713779302.480347},{"name":"dram","consumption":670688.0,"timestamp":1713779302.4802632}],"timestamp":1713779302.4800878}]},{"host":{"consumption":16024489.0,"timestamp":1713779312.619052,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152934440960","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8559341.0,"domains":[{"name":"uncore","consumption":6954.0,"timestamp":1713779312.5470173},{"name":"core","consumption":6448383.0,"timestamp":1713779312.5469255},{"name":"dram","consumption":694130.0,"timestamp":1713779312.5468543}],"timestamp":1713779312.5457187}]},{"host":{"consumption":23071216.0,"timestamp":1713779322.6947696,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152934428672","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14056033.0,"domains":[{"name":"uncore","consumption":36874.0,"timestamp":1713779322.6256273},{"name":"core","consumption":11559774.0,"timestamp":1713779322.625553},{"name":"dram","consumption":1058001.0,"timestamp":1713779322.6254654}],"timestamp":1713779322.625211}]},{"host":{"consumption":18695448.0,"timestamp":1713779332.7679017,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152934428672","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10441833.0,"domains":[{"name":"uncore","consumption":24983.0,"timestamp":1713779332.703242},{"name":"core","consumption":8137776.0,"timestamp":1713779332.703227},{"name":"dram","consumption":912053.0,"timestamp":1713779332.7032094}],"timestamp":1713779332.702921}]},{"host":{"consumption":17137862.0,"timestamp":1713779342.871163,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152933646336","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9457530.0,"domains":[{"name":"uncore","consumption":16191.0,"timestamp":1713779342.77958},{"name":"core","consumption":7307213.0,"timestamp":1713779342.779362},{"name":"dram","consumption":738719.0,"timestamp":1713779342.7791367}],"timestamp":1713779342.777919}]},{"host":{"consumption":22560276.0,"timestamp":1713779352.9509864,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152933654528","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":14061832.0,"domains":[{"name":"uncore","consumption":11974.0,"timestamp":1713779352.881851},{"name":"core","consumption":11861738.0,"timestamp":1713779352.8817463},{"name":"dram","consumption":751037.0,"timestamp":1713779352.8815885}],"timestamp":1713779352.8806472}]},{"host":{"consumption":16085242.0,"timestamp":1713779363.019219,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152933662720","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8500506.0,"domains":[{"name":"uncore","consumption":1059.0,"timestamp":1713779362.9609694},{"name":"core","consumption":6413019.0,"timestamp":1713779362.960914},{"name":"dram","consumption":659915.0,"timestamp":1713779362.9608593}],"timestamp":1713779362.9605148}]},{"host":{"consumption":17489166.0,"timestamp":1713779373.0832603,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152933662720","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9708083.0,"domains":[{"name":"uncore","consumption":9800.0,"timestamp":1713779373.0251677},{"name":"core","consumption":7572027.0,"timestamp":1713779373.0251226},{"name":"dram","consumption":729759.0,"timestamp":1713779373.025079}],"timestamp":1713779373.0248156}]},{"host":{"consumption":16340626.0,"timestamp":1713779383.1590207,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152933662720","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8835945.0,"domains":[{"name":"uncore","consumption":4219.0,"timestamp":1713779383.092381},{"name":"core","consumption":6711124.0,"timestamp":1713779383.0921726},{"name":"dram","consumption":680159.0,"timestamp":1713779383.0919669}],"timestamp":1713779383.0910106}]},{"host":{"consumption":15704310.0,"timestamp":1713779393.2263083,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152932876288","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8199319.0,"domains":[{"name":"uncore","consumption":539.0,"timestamp":1713779393.1667635},{"name":"core","consumption":6129468.0,"timestamp":1713779393.1666791},{"name":"dram","consumption":660347.0,"timestamp":1713779393.166594}],"timestamp":1713779393.1663363}]},{"host":{"consumption":18256352.0,"timestamp":1713779403.321224,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152932839424","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10266820.0,"domains":[{"name":"uncore","consumption":133123.0,"timestamp":1713779403.2360106},{"name":"core","consumption":7905070.0,"timestamp":1713779403.2358053},{"name":"dram","consumption":915300.0,"timestamp":1713779403.2355986}],"timestamp":1713779403.2345705}]},{"host":{"consumption":16047888.0,"timestamp":1713779413.392738,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152932851712","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8439595.0,"domains":[{"name":"uncore","consumption":2823.0,"timestamp":1713779413.3298821},{"name":"core","consumption":6358749.0,"timestamp":1713779413.3298697},{"name":"dram","consumption":659196.0,"timestamp":1713779413.3298564}],"timestamp":1713779413.3295565}]},{"host":{"consumption":19185602.0,"timestamp":1713779423.4688756,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152932851712","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11159247.0,"domains":[{"name":"uncore","consumption":1666.0,"timestamp":1713779423.401538},{"name":"core","consumption":9036575.0,"timestamp":1713779423.4015303},{"name":"dram","consumption":748903.0,"timestamp":1713779423.401522}],"timestamp":1713779423.401344}]},{"host":{"consumption":19166384.0,"timestamp":1713779433.5555425,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152932839424","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10921425.0,"domains":[{"name":"uncore","consumption":136626.0,"timestamp":1713779433.475286},{"name":"core","consumption":8491875.0,"timestamp":1713779433.4752202},{"name":"dram","consumption":912724.0,"timestamp":1713779433.4751387}],"timestamp":1713779433.4742918}]},{"host":{"consumption":18883858.0,"timestamp":1713779443.6229477,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931336192","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10554818.0,"domains":[{"name":"uncore","consumption":105938.0,"timestamp":1713779443.5628278},{"name":"core","consumption":8209524.0,"timestamp":1713779443.5627787},{"name":"dram","consumption":865554.0,"timestamp":1713779443.5627296}],"timestamp":1713779443.5625181}]},{"host":{"consumption":16295558.0,"timestamp":1713779453.6936886,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931295232","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8739073.0,"domains":[{"name":"uncore","consumption":35852.0,"timestamp":1713779453.6323974},{"name":"core","consumption":6579468.0,"timestamp":1713779453.6323264},{"name":"dram","consumption":720932.0,"timestamp":1713779453.6322405}],"timestamp":1713779453.6312318}]},{"host":{"consumption":16279916.0,"timestamp":1713779463.7741277,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931291136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8762914.0,"domains":[{"name":"uncore","consumption":1521.0,"timestamp":1713779463.703506},{"name":"core","consumption":6655746.0,"timestamp":1713779463.7034302},{"name":"dram","consumption":675341.0,"timestamp":1713779463.7033434}],"timestamp":1713779463.7022796}]},{"host":{"consumption":16727345.0,"timestamp":1713779473.840159,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931274752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8895950.0,"domains":[{"name":"uncore","consumption":77330.0,"timestamp":1713779473.7809298},{"name":"core","consumption":6671507.0,"timestamp":1713779473.7809134},{"name":"dram","consumption":764552.0,"timestamp":1713779473.7808952}],"timestamp":1713779473.7806025}]},{"host":{"consumption":16210897.0,"timestamp":1713779483.9411294,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931274752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8743175.0,"domains":[{"name":"uncore","consumption":16663.0,"timestamp":1713779483.8499062},{"name":"core","consumption":6617284.0,"timestamp":1713779483.8498166},{"name":"dram","consumption":704106.0,"timestamp":1713779483.8496253}],"timestamp":1713779483.8484247}]},{"host":{"consumption":17165846.0,"timestamp":1713779494.0383985,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931274752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9361603.0,"domains":[{"name":"uncore","consumption":70871.0,"timestamp":1713779493.953605},{"name":"core","consumption":7143054.0,"timestamp":1713779493.9535053},{"name":"dram","consumption":776454.0,"timestamp":1713779493.9534185}],"timestamp":1713779493.9521666}]},{"host":{"consumption":17840616.0,"timestamp":1713779504.1096883,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931291136","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9835030.0,"domains":[{"name":"uncore","consumption":90175.0,"timestamp":1713779504.04743},{"name":"core","consumption":7569733.0,"timestamp":1713779504.0473733},{"name":"dram","consumption":813438.0,"timestamp":1713779504.0472813}],"timestamp":1713779504.0470135}]},{"host":{"consumption":17128914.0,"timestamp":1713779514.1791308,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931287040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9267812.0,"domains":[{"name":"uncore","consumption":56707.0,"timestamp":1713779514.1174216},{"name":"core","consumption":7047781.0,"timestamp":1713779514.1173346},{"name":"dram","consumption":773637.0,"timestamp":1713779514.1172478}],"timestamp":1713779514.1169913}]},{"host":{"consumption":16322564.0,"timestamp":1713779524.2873058,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931729408","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8849237.0,"domains":[{"name":"uncore","consumption":2096.0,"timestamp":1713779524.1913843},{"name":"core","consumption":6739081.0,"timestamp":1713779524.1913111},{"name":"dram","consumption":683400.0,"timestamp":1713779524.19123}],"timestamp":1713779524.1902199}]},{"host":{"consumption":17575214.0,"timestamp":1713779534.4071152,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931737600","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9709254.0,"domains":[{"name":"uncore","consumption":60471.0,"timestamp":1713779534.2996848},{"name":"core","consumption":7499002.0,"timestamp":1713779534.2994568},{"name":"dram","consumption":780756.0,"timestamp":1713779534.2992313}],"timestamp":1713779534.298122}]},{"host":{"consumption":17105016.0,"timestamp":1713779544.4904342,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931262464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9221976.0,"domains":[{"name":"uncore","consumption":94565.0,"timestamp":1713779544.4205854},{"name":"core","consumption":6956324.0,"timestamp":1713779544.4205108},{"name":"dram","consumption":806910.0,"timestamp":1713779544.4204462}],"timestamp":1713779544.4196}]},{"host":{"consumption":18227336.0,"timestamp":1713779554.5570948,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931233792","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10082923.0,"domains":[{"name":"uncore","consumption":106558.0,"timestamp":1713779554.4975998},{"name":"core","consumption":7786575.0,"timestamp":1713779554.4975178},{"name":"dram","consumption":851111.0,"timestamp":1713779554.4974356}],"timestamp":1713779554.4971888}]},{"host":{"consumption":16703315.0,"timestamp":1713779564.6220083,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931188736","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8981811.0,"domains":[{"name":"uncore","consumption":63781.0,"timestamp":1713779564.5626395},{"name":"core","consumption":6776199.0,"timestamp":1713779564.5626285},{"name":"dram","consumption":763114.0,"timestamp":1713779564.5626168}],"timestamp":1713779564.5624464}]},{"host":{"consumption":15787917.0,"timestamp":1713779574.7045534,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929509376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8419545.0,"domains":[{"name":"uncore","consumption":8504.0,"timestamp":1713779574.6319294},{"name":"core","consumption":6326119.0,"timestamp":1713779574.6318338},{"name":"dram","consumption":672605.0,"timestamp":1713779574.6316755}],"timestamp":1713779574.6305897}]},{"host":{"consumption":16278666.0,"timestamp":1713779584.7917998,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929501184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8720046.0,"domains":[{"name":"uncore","consumption":3087.0,"timestamp":1713779584.7122662},{"name":"core","consumption":6616021.0,"timestamp":1713779584.712216},{"name":"dram","consumption":679044.0,"timestamp":1713779584.7121239}],"timestamp":1713779584.7118733}]},{"host":{"consumption":16192413.0,"timestamp":1713779594.8682997,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929288192","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8538587.0,"domains":[{"name":"uncore","consumption":18110.0,"timestamp":1713779594.7989516},{"name":"core","consumption":6430985.0,"timestamp":1713779594.7989392},{"name":"dram","consumption":696370.0,"timestamp":1713779594.7989254}],"timestamp":1713779594.7987468}]},{"host":{"consumption":17835850.0,"timestamp":1713779604.970204,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929529856","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9970056.0,"domains":[{"name":"uncore","consumption":101592.0,"timestamp":1713779604.8777127},{"name":"core","consumption":7675927.0,"timestamp":1713779604.8776011},{"name":"dram","consumption":838750.0,"timestamp":1713779604.8774297}],"timestamp":1713779604.8764682}]},{"host":{"consumption":17223184.0,"timestamp":1713779615.0406623,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929525760","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9258594.0,"domains":[{"name":"uncore","consumption":68223.0,"timestamp":1713779614.9790304},{"name":"core","consumption":7045907.0,"timestamp":1713779614.9790175},{"name":"dram","consumption":780498.0,"timestamp":1713779614.9790006}],"timestamp":1713779614.9788198}]},{"host":{"consumption":17991076.0,"timestamp":1713779625.1449158,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929284096","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10078704.0,"domains":[{"name":"uncore","consumption":118137.0,"timestamp":1713779625.0504525},{"name":"core","consumption":7757337.0,"timestamp":1713779625.0503535},{"name":"dram","consumption":873133.0,"timestamp":1713779625.0502598}],"timestamp":1713779625.0497875}]},{"host":{"consumption":17513584.0,"timestamp":1713779635.2274506,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930615296","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9576783.0,"domains":[{"name":"uncore","consumption":60600.0,"timestamp":1713779635.1544077},{"name":"core","consumption":7359064.0,"timestamp":1713779635.1543975},{"name":"dram","consumption":791838.0,"timestamp":1713779635.1543856}],"timestamp":1713779635.1542053}]},{"host":{"consumption":16749170.0,"timestamp":1713779645.2966073,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930570240","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8959166.0,"domains":[{"name":"uncore","consumption":60839.0,"timestamp":1713779645.2337449},{"name":"core","consumption":6742250.0,"timestamp":1713779645.2336698},{"name":"dram","consumption":773558.0,"timestamp":1713779645.2335942}],"timestamp":1713779645.2333434}]},{"host":{"consumption":16989764.0,"timestamp":1713779655.3732345,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930533376","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9272675.0,"domains":[{"name":"uncore","consumption":59885.0,"timestamp":1713779655.3095753},{"name":"core","consumption":7063394.0,"timestamp":1713779655.3094814},{"name":"dram","consumption":771307.0,"timestamp":1713779655.309377}],"timestamp":1713779655.307801}]},{"host":{"consumption":17140116.0,"timestamp":1713779665.4477272,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930557952","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9234038.0,"domains":[{"name":"uncore","consumption":103236.0,"timestamp":1713779665.3803775},{"name":"core","consumption":6960670.0,"timestamp":1713779665.3803644},{"name":"dram","consumption":814238.0,"timestamp":1713779665.3803484}],"timestamp":1713779665.3801663}]},{"host":{"consumption":16794568.0,"timestamp":1713779675.5222828,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929787904","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9103476.0,"domains":[{"name":"uncore","consumption":64554.0,"timestamp":1713779675.4545233},{"name":"core","consumption":6867707.0,"timestamp":1713779675.4544919},{"name":"dram","consumption":777281.0,"timestamp":1713779675.4544601}],"timestamp":1713779675.4539814}]},{"host":{"consumption":17113470.0,"timestamp":1713779685.595081,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929775616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9328894.0,"domains":[{"name":"uncore","consumption":19067.0,"timestamp":1713779685.5279496},{"name":"core","consumption":7172658.0,"timestamp":1713779685.5278647},{"name":"dram","consumption":742037.0,"timestamp":1713779685.5277736}],"timestamp":1713779685.5275266}]},{"host":{"consumption":15704562.0,"timestamp":1713779695.6625886,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929775616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8233994.0,"domains":[{"name":"uncore","consumption":1102.0,"timestamp":1713779695.6025162},{"name":"core","consumption":6144603.0,"timestamp":1713779695.6024885},{"name":"dram","consumption":668788.0,"timestamp":1713779695.6024578}],"timestamp":1713779695.6018517}]},{"host":{"consumption":15882993.0,"timestamp":1713779705.735946,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929751040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8425521.0,"domains":[{"name":"uncore","consumption":1454.0,"timestamp":1713779705.6728644},{"name":"core","consumption":6340254.0,"timestamp":1713779705.6726387},{"name":"dram","consumption":670527.0,"timestamp":1713779705.6724086}],"timestamp":1713779705.6713085}]},{"host":{"consumption":16453722.0,"timestamp":1713779715.8038971,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929751040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8795717.0,"domains":[{"name":"uncore","consumption":6570.0,"timestamp":1713779715.7429388},{"name":"core","consumption":6682553.0,"timestamp":1713779715.7428896},{"name":"dram","consumption":710866.0,"timestamp":1713779715.7428415}],"timestamp":1713779715.7425947}]},{"host":{"consumption":16692743.0,"timestamp":1713779725.8769696,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928927744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8983429.0,"domains":[{"name":"uncore","consumption":6177.0,"timestamp":1713779725.8109748},{"name":"core","consumption":6859291.0,"timestamp":1713779725.8109496},{"name":"dram","consumption":718471.0,"timestamp":1713779725.81092}],"timestamp":1713779725.8105166}]},{"host":{"consumption":19840064.0,"timestamp":1713779735.9461024,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928927744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11393125.0,"domains":[{"name":"uncore","consumption":141691.0,"timestamp":1713779735.8855553},{"name":"core","consumption":8977156.0,"timestamp":1713779735.885465},{"name":"dram","consumption":961187.0,"timestamp":1713779735.8853762}],"timestamp":1713779735.8851018}]},{"host":{"consumption":19636826.0,"timestamp":1713779746.0269625,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931147776","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11356918.0,"domains":[{"name":"uncore","consumption":126888.0,"timestamp":1713779745.9565356},{"name":"core","consumption":8981053.0,"timestamp":1713779745.9562955},{"name":"dram","consumption":941938.0,"timestamp":1713779745.9560916}],"timestamp":1713779745.9550948}]},{"host":{"consumption":16313537.0,"timestamp":1713779756.1058164,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931155968","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8716770.0,"domains":[{"name":"uncore","consumption":20905.0,"timestamp":1713779756.038003},{"name":"core","consumption":6596741.0,"timestamp":1713779756.0379858},{"name":"dram","consumption":707044.0,"timestamp":1713779756.0379667}],"timestamp":1713779756.0376678}]},{"host":{"consumption":16918090.0,"timestamp":1713779766.183226,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152931123200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9170174.0,"domains":[{"name":"uncore","consumption":41748.0,"timestamp":1713779766.113902},{"name":"core","consumption":7009524.0,"timestamp":1713779766.1138592},{"name":"dram","consumption":757000.0,"timestamp":1713779766.113809}],"timestamp":1713779766.1130364}]},{"host":{"consumption":17507772.0,"timestamp":1713779776.2492278,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930312192","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9599310.0,"domains":[{"name":"uncore","consumption":65255.0,"timestamp":1713779776.1901767},{"name":"core","consumption":7377123.0,"timestamp":1713779776.190158},{"name":"dram","consumption":795967.0,"timestamp":1713779776.1901379}],"timestamp":1713779776.1897933}]},{"host":{"consumption":17944728.0,"timestamp":1713779786.2990508,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930299904","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9929130.0,"domains":[{"name":"uncore","consumption":121277.0,"timestamp":1713779786.2559953},{"name":"core","consumption":7611465.0,"timestamp":1713779786.2559388},{"name":"dram","consumption":869828.0,"timestamp":1713779786.2558804}],"timestamp":1713779786.255555}]},{"host":{"consumption":15806296.0,"timestamp":1713779796.38416,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930299904","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8431951.0,"domains":[{"name":"uncore","consumption":8579.0,"timestamp":1713779796.3085017},{"name":"core","consumption":6340704.0,"timestamp":1713779796.30846},{"name":"dram","consumption":678331.0,"timestamp":1713779796.3084118}],"timestamp":1713779796.3074012}]},{"host":{"consumption":16830278.0,"timestamp":1713779806.4130023,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930287616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9066258.0,"domains":[{"name":"uncore","consumption":33532.0,"timestamp":1713779806.392121},{"name":"core","consumption":6909860.0,"timestamp":1713779806.3921049},{"name":"dram","consumption":747745.0,"timestamp":1713779806.3920863}],"timestamp":1713779806.391791}]},{"host":{"consumption":16742350.0,"timestamp":1713779816.496752,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152930295808","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9069925.0,"domains":[{"name":"uncore","consumption":35908.0,"timestamp":1713779816.4222665},{"name":"core","consumption":6917287.0,"timestamp":1713779816.422244},{"name":"dram","consumption":753696.0,"timestamp":1713779816.4222198}],"timestamp":1713779816.4217944}]},{"host":{"consumption":18598028.0,"timestamp":1713779826.5682933,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929415168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10414533.0,"domains":[{"name":"uncore","consumption":62253.0,"timestamp":1713779826.5079713},{"name":"core","consumption":8149784.0,"timestamp":1713779826.507956},{"name":"dram","consumption":864867.0,"timestamp":1713779826.507944}],"timestamp":1713779826.507766}]},{"host":{"consumption":17745816.0,"timestamp":1713779836.6354957,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929415168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9828312.0,"domains":[{"name":"uncore","consumption":67946.0,"timestamp":1713779836.5758927},{"name":"core","consumption":7583864.0,"timestamp":1713779836.5757802},{"name":"dram","consumption":811525.0,"timestamp":1713779836.575659}],"timestamp":1713779836.575159}]},{"host":{"consumption":16928730.0,"timestamp":1713779846.7255683,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929406976","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9291236.0,"domains":[{"name":"uncore","consumption":46567.0,"timestamp":1713779846.6457388},{"name":"core","consumption":7111748.0,"timestamp":1713779846.645555},{"name":"dram","consumption":758997.0,"timestamp":1713779846.6453373}],"timestamp":1713779846.6443307}]},{"host":{"consumption":17730196.0,"timestamp":1713779856.7933705,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929394688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9746702.0,"domains":[{"name":"uncore","consumption":66806.0,"timestamp":1713779856.7338064},{"name":"core","consumption":7516328.0,"timestamp":1713779856.733795},{"name":"dram","consumption":802890.0,"timestamp":1713779856.7337487}],"timestamp":1713779856.7335174}]},{"host":{"consumption":16701234.0,"timestamp":1713779866.8598125,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152929382400","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8984439.0,"domains":[{"name":"uncore","consumption":38110.0,"timestamp":1713779866.7994835},{"name":"core","consumption":6837004.0,"timestamp":1713779866.7994657},{"name":"dram","consumption":738887.0,"timestamp":1713779866.7994468}],"timestamp":1713779866.7991397}]},{"host":{"consumption":16168718.0,"timestamp":1713779876.9407325,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928595968","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8716505.0,"domains":[{"name":"uncore","consumption":22019.0,"timestamp":1713779876.8670633},{"name":"core","consumption":6591846.0,"timestamp":1713779876.8669202},{"name":"dram","consumption":697212.0,"timestamp":1713779876.8668}],"timestamp":1713779876.8663688}]},{"host":{"consumption":17151124.0,"timestamp":1713779887.0094666,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928354304","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9330917.0,"domains":[{"name":"uncore","consumption":39096.0,"timestamp":1713779886.9488132},{"name":"core","consumption":7153853.0,"timestamp":1713779886.9487278},{"name":"dram","consumption":752029.0,"timestamp":1713779886.948708}],"timestamp":1713779886.9484768}]},{"host":{"consumption":16187297.0,"timestamp":1713779897.083744,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928354304","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8583965.0,"domains":[{"name":"uncore","consumption":33198.0,"timestamp":1713779897.0164032},{"name":"core","consumption":6455976.0,"timestamp":1713779897.016392},{"name":"dram","consumption":713098.0,"timestamp":1713779897.0163796}],"timestamp":1713779897.0161853}]},{"host":{"consumption":16529308.0,"timestamp":1713779907.1551769,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152928362496","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8980054.0,"domains":[{"name":"uncore","consumption":28349.0,"timestamp":1713779907.0899081},{"name":"core","consumption":6838676.0,"timestamp":1713779907.0898926},{"name":"dram","consumption":714382.0,"timestamp":1713779907.0898738}],"timestamp":1713779907.08959}]},{"host":{"consumption":19958728.0,"timestamp":1713779917.2240403,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152927580160","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11518857.0,"domains":[{"name":"uncore","consumption":92943.0,"timestamp":1713779917.164845},{"name":"core","consumption":9192476.0,"timestamp":1713779917.1647935},{"name":"dram","consumption":899580.0,"timestamp":1713779917.1647367}],"timestamp":1713779917.1644056}]},{"host":{"consumption":16834104.0,"timestamp":1713779927.2870233,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152926814208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9113495.0,"domains":[{"name":"uncore","consumption":83857.0,"timestamp":1713779927.233798},{"name":"core","consumption":6861679.0,"timestamp":1713779927.2336633},{"name":"dram","consumption":807548.0,"timestamp":1713779927.2335906}],"timestamp":1713779927.2326035}]},{"host":{"consumption":17433660.0,"timestamp":1713779937.3800478,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152926793728","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9562419.0,"domains":[{"name":"uncore","consumption":64596.0,"timestamp":1713779937.3012738},{"name":"core","consumption":7329209.0,"timestamp":1713779937.3011935},{"name":"dram","consumption":802988.0,"timestamp":1713779937.301089}],"timestamp":1713779937.3000836}]},{"host":{"consumption":18690064.0,"timestamp":1713779947.4075766,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152926441472","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10432291.0,"domains":[{"name":"uncore","consumption":125485.0,"timestamp":1713779947.3894734},{"name":"core","consumption":8074743.0,"timestamp":1713779947.3894615},{"name":"dram","consumption":893591.0,"timestamp":1713779947.389448}],"timestamp":1713779947.3892703}]},{"host":{"consumption":18660300.0,"timestamp":1713779957.4732935,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152926326784","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10490960.0,"domains":[{"name":"uncore","consumption":83533.0,"timestamp":1713779957.4134717},{"name":"core","consumption":8215404.0,"timestamp":1713779957.4134555},{"name":"dram","consumption":849327.0,"timestamp":1713779957.4134383}],"timestamp":1713779957.4132495}]},{"host":{"consumption":16391969.0,"timestamp":1713779967.5598154,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152926339072","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8839163.0,"domains":[{"name":"uncore","consumption":53621.0,"timestamp":1713779967.4802961},{"name":"core","consumption":6659806.0,"timestamp":1713779967.4801967},{"name":"dram","consumption":742988.0,"timestamp":1713779967.4801002}],"timestamp":1713779967.479557}]},{"host":{"consumption":21951676.0,"timestamp":1713779977.6288893,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152925077504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":13009377.0,"domains":[{"name":"uncore","consumption":171418.0,"timestamp":1713779977.5699525},{"name":"core","consumption":10494274.0,"timestamp":1713779977.5699186},{"name":"dram","consumption":1054027.0,"timestamp":1713779977.5698972}],"timestamp":1713779977.5695384}]},{"host":{"consumption":17424444.0,"timestamp":1713779987.7199197,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152925093888","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9580639.0,"domains":[{"name":"uncore","consumption":97375.0,"timestamp":1713779987.6388948},{"name":"core","consumption":7296496.0,"timestamp":1713779987.6386695},{"name":"dram","consumption":834796.0,"timestamp":1713779987.6384435}],"timestamp":1713779987.6372776}]},{"host":{"consumption":17152044.0,"timestamp":1713779997.7997684,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152925081600","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9324043.0,"domains":[{"name":"uncore","consumption":89158.0,"timestamp":1713779997.7300823},{"name":"core","consumption":7070095.0,"timestamp":1713779997.7300525},{"name":"dram","consumption":806334.0,"timestamp":1713779997.730023}],"timestamp":1713779997.72966}]},{"host":{"consumption":18110728.0,"timestamp":1713780007.8673046,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152924930048","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9974532.0,"domains":[{"name":"uncore","consumption":91229.0,"timestamp":1713780007.8069208},{"name":"core","consumption":7691338.0,"timestamp":1713780007.8069074},{"name":"dram","consumption":854391.0,"timestamp":1713780007.8068929}],"timestamp":1713780007.8066962}]},{"host":{"consumption":19110642.0,"timestamp":1713780017.9584239,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923848704","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10975758.0,"domains":[{"name":"uncore","consumption":125408.0,"timestamp":1713780017.8775215},{"name":"core","consumption":8623004.0,"timestamp":1713780017.877302},{"name":"dram","consumption":911132.0,"timestamp":1713780017.8770778}],"timestamp":1713780017.8759685}]},{"host":{"consumption":16496685.0,"timestamp":1713780028.0290504,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923607040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8802841.0,"domains":[{"name":"uncore","consumption":8221.0,"timestamp":1713780027.9665906},{"name":"core","consumption":6666437.0,"timestamp":1713780027.966497},{"name":"dram","consumption":706934.0,"timestamp":1713780027.966405}],"timestamp":1713780027.9661515}]},{"host":{"consumption":17864828.0,"timestamp":1713780038.0963285,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923607040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9806996.0,"domains":[{"name":"uncore","consumption":94211.0,"timestamp":1713780038.0367672},{"name":"core","consumption":7523153.0,"timestamp":1713780038.0366607},{"name":"dram","consumption":839409.0,"timestamp":1713780038.0365567}],"timestamp":1713780038.036152}]},{"host":{"consumption":16822748.0,"timestamp":1713780048.197644,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923602944","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9169791.0,"domains":[{"name":"uncore","consumption":39916.0,"timestamp":1713780048.1041873},{"name":"core","consumption":6993388.0,"timestamp":1713780048.1041183},{"name":"dram","consumption":750313.0,"timestamp":1713780048.1040213}],"timestamp":1713780048.1032753}]},{"host":{"consumption":18678872.0,"timestamp":1713780058.2663543,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923582464","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10343402.0,"domains":[{"name":"uncore","consumption":148131.0,"timestamp":1713780058.2072103},{"name":"core","consumption":7957067.0,"timestamp":1713780058.2071245},{"name":"dram","consumption":922585.0,"timestamp":1713780058.2070394}],"timestamp":1713780058.206762}]},{"host":{"consumption":20213284.0,"timestamp":1713780068.3346663,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922902528","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11773470.0,"domains":[{"name":"uncore","consumption":165267.0,"timestamp":1713780068.2724028},{"name":"core","consumption":9340006.0,"timestamp":1713780068.2723184},{"name":"dram","consumption":969113.0,"timestamp":1713780068.2722268}],"timestamp":1713780068.2719815}]},{"host":{"consumption":16366371.0,"timestamp":1713780078.4416406,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922886144","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8721166.0,"domains":[{"name":"uncore","consumption":64272.0,"timestamp":1713780078.3451676},{"name":"core","consumption":6512325.0,"timestamp":1713780078.345093},{"name":"dram","consumption":748456.0,"timestamp":1713780078.3450117}],"timestamp":1713780078.344027}]},{"host":{"consumption":17225028.0,"timestamp":1713780088.5131757,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922845184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9339501.0,"domains":[{"name":"uncore","consumption":74996.0,"timestamp":1713780088.4505699},{"name":"core","consumption":7102138.0,"timestamp":1713780088.4504852},{"name":"dram","consumption":788502.0,"timestamp":1713780088.4503999}],"timestamp":1713780088.4501588}]},{"host":{"consumption":18659424.0,"timestamp":1713780098.5881214,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922779648","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10346767.0,"domains":[{"name":"uncore","consumption":130193.0,"timestamp":1713780098.5232346},{"name":"core","consumption":7939921.0,"timestamp":1713780098.5231893},{"name":"dram","consumption":895682.0,"timestamp":1713780098.5231113}],"timestamp":1713780098.5224936}]},{"host":{"consumption":16444576.0,"timestamp":1713780108.6186478,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922787840","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8880198.0,"domains":[{"name":"uncore","consumption":43704.0,"timestamp":1713780108.5964928},{"name":"core","consumption":6716779.0,"timestamp":1713780108.5964847},{"name":"dram","consumption":724613.0,"timestamp":1713780108.596476}],"timestamp":1713780108.5963082}]},{"host":{"consumption":15987688.0,"timestamp":1713780118.7135324,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921993216","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8475071.0,"domains":[{"name":"uncore","consumption":58115.0,"timestamp":1713780118.6261668},{"name":"core","consumption":6280401.0,"timestamp":1713780118.6257596},{"name":"dram","consumption":728529.0,"timestamp":1713780118.6256688}],"timestamp":1713780118.6246014}]},{"host":{"consumption":17768580.0,"timestamp":1713780128.7914293,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922071040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9732725.0,"domains":[{"name":"uncore","consumption":84270.0,"timestamp":1713780128.7218733},{"name":"core","consumption":7458569.0,"timestamp":1713780128.7218614},{"name":"dram","consumption":820409.0,"timestamp":1713780128.7218442}],"timestamp":1713780128.7216413}]},{"host":{"consumption":25197488.0,"timestamp":1713780138.8595648,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923095040","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":15648575.0,"domains":[{"name":"uncore","consumption":186569.0,"timestamp":1713780138.7978957},{"name":"core","consumption":12988297.0,"timestamp":1713780138.7978852},{"name":"dram","consumption":1180341.0,"timestamp":1713780138.7978737}],"timestamp":1713780138.7977054}]},{"host":{"consumption":18156734.0,"timestamp":1713780148.946424,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923054080","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10132623.0,"domains":[{"name":"uncore","consumption":103642.0,"timestamp":1713780148.869245},{"name":"core","consumption":7766535.0,"timestamp":1713780148.8690507},{"name":"dram","consumption":868303.0,"timestamp":1713780148.868856}],"timestamp":1713780148.8679154}]},{"host":{"consumption":17462388.0,"timestamp":1713780159.0245426,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152923058176","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9400848.0,"domains":[{"name":"uncore","consumption":130208.0,"timestamp":1713780158.9548566},{"name":"core","consumption":7058526.0,"timestamp":1713780158.9548037},{"name":"dram","consumption":837893.0,"timestamp":1713780158.9547517}],"timestamp":1713780158.954415}]},{"host":{"consumption":16515084.0,"timestamp":1713780169.1027718,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922292224","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8912045.0,"domains":[{"name":"uncore","consumption":56275.0,"timestamp":1713780169.0370355},{"name":"core","consumption":6696455.0,"timestamp":1713780169.036843},{"name":"dram","consumption":748289.0,"timestamp":1713780169.03664}],"timestamp":1713780169.035624}]},{"host":{"consumption":17234128.0,"timestamp":1713780179.181692,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922488832","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9349248.0,"domains":[{"name":"uncore","consumption":75361.0,"timestamp":1713780179.1137233},{"name":"core","consumption":7092576.0,"timestamp":1713780179.113675},{"name":"dram","consumption":784711.0,"timestamp":1713780179.1136}],"timestamp":1713780179.1133642}]},{"host":{"consumption":16280267.0,"timestamp":1713780189.2492008,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922189824","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8636319.0,"domains":[{"name":"uncore","consumption":1847.0,"timestamp":1713780189.1884017},{"name":"core","consumption":6489329.0,"timestamp":1713780189.1883214},{"name":"dram","consumption":683677.0,"timestamp":1713780189.1882293}],"timestamp":1713780189.187972}]},{"host":{"consumption":16865012.0,"timestamp":1713780199.346347,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922247168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9183841.0,"domains":[{"name":"uncore","consumption":80046.0,"timestamp":1713780199.2556705},{"name":"core","consumption":6932730.0,"timestamp":1713780199.2556493},{"name":"dram","consumption":785220.0,"timestamp":1713780199.2556274}],"timestamp":1713780199.255173}]},{"host":{"consumption":17039250.0,"timestamp":1713780209.3751934,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152922247168","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9130632.0,"domains":[{"name":"uncore","consumption":91907.0,"timestamp":1713780209.3558648},{"name":"core","consumption":6860084.0,"timestamp":1713780209.3558471},{"name":"dram","consumption":792901.0,"timestamp":1713780209.3558266}],"timestamp":1713780209.355492}]},{"host":{"consumption":16751239.0,"timestamp":1713780219.4551482,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921473024","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9034674.0,"domains":[{"name":"uncore","consumption":75270.0,"timestamp":1713780219.3855226},{"name":"core","consumption":6813405.0,"timestamp":1713780219.3853257},{"name":"dram","consumption":772855.0,"timestamp":1713780219.385124}],"timestamp":1713780219.3841703}]},{"host":{"consumption":17774460.0,"timestamp":1713780229.524461,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921468928","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9840644.0,"domains":[{"name":"uncore","consumption":41698.0,"timestamp":1713780229.4617844},{"name":"core","consumption":7597916.0,"timestamp":1713780229.461746},{"name":"dram","consumption":789141.0,"timestamp":1713780229.4616764}],"timestamp":1713780229.4615052}]},{"host":{"consumption":16548044.0,"timestamp":1713780239.6041903,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921468928","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8901559.0,"domains":[{"name":"uncore","consumption":81662.0,"timestamp":1713780239.5345984},{"name":"core","consumption":6664048.0,"timestamp":1713780239.5345175},{"name":"dram","consumption":761862.0,"timestamp":1713780239.5344326}],"timestamp":1713780239.5334642}]},{"host":{"consumption":15918624.0,"timestamp":1713780249.7040665,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921460736","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8471790.0,"domains":[{"name":"uncore","consumption":4954.0,"timestamp":1713780249.611915},{"name":"core","consumption":6378865.0,"timestamp":1713780249.6118298},{"name":"dram","consumption":667809.0,"timestamp":1713780249.6117435}],"timestamp":1713780249.61147}]},{"host":{"consumption":16587016.0,"timestamp":1713780259.7829344,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152921489408","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8847106.0,"domains":[{"name":"uncore","consumption":22364.0,"timestamp":1713780259.715153},{"name":"core","consumption":6713265.0,"timestamp":1713780259.715137},{"name":"dram","consumption":701335.0,"timestamp":1713780259.715121}],"timestamp":1713780259.7149491}]},{"host":{"consumption":16002779.0,"timestamp":1713780269.8546379,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920682496","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":8504106.0,"domains":[{"name":"uncore","consumption":28378.0,"timestamp":1713780269.7915666},{"name":"core","consumption":6376540.0,"timestamp":1713780269.7915485},{"name":"dram","consumption":700026.0,"timestamp":1713780269.791525}],"timestamp":1713780269.7912748}]},{"host":{"consumption":17727366.0,"timestamp":1713780279.9278245,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920690688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9801078.0,"domains":[{"name":"uncore","consumption":125739.0,"timestamp":1713780279.8642557},{"name":"core","consumption":7464919.0,"timestamp":1713780279.864206},{"name":"dram","consumption":857356.0,"timestamp":1713780279.8641577}],"timestamp":1713780279.8639498}]},{"host":{"consumption":17199318.0,"timestamp":1713780289.996472,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920678400","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9267992.0,"domains":[{"name":"uncore","consumption":93219.0,"timestamp":1713780289.9375477},{"name":"core","consumption":6993732.0,"timestamp":1713780289.937444},{"name":"dram","consumption":813090.0,"timestamp":1713780289.9373355}],"timestamp":1713780289.9369261}]},{"host":{"consumption":17862228.0,"timestamp":1713780300.0952427,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920653824","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9920753.0,"domains":[{"name":"uncore","consumption":138991.0,"timestamp":1713780300.0027535},{"name":"core","consumption":7562676.0,"timestamp":1713780300.0027092},{"name":"dram","consumption":868330.0,"timestamp":1713780300.0026588}],"timestamp":1713780300.0024266}]},{"host":{"consumption":17535352.0,"timestamp":1713780310.173602,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920670208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9444071.0,"domains":[{"name":"uncore","consumption":122325.0,"timestamp":1713780310.1045885},{"name":"core","consumption":7123599.0,"timestamp":1713780310.1045775},{"name":"dram","consumption":843803.0,"timestamp":1713780310.1045659}],"timestamp":1713780310.1043274}]},{"host":{"consumption":19852638.0,"timestamp":1713780320.253043,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152919711744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11449541.0,"domains":[{"name":"uncore","consumption":161591.0,"timestamp":1713780320.1800232},{"name":"core","consumption":9014875.0,"timestamp":1713780320.17994},{"name":"dram","consumption":977822.0,"timestamp":1713780320.1798527}],"timestamp":1713780320.1796048}]},{"host":{"consumption":19595548.0,"timestamp":1713780330.3317156,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920006656","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":11149755.0,"domains":[{"name":"uncore","consumption":135976.0,"timestamp":1713780330.261975},{"name":"core","consumption":8766062.0,"timestamp":1713780330.2619638},{"name":"dram","consumption":953243.0,"timestamp":1713780330.2619512}],"timestamp":1713780330.2616751}]},{"host":{"consumption":17652408.0,"timestamp":1713780340.4371243,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152919994368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9835959.0,"domains":[{"name":"uncore","consumption":108571.0,"timestamp":1713780340.3444133},{"name":"core","consumption":7522078.0,"timestamp":1713780340.3443506},{"name":"dram","consumption":838063.0,"timestamp":1713780340.3442688}],"timestamp":1713780340.343363}]},{"host":{"consumption":17882748.0,"timestamp":1713780350.5371673,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920002560","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9902772.0,"domains":[{"name":"uncore","consumption":106477.0,"timestamp":1713780350.4496903},{"name":"core","consumption":7599399.0,"timestamp":1713780350.4495337},{"name":"dram","consumption":843081.0,"timestamp":1713780350.4493275}],"timestamp":1713780350.4482377}]},{"host":{"consumption":17670250.0,"timestamp":1713780360.6051776,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152920010752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":9645585.0,"domains":[{"name":"uncore","consumption":79829.0,"timestamp":1713780360.5458229},{"name":"core","consumption":7390739.0,"timestamp":1713780360.54581},{"name":"dram","consumption":826090.0,"timestamp":1713780360.5457416}],"timestamp":1713780360.5455098}]},{"host":{"consumption":18866160.0,"timestamp":1713780370.6962965,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"152919023616","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[],"sockets":[{"id":0,"consumption":10737069.0,"domains":[{"name":"uncore","consumption":119230.0,"timestamp":1713780370.6140137},{"name":"core","consumption":8387813.0,"timestamp":1713780370.613971},{"name":"dram","consumption":894936.0,"timestamp":1713780370.6138923}],"timestamp":1713780370.6130822}]} diff --git a/tests/mocks/formatted_scaphandre.json b/tests/mocks/formatted_scaphandre.json index 55580f6..92732e6 100644 --- a/tests/mocks/formatted_scaphandre.json +++ b/tests/mocks/formatted_scaphandre.json @@ -1 +1 @@ -[{"host":{"consumption":9510593.0,"timestamp":1709569036.7701147,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312873984","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":118741.05,"timestamp":1709569036.7699473,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":67852.03,"timestamp":1709569036.7699215,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":33926.016,"timestamp":1709569036.7699084,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":33926.016,"timestamp":1709569036.7699292,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":22617.344,"timestamp":1709569036.7698824,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699177,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699306,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699432,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.7699645,"container":null},{"exe":"","cmdline":"/usr/libexec/gnome-terminal-server","pid":6747,"resources_usage":null,"consumption":5654.336,"timestamp":1709569036.769976,"container":null}],"sockets":[{"id":0,"consumption":2280155.0,"domains":[{"name":"uncore","consumption":4760.0,"timestamp":1709569036.687679},{"name":"core","consumption":363592.0,"timestamp":1709569036.687624},{"name":"dram","consumption":650426.0,"timestamp":1709569036.6875672}],"timestamp":1709569036.6864183}]},{"host":{"consumption":10326187.0,"timestamp":1709569038.8445754,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312808448","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":138775.89,"timestamp":1709569038.8444579,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":44155.965,"timestamp":1709569038.844482,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":37847.97,"timestamp":1709569038.8444862,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31539.975,"timestamp":1709569038.8444736,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":12615.989,"timestamp":1709569038.8444946,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.844463,"container":null},{"exe":"","cmdline":"/usr/bin/dbus-daemon--session--address=systemd:--nofork--nopidfile--systemd-activation--syslog-only","pid":1667,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.84447,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.844479,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.8444872,"container":null},{"exe":"","cmdline":"","pid":263930,"resources_usage":null,"consumption":6307.9946,"timestamp":1709569038.8444917,"container":null}],"sockets":[{"id":0,"consumption":2565381.0,"domains":[{"name":"uncore","consumption":11099.0,"timestamp":1709569038.7827907},{"name":"core","consumption":519459.0,"timestamp":1709569038.7827168},{"name":"dram","consumption":699014.0,"timestamp":1709569038.7826238}],"timestamp":1709569038.7813084}]},{"host":{"consumption":11958290.0,"timestamp":1709569040.9484453,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312738816","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":196994.4,"timestamp":1709569040.9481177,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":145921.8,"timestamp":1709569040.9481637,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":131329.61,"timestamp":1709569040.948196,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":51072.625,"timestamp":1709569040.9481723,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":29184.355,"timestamp":1709569040.9481483,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":14592.178,"timestamp":1709569040.9481866,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481342,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.948174,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481745,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":7296.089,"timestamp":1709569040.9481938,"container":null}],"sockets":[{"id":0,"consumption":3843814.0,"domains":[{"name":"uncore","consumption":114992.0,"timestamp":1709569040.854405},{"name":"core","consumption":1617998.0,"timestamp":1709569040.854287},{"name":"dram","consumption":905649.0,"timestamp":1709569040.8541002}],"timestamp":1709569040.8530734}]},{"host":{"consumption":10766276.0,"timestamp":1709569043.045374,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312673280","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":109204.47,"timestamp":1709569043.0450184,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":96356.88,"timestamp":1709569043.0450678,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":70661.71,"timestamp":1709569043.0449176,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":51390.34,"timestamp":1709569043.045032,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":25695.17,"timestamp":1709569043.0449913,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":19271.377,"timestamp":1709569043.0450542,"container":null},{"exe":"","cmdline":"","pid":263930,"resources_usage":null,"consumption":12847.585,"timestamp":1709569043.0450523,"container":null},{"exe":"","cmdline":"/usr/libexec/ibus-engine-simple","pid":2706,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0449593,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0450757,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":6423.7925,"timestamp":1709569043.0451076,"container":null}],"sockets":[{"id":0,"consumption":2925740.0,"domains":[{"name":"uncore","consumption":59052.0,"timestamp":1709569042.9618628},{"name":"core","consumption":870351.0,"timestamp":1709569042.9616694},{"name":"dram","consumption":763613.0,"timestamp":1709569042.9615138}],"timestamp":1709569042.9604695}]},{"host":{"consumption":12795838.0,"timestamp":1709569045.136388,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312599552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":664518.2,"timestamp":1709569045.1362245,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":115904.33,"timestamp":1709569045.13612,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":100450.42,"timestamp":1709569045.136108,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":77269.555,"timestamp":1709569045.1361601,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":46361.73,"timestamp":1709569045.1361682,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":30907.82,"timestamp":1709569045.1361806,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":23180.865,"timestamp":1709569045.1361425,"container":null},{"exe":"","cmdline":"/usr/libexec/ibus-engine-simple","pid":2706,"resources_usage":null,"consumption":15453.91,"timestamp":1709569045.1361227,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7726.955,"timestamp":1709569045.1361263,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":7726.955,"timestamp":1709569045.1361704,"container":null}],"sockets":[{"id":0,"consumption":4255760.0,"domains":[{"name":"uncore","consumption":91691.0,"timestamp":1709569045.0613444},{"name":"core","consumption":1964961.0,"timestamp":1709569045.0612833},{"name":"dram","consumption":831560.0,"timestamp":1709569045.0612147}],"timestamp":1709569045.0603004}]},{"host":{"consumption":10793162.0,"timestamp":1709569047.2175863,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312529920","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":117387.87,"timestamp":1709569047.2174373,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":78258.57,"timestamp":1709569047.2173684,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":58693.934,"timestamp":1709569047.2174082,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":39129.285,"timestamp":1709569047.2173939,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":39129.285,"timestamp":1709569047.2174149,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":13043.097,"timestamp":1709569047.2174313,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2173736,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2174056,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.21742,"container":null},{"exe":"","cmdline":"","pid":263932,"resources_usage":null,"consumption":6521.5483,"timestamp":1709569047.2174532,"container":null}],"sockets":[{"id":0,"consumption":3052707.0,"domains":[{"name":"uncore","consumption":45126.0,"timestamp":1709569047.1469367},{"name":"core","consumption":1034363.0,"timestamp":1709569047.1468956},{"name":"dram","consumption":728187.0,"timestamp":1709569047.146852}],"timestamp":1709569047.1459458}]},{"host":{"consumption":17104786.0,"timestamp":1709569049.3226047,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312448000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1625531.5,"timestamp":1709569049.3221166,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID330-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{37eaeb80-2d9e-484a-af74-336f513a2f16}3065truetab","pid":271111,"resources_usage":null,"consumption":608263.4,"timestamp":1709569049.3221295,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":314618.97,"timestamp":1709569049.321927,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":125847.6,"timestamp":1709569049.3220081,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":83898.4,"timestamp":1709569049.32202,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":41949.2,"timestamp":1709569049.32197,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3219535,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3219838,"container":null},{"exe":"","cmdline":"/usr/bin/ibus-daemon--paneldisable","pid":2513,"resources_usage":null,"consumption":20974.6,"timestamp":1709569049.3220413,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":10487.3,"timestamp":1709569049.3219476,"container":null}],"sockets":[{"id":0,"consumption":7401117.0,"domains":[{"name":"uncore","consumption":212689.0,"timestamp":1709569049.2283125},{"name":"core","consumption":4861941.0,"timestamp":1709569049.2282119},{"name":"dram","consumption":1089513.0,"timestamp":1709569049.2281222}],"timestamp":1709569049.226694}]},{"host":{"consumption":18876486.0,"timestamp":1709569051.379631,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312312832","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1823363.4,"timestamp":1709569051.379438,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID331-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{1b207027-ae58-45d6-a5cb-ea6d45785f0c}3065truetab","pid":271887,"resources_usage":null,"consumption":911681.7,"timestamp":1709569051.37943,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":350646.78,"timestamp":1709569051.3793063,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":268829.22,"timestamp":1709569051.3793647,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":70129.36,"timestamp":1709569051.3793387,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":58441.133,"timestamp":1709569051.3793726,"container":null},{"exe":"","cmdline":"","pid":88,"resources_usage":null,"consumption":46752.906,"timestamp":1709569051.3793633,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35064.68,"timestamp":1709569051.3793492,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":23376.453,"timestamp":1709569051.379325,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":23376.453,"timestamp":1709569051.3793294,"container":null}],"sockets":[{"id":0,"consumption":8338159.0,"domains":[{"name":"uncore","consumption":243599.0,"timestamp":1709569051.3342211},{"name":"core","consumption":5475930.0,"timestamp":1709569051.3340466},{"name":"dram","consumption":1159400.0,"timestamp":1709569051.3338134}],"timestamp":1709569051.3327785}]},{"host":{"consumption":11250187.0,"timestamp":1709569053.4751475,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312394752","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":309827.7,"timestamp":1709569053.4748783,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":110160.95,"timestamp":1709569053.4749343,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":61965.53,"timestamp":1709569053.4748945,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":48195.414,"timestamp":1709569053.4749434,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":41310.355,"timestamp":1709569053.4749424,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":34425.297,"timestamp":1709569053.4749196,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":13770.119,"timestamp":1709569053.4748962,"container":null},{"exe":"","cmdline":"","pid":41,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.474887,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.4748998,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6885.0596,"timestamp":1709569053.474945,"container":null}],"sockets":[{"id":0,"consumption":3172866.0,"domains":[{"name":"uncore","consumption":82698.0,"timestamp":1709569053.3911366},{"name":"core","consumption":947798.0,"timestamp":1709569053.391068},{"name":"dram","consumption":817260.0,"timestamp":1709569053.3910155}],"timestamp":1709569053.389935}]},{"host":{"consumption":11651021.0,"timestamp":1709569055.5661595,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312243200","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":538284.25,"timestamp":1709569055.5659678,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":148736.44,"timestamp":1709569055.5658362,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":84992.25,"timestamp":1709569055.5658932,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42496.125,"timestamp":1709569055.565902,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28330.748,"timestamp":1709569055.5658772,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":14165.374,"timestamp":1709569055.5658662,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658436,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658581,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658886,"container":null},{"exe":"","cmdline":"","pid":23,"resources_usage":null,"consumption":7082.687,"timestamp":1709569055.5658937,"container":null}],"sockets":[{"id":0,"consumption":3413054.0,"domains":[{"name":"uncore","consumption":89927.0,"timestamp":1709569055.4883645},{"name":"core","consumption":1173133.0,"timestamp":1709569055.4882367},{"name":"dram","consumption":850286.0,"timestamp":1709569055.4880445}],"timestamp":1709569055.4860508}]},{"host":{"consumption":19636240.0,"timestamp":1709569057.6362855,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312181760","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":1849529.5,"timestamp":1709569057.6361952,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":816675.44,"timestamp":1709569057.6361094,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":360297.97,"timestamp":1709569057.6360965,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":120099.336,"timestamp":1709569057.636142,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":96079.46,"timestamp":1709569057.6361227,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":72059.59,"timestamp":1709569057.6361485,"container":null},{"exe":"","cmdline":"","pid":88,"resources_usage":null,"consumption":60049.668,"timestamp":1709569057.6361413,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":36029.797,"timestamp":1709569057.636116,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":24019.865,"timestamp":1709569057.6361303,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID320-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{139102ea-3b73-434c-8e10-7c94bb08134f}3065truetab","pid":257812,"resources_usage":null,"consumption":12009.933,"timestamp":1709569057.6361134,"container":null}],"sockets":[{"id":0,"consumption":8953263.0,"domains":[{"name":"uncore","consumption":191909.0,"timestamp":1709569057.57598},{"name":"core","consumption":6353826.0,"timestamp":1709569057.5759137},{"name":"dram","consumption":1152379.0,"timestamp":1709569057.5758448}],"timestamp":1709569057.5751684}]},{"host":{"consumption":14328843.0,"timestamp":1709569059.7370303,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312087552","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":3065,"resources_usage":null,"consumption":788261.56,"timestamp":1709569059.736839,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":262753.84,"timestamp":1709569059.7367055,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":183927.69,"timestamp":1709569059.7367206,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":175169.23,"timestamp":1709569059.7367651,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":52550.773,"timestamp":1709569059.7367737,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":52550.773,"timestamp":1709569059.7367744,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35033.848,"timestamp":1709569059.7367482,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":26275.387,"timestamp":1709569059.7367373,"container":null},{"exe":"","cmdline":"gjs/usr/share/gnome-shell/extensions/ding@rastersoft.com/ding.js-E-P/usr/share/gnome-shell/extensions/ding@rastersoft.com-M0-D0:0:1920:1080:1:27:0:0:0:0","pid":184165,"resources_usage":null,"consumption":17516.924,"timestamp":1709569059.7367234,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":17516.924,"timestamp":1709569059.7367277,"container":null}],"sockets":[{"id":0,"consumption":5606524.0,"domains":[{"name":"uncore","consumption":163963.0,"timestamp":1709569059.6464283},{"name":"core","consumption":3117124.0,"timestamp":1709569059.64638},{"name":"dram","consumption":1008404.0,"timestamp":1709569059.646328}],"timestamp":1709569059.6453197}]},{"host":{"consumption":10798938.0,"timestamp":1709569061.834314,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182312005632","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":90856.45,"timestamp":1709569061.8340003,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":90856.45,"timestamp":1709569061.8340604,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":58407.723,"timestamp":1709569061.8340156,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38938.48,"timestamp":1709569061.83407,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32448.734,"timestamp":1709569061.8340447,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340232,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340328,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340566,"container":null},{"exe":"","cmdline":"","pid":208295,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.834072,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6489.7466,"timestamp":1709569061.8340888,"container":null}],"sockets":[{"id":0,"consumption":3002282.0,"domains":[{"name":"uncore","consumption":59301.0,"timestamp":1709569061.7501621},{"name":"core","consumption":882674.0,"timestamp":1709569061.7499254},{"name":"dram","consumption":758935.0,"timestamp":1709569061.749683}],"timestamp":1709569061.7484915}]},{"host":{"consumption":11771431.0,"timestamp":1709569063.9412537,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311923712","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":184705.62,"timestamp":1709569063.9409318,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":163393.42,"timestamp":1709569063.9409485,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":106560.94,"timestamp":1709569063.9409466,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":85248.75,"timestamp":1709569063.9409919,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":71040.625,"timestamp":1709569063.9409637,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":49728.434,"timestamp":1709569063.9410012,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28416.248,"timestamp":1709569063.9409754,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.940943,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.9409544,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":7104.062,"timestamp":1709569063.9409957,"container":null}],"sockets":[{"id":0,"consumption":3543949.0,"domains":[{"name":"uncore","consumption":120076.0,"timestamp":1709569063.8469055},{"name":"core","consumption":1209405.0,"timestamp":1709569063.8467765},{"name":"dram","consumption":826656.0,"timestamp":1709569063.8466294}],"timestamp":1709569063.8455148}]},{"host":{"consumption":10726351.0,"timestamp":1709569066.0453446,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311866368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":172799.2,"timestamp":1709569066.0451372,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":115199.48,"timestamp":1709569066.0451686,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":95999.56,"timestamp":1709569066.0450618,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":89599.59,"timestamp":1709569066.0450773,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38399.83,"timestamp":1709569066.0451465,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31999.854,"timestamp":1709569066.045109,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0450845,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.045164,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0451667,"container":null},{"exe":"","cmdline":"","pid":249501,"resources_usage":null,"consumption":6399.971,"timestamp":1709569066.0451684,"container":null}],"sockets":[{"id":0,"consumption":2860620.0,"domains":[{"name":"uncore","consumption":70666.0,"timestamp":1709569065.9534726},{"name":"core","consumption":729100.0,"timestamp":1709569065.9532387},{"name":"dram","consumption":774626.0,"timestamp":1709569065.9529963}],"timestamp":1709569065.9517043}]},{"host":{"consumption":10230392.0,"timestamp":1709569068.1362233,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311792640","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":116324.03,"timestamp":1709569068.135931,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":91834.76,"timestamp":1709569068.1359856,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":48978.535,"timestamp":1709569068.13601,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":36733.902,"timestamp":1709569068.135946,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":36733.902,"timestamp":1709569068.135971,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359522,"container":null},{"exe":"","cmdline":"/usr/libexec/fwupd/fwupd","pid":2916,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359785,"container":null},{"exe":"","cmdline":"/usr/libexec/gvfs-afc-volume-monitor","pid":2457,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359835,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1359892,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6122.317,"timestamp":1709569068.1360116,"container":null}],"sockets":[{"id":0,"consumption":2688432.0,"domains":[{"name":"uncore","consumption":84259.0,"timestamp":1709569068.057044},{"name":"core","consumption":588952.0,"timestamp":1709569068.0569935},{"name":"dram","consumption":772851.0,"timestamp":1709569068.0569386}],"timestamp":1709569068.0558925}]},{"host":{"consumption":11706772.0,"timestamp":1709569070.2046812,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311714816","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":165288.98,"timestamp":1709569070.204433,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":158102.52,"timestamp":1709569070.2044551,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":50305.344,"timestamp":1709569070.2044961,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":50305.344,"timestamp":1709569070.2045052,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28745.91,"timestamp":1709569070.2044826,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":14372.955,"timestamp":1709569070.204463,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2044728,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2044933,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2045171,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":7186.4775,"timestamp":1709569070.2045195,"container":null}],"sockets":[{"id":0,"consumption":3013910.0,"domains":[{"name":"uncore","consumption":97346.0,"timestamp":1709569070.1455407},{"name":"core","consumption":787681.0,"timestamp":1709569070.1454976},{"name":"dram","consumption":804376.0,"timestamp":1709569070.1454227}],"timestamp":1709569070.1451373}]},{"host":{"consumption":11031279.0,"timestamp":1709569072.2848258,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311690240","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":80864.6,"timestamp":1709569072.2845564,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":74125.89,"timestamp":1709569072.2845726,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":47171.02,"timestamp":1709569072.2846088,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":47171.02,"timestamp":1709569072.2846167,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":33693.586,"timestamp":1709569072.284595,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.2845688,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284578,"container":null},{"exe":"","cmdline":"/usr/sbin/irqbalance--foreground","pid":584,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284602,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.284612,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6738.717,"timestamp":1709569072.2846181,"container":null}],"sockets":[{"id":0,"consumption":3685854.0,"domains":[{"name":"uncore","consumption":70979.0,"timestamp":1709569072.2161698},{"name":"core","consumption":1516305.0,"timestamp":1709569072.2159224},{"name":"dram","consumption":774430.0,"timestamp":1709569072.2156763}],"timestamp":1709569072.2141333}]},{"host":{"consumption":10188085.0,"timestamp":1709569074.3809662,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311583744","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":129274.79,"timestamp":1709569074.3807373,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":123118.86,"timestamp":1709569074.3806627,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":67715.37,"timestamp":1709569074.3807063,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":61559.43,"timestamp":1709569074.3806434,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":36935.652,"timestamp":1709569074.380661,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":36935.652,"timestamp":1709569074.3807158,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":30779.715,"timestamp":1709569074.3806891,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.380702,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.3807323,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":6155.943,"timestamp":1709569074.3807428,"container":null}],"sockets":[{"id":0,"consumption":2669277.0,"domains":[{"name":"uncore","consumption":2377.0,"timestamp":1709569074.2956257},{"name":"core","consumption":635943.0,"timestamp":1709569074.295518},{"name":"dram","consumption":693138.0,"timestamp":1709569074.2953844}],"timestamp":1709569074.2940917}]},{"host":{"consumption":10273173.0,"timestamp":1709569076.4840806,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311133184","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":192311.81,"timestamp":1709569076.4837523,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":62036.066,"timestamp":1709569076.4836805,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":62036.066,"timestamp":1709569076.4836984,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":49628.85,"timestamp":1709569076.4837635,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":31018.033,"timestamp":1709569076.4837308,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":12407.213,"timestamp":1709569076.4837837,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837067,"container":null},{"exe":"","cmdline":"","pid":52,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837546,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837568,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6203.6064,"timestamp":1709569076.4837873,"container":null}],"sockets":[{"id":0,"consumption":2682165.0,"domains":[{"name":"uncore","consumption":34426.0,"timestamp":1709569076.3929577},{"name":"core","consumption":624540.0,"timestamp":1709569076.3927567},{"name":"dram","consumption":717227.0,"timestamp":1709569076.392554}],"timestamp":1709569076.3915682}]},{"host":{"consumption":9607585.0,"timestamp":1709569078.5887036,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182311055360","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID319-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3bb1c0e6-d6f7-441e-8920-f7dacef69e2a}3065truetab","pid":257287,"resources_usage":null,"consumption":126189.17,"timestamp":1709569078.5884168,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":120453.305,"timestamp":1709569078.5883787,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":34415.23,"timestamp":1709569078.5883904,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28679.357,"timestamp":1709569078.588356,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5883718,"container":null},{"exe":"","cmdline":"/snap/snap-store/959/usr/bin/snap-store--gapplication-service","pid":2654,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.588389,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5883996,"container":null},{"exe":"","cmdline":"/usr/bin/containerd","pid":695,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.588423,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID110-isForBrowser-prefsLen31644-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{36207cf4-299f-48e4-b9fe-697f5b7fc603}3065truetab","pid":49847,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5884507,"container":null},{"exe":"","cmdline":"","pid":263932,"resources_usage":null,"consumption":5735.8716,"timestamp":1709569078.5884538,"container":null}],"sockets":[{"id":0,"consumption":2308325.0,"domains":[{"name":"uncore","consumption":0.0,"timestamp":1709569078.4969332},{"name":"core","consumption":349548.0,"timestamp":1709569078.49682},{"name":"dram","consumption":659184.0,"timestamp":1709569078.496608}],"timestamp":1709569078.495577}]},{"host":{"consumption":11781116.0,"timestamp":1709569080.690352,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310977536","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":183528.48,"timestamp":1709569080.6900492,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":127058.164,"timestamp":1709569080.689976,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":49411.51,"timestamp":1709569080.6899953,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42352.727,"timestamp":1709569080.6900613,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":28235.15,"timestamp":1709569080.690028,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900034,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.690054,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900635,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900702,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7058.7876,"timestamp":1709569080.6900811,"container":null}],"sockets":[{"id":0,"consumption":3656251.0,"domains":[{"name":"uncore","consumption":100027.0,"timestamp":1709569080.6002367},{"name":"core","consumption":1471737.0,"timestamp":1709569080.6002066},{"name":"dram","consumption":835779.0,"timestamp":1709569080.6001685}],"timestamp":1709569080.5997374}]},{"host":{"consumption":10751426.0,"timestamp":1709569082.7966828,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310912000","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":129223.875,"timestamp":1709569082.7962778,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":129223.875,"timestamp":1709569082.796353,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":45228.355,"timestamp":1709569082.796296,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":38767.16,"timestamp":1709569082.796366,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32305.969,"timestamp":1709569082.7963324,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":19383.58,"timestamp":1709569082.7963855,"container":null},{"exe":"","cmdline":"/usr/libexec/xdg-desktop-portal","pid":2741,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.796281,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.7962918,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.796305,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6461.194,"timestamp":1709569082.7963483,"container":null}],"sockets":[{"id":0,"consumption":2932212.0,"domains":[{"name":"uncore","consumption":108001.0,"timestamp":1709569082.703656},{"name":"core","consumption":754167.0,"timestamp":1709569082.7034225},{"name":"dram","consumption":809091.0,"timestamp":1709569082.7031865}],"timestamp":1709569082.701941}]},{"host":{"consumption":11675751.0,"timestamp":1709569084.8753462,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310842368","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":162752.89,"timestamp":1709569084.8750737,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"/usr/local/bin/scaphandre--no-headerjson-s10--max-top-consumers0-f/app/data/power_data.json","pid":240582,"resources_usage":null,"consumption":120295.625,"timestamp":1709569084.875089,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":84914.555,"timestamp":1709569084.8751278,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":56609.703,"timestamp":1709569084.8750875,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":42457.277,"timestamp":1709569084.8751369,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":35381.062,"timestamp":1709569084.8751128,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":14152.426,"timestamp":1709569084.8750942,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen40269-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{d2c3d426-0c91-4c26-a29c-f2e1973bc0fa}3065truetab","pid":3413,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.875102,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.8751385,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":7076.213,"timestamp":1709569084.8751504,"container":null}],"sockets":[{"id":0,"consumption":3311707.0,"domains":[{"name":"uncore","consumption":114419.0,"timestamp":1709569084.8064413},{"name":"core","consumption":1057562.0,"timestamp":1709569084.806423},{"name":"dram","consumption":842802.0,"timestamp":1709569084.8063824}],"timestamp":1709569084.8060837}]},{"host":{"consumption":10690528.0,"timestamp":1709569086.9738417,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310768640","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":162470.03,"timestamp":1709569086.9735067,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":142973.62,"timestamp":1709569086.9735715,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":64988.016,"timestamp":1709569086.9735236,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":45491.605,"timestamp":1709569086.973582,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":32494.008,"timestamp":1709569086.973554,"container":null},{"exe":"","cmdline":"","pid":41,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735167,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.973531,"container":null},{"exe":"","cmdline":"/usr/bin/containerd-shim-runc-v2-namespacemoby-id4daf484270eace43a1e866a0d0d3505b7601e702300946af07a68e2493d97644-address/run/containerd/containerd.sock","pid":240526,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735382,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.9735672,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6498.801,"timestamp":1709569086.973575,"container":null}],"sockets":[{"id":0,"consumption":2990252.0,"domains":[{"name":"uncore","consumption":115894.0,"timestamp":1709569086.8877308},{"name":"core","consumption":789509.0,"timestamp":1709569086.8874633},{"name":"dram","consumption":821831.0,"timestamp":1709569086.887196}],"timestamp":1709569086.8857727}]},{"host":{"consumption":10444900.0,"timestamp":1709569089.0750725,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310703104","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":120566.9,"timestamp":1709569089.0747454,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":107875.65,"timestamp":1709569089.0748055,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":57110.637,"timestamp":1709569089.0747604,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":44419.383,"timestamp":1709569089.0748153,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":25382.504,"timestamp":1709569089.0747883,"container":null},{"exe":"","cmdline":"tmux","pid":9201,"resources_usage":null,"consumption":19036.877,"timestamp":1709569089.0748348,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0747678,"container":null},{"exe":"","cmdline":"","pid":269914,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0747864,"container":null},{"exe":"","cmdline":"","pid":179190,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.0748093,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6345.626,"timestamp":1709569089.074817,"container":null}],"sockets":[{"id":0,"consumption":2727262.0,"domains":[{"name":"uncore","consumption":84809.0,"timestamp":1709569088.9848561},{"name":"core","consumption":582620.0,"timestamp":1709569088.9847484},{"name":"dram","consumption":778216.0,"timestamp":1709569088.9846327}],"timestamp":1709569088.9836576}]},{"host":{"consumption":10307967.0,"timestamp":1709569091.1843927,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310633472","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":123745.1,"timestamp":1709569091.1839895,"container":null},{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":111370.59,"timestamp":1709569091.1840603,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":68059.81,"timestamp":1709569091.184008,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":43310.79,"timestamp":1709569091.1840723,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":30936.275,"timestamp":1709569091.1840403,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.184004,"container":null},{"exe":"","cmdline":"@dbus-daemon--system--address=systemd:--nofork--nopidfile--systemd-activation--syslog-only","pid":574,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840155,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840165,"container":null},{"exe":"","cmdline":"/lib/systemd/systemd-journald","pid":270,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840816,"container":null},{"exe":"","cmdline":"","pid":249812,"resources_usage":null,"consumption":6187.255,"timestamp":1709569091.1840973,"container":null}],"sockets":[{"id":0,"consumption":2666511.0,"domains":[{"name":"uncore","consumption":67738.0,"timestamp":1709569091.0878828},{"name":"core","consumption":528703.0,"timestamp":1709569091.087651},{"name":"dram","consumption":755137.0,"timestamp":1709569091.087412}],"timestamp":1709569091.086237}]},{"host":{"consumption":10513871.0,"timestamp":1709569093.2920067,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"182310567936","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/local/bin/scaphandre","cmdline":"scaphandrejson-t60-fpower_data2.json","pid":272251,"resources_usage":null,"consumption":188533.25,"timestamp":1709569093.2917347,"container":null},{"exe":"","cmdline":"/usr/bin/gnome-shell","pid":2310,"resources_usage":null,"consumption":113119.95,"timestamp":1709569093.2916732,"container":null},{"exe":"","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":13421,"resources_usage":null,"consumption":56559.977,"timestamp":1709569093.2917452,"container":null},{"exe":"","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID332-isForBrowser-prefsLen31725-prefMapSize237847-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{c3c026c4-825b-489b-8cf2-3e6c5c6c0d41}3065truetab","pid":271953,"resources_usage":null,"consumption":43991.09,"timestamp":1709569093.2916896,"container":null},{"exe":"","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1647,"resources_usage":null,"consumption":37706.652,"timestamp":1709569093.2917178,"container":null},{"exe":"","cmdline":"","pid":70,"resources_usage":null,"consumption":18853.326,"timestamp":1709569093.2917445,"container":null},{"exe":"","cmdline":"","pid":53,"resources_usage":null,"consumption":12568.884,"timestamp":1709569093.2916968,"container":null},{"exe":"","cmdline":"","pid":269914,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.2917151,"container":null},{"exe":"","cmdline":"","pid":165351,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.2917309,"container":null},{"exe":"","cmdline":"","pid":265869,"resources_usage":null,"consumption":6284.442,"timestamp":1709569093.291747,"container":null}],"sockets":[{"id":0,"consumption":2745264.0,"domains":[{"name":"uncore","consumption":91976.0,"timestamp":1709569093.198776},{"name":"core","consumption":632737.0,"timestamp":1709569093.1986213},{"name":"dram","consumption":772951.0,"timestamp":1709569093.1985009}],"timestamp":1709569093.1971552}]}] +[{"host":{"consumption":0.0,"timestamp":1716977472.5421858,"components":{"disks":[]}},"consumers":[],"sockets":[]},{"host":{"consumption":15386704.0,"timestamp":1716977482.607643,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165635444736","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"5.1964197","cpu_usage_unit":"%","memory_usage":"130531328","memory_usage_unit":"Bytes","memory_virtual_usage":"751403008","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":799557.75,"timestamp":1716977482.607422,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.2058678","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":185543.3,"timestamp":1716977482.6074991,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"0.7707608","cpu_usage_unit":"%","memory_usage":"215318528","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":118594.68,"timestamp":1716977482.6074584,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.22376928","cpu_usage_unit":"%","memory_usage":"258383872","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":34430.715,"timestamp":1716977482.6074295,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.198906","cpu_usage_unit":"%","memory_usage":"64557056","memory_usage_unit":"Bytes","memory_virtual_usage":"358510592","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":30605.078,"timestamp":1716977482.607402,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.13674788","cpu_usage_unit":"%","memory_usage":"288235520","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":21040.992,"timestamp":1716977482.6074216,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.02486325","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3825.6348,"timestamp":1716977482.6074057,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":{"cpu_usage":"0.012431625","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1912.8174,"timestamp":1716977482.6074088,"container":null},{"exe":"/tmp/.mount_ObsidihwGEey/obsidian","cmdline":"/tmp/.mount_ObsidihwGEey/obsidian --type=renderer --enable-crash-reporter=c9273532-4664-4ff7-859b-c37799f8e52d,no_channel --user-data-dir=/home/repair/.config/obsidian --standard-schemes=app --secure-schemes=app --fetch-schemes=app --streaming-schemes=app --code-cache-schemes=app --app-path=/tmp/.mount_ObsidihwGEey/resources/app.asar --no-sandbox --no-zygote --node-integration-in-worker --first-renderer-process --lang=en-US --num-raster-threads=4 --enable-main-frame-before-activation --renderer-client-id=4 --time-ticks-at-unix-epoch=-1716969768092038 --launch-time-ticks=6878864841 --shared-files=v8_context_snapshot_data:100 --field-trial-handle=0,i,14914031741360491065,9255948320221533930,262144 --enable-features=SharedArrayBuffer,kWebSQLAccess --disable-features=SpareRendererForSitePerProcess --variations-seed-version","pid":54624,"resources_usage":{"cpu_usage":"0.012431625","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1912.8174,"timestamp":1716977482.6074152,"container":null},{"exe":"/usr/libexec/gsd-sharing","cmdline":"/usr/libexec/gsd-sharing","pid":2632,"resources_usage":{"cpu_usage":"0.012431625","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1912.8174,"timestamp":1716977482.6074233,"container":null}],"sockets":[{"id":0,"consumption":8874299.0,"domains":[{"name":"uncore","consumption":4017.0,"timestamp":1716977482.5461433},{"name":"core","consumption":6878609.0,"timestamp":1716977482.5461092},{"name":"dram","consumption":442539.0,"timestamp":1716977482.5460715}],"timestamp":1716977482.5452397}]},{"host":{"consumption":8702530.0,"timestamp":1716977492.6876924,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165635706880","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"3.8009849","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":330781.84,"timestamp":1716977492.6876094,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.5405985","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":134071.05,"timestamp":1716977492.6876025,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"1.2501578","cpu_usage_unit":"%","memory_usage":"288235520","memory_usage_unit":"Bytes","memory_virtual_usage":"5690961920","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":108795.36,"timestamp":1716977492.6875494,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.39146358","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":34067.234,"timestamp":1716977492.6875472,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.23992927","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":20879.918,"timestamp":1716977492.6875415,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen37171-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{92f93107-a391-41a2-9f5a-2c652820dffa}8698truetab","pid":9026,"resources_usage":{"cpu_usage":"0.12627858","cpu_usage_unit":"%","memory_usage":"158113792","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":10989.432,"timestamp":1716977492.687542,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID146-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{e5c359a8-f5b6-4b93-97e0-033ca794b075}8698truetab","pid":47939,"resources_usage":{"cpu_usage":"0.06313929","cpu_usage_unit":"%","memory_usage":"145711104","memory_usage_unit":"Bytes","memory_virtual_usage":"2638364672","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":5494.716,"timestamp":1716977492.687546,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.037883572","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3296.8293,"timestamp":1716977492.6875496,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.025255714","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2197.886,"timestamp":1716977492.687543,"container":null},{"exe":"","cmdline":"","pid":66646,"resources_usage":{"cpu_usage":"0.025255714","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2197.886,"timestamp":1716977492.6875465,"container":null}],"sockets":[{"id":0,"consumption":3163654.0,"domains":[{"name":"uncore","consumption":61688.0,"timestamp":1716977492.617329},{"name":"core","consumption":1271764.0,"timestamp":1716977492.6172578},{"name":"dram","consumption":490931.0,"timestamp":1716977492.6171243}],"timestamp":1716977492.6166718}]},{"host":{"consumption":10301441.0,"timestamp":1716977502.7875,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165634351104","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"5.200856","cpu_usage_unit":"%","memory_usage":"587853824","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":535763.1,"timestamp":1716977502.7874088,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID187-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{7db398fb-2d54-4175-bad8-828ae0a7c1fa}8698truetab","pid":67704,"resources_usage":{"cpu_usage":"1.8889308","cpu_usage_unit":"%","memory_usage":"178700288","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":194587.1,"timestamp":1716977502.7874117,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"1.5615162","cpu_usage_unit":"%","memory_usage":"288210944","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":160858.67,"timestamp":1716977502.7873178,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.4104017","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":145291.7,"timestamp":1716977502.7873988,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"0.8185367","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":84321.08,"timestamp":1716977502.7873533,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.35260043","cpu_usage_unit":"%","memory_usage":"24055808","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":36322.926,"timestamp":1716977502.7873154,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.17630021","cpu_usage_unit":"%","memory_usage":"64557056","memory_usage_unit":"Bytes","memory_virtual_usage":"358510592","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":18161.463,"timestamp":1716977502.787301,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen37171-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{92f93107-a391-41a2-9f5a-2c652820dffa}8698truetab","pid":9026,"resources_usage":{"cpu_usage":"0.12592873","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":12972.474,"timestamp":1716977502.7873018,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.025185745","cpu_usage_unit":"%","memory_usage":"51855360","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2594.4946,"timestamp":1716977502.7873032,"container":null},{"exe":"","cmdline":"","pid":66646,"resources_usage":{"cpu_usage":"0.025185745","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2594.4946,"timestamp":1716977502.7873144,"container":null}],"sockets":[{"id":0,"consumption":4301037.0,"domains":[{"name":"uncore","consumption":135187.0,"timestamp":1716977502.6985276},{"name":"core","consumption":2216672.0,"timestamp":1716977502.6984708},{"name":"dram","consumption":628749.0,"timestamp":1716977502.6984143}],"timestamp":1716977502.697563}]},{"host":{"consumption":7995616.0,"timestamp":1716977512.8923075,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165634002944","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.6235793","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":129815.164,"timestamp":1716977512.8920734,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.6619208","cpu_usage_unit":"%","memory_usage":"288210944","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":52924.645,"timestamp":1716977512.8918762,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.3996503","cpu_usage_unit":"%","memory_usage":"24055808","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":31954.504,"timestamp":1716977512.8918695,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.23729238","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":18972.988,"timestamp":1716977512.8918462,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.21231423","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":16975.83,"timestamp":1716977512.8918936,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen37171-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{92f93107-a391-41a2-9f5a-2c652820dffa}8698truetab","pid":9026,"resources_usage":{"cpu_usage":"0.11240165","cpu_usage_unit":"%","memory_usage":"148160512","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":8987.204,"timestamp":1716977512.8918471,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.04995629","cpu_usage_unit":"%","memory_usage":"130531328","memory_usage_unit":"Bytes","memory_virtual_usage":"751403008","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3994.313,"timestamp":1716977512.8918774,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.024978144","cpu_usage_unit":"%","memory_usage":"51855360","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1997.1565,"timestamp":1716977512.8918502,"container":null},{"exe":"","cmdline":"","pid":69985,"resources_usage":{"cpu_usage":"0.012489072","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":998.57825,"timestamp":1716977512.8918536,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":{"cpu_usage":"0.012489072","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":998.57825,"timestamp":1716977512.8918567,"container":null}],"sockets":[{"id":0,"consumption":2627446.0,"domains":[{"name":"uncore","consumption":27832.0,"timestamp":1716977512.8012142},{"name":"core","consumption":825012.0,"timestamp":1716977512.8011284},{"name":"dram","consumption":423426.0,"timestamp":1716977512.8009913}],"timestamp":1716977512.79996}]},{"host":{"consumption":10608977.0,"timestamp":1716977522.9950569,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165633617920","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"4.9655175","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":526790.6,"timestamp":1716977522.994941,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"1.893417","cpu_usage_unit":"%","memory_usage":"289783808","memory_usage_unit":"Bytes","memory_virtual_usage":"5693411328","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":200872.17,"timestamp":1716977522.9948015,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.3918495","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":147661.0,"timestamp":1716977522.9949272,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID187-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{7db398fb-2d54-4175-bad8-828ae0a7c1fa}8698truetab","pid":67704,"resources_usage":{"cpu_usage":"1.2539184","cpu_usage_unit":"%","memory_usage":"240635904","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":133027.92,"timestamp":1716977522.9949443,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"0.9404388","cpu_usage_unit":"%","memory_usage":"217534464","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":99770.94,"timestamp":1716977522.994869,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.36363637","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":38578.098,"timestamp":1716977522.9947972,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.2507837","cpu_usage_unit":"%","memory_usage":"64557056","memory_usage_unit":"Bytes","memory_virtual_usage":"358510592","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":26605.586,"timestamp":1716977522.99477,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.05015674","cpu_usage_unit":"%","memory_usage":"130531328","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":5321.1167,"timestamp":1716977522.9948022,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.02507837","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2660.5583,"timestamp":1716977522.994776,"container":null},{"exe":"","cmdline":"","pid":69985,"resources_usage":{"cpu_usage":"0.02507837","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2660.5583,"timestamp":1716977522.9947782,"container":null}],"sockets":[{"id":0,"consumption":4585682.0,"domains":[{"name":"uncore","consumption":130765.0,"timestamp":1716977522.9082603},{"name":"core","consumption":2513956.0,"timestamp":1716977522.9080117},{"name":"dram","consumption":625456.0,"timestamp":1716977522.9079459}],"timestamp":1716977522.9069028}]},{"host":{"consumption":9096160.0,"timestamp":1716977533.0356677,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165633359872","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"5.0913672","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":463118.9,"timestamp":1716977533.0355194,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID187-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{7db398fb-2d54-4175-bad8-828ae0a7c1fa}8698truetab","pid":67704,"resources_usage":{"cpu_usage":"2.621298","cpu_usage_unit":"%","memory_usage":"213168128","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":238437.47,"timestamp":1716977533.0355217,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"1.7013233","cpu_usage_unit":"%","memory_usage":"288268288","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":154755.1,"timestamp":1716977533.0354176,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.5122874","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":137560.08,"timestamp":1716977533.035509,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"0.9073724","cpu_usage_unit":"%","memory_usage":"218583040","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":82536.05,"timestamp":1716977533.0354633,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.37807184","cpu_usage_unit":"%","memory_usage":"24055808","memory_usage_unit":"Bytes","memory_virtual_usage":"29954048","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":34390.02,"timestamp":1716977533.035414,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.2268431","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":20634.012,"timestamp":1716977533.035426,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.2142407","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":19487.678,"timestamp":1716977533.035395,"container":null},{"exe":"/usr/sbin/avahi-daemon","cmdline":"avahi-daemon: running [repair-ThinkPad-T490s.local]","pid":563,"resources_usage":{"cpu_usage":"0.07561436","cpu_usage_unit":"%","memory_usage":"4849664","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":6878.0034,"timestamp":1716977533.0354347,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.05040958","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":4585.3364,"timestamp":1716977533.035418,"container":null}],"sockets":[{"id":0,"consumption":3378626.0,"domains":[{"name":"uncore","consumption":120543.0,"timestamp":1716977533.0090463},{"name":"core","consumption":1409306.0,"timestamp":1716977533.0089488},{"name":"dram","consumption":545487.0,"timestamp":1716977533.0087752}],"timestamp":1716977533.007695}]},{"host":{"consumption":8192978.0,"timestamp":1716977543.1406338,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165633028096","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"1.6913054","cpu_usage_unit":"%","memory_usage":"572862464","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":138568.28,"timestamp":1716977543.1404707,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.528439","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"2343305216","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":125224.67,"timestamp":1716977543.1404517,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.4134302","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":33872.246,"timestamp":1716977543.1402981,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.37584567","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":30792.953,"timestamp":1716977543.1402924,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.23803557","cpu_usage_unit":"%","memory_usage":"257024000","memory_usage_unit":"Bytes","memory_virtual_usage":"276779008","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":19502.203,"timestamp":1716977543.140315,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.15033826","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":12317.181,"timestamp":1716977543.140263,"container":null},{"exe":"/usr/sbin/avahi-daemon","cmdline":"avahi-daemon: running [repair-ThinkPad-T490s.local]","pid":563,"resources_usage":{"cpu_usage":"0.037584566","cpu_usage_unit":"%","memory_usage":"4849664","memory_usage_unit":"Bytes","memory_virtual_usage":"8994816","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3079.2952,"timestamp":1716977543.1403224,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.025056379","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2052.8635,"timestamp":1716977543.140276,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.025056379","cpu_usage_unit":"%","memory_usage":"130531328","memory_usage_unit":"Bytes","memory_virtual_usage":"751403008","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2052.8635,"timestamp":1716977543.140299,"container":null},{"exe":"","cmdline":"","pid":69985,"resources_usage":{"cpu_usage":"0.012528189","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1026.4318,"timestamp":1716977543.1402783,"container":null}],"sockets":[{"id":0,"consumption":2908598.0,"domains":[{"name":"uncore","consumption":36072.0,"timestamp":1716977543.0476134},{"name":"core","consumption":1116375.0,"timestamp":1716977543.0474162},{"name":"dram","consumption":420343.0,"timestamp":1716977543.0472183}],"timestamp":1716977543.0461595}]},{"host":{"consumption":8751096.0,"timestamp":1716977553.2451942,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165632688128","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"3.0692453","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":268592.6,"timestamp":1716977553.2449682,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.4472864","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"2343305216","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":126653.42,"timestamp":1716977553.2449527,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"1.0106051","cpu_usage_unit":"%","memory_usage":"215711744","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":88439.02,"timestamp":1716977553.2448888,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.7735496","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":67694.07,"timestamp":1716977553.244832,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.3867748","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":33847.035,"timestamp":1716977553.2448263,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.29943857","cpu_usage_unit":"%","memory_usage":"64557056","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":26204.156,"timestamp":1716977553.2448025,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.23705553","cpu_usage_unit":"%","memory_usage":"257024000","memory_usage_unit":"Bytes","memory_virtual_usage":"276779008","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":20744.957,"timestamp":1716977553.244844,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen37171-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{92f93107-a391-41a2-9f5a-2c652820dffa}8698truetab","pid":9026,"resources_usage":{"cpu_usage":"0.11228946","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":9826.559,"timestamp":1716977553.2448049,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.04990643","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":4367.3594,"timestamp":1716977553.2448325,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.024953214","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2183.6797,"timestamp":1716977553.2448082,"container":null}],"sockets":[{"id":0,"consumption":3198244.0,"domains":[{"name":"uncore","consumption":59549.0,"timestamp":1716977553.1556501},{"name":"core","consumption":1330320.0,"timestamp":1716977553.155449},{"name":"dram","consumption":483875.0,"timestamp":1716977553.1552622}],"timestamp":1716977553.1543906}]},{"host":{"consumption":15109567.0,"timestamp":1716977563.327964,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165632421888","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"8.837093","cpu_usage_unit":"%","memory_usage":"579706880","memory_usage_unit":"Bytes","memory_virtual_usage":"13076848640","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1335246.5,"timestamp":1716977563.3278809,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID1-isForBrowser-prefsLen36211-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{7c2e7722-9971-4f16-b931-3487c81b519f}8698truetab","pid":9002,"resources_usage":{"cpu_usage":"1.7449832","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":263659.4,"timestamp":1716977563.3278723,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"1.5704848","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":237293.45,"timestamp":1716977563.3277879,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID190-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{9ebf4a49-d4bc-4e57-bcc3-7a6e303217e6}8698truetab","pid":70773,"resources_usage":{"cpu_usage":"1.4832357","cpu_usage_unit":"%","memory_usage":"212213760","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":224110.5,"timestamp":1716977563.3278968,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.1093107","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":167612.05,"timestamp":1716977563.3278716,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"0.6107441","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":92280.79,"timestamp":1716977563.3278267,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.27421165","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":41432.19,"timestamp":1716977563.327783,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.22435498","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":33899.066,"timestamp":1716977563.327796,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.16203415","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":24482.658,"timestamp":1716977563.3277645,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen37171-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{92f93107-a391-41a2-9f5a-2c652820dffa}8698truetab","pid":9026,"resources_usage":{"cpu_usage":"0.09971332","cpu_usage_unit":"%","memory_usage":"148008960","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":15066.251,"timestamp":1716977563.3277717,"container":null}],"sockets":[{"id":0,"consumption":8017529.0,"domains":[{"name":"uncore","consumption":176220.0,"timestamp":1716977563.2595258},{"name":"core","consumption":5658539.0,"timestamp":1716977563.2594674},{"name":"dram","consumption":916792.0,"timestamp":1716977563.2594018}],"timestamp":1716977563.2584677}]},{"host":{"consumption":10006593.0,"timestamp":1716977573.4419546,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165631950848","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"4.8938828","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":489710.94,"timestamp":1716977573.4418433,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"1.4606742","cpu_usage_unit":"%","memory_usage":"288522240","memory_usage_unit":"Bytes","memory_virtual_usage":"5691256832","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":146163.72,"timestamp":1716977573.4417174,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.3857677","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":138668.14,"timestamp":1716977573.4418309,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"1.1485642","cpu_usage_unit":"%","memory_usage":"209027072","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":114932.15,"timestamp":1716977573.4417703,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID191-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{54e59378-706f-4028-af5a-d058f1d750fd}8698truetab","pid":71149,"resources_usage":{"cpu_usage":"0.9238452","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":92445.43,"timestamp":1716977573.4417727,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.37453184","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":37477.875,"timestamp":1716977573.441708,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.27465668","cpu_usage_unit":"%","memory_usage":"64557056","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":27483.777,"timestamp":1716977573.4416912,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.02496879","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2498.5251,"timestamp":1716977573.4416962,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":{"cpu_usage":"0.02496879","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2498.5251,"timestamp":1716977573.4416995,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.02496879","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2498.5251,"timestamp":1716977573.4417179,"container":null}],"sockets":[{"id":0,"consumption":4110466.0,"domains":[{"name":"uncore","consumption":118189.0,"timestamp":1716977573.3409705},{"name":"core","consumption":2058111.0,"timestamp":1716977573.3409371},{"name":"dram","consumption":633985.0,"timestamp":1716977573.3408978}],"timestamp":1716977573.339861}]},{"host":{"consumption":9042197.0,"timestamp":1716977583.5255575,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165631664128","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"4.637826","cpu_usage_unit":"%","memory_usage":"595918848","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":419361.38,"timestamp":1716977583.5254307,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.4711382","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":133023.22,"timestamp":1716977583.5254192,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID196-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{7f03b169-af17-446a-b4ea-fa74cfe97f73}8698truetab","pid":71954,"resources_usage":{"cpu_usage":"1.4711382","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":133023.22,"timestamp":1716977583.5253685,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"1.2965964","cpu_usage_unit":"%","memory_usage":"288522240","memory_usage_unit":"Bytes","memory_virtual_usage":"5691183104","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":117240.805,"timestamp":1716977583.5253036,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"1.0597183","cpu_usage_unit":"%","memory_usage":"205684736","memory_usage_unit":"Bytes","memory_virtual_usage":"2714714112","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":95821.81,"timestamp":1716977583.5253606,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.39895275","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":36074.094,"timestamp":1716977583.525293,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.21194364","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":19164.361,"timestamp":1716977583.525274,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.049869094","cpu_usage_unit":"%","memory_usage":"130531328","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":4509.2617,"timestamp":1716977583.525304,"container":null},{"exe":"/usr/sbin/irqbalance","cmdline":"/usr/sbin/irqbalance--foreground","pid":577,"resources_usage":{"cpu_usage":"0.0124672735","cpu_usage_unit":"%","memory_usage":"4063232","memory_usage_unit":"Bytes","memory_virtual_usage":"84791296","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1127.3154,"timestamp":1716977583.5252724,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.0124672735","cpu_usage_unit":"%","memory_usage":"51855360","memory_usage_unit":"Bytes","memory_virtual_usage":"1695281152","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1127.3154,"timestamp":1716977583.52528,"container":null}],"sockets":[{"id":0,"consumption":3358757.0,"domains":[{"name":"uncore","consumption":96416.0,"timestamp":1716977583.4555578},{"name":"core","consumption":1402343.0,"timestamp":1716977583.4554253},{"name":"dram","consumption":538797.0,"timestamp":1716977583.4552252}],"timestamp":1716977583.454266}]},{"host":{"consumption":8680831.0,"timestamp":1716977593.6256437,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165631238144","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"4.14216","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":359573.9,"timestamp":1716977593.6254854,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.5392317","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":133618.1,"timestamp":1716977593.6254647,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"1.126267","cpu_usage_unit":"%","memory_usage":"288522240","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":97769.33,"timestamp":1716977593.6253445,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID196-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{7f03b169-af17-446a-b4ea-fa74cfe97f73}8698truetab","pid":71954,"resources_usage":{"cpu_usage":"1.0762107","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":93424.04,"timestamp":1716977593.6254094,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"0.9260418","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":80388.125,"timestamp":1716977593.6254005,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.4004505","cpu_usage_unit":"%","memory_usage":"24055808","memory_usage_unit":"Bytes","memory_virtual_usage":"29954048","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":34762.43,"timestamp":1716977593.6253297,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.23776749","cpu_usage_unit":"%","memory_usage":"64557056","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":20640.193,"timestamp":1716977593.6253123,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.050056312","cpu_usage_unit":"%","memory_usage":"130531328","memory_usage_unit":"Bytes","memory_virtual_usage":"751403008","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":4345.3037,"timestamp":1716977593.6253457,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.025028156","cpu_usage_unit":"%","memory_usage":"51855360","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2172.6519,"timestamp":1716977593.6253176,"container":null},{"exe":"","cmdline":"","pid":69985,"resources_usage":{"cpu_usage":"0.012514078","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1086.3259,"timestamp":1716977593.6253195,"container":null}],"sockets":[{"id":0,"consumption":3094350.0,"domains":[{"name":"uncore","consumption":99460.0,"timestamp":1716977593.538002},{"name":"core","consumption":1140188.0,"timestamp":1716977593.5378692},{"name":"dram","consumption":528624.0,"timestamp":1716977593.5377688}],"timestamp":1716977593.536801}]},{"host":{"consumption":7735458.0,"timestamp":1716977603.7409463,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165630869504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"1.8759379","cpu_usage_unit":"%","memory_usage":"575188992","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":145112.39,"timestamp":1716977603.7408333,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.6633317","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":128666.33,"timestamp":1716977603.7408211,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.75037515","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":58044.953,"timestamp":1716977603.7406163,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.4252126","cpu_usage_unit":"%","memory_usage":"24055808","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":32892.14,"timestamp":1716977603.7406054,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.25012508","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":19348.32,"timestamp":1716977603.7405868,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.037518762","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2902.248,"timestamp":1716977603.7406173,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.025012508","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1934.832,"timestamp":1716977603.7405918,"container":null},{"exe":"","cmdline":"","pid":69985,"resources_usage":{"cpu_usage":"0.012506254","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":967.416,"timestamp":1716977603.740594,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":{"cpu_usage":"0.012506254","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":967.416,"timestamp":1716977603.7405956,"container":null},{"exe":"","cmdline":"","pid":15,"resources_usage":{"cpu_usage":"0.012506254","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":967.416,"timestamp":1716977603.7405977,"container":null}],"sockets":[{"id":0,"consumption":2476821.0,"domains":[{"name":"uncore","consumption":36145.0,"timestamp":1716977603.6393006},{"name":"core","consumption":697203.0,"timestamp":1716977603.6392395},{"name":"dram","consumption":410732.0,"timestamp":1716977603.6391714}],"timestamp":1716977603.6382167}]},{"host":{"consumption":8125451.0,"timestamp":1716977613.846466,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165630558208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"2.0171833","cpu_usage_unit":"%","memory_usage":"576417792","memory_usage_unit":"Bytes","memory_virtual_usage":"4490244096","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":163905.23,"timestamp":1716977613.8463292,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.6062757","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":130517.14,"timestamp":1716977613.8463147,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.5727805","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":46540.996,"timestamp":1716977613.8461592,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.41090772","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":33388.105,"timestamp":1716977613.8461483,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.26148674","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":21246.977,"timestamp":1716977613.8461282,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.26148674","cpu_usage_unit":"%","memory_usage":"257024000","memory_usage_unit":"Bytes","memory_virtual_usage":"276779008","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":21246.977,"timestamp":1716977613.8461723,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.037355248","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3035.2825,"timestamp":1716977613.84616,"container":null},{"exe":"/usr/sbin/avahi-daemon","cmdline":"avahi-daemon: running [repair-ThinkPad-T490s.local]","pid":563,"resources_usage":{"cpu_usage":"0.037355248","cpu_usage_unit":"%","memory_usage":"4849664","memory_usage_unit":"Bytes","memory_virtual_usage":"8994816","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3035.2825,"timestamp":1716977613.8461783,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.012451749","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1011.7608,"timestamp":1716977613.846134,"container":null},{"exe":"","cmdline":"","pid":69985,"resources_usage":{"cpu_usage":"0.012451749","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1011.7608,"timestamp":1716977613.846136,"container":null}],"sockets":[{"id":0,"consumption":2766066.0,"domains":[{"name":"uncore","consumption":46117.0,"timestamp":1716977613.7545826},{"name":"core","consumption":945383.0,"timestamp":1716977613.7544835},{"name":"dram","consumption":440501.0,"timestamp":1716977613.754324}],"timestamp":1716977613.7533238}]},{"host":{"consumption":8471964.0,"timestamp":1716977623.946951,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165630218240","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"3.4279995","cpu_usage_unit":"%","memory_usage":"578453504","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":290418.88,"timestamp":1716977623.9467158,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.5638683","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":132490.36,"timestamp":1716977623.9466991,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"0.9633429","cpu_usage_unit":"%","memory_usage":"210722816","memory_usage_unit":"Bytes","memory_virtual_usage":"2714697728","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":81614.06,"timestamp":1716977623.9466288,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.8632554","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":73134.69,"timestamp":1716977623.9465652,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.41286126","cpu_usage_unit":"%","memory_usage":"24055808","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":34977.457,"timestamp":1716977623.9465582,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.237708","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":20138.537,"timestamp":1716977623.9465327,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.21268609","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":18018.69,"timestamp":1716977623.946579,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen37171-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{92f93107-a391-41a2-9f5a-2c652820dffa}8698truetab","pid":9026,"resources_usage":{"cpu_usage":"0.050043788","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":4239.692,"timestamp":1716977623.946535,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.03753284","cpu_usage_unit":"%","memory_usage":"51855360","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3179.7688,"timestamp":1716977623.9465384,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.03753284","cpu_usage_unit":"%","memory_usage":"130531328","memory_usage_unit":"Bytes","memory_virtual_usage":"751403008","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3179.7688,"timestamp":1716977623.9465659,"container":null}],"sockets":[{"id":0,"consumption":2983013.0,"domains":[{"name":"uncore","consumption":68528.0,"timestamp":1716977623.8590598},{"name":"core","consumption":1123070.0,"timestamp":1716977623.8590298},{"name":"dram","consumption":486919.0,"timestamp":1716977623.8589842}],"timestamp":1716977623.8584068}]},{"host":{"consumption":7894296.0,"timestamp":1716977634.0263162,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165629890560","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"1.8252281","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":144088.9,"timestamp":1716977634.0262015,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.6127017","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"2343305216","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":127311.445,"timestamp":1716977634.0261931,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.51256406","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":40463.324,"timestamp":1716977634.026117,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.42505312","cpu_usage_unit":"%","memory_usage":"24055808","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":33554.953,"timestamp":1716977634.0261097,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.2375297","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":18751.297,"timestamp":1716977634.0260992,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.21252656","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":16777.477,"timestamp":1716977634.0261252,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.037504688","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2960.731,"timestamp":1716977634.0261176,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.025003124","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1973.8207,"timestamp":1716977634.0261025,"container":null},{"exe":"/usr/sbin/avahi-daemon","cmdline":"avahi-daemon: running [repair-ThinkPad-T490s.local]","pid":563,"resources_usage":{"cpu_usage":"0.025003124","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1973.8207,"timestamp":1716977634.0261297,"container":null},{"exe":"","cmdline":"","pid":69985,"resources_usage":{"cpu_usage":"0.012501562","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":986.91034,"timestamp":1716977634.0261035,"container":null}],"sockets":[{"id":0,"consumption":2620553.0,"domains":[{"name":"uncore","consumption":25527.0,"timestamp":1716977633.96097},{"name":"core","consumption":852530.0,"timestamp":1716977633.9609094},{"name":"dram","consumption":399688.0,"timestamp":1716977633.9608097}],"timestamp":1716977633.9597557}]},{"host":{"consumption":7423857.0,"timestamp":1716977644.123363,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165629554688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.4493821","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":33361.484,"timestamp":1716977644.1230636,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.28710523","cpu_usage_unit":"%","memory_usage":"64557056","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":21314.281,"timestamp":1716977644.1230478,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.21220821","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":15754.034,"timestamp":1716977644.123086,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.049931347","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3706.8318,"timestamp":1716977644.1230745,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.024965674","cpu_usage_unit":"%","memory_usage":"51855360","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1853.4159,"timestamp":1716977644.1230526,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID4-isForBrowser-prefsLen31781-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{d212b5eb-2e47-442c-9b4e-49abb9ff925d}8698truetab","pid":9280,"resources_usage":{"cpu_usage":"0.024965674","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1853.4159,"timestamp":1716977644.1230917,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":{"cpu_usage":"0.012482837","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":926.70795,"timestamp":1716977644.1230552,"container":null},{"exe":"/tmp/.mount_ObsidihwGEey/obsidian","cmdline":"/tmp/.mount_ObsidihwGEey/obsidian --type=renderer --enable-crash-reporter=c9273532-4664-4ff7-859b-c37799f8e52d,no_channel --user-data-dir=/home/repair/.config/obsidian --standard-schemes=app --secure-schemes=app --fetch-schemes=app --streaming-schemes=app --code-cache-schemes=app --app-path=/tmp/.mount_ObsidihwGEey/resources/app.asar --no-sandbox --no-zygote --node-integration-in-worker --first-renderer-process --lang=en-US --num-raster-threads=4 --enable-main-frame-before-activation --renderer-client-id=4 --time-ticks-at-unix-epoch=-1716969768092038 --launch-time-ticks=6878864841 --shared-files=v8_context_snapshot_data:100 --field-trial-handle=0,i,14914031741360491065,9255948320221533930,262144 --enable-features=SharedArrayBuffer,kWebSQLAccess --disable-features=SpareRendererForSitePerProcess --variations-seed-version","pid":54624,"resources_usage":{"cpu_usage":"0.012482837","cpu_usage_unit":"%","memory_usage":"272146432","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":926.70795,"timestamp":1716977644.123058,"container":null},{"exe":"","cmdline":"","pid":66646,"resources_usage":{"cpu_usage":"0.012482837","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":926.70795,"timestamp":1716977644.123062,"container":null},{"exe":"","cmdline":"","pid":35,"resources_usage":{"cpu_usage":"0.012482837","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":926.70795,"timestamp":1716977644.1230881,"container":null}],"sockets":[{"id":0,"consumption":2372901.0,"domains":[{"name":"uncore","consumption":399.0,"timestamp":1716977644.0373497},{"name":"core","consumption":698223.0,"timestamp":1716977644.037283},{"name":"dram","consumption":347577.0,"timestamp":1716977644.0371664}],"timestamp":1716977644.0360177}]},{"host":{"consumption":7907386.0,"timestamp":1716977654.2156131,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165629231104","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"2.101576","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":166179.73,"timestamp":1716977654.2154784,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.6762571","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":132548.12,"timestamp":1716977654.2154403,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.6504879","cpu_usage_unit":"%","memory_usage":"288522240","memory_usage_unit":"Bytes","memory_virtual_usage":"5691183104","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":51436.59,"timestamp":1716977654.2153401,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.45033777","cpu_usage_unit":"%","memory_usage":"24055808","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":35609.945,"timestamp":1716977654.2153306,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.262697","cpu_usage_unit":"%","memory_usage":"64557056","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":20772.467,"timestamp":1716977654.2153149,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.20015012","cpu_usage_unit":"%","memory_usage":"257024000","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":15826.643,"timestamp":1716977654.215351,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.05003753","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3956.6606,"timestamp":1716977654.2153409,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.025018765","cpu_usage_unit":"%","memory_usage":"51855360","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1978.3303,"timestamp":1716977654.2153192,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":{"cpu_usage":"0.012509382","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":989.16516,"timestamp":1716977654.2153223,"container":null},{"exe":"","cmdline":"","pid":15,"resources_usage":{"cpu_usage":"0.012509382","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":989.16516,"timestamp":1716977654.2153242,"container":null}],"sockets":[{"id":0,"consumption":2587950.0,"domains":[{"name":"uncore","consumption":70320.0,"timestamp":1716977654.136874},{"name":"core","consumption":761085.0,"timestamp":1716977654.1366742},{"name":"dram","consumption":460356.0,"timestamp":1716977654.1364748}],"timestamp":1716977654.1353571}]} diff --git a/tests/mocks/power_data.json b/tests/mocks/power_data.json index 3ea2511..031dfa7 100644 --- a/tests/mocks/power_data.json +++ b/tests/mocks/power_data.json @@ -1 +1 @@ -{"host":{"consumption":3497087.0,"timestamp":1709233432.2454963,"components":{"disks":[{"disk_type":"Unknown","disk_mount_point":"/var/lib/docker/overlay2/aba8612d08b66793c43d595cf34214586e7164ec614567be94eb1d9a4dce8692/merged","disk_is_removable":false,"disk_file_system":"overlay","disk_total_bytes":"153681051648","disk_available_bytes":"10897473536","disk_name":"overlay"}]}},"consumers":[{"exe":"/home/virgilisdead/scaphandre/scaphandre/target/debug/scaphandre","cmdline":"./scaphandrejson-t15-fpower_data.json","pid":530234,"resources_usage":null,"consumption":17299.137,"timestamp":1709233432.2441494,"container":null},{"exe":"/snap/firefox/3836/usr/lib/firefox/firefox","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen43591-prefMapSize239302-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{5a0d652d-0e4f-488b-b82f-eb8d726a9349}509764truetab","pid":510101,"resources_usage":null,"consumption":13307.028,"timestamp":1709233432.2443242,"container":null},{"exe":"/snap/firefox/3836/usr/lib/firefox/firefox","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID10-isForBrowser-prefsLen31854-prefMapSize239302-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{763c4727-4311-4de1-bd5e-2321685c6208}509764truetab","pid":510529,"resources_usage":null,"consumption":11976.325,"timestamp":1709233432.2445002,"container":null},{"exe":"/snap/firefox/3836/usr/lib/firefox/firefox","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox","pid":509764,"resources_usage":null,"consumption":9314.921,"timestamp":1709233432.2442775,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":1796,"resources_usage":null,"consumption":6653.514,"timestamp":1709233432.2442486,"container":null},{"exe":"/snap/firefox/3836/usr/lib/firefox/firefox","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID31-isForBrowser-prefsLen31963-prefMapSize239302-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{6a6e9316-ec9f-4e43-a5cb-feb3e0371baf}509764truetab","pid":516970,"resources_usage":null,"consumption":2661.4058,"timestamp":1709233432.2441854,"container":null},{"exe":"/usr/local/bin/python3.10","cmdline":"/usr/local/bin/python/usr/local/bin/uvicorn--reloadapi:app--host0.0.0.0","pid":465590,"resources_usage":null,"consumption":2661.4058,"timestamp":1709233432.2443135,"container":null},{"exe":"/snap/firefox/3836/usr/lib/firefox/firefox","cmdline":"/snap/firefox/3836/usr/lib/firefox/firefox-contentproc-childID40-isForBrowser-prefsLen31963-prefMapSize239302-jsInitLen235124-parentBuildID20240214103141-greomni/snap/firefox/3836/usr/lib/firefox/omni.ja-appomni/snap/firefox/3836/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/3836/usr/lib/firefox/browser{3d11513d-dd7b-4b18-a55a-64a3590eae4f}509764truetab","pid":522676,"resources_usage":null,"consumption":2661.4058,"timestamp":1709233432.2444696,"container":null},{"exe":"/usr/lib/xorg/Xorg","cmdline":"/usr/lib/xorg/Xorgvt2-displayfd3-auth/run/user/1000/gdm/Xauthority-nolistentcp-backgroundnone-noreset-keeptty-novtswitch-verbose3","pid":1884,"resources_usage":null,"consumption":1330.7029,"timestamp":1709233432.2442987,"container":null},{"exe":"/usr/libexec/gnome-terminal-server","cmdline":"/usr/libexec/gnome-terminal-server","pid":8177,"resources_usage":null,"consumption":1330.7029,"timestamp":1709233432.244377,"container":null}],"sockets":[{"id":0,"consumption":3827866.0,"domains":[{"name":"core","consumption":182602.0,"timestamp":1709233432.2048552}],"timestamp":1709233432.203906}]} +[{"host":{"consumption":0.0,"timestamp":1716977472.5421858,"components":{"disks":[]}},"consumers":[],"sockets":[]},{"host":{"consumption":15386704.0,"timestamp":1716977482.607643,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165635444736","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"5.1964197","cpu_usage_unit":"%","memory_usage":"130531328","memory_usage_unit":"Bytes","memory_virtual_usage":"751403008","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":799557.75,"timestamp":1716977482.607422,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.2058678","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":185543.3,"timestamp":1716977482.6074991,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"0.7707608","cpu_usage_unit":"%","memory_usage":"215318528","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":118594.68,"timestamp":1716977482.6074584,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.22376928","cpu_usage_unit":"%","memory_usage":"258383872","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":34430.715,"timestamp":1716977482.6074295,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.198906","cpu_usage_unit":"%","memory_usage":"64557056","memory_usage_unit":"Bytes","memory_virtual_usage":"358510592","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":30605.078,"timestamp":1716977482.607402,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.13674788","cpu_usage_unit":"%","memory_usage":"288235520","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":21040.992,"timestamp":1716977482.6074216,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.02486325","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3825.6348,"timestamp":1716977482.6074057,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":{"cpu_usage":"0.012431625","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1912.8174,"timestamp":1716977482.6074088,"container":null},{"exe":"/tmp/.mount_ObsidihwGEey/obsidian","cmdline":"/tmp/.mount_ObsidihwGEey/obsidian --type=renderer --enable-crash-reporter=c9273532-4664-4ff7-859b-c37799f8e52d,no_channel --user-data-dir=/home/repair/.config/obsidian --standard-schemes=app --secure-schemes=app --fetch-schemes=app --streaming-schemes=app --code-cache-schemes=app --app-path=/tmp/.mount_ObsidihwGEey/resources/app.asar --no-sandbox --no-zygote --node-integration-in-worker --first-renderer-process --lang=en-US --num-raster-threads=4 --enable-main-frame-before-activation --renderer-client-id=4 --time-ticks-at-unix-epoch=-1716969768092038 --launch-time-ticks=6878864841 --shared-files=v8_context_snapshot_data:100 --field-trial-handle=0,i,14914031741360491065,9255948320221533930,262144 --enable-features=SharedArrayBuffer,kWebSQLAccess --disable-features=SpareRendererForSitePerProcess --variations-seed-version","pid":54624,"resources_usage":{"cpu_usage":"0.012431625","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1912.8174,"timestamp":1716977482.6074152,"container":null},{"exe":"/usr/libexec/gsd-sharing","cmdline":"/usr/libexec/gsd-sharing","pid":2632,"resources_usage":{"cpu_usage":"0.012431625","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1912.8174,"timestamp":1716977482.6074233,"container":null}],"sockets":[{"id":0,"consumption":8874299.0,"domains":[{"name":"uncore","consumption":4017.0,"timestamp":1716977482.5461433},{"name":"core","consumption":6878609.0,"timestamp":1716977482.5461092},{"name":"dram","consumption":442539.0,"timestamp":1716977482.5460715}],"timestamp":1716977482.5452397}]},{"host":{"consumption":8702530.0,"timestamp":1716977492.6876924,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165635706880","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"3.8009849","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":330781.84,"timestamp":1716977492.6876094,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.5405985","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":134071.05,"timestamp":1716977492.6876025,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"1.2501578","cpu_usage_unit":"%","memory_usage":"288235520","memory_usage_unit":"Bytes","memory_virtual_usage":"5690961920","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":108795.36,"timestamp":1716977492.6875494,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.39146358","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":34067.234,"timestamp":1716977492.6875472,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.23992927","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":20879.918,"timestamp":1716977492.6875415,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen37171-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{92f93107-a391-41a2-9f5a-2c652820dffa}8698truetab","pid":9026,"resources_usage":{"cpu_usage":"0.12627858","cpu_usage_unit":"%","memory_usage":"158113792","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":10989.432,"timestamp":1716977492.687542,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID146-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{e5c359a8-f5b6-4b93-97e0-033ca794b075}8698truetab","pid":47939,"resources_usage":{"cpu_usage":"0.06313929","cpu_usage_unit":"%","memory_usage":"145711104","memory_usage_unit":"Bytes","memory_virtual_usage":"2638364672","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":5494.716,"timestamp":1716977492.687546,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.037883572","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3296.8293,"timestamp":1716977492.6875496,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.025255714","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2197.886,"timestamp":1716977492.687543,"container":null},{"exe":"","cmdline":"","pid":66646,"resources_usage":{"cpu_usage":"0.025255714","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2197.886,"timestamp":1716977492.6875465,"container":null}],"sockets":[{"id":0,"consumption":3163654.0,"domains":[{"name":"uncore","consumption":61688.0,"timestamp":1716977492.617329},{"name":"core","consumption":1271764.0,"timestamp":1716977492.6172578},{"name":"dram","consumption":490931.0,"timestamp":1716977492.6171243}],"timestamp":1716977492.6166718}]},{"host":{"consumption":10301441.0,"timestamp":1716977502.7875,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165634351104","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"5.200856","cpu_usage_unit":"%","memory_usage":"587853824","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":535763.1,"timestamp":1716977502.7874088,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID187-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{7db398fb-2d54-4175-bad8-828ae0a7c1fa}8698truetab","pid":67704,"resources_usage":{"cpu_usage":"1.8889308","cpu_usage_unit":"%","memory_usage":"178700288","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":194587.1,"timestamp":1716977502.7874117,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"1.5615162","cpu_usage_unit":"%","memory_usage":"288210944","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":160858.67,"timestamp":1716977502.7873178,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.4104017","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":145291.7,"timestamp":1716977502.7873988,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"0.8185367","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":84321.08,"timestamp":1716977502.7873533,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.35260043","cpu_usage_unit":"%","memory_usage":"24055808","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":36322.926,"timestamp":1716977502.7873154,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.17630021","cpu_usage_unit":"%","memory_usage":"64557056","memory_usage_unit":"Bytes","memory_virtual_usage":"358510592","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":18161.463,"timestamp":1716977502.787301,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen37171-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{92f93107-a391-41a2-9f5a-2c652820dffa}8698truetab","pid":9026,"resources_usage":{"cpu_usage":"0.12592873","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":12972.474,"timestamp":1716977502.7873018,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.025185745","cpu_usage_unit":"%","memory_usage":"51855360","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2594.4946,"timestamp":1716977502.7873032,"container":null},{"exe":"","cmdline":"","pid":66646,"resources_usage":{"cpu_usage":"0.025185745","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2594.4946,"timestamp":1716977502.7873144,"container":null}],"sockets":[{"id":0,"consumption":4301037.0,"domains":[{"name":"uncore","consumption":135187.0,"timestamp":1716977502.6985276},{"name":"core","consumption":2216672.0,"timestamp":1716977502.6984708},{"name":"dram","consumption":628749.0,"timestamp":1716977502.6984143}],"timestamp":1716977502.697563}]},{"host":{"consumption":7995616.0,"timestamp":1716977512.8923075,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165634002944","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.6235793","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":129815.164,"timestamp":1716977512.8920734,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.6619208","cpu_usage_unit":"%","memory_usage":"288210944","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":52924.645,"timestamp":1716977512.8918762,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.3996503","cpu_usage_unit":"%","memory_usage":"24055808","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":31954.504,"timestamp":1716977512.8918695,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.23729238","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":18972.988,"timestamp":1716977512.8918462,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.21231423","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":16975.83,"timestamp":1716977512.8918936,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen37171-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{92f93107-a391-41a2-9f5a-2c652820dffa}8698truetab","pid":9026,"resources_usage":{"cpu_usage":"0.11240165","cpu_usage_unit":"%","memory_usage":"148160512","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":8987.204,"timestamp":1716977512.8918471,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.04995629","cpu_usage_unit":"%","memory_usage":"130531328","memory_usage_unit":"Bytes","memory_virtual_usage":"751403008","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3994.313,"timestamp":1716977512.8918774,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.024978144","cpu_usage_unit":"%","memory_usage":"51855360","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1997.1565,"timestamp":1716977512.8918502,"container":null},{"exe":"","cmdline":"","pid":69985,"resources_usage":{"cpu_usage":"0.012489072","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":998.57825,"timestamp":1716977512.8918536,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":{"cpu_usage":"0.012489072","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":998.57825,"timestamp":1716977512.8918567,"container":null}],"sockets":[{"id":0,"consumption":2627446.0,"domains":[{"name":"uncore","consumption":27832.0,"timestamp":1716977512.8012142},{"name":"core","consumption":825012.0,"timestamp":1716977512.8011284},{"name":"dram","consumption":423426.0,"timestamp":1716977512.8009913}],"timestamp":1716977512.79996}]},{"host":{"consumption":10608977.0,"timestamp":1716977522.9950569,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165633617920","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"4.9655175","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":526790.6,"timestamp":1716977522.994941,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"1.893417","cpu_usage_unit":"%","memory_usage":"289783808","memory_usage_unit":"Bytes","memory_virtual_usage":"5693411328","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":200872.17,"timestamp":1716977522.9948015,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.3918495","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":147661.0,"timestamp":1716977522.9949272,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID187-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{7db398fb-2d54-4175-bad8-828ae0a7c1fa}8698truetab","pid":67704,"resources_usage":{"cpu_usage":"1.2539184","cpu_usage_unit":"%","memory_usage":"240635904","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":133027.92,"timestamp":1716977522.9949443,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"0.9404388","cpu_usage_unit":"%","memory_usage":"217534464","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":99770.94,"timestamp":1716977522.994869,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.36363637","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":38578.098,"timestamp":1716977522.9947972,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.2507837","cpu_usage_unit":"%","memory_usage":"64557056","memory_usage_unit":"Bytes","memory_virtual_usage":"358510592","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":26605.586,"timestamp":1716977522.99477,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.05015674","cpu_usage_unit":"%","memory_usage":"130531328","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":5321.1167,"timestamp":1716977522.9948022,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.02507837","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2660.5583,"timestamp":1716977522.994776,"container":null},{"exe":"","cmdline":"","pid":69985,"resources_usage":{"cpu_usage":"0.02507837","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2660.5583,"timestamp":1716977522.9947782,"container":null}],"sockets":[{"id":0,"consumption":4585682.0,"domains":[{"name":"uncore","consumption":130765.0,"timestamp":1716977522.9082603},{"name":"core","consumption":2513956.0,"timestamp":1716977522.9080117},{"name":"dram","consumption":625456.0,"timestamp":1716977522.9079459}],"timestamp":1716977522.9069028}]},{"host":{"consumption":9096160.0,"timestamp":1716977533.0356677,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165633359872","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"5.0913672","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":463118.9,"timestamp":1716977533.0355194,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID187-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{7db398fb-2d54-4175-bad8-828ae0a7c1fa}8698truetab","pid":67704,"resources_usage":{"cpu_usage":"2.621298","cpu_usage_unit":"%","memory_usage":"213168128","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":238437.47,"timestamp":1716977533.0355217,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"1.7013233","cpu_usage_unit":"%","memory_usage":"288268288","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":154755.1,"timestamp":1716977533.0354176,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.5122874","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":137560.08,"timestamp":1716977533.035509,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"0.9073724","cpu_usage_unit":"%","memory_usage":"218583040","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":82536.05,"timestamp":1716977533.0354633,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.37807184","cpu_usage_unit":"%","memory_usage":"24055808","memory_usage_unit":"Bytes","memory_virtual_usage":"29954048","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":34390.02,"timestamp":1716977533.035414,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.2268431","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":20634.012,"timestamp":1716977533.035426,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.2142407","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":19487.678,"timestamp":1716977533.035395,"container":null},{"exe":"/usr/sbin/avahi-daemon","cmdline":"avahi-daemon: running [repair-ThinkPad-T490s.local]","pid":563,"resources_usage":{"cpu_usage":"0.07561436","cpu_usage_unit":"%","memory_usage":"4849664","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":6878.0034,"timestamp":1716977533.0354347,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.05040958","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":4585.3364,"timestamp":1716977533.035418,"container":null}],"sockets":[{"id":0,"consumption":3378626.0,"domains":[{"name":"uncore","consumption":120543.0,"timestamp":1716977533.0090463},{"name":"core","consumption":1409306.0,"timestamp":1716977533.0089488},{"name":"dram","consumption":545487.0,"timestamp":1716977533.0087752}],"timestamp":1716977533.007695}]},{"host":{"consumption":8192978.0,"timestamp":1716977543.1406338,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165633028096","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"1.6913054","cpu_usage_unit":"%","memory_usage":"572862464","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":138568.28,"timestamp":1716977543.1404707,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.528439","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"2343305216","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":125224.67,"timestamp":1716977543.1404517,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.4134302","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":33872.246,"timestamp":1716977543.1402981,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.37584567","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":30792.953,"timestamp":1716977543.1402924,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.23803557","cpu_usage_unit":"%","memory_usage":"257024000","memory_usage_unit":"Bytes","memory_virtual_usage":"276779008","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":19502.203,"timestamp":1716977543.140315,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.15033826","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":12317.181,"timestamp":1716977543.140263,"container":null},{"exe":"/usr/sbin/avahi-daemon","cmdline":"avahi-daemon: running [repair-ThinkPad-T490s.local]","pid":563,"resources_usage":{"cpu_usage":"0.037584566","cpu_usage_unit":"%","memory_usage":"4849664","memory_usage_unit":"Bytes","memory_virtual_usage":"8994816","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3079.2952,"timestamp":1716977543.1403224,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.025056379","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2052.8635,"timestamp":1716977543.140276,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.025056379","cpu_usage_unit":"%","memory_usage":"130531328","memory_usage_unit":"Bytes","memory_virtual_usage":"751403008","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2052.8635,"timestamp":1716977543.140299,"container":null},{"exe":"","cmdline":"","pid":69985,"resources_usage":{"cpu_usage":"0.012528189","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1026.4318,"timestamp":1716977543.1402783,"container":null}],"sockets":[{"id":0,"consumption":2908598.0,"domains":[{"name":"uncore","consumption":36072.0,"timestamp":1716977543.0476134},{"name":"core","consumption":1116375.0,"timestamp":1716977543.0474162},{"name":"dram","consumption":420343.0,"timestamp":1716977543.0472183}],"timestamp":1716977543.0461595}]},{"host":{"consumption":8751096.0,"timestamp":1716977553.2451942,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165632688128","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"3.0692453","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":268592.6,"timestamp":1716977553.2449682,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.4472864","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"2343305216","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":126653.42,"timestamp":1716977553.2449527,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"1.0106051","cpu_usage_unit":"%","memory_usage":"215711744","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":88439.02,"timestamp":1716977553.2448888,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.7735496","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":67694.07,"timestamp":1716977553.244832,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.3867748","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":33847.035,"timestamp":1716977553.2448263,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.29943857","cpu_usage_unit":"%","memory_usage":"64557056","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":26204.156,"timestamp":1716977553.2448025,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.23705553","cpu_usage_unit":"%","memory_usage":"257024000","memory_usage_unit":"Bytes","memory_virtual_usage":"276779008","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":20744.957,"timestamp":1716977553.244844,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen37171-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{92f93107-a391-41a2-9f5a-2c652820dffa}8698truetab","pid":9026,"resources_usage":{"cpu_usage":"0.11228946","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":9826.559,"timestamp":1716977553.2448049,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.04990643","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":4367.3594,"timestamp":1716977553.2448325,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.024953214","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2183.6797,"timestamp":1716977553.2448082,"container":null}],"sockets":[{"id":0,"consumption":3198244.0,"domains":[{"name":"uncore","consumption":59549.0,"timestamp":1716977553.1556501},{"name":"core","consumption":1330320.0,"timestamp":1716977553.155449},{"name":"dram","consumption":483875.0,"timestamp":1716977553.1552622}],"timestamp":1716977553.1543906}]},{"host":{"consumption":15109567.0,"timestamp":1716977563.327964,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165632421888","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"8.837093","cpu_usage_unit":"%","memory_usage":"579706880","memory_usage_unit":"Bytes","memory_virtual_usage":"13076848640","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1335246.5,"timestamp":1716977563.3278809,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID1-isForBrowser-prefsLen36211-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{7c2e7722-9971-4f16-b931-3487c81b519f}8698truetab","pid":9002,"resources_usage":{"cpu_usage":"1.7449832","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":263659.4,"timestamp":1716977563.3278723,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"1.5704848","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":237293.45,"timestamp":1716977563.3277879,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID190-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{9ebf4a49-d4bc-4e57-bcc3-7a6e303217e6}8698truetab","pid":70773,"resources_usage":{"cpu_usage":"1.4832357","cpu_usage_unit":"%","memory_usage":"212213760","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":224110.5,"timestamp":1716977563.3278968,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.1093107","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":167612.05,"timestamp":1716977563.3278716,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"0.6107441","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":92280.79,"timestamp":1716977563.3278267,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.27421165","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":41432.19,"timestamp":1716977563.327783,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.22435498","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":33899.066,"timestamp":1716977563.327796,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.16203415","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":24482.658,"timestamp":1716977563.3277645,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen37171-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{92f93107-a391-41a2-9f5a-2c652820dffa}8698truetab","pid":9026,"resources_usage":{"cpu_usage":"0.09971332","cpu_usage_unit":"%","memory_usage":"148008960","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":15066.251,"timestamp":1716977563.3277717,"container":null}],"sockets":[{"id":0,"consumption":8017529.0,"domains":[{"name":"uncore","consumption":176220.0,"timestamp":1716977563.2595258},{"name":"core","consumption":5658539.0,"timestamp":1716977563.2594674},{"name":"dram","consumption":916792.0,"timestamp":1716977563.2594018}],"timestamp":1716977563.2584677}]},{"host":{"consumption":10006593.0,"timestamp":1716977573.4419546,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165631950848","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"4.8938828","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":489710.94,"timestamp":1716977573.4418433,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"1.4606742","cpu_usage_unit":"%","memory_usage":"288522240","memory_usage_unit":"Bytes","memory_virtual_usage":"5691256832","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":146163.72,"timestamp":1716977573.4417174,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.3857677","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":138668.14,"timestamp":1716977573.4418309,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"1.1485642","cpu_usage_unit":"%","memory_usage":"209027072","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":114932.15,"timestamp":1716977573.4417703,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID191-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{54e59378-706f-4028-af5a-d058f1d750fd}8698truetab","pid":71149,"resources_usage":{"cpu_usage":"0.9238452","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":92445.43,"timestamp":1716977573.4417727,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.37453184","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":37477.875,"timestamp":1716977573.441708,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.27465668","cpu_usage_unit":"%","memory_usage":"64557056","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":27483.777,"timestamp":1716977573.4416912,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.02496879","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2498.5251,"timestamp":1716977573.4416962,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":{"cpu_usage":"0.02496879","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2498.5251,"timestamp":1716977573.4416995,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.02496879","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2498.5251,"timestamp":1716977573.4417179,"container":null}],"sockets":[{"id":0,"consumption":4110466.0,"domains":[{"name":"uncore","consumption":118189.0,"timestamp":1716977573.3409705},{"name":"core","consumption":2058111.0,"timestamp":1716977573.3409371},{"name":"dram","consumption":633985.0,"timestamp":1716977573.3408978}],"timestamp":1716977573.339861}]},{"host":{"consumption":9042197.0,"timestamp":1716977583.5255575,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165631664128","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"4.637826","cpu_usage_unit":"%","memory_usage":"595918848","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":419361.38,"timestamp":1716977583.5254307,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.4711382","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":133023.22,"timestamp":1716977583.5254192,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID196-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{7f03b169-af17-446a-b4ea-fa74cfe97f73}8698truetab","pid":71954,"resources_usage":{"cpu_usage":"1.4711382","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":133023.22,"timestamp":1716977583.5253685,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"1.2965964","cpu_usage_unit":"%","memory_usage":"288522240","memory_usage_unit":"Bytes","memory_virtual_usage":"5691183104","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":117240.805,"timestamp":1716977583.5253036,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"1.0597183","cpu_usage_unit":"%","memory_usage":"205684736","memory_usage_unit":"Bytes","memory_virtual_usage":"2714714112","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":95821.81,"timestamp":1716977583.5253606,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.39895275","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":36074.094,"timestamp":1716977583.525293,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.21194364","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":19164.361,"timestamp":1716977583.525274,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.049869094","cpu_usage_unit":"%","memory_usage":"130531328","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":4509.2617,"timestamp":1716977583.525304,"container":null},{"exe":"/usr/sbin/irqbalance","cmdline":"/usr/sbin/irqbalance--foreground","pid":577,"resources_usage":{"cpu_usage":"0.0124672735","cpu_usage_unit":"%","memory_usage":"4063232","memory_usage_unit":"Bytes","memory_virtual_usage":"84791296","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1127.3154,"timestamp":1716977583.5252724,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.0124672735","cpu_usage_unit":"%","memory_usage":"51855360","memory_usage_unit":"Bytes","memory_virtual_usage":"1695281152","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1127.3154,"timestamp":1716977583.52528,"container":null}],"sockets":[{"id":0,"consumption":3358757.0,"domains":[{"name":"uncore","consumption":96416.0,"timestamp":1716977583.4555578},{"name":"core","consumption":1402343.0,"timestamp":1716977583.4554253},{"name":"dram","consumption":538797.0,"timestamp":1716977583.4552252}],"timestamp":1716977583.454266}]},{"host":{"consumption":8680831.0,"timestamp":1716977593.6256437,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165631238144","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"4.14216","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":359573.9,"timestamp":1716977593.6254854,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.5392317","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":133618.1,"timestamp":1716977593.6254647,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"1.126267","cpu_usage_unit":"%","memory_usage":"288522240","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":97769.33,"timestamp":1716977593.6253445,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID196-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{7f03b169-af17-446a-b4ea-fa74cfe97f73}8698truetab","pid":71954,"resources_usage":{"cpu_usage":"1.0762107","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":93424.04,"timestamp":1716977593.6254094,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"0.9260418","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":80388.125,"timestamp":1716977593.6254005,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.4004505","cpu_usage_unit":"%","memory_usage":"24055808","memory_usage_unit":"Bytes","memory_virtual_usage":"29954048","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":34762.43,"timestamp":1716977593.6253297,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.23776749","cpu_usage_unit":"%","memory_usage":"64557056","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":20640.193,"timestamp":1716977593.6253123,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.050056312","cpu_usage_unit":"%","memory_usage":"130531328","memory_usage_unit":"Bytes","memory_virtual_usage":"751403008","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":4345.3037,"timestamp":1716977593.6253457,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.025028156","cpu_usage_unit":"%","memory_usage":"51855360","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2172.6519,"timestamp":1716977593.6253176,"container":null},{"exe":"","cmdline":"","pid":69985,"resources_usage":{"cpu_usage":"0.012514078","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1086.3259,"timestamp":1716977593.6253195,"container":null}],"sockets":[{"id":0,"consumption":3094350.0,"domains":[{"name":"uncore","consumption":99460.0,"timestamp":1716977593.538002},{"name":"core","consumption":1140188.0,"timestamp":1716977593.5378692},{"name":"dram","consumption":528624.0,"timestamp":1716977593.5377688}],"timestamp":1716977593.536801}]},{"host":{"consumption":7735458.0,"timestamp":1716977603.7409463,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165630869504","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"1.8759379","cpu_usage_unit":"%","memory_usage":"575188992","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":145112.39,"timestamp":1716977603.7408333,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.6633317","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":128666.33,"timestamp":1716977603.7408211,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.75037515","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":58044.953,"timestamp":1716977603.7406163,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.4252126","cpu_usage_unit":"%","memory_usage":"24055808","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":32892.14,"timestamp":1716977603.7406054,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.25012508","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":19348.32,"timestamp":1716977603.7405868,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.037518762","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2902.248,"timestamp":1716977603.7406173,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.025012508","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1934.832,"timestamp":1716977603.7405918,"container":null},{"exe":"","cmdline":"","pid":69985,"resources_usage":{"cpu_usage":"0.012506254","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":967.416,"timestamp":1716977603.740594,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":{"cpu_usage":"0.012506254","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":967.416,"timestamp":1716977603.7405956,"container":null},{"exe":"","cmdline":"","pid":15,"resources_usage":{"cpu_usage":"0.012506254","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":967.416,"timestamp":1716977603.7405977,"container":null}],"sockets":[{"id":0,"consumption":2476821.0,"domains":[{"name":"uncore","consumption":36145.0,"timestamp":1716977603.6393006},{"name":"core","consumption":697203.0,"timestamp":1716977603.6392395},{"name":"dram","consumption":410732.0,"timestamp":1716977603.6391714}],"timestamp":1716977603.6382167}]},{"host":{"consumption":8125451.0,"timestamp":1716977613.846466,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165630558208","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"2.0171833","cpu_usage_unit":"%","memory_usage":"576417792","memory_usage_unit":"Bytes","memory_virtual_usage":"4490244096","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":163905.23,"timestamp":1716977613.8463292,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.6062757","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":130517.14,"timestamp":1716977613.8463147,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.5727805","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":46540.996,"timestamp":1716977613.8461592,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.41090772","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":33388.105,"timestamp":1716977613.8461483,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.26148674","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":21246.977,"timestamp":1716977613.8461282,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.26148674","cpu_usage_unit":"%","memory_usage":"257024000","memory_usage_unit":"Bytes","memory_virtual_usage":"276779008","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":21246.977,"timestamp":1716977613.8461723,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.037355248","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3035.2825,"timestamp":1716977613.84616,"container":null},{"exe":"/usr/sbin/avahi-daemon","cmdline":"avahi-daemon: running [repair-ThinkPad-T490s.local]","pid":563,"resources_usage":{"cpu_usage":"0.037355248","cpu_usage_unit":"%","memory_usage":"4849664","memory_usage_unit":"Bytes","memory_virtual_usage":"8994816","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3035.2825,"timestamp":1716977613.8461783,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.012451749","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1011.7608,"timestamp":1716977613.846134,"container":null},{"exe":"","cmdline":"","pid":69985,"resources_usage":{"cpu_usage":"0.012451749","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1011.7608,"timestamp":1716977613.846136,"container":null}],"sockets":[{"id":0,"consumption":2766066.0,"domains":[{"name":"uncore","consumption":46117.0,"timestamp":1716977613.7545826},{"name":"core","consumption":945383.0,"timestamp":1716977613.7544835},{"name":"dram","consumption":440501.0,"timestamp":1716977613.754324}],"timestamp":1716977613.7533238}]},{"host":{"consumption":8471964.0,"timestamp":1716977623.946951,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165630218240","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"3.4279995","cpu_usage_unit":"%","memory_usage":"578453504","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":290418.88,"timestamp":1716977623.9467158,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.5638683","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":132490.36,"timestamp":1716977623.9466991,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID63-isForBrowser-prefsLen31922-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{448a0c38-1716-4c53-874b-5e32791e3a99}8698truetab","pid":13088,"resources_usage":{"cpu_usage":"0.9633429","cpu_usage_unit":"%","memory_usage":"210722816","memory_usage_unit":"Bytes","memory_virtual_usage":"2714697728","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":81614.06,"timestamp":1716977623.9466288,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.8632554","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":73134.69,"timestamp":1716977623.9465652,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.41286126","cpu_usage_unit":"%","memory_usage":"24055808","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":34977.457,"timestamp":1716977623.9465582,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.237708","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":20138.537,"timestamp":1716977623.9465327,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.21268609","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":18018.69,"timestamp":1716977623.946579,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen37171-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{92f93107-a391-41a2-9f5a-2c652820dffa}8698truetab","pid":9026,"resources_usage":{"cpu_usage":"0.050043788","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":4239.692,"timestamp":1716977623.946535,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.03753284","cpu_usage_unit":"%","memory_usage":"51855360","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3179.7688,"timestamp":1716977623.9465384,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.03753284","cpu_usage_unit":"%","memory_usage":"130531328","memory_usage_unit":"Bytes","memory_virtual_usage":"751403008","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3179.7688,"timestamp":1716977623.9465659,"container":null}],"sockets":[{"id":0,"consumption":2983013.0,"domains":[{"name":"uncore","consumption":68528.0,"timestamp":1716977623.8590598},{"name":"core","consumption":1123070.0,"timestamp":1716977623.8590298},{"name":"dram","consumption":486919.0,"timestamp":1716977623.8589842}],"timestamp":1716977623.8584068}]},{"host":{"consumption":7894296.0,"timestamp":1716977634.0263162,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165629890560","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"1.8252281","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":144088.9,"timestamp":1716977634.0262015,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.6127017","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"2343305216","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":127311.445,"timestamp":1716977634.0261931,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.51256406","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":40463.324,"timestamp":1716977634.026117,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.42505312","cpu_usage_unit":"%","memory_usage":"24055808","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":33554.953,"timestamp":1716977634.0261097,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.2375297","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":18751.297,"timestamp":1716977634.0260992,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.21252656","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":16777.477,"timestamp":1716977634.0261252,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.037504688","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":2960.731,"timestamp":1716977634.0261176,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.025003124","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1973.8207,"timestamp":1716977634.0261025,"container":null},{"exe":"/usr/sbin/avahi-daemon","cmdline":"avahi-daemon: running [repair-ThinkPad-T490s.local]","pid":563,"resources_usage":{"cpu_usage":"0.025003124","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1973.8207,"timestamp":1716977634.0261297,"container":null},{"exe":"","cmdline":"","pid":69985,"resources_usage":{"cpu_usage":"0.012501562","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":986.91034,"timestamp":1716977634.0261035,"container":null}],"sockets":[{"id":0,"consumption":2620553.0,"domains":[{"name":"uncore","consumption":25527.0,"timestamp":1716977633.96097},{"name":"core","consumption":852530.0,"timestamp":1716977633.9609094},{"name":"dram","consumption":399688.0,"timestamp":1716977633.9608097}],"timestamp":1716977633.9597557}]},{"host":{"consumption":7423857.0,"timestamp":1716977644.123363,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165629554688","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.4493821","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":33361.484,"timestamp":1716977644.1230636,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.28710523","cpu_usage_unit":"%","memory_usage":"64557056","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":21314.281,"timestamp":1716977644.1230478,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.21220821","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":15754.034,"timestamp":1716977644.123086,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.049931347","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3706.8318,"timestamp":1716977644.1230745,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.024965674","cpu_usage_unit":"%","memory_usage":"51855360","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1853.4159,"timestamp":1716977644.1230526,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID4-isForBrowser-prefsLen31781-prefMapSize244788-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{d212b5eb-2e47-442c-9b4e-49abb9ff925d}8698truetab","pid":9280,"resources_usage":{"cpu_usage":"0.024965674","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1853.4159,"timestamp":1716977644.1230917,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":{"cpu_usage":"0.012482837","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":926.70795,"timestamp":1716977644.1230552,"container":null},{"exe":"/tmp/.mount_ObsidihwGEey/obsidian","cmdline":"/tmp/.mount_ObsidihwGEey/obsidian --type=renderer --enable-crash-reporter=c9273532-4664-4ff7-859b-c37799f8e52d,no_channel --user-data-dir=/home/repair/.config/obsidian --standard-schemes=app --secure-schemes=app --fetch-schemes=app --streaming-schemes=app --code-cache-schemes=app --app-path=/tmp/.mount_ObsidihwGEey/resources/app.asar --no-sandbox --no-zygote --node-integration-in-worker --first-renderer-process --lang=en-US --num-raster-threads=4 --enable-main-frame-before-activation --renderer-client-id=4 --time-ticks-at-unix-epoch=-1716969768092038 --launch-time-ticks=6878864841 --shared-files=v8_context_snapshot_data:100 --field-trial-handle=0,i,14914031741360491065,9255948320221533930,262144 --enable-features=SharedArrayBuffer,kWebSQLAccess --disable-features=SpareRendererForSitePerProcess --variations-seed-version","pid":54624,"resources_usage":{"cpu_usage":"0.012482837","cpu_usage_unit":"%","memory_usage":"272146432","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":926.70795,"timestamp":1716977644.123058,"container":null},{"exe":"","cmdline":"","pid":66646,"resources_usage":{"cpu_usage":"0.012482837","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":926.70795,"timestamp":1716977644.123062,"container":null},{"exe":"","cmdline":"","pid":35,"resources_usage":{"cpu_usage":"0.012482837","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":926.70795,"timestamp":1716977644.1230881,"container":null}],"sockets":[{"id":0,"consumption":2372901.0,"domains":[{"name":"uncore","consumption":399.0,"timestamp":1716977644.0373497},{"name":"core","consumption":698223.0,"timestamp":1716977644.037283},{"name":"dram","consumption":347577.0,"timestamp":1716977644.0371664}],"timestamp":1716977644.0360177}]},{"host":{"consumption":7907386.0,"timestamp":1716977654.2156131,"components":{"disks":[{"disk_type":"SSD","disk_mount_point":"/etc/hosts","disk_is_removable":false,"disk_file_system":"ext4","disk_total_bytes":"250375106560","disk_available_bytes":"165629231104","disk_name":"/dev/nvme0n1p2"}]}},"consumers":[{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox","pid":8698,"resources_usage":{"cpu_usage":"2.101576","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":166179.73,"timestamp":1716977654.2154784,"container":null},{"exe":"/usr/bin/pulseaudio","cmdline":"/usr/bin/pulseaudio--daemonize=no--log-target=journal","pid":2284,"resources_usage":{"cpu_usage":"1.6762571","cpu_usage_unit":"%","memory_usage":"30019584","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":132548.12,"timestamp":1716977654.2154403,"container":null},{"exe":"/usr/bin/gnome-shell","cmdline":"/usr/bin/gnome-shell","pid":2450,"resources_usage":{"cpu_usage":"0.6504879","cpu_usage_unit":"%","memory_usage":"288522240","memory_usage_unit":"Bytes","memory_virtual_usage":"5691183104","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":51436.59,"timestamp":1716977654.2153401,"container":null},{"exe":"/","cmdline":"runcinit","pid":70335,"resources_usage":{"cpu_usage":"0.45033777","cpu_usage_unit":"%","memory_usage":"24055808","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":35609.945,"timestamp":1716977654.2153306,"container":null},{"exe":"/snap/firefox/4336/usr/lib/firefox/firefox","cmdline":"/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-parentBuildID20240527194810-sandboxingKind0-prefsLen41574-prefMapSize244788-appDir/snap/firefox/4336/usr/lib/firefox/browser{2ec18f8a-0e50-44e0-8fab-17a8ec9b94b1}8698trueutility","pid":9270,"resources_usage":{"cpu_usage":"0.262697","cpu_usage_unit":"%","memory_usage":"64557056","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":20772.467,"timestamp":1716977654.2153149,"container":null},{"exe":"/squashfs-root/usr/bin/nvim","cmdline":"/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.","pid":15945,"resources_usage":{"cpu_usage":"0.20015012","cpu_usage_unit":"%","memory_usage":"257024000","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":15826.643,"timestamp":1716977654.215351,"container":null},{"exe":"/usr/bin/python3.9","cmdline":"/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000","pid":70211,"resources_usage":{"cpu_usage":"0.05003753","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":3956.6606,"timestamp":1716977654.2153409,"container":null},{"exe":"/usr/bin/containerd","cmdline":"/usr/bin/containerd","pid":685,"resources_usage":{"cpu_usage":"0.025018765","cpu_usage_unit":"%","memory_usage":"51855360","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":1978.3303,"timestamp":1716977654.2153192,"container":null},{"exe":"","cmdline":"","pid":16,"resources_usage":{"cpu_usage":"0.012509382","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":989.16516,"timestamp":1716977654.2153223,"container":null},{"exe":"","cmdline":"","pid":15,"resources_usage":{"cpu_usage":"0.012509382","cpu_usage_unit":"%","memory_usage":"0","memory_usage_unit":"Bytes","memory_virtual_usage":"0","memory_virtual_usage_unit":"Bytes","disk_usage_write":"0","disk_usage_write_unit":"Bytes","disk_usage_read":"0","disk_usage_read_unit":"Bytes"},"consumption":989.16516,"timestamp":1716977654.2153242,"container":null}],"sockets":[{"id":0,"consumption":2587950.0,"domains":[{"name":"uncore","consumption":70320.0,"timestamp":1716977654.136874},{"name":"core","consumption":761085.0,"timestamp":1716977654.1366742},{"name":"dram","consumption":460356.0,"timestamp":1716977654.1364748}],"timestamp":1716977654.1353571}]}] From 74dfcc34bbdd6eefdecd06ae343182f83778aa89 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 3 Jun 2024 17:44:07 +0200 Subject: [PATCH 150/227] feat: calculate embedded impact for ram for each ram share --- boagent/api/api.py | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index cbf9bf2..ed0c41f 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -276,7 +276,7 @@ async def process_embedded_impacts( process_id: int = 0, start_time: str = "0.0", end_time: str = "0.0", - verbose: bool = False, + verbose: bool = True, location: str = "EEE", measure_power: bool = True, lifetime: float = DEFAULT_LIFETIME, @@ -302,8 +302,13 @@ async def process_embedded_impacts( "host_pe_impact": pe_impact, } + # host_ram_embedded_impact = boaviztapi_data["raw_data"]["boaviztapi_data"][ + # "verbose" + # ]["RAM-1"] + # process_info = get_process_info(process_id) # host_ram_in_bytes = get_total_ram_in_bytes() + # process_ram_shares = get_process_ram_shares(process_info, host_ram_in_bytes) return host_impacts @@ -313,7 +318,6 @@ def get_process_info(process_id): data = json.loads(format_data) process_info = list() - for category in data: for process in category["consumers"]: if process["pid"] == process_id: @@ -333,9 +337,8 @@ def get_total_ram_in_bytes(): return total_ram_in_bytes -def get_process_ram_shares(process, ram_total): +def get_process_ram_shares(process_info, ram_total): - process_info = get_process_info(process) process_ram_shares = list() for timestamp in process_info: process_ram_share = ( @@ -346,6 +349,29 @@ def get_process_ram_shares(process, ram_total): return process_ram_shares +def get_ram_embedded_impact_shares(host_ram_embedded_impact, process_ram_shares): + + ram_embedded_impact_shares = list() + for impact in host_ram_embedded_impact["impacts"]: + impact_embedded_value = host_ram_embedded_impact["impacts"][impact]["embedded"][ + "value" + ] + for process_ram_share in process_ram_shares: + if process_ram_share == 0.0: + ram_embedded_impact = {f"{impact}_embedded_share": process_ram_share} + ram_embedded_impact_shares.append(ram_embedded_impact) + else: + ram_embedded_impact_share = round( + impact_embedded_value * process_ram_share, 2 + ) + ram_embedded_impact = { + f"{impact}_embedded_share": ram_embedded_impact_share + } + ram_embedded_impact_shares.append(ram_embedded_impact) + print(ram_embedded_impact_shares) + return ram_embedded_impact_shares + + @app.get("/last_info") async def last_info(): res = { From b47bff4a407790056474dc43c82fbd519d27941e Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 3 Jun 2024 17:44:55 +0200 Subject: [PATCH 151/227] test: ram embedded impact share by timestamp --- tests/api/test_api_unit.py | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index d8fd290..ccdc2e0 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -16,6 +16,7 @@ get_process_info, get_total_ram_in_bytes, get_process_ram_shares, + get_ram_embedded_impact_shares, ) from boagent.api.utils import format_prometheus_output @@ -489,6 +490,9 @@ def setUp(self): with open(mock_boaviztapi_response_not_verbose, "r") as boaviztapi_data: self.boaviztapi_data = json.load(boaviztapi_data) + with open(mock_get_metrics_verbose) as get_metrics_verbose: + self.get_metrics_verbose = json.load(get_metrics_verbose) + @patch("boagent.api.api.query_machine_impact_data") def test_get_total_embedded_impacts_for_host( self, mocked_query_machine_impact_data @@ -517,10 +521,7 @@ def test_get_process_info(self): process_details = get_process_info(70335) for process in process_details: - print(process) - print( - f"{process['resources_usage']['cpu_usage']}{process['resources_usage']['cpu_usage_unit']}" - ) + assert type(process) is dict assert type(process_details) is list def test_get_total_ram_in_bytes(self): @@ -533,10 +534,32 @@ def test_get_total_ram_in_bytes(self): ) def test_get_process_ram_share_by_timestamp(self): - process_ram_shares = get_process_ram_shares(70335, 8589934592) + process_info = get_process_info(70335) + process_ram_shares = get_process_ram_shares(process_info, 8589934592) + for ram_share in process_ram_shares: + assert type(ram_share) is float assert type(process_ram_shares) is list + @patch( + "boagent.api.api.POWER_DATA_FILE_PATH", mock_formatted_scaphandre_with_processes + ) + def test_get_embedded_impact_share_for_ram_by_timestamp(self): + + host_ram_embedded_impacts = self.get_metrics_verbose["raw_data"][ + "boaviztapi_data" + ]["verbose"]["RAM-1"] + process_info = get_process_info(70335) + process_ram_shares = get_process_ram_shares(process_info, 8589934592) + embedded_impact_shares = get_ram_embedded_impact_shares( + host_ram_embedded_impacts, process_ram_shares + ) + + for embedded_impact_share in embedded_impact_shares: + assert type(embedded_impact_share) is float + assert type(embedded_impact_shares) is list + assert False is True + loader = TestLoader() suite = TestSuite() From 381c3119074853c7a6ab33d43aca82e41e1a5e04 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 4 Jun 2024 15:38:11 +0200 Subject: [PATCH 152/227] refactor: implement retrieval of process info through process class --- boagent/api/api.py | 67 -- boagent/api/process.py | 81 ++ tests/mocks/get_metrics_verbose.json | 1577 +++++++++++++++++++++++++- 3 files changed, 1657 insertions(+), 68 deletions(-) create mode 100644 boagent/api/process.py diff --git a/boagent/api/api.py b/boagent/api/api.py index ed0c41f..08eb83a 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -302,76 +302,9 @@ async def process_embedded_impacts( "host_pe_impact": pe_impact, } - # host_ram_embedded_impact = boaviztapi_data["raw_data"]["boaviztapi_data"][ - # "verbose" - # ]["RAM-1"] - - # process_info = get_process_info(process_id) - # host_ram_in_bytes = get_total_ram_in_bytes() - # process_ram_shares = get_process_ram_shares(process_info, host_ram_in_bytes) return host_impacts -def get_process_info(process_id): - with open(POWER_DATA_FILE_PATH, "r") as power_data_file: - format_data = f"{power_data_file.read()}]" - data = json.loads(format_data) - - process_info = list() - for category in data: - for process in category["consumers"]: - if process["pid"] == process_id: - process_info.append(process) - return process_info - - -def get_total_ram_in_bytes(): - - hardware_data = get_hardware_data(True) - total_ram_capacity_in_gigabytes = 0 - - for unit in hardware_data["rams"]: - total_ram_capacity_in_gigabytes += unit["capacity"] - - total_ram_in_bytes = total_ram_capacity_in_gigabytes * 1073741824 - return total_ram_in_bytes - - -def get_process_ram_shares(process_info, ram_total): - - process_ram_shares = list() - for timestamp in process_info: - process_ram_share = ( - int(timestamp["resources_usage"]["memory_usage"]) / ram_total - ) - process_ram_shares.append(process_ram_share) - - return process_ram_shares - - -def get_ram_embedded_impact_shares(host_ram_embedded_impact, process_ram_shares): - - ram_embedded_impact_shares = list() - for impact in host_ram_embedded_impact["impacts"]: - impact_embedded_value = host_ram_embedded_impact["impacts"][impact]["embedded"][ - "value" - ] - for process_ram_share in process_ram_shares: - if process_ram_share == 0.0: - ram_embedded_impact = {f"{impact}_embedded_share": process_ram_share} - ram_embedded_impact_shares.append(ram_embedded_impact) - else: - ram_embedded_impact_share = round( - impact_embedded_value * process_ram_share, 2 - ) - ram_embedded_impact = { - f"{impact}_embedded_share": ram_embedded_impact_share - } - ram_embedded_impact_shares.append(ram_embedded_impact) - print(ram_embedded_impact_shares) - return ram_embedded_impact_shares - - @app.get("/last_info") async def last_info(): res = { diff --git a/boagent/api/process.py b/boagent/api/process.py new file mode 100644 index 0000000..f04fae8 --- /dev/null +++ b/boagent/api/process.py @@ -0,0 +1,81 @@ +import json + + +class Process: + def __init__(self, metrics_data, pid): + self.metrics_data = metrics_data + self.pid = pid + self.processed_metrics = self.process_metrics() + self.process_info = self.get_process_info() + self.total_ram_in_bytes = self.get_total_ram_in_bytes() + self.ram_shares = self.get_ram_shares() + self.ram_embedded_impact_shares = self.get_ram_embedded_impact_shares() + self.cpu_load_shares = self.get_cpu_load_shares() + + def process_metrics(self): + + with open(self.metrics_data, "r") as metrics_data_file: + metrics_data = json.load(metrics_data_file) + + return metrics_data + + def get_process_info(self): + + process_info = list() + for timestamp in self.processed_metrics["raw_data"]["power_data"]["raw_data"]: + for process in timestamp["consumers"]: + if process["pid"] == self.pid: + process_info.append(process) + return process_info + + def get_total_ram_in_bytes(self): + + ram_data = self.processed_metrics["raw_data"]["hardware_data"]["rams"] + total_ram_in_bytes = ( + sum(ram_unit["capacity"] for ram_unit in ram_data) * 1073741824 + ) + + return total_ram_in_bytes + + def get_ram_shares(self): + process_ram_shares = list() + for timestamp in self.process_info: + process_ram_share = ( + int(timestamp["resources_usage"]["memory_usage"]) / self.total_ram_bytes + ) + process_ram_shares.append(process_ram_share) + + return process_ram_shares + + def get_ram_embedded_impact_shares(self): + + ram_impacts_data = self.processed_metrics["raw_data"]["boaviztapi_data"][ + "verbose" + ]["RAM-1"]["impacts"] + ram_embedded_impact_shares = list() + for impact in ram_impacts_data: + impact_embedded_value = ram_impacts_data[impact]["embedded"]["value"] + for process_ram_share in self.ram_shares: + if process_ram_share == 0.0: + ram_embedded_impact = { + f"{impact}_embedded_share": process_ram_share + } + ram_embedded_impact_shares.append(ram_embedded_impact) + else: + ram_embedded_impact_share = round( + impact_embedded_value * process_ram_share, 2 + ) + ram_embedded_impact = { + f"{impact}_embedded_share": ram_embedded_impact_share + } + ram_embedded_impact_shares.append(ram_embedded_impact) + return ram_embedded_impact_shares + + def get_cpu_load_shares(self): + + process_cpu_load_shares = list() + for timestamp in self.process_info: + process_cpu_load_share = timestamp["resources_usage"]["cpu_usage"] + process_cpu_load_shares.append(process_cpu_load_share) + + return process_cpu_load_shares diff --git a/tests/mocks/get_metrics_verbose.json b/tests/mocks/get_metrics_verbose.json index 2f9ba04..7306f6c 100644 --- a/tests/mocks/get_metrics_verbose.json +++ b/tests/mocks/get_metrics_verbose.json @@ -1 +1,1576 @@ -{"emissions_calculation_data": {"energy_consumption_warning": "The time window is lower than one hour, but the energy consumption estimate is in Watt.Hour. So this is an extrapolation of the power usage profile on one hour. Be careful with this data. "}, "location_warning": {"warning_message": "Location is either set as default, or has not been set, and is therefore set to the default BoaviztAPI location. Be aware that the presented results can be drastically different due to location. It is recommended that you set the asset location with the corresponding country code, see: https://doc.api.boavizta.org/Explanations/usage/countries/"}, "total_operational_emissions": {"value": {"value": 38.77, "min": 38.77, "max": 38.77}, "description": "GHG emissions related to usage, from start_time to end_time.", "type": "gauge", "unit": "kg CO2eq", "long_unit": "kilograms CO2 equivalent"}, "total_operational_abiotic_resources_depletion": {"value": {"value": 6.553e-06, "min": 6.553e-06, "max": 6.553e-06}, "description": "Abiotic Resources Depletion (minerals & metals, ADPe) due to the usage phase.", "type": "gauge", "unit": "kgSbeq", "long_unit": "kilograms Antimony equivalent"}, "total_operational_primary_energy_consumed": {"value": {"value": 1313.0, "min": 1313.0, "max": 1313.0}, "description": "Primary Energy consumed due to the usage phase.", "type": "gauge", "unit": "MJ", "long_unit": "Mega Joules"}, "start_time": {"value": 1714047295.6773918, "description": "Start time for the evaluation, in timestamp format (seconds since 1970)", "type": "counter", "unit": "s", "long_unit": "seconds"}, "end_time": {"value": 1714050895.6773918, "description": "End time for the evaluation, in timestamp format (seconds since 1970)", "type": "counter", "unit": "s", "long_unit": "seconds"}, "average_power_measured": {"value": 2.911697275862069, "description": "Average power measured from start_time to end_time", "type": "gauge", "unit": "W", "long_unit": "Watts"}, "embedded_emissions": {"value": 900.0, "description": "Embedded carbon emissions (manufacturing phase)", "type": "gauge", "unit": "kg CO2eq", "long_unit": "kilograms CO2 equivalent"}, "embedded_abiotic_resources_depletion": {"value": 0.14, "description": "Embedded abiotic ressources consumed (manufacturing phase)", "type": "gauge", "unit": "kg Sbeq", "long_unit": "kilograms ADP equivalent"}, "embedded_primary_energy": {"value": 13000.0, "description": "Embedded primary energy consumed (manufacturing phase)", "type": "gauge", "unit": "MJ", "long_unit": "Mega Joules"}, "raw_data": {"hardware_data": {"disks": [{"units": 1, "logicalname": "/dev/nvme0n1", "manufacturer": "samsung", "type": "ssd", "capacity": 184}], "cpus": [{"units": 1, "name": "AMD Ryzen 5 5600H with Radeon Graphics", "vendor": "Advanced Micro Devices [AMD]", "core_units": "6"}], "rams": [{"units": 1, "manufacturer": "Samsung", "capacity": 8}]}, "resources_data": "not implemented yet", "boaviztapi_data": {"impacts": {"gwp": {"unit": "kgCO2eq", "description": "Total climate change", "embedded": {"value": 900.0, "min": 461.8, "max": 2089.0, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 38.77, "min": 38.77, "max": 38.77}}, "adp": {"unit": "kgSbeq", "description": "Use of minerals and fossil ressources", "embedded": {"value": 0.14, "min": 0.09758, "max": 0.2132, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 6.553e-06, "min": 6.553e-06, "max": 6.553e-06}}, "pe": {"unit": "MJ", "description": "Consumption of primary energy", "embedded": {"value": 13000.0, "min": 6138.0, "max": 27090.0, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 1313.0, "min": 1313.0, "max": 1313.0}}}, "verbose": {"duration": {"value": 35040.0, "unit": "hours"}, "ASSEMBLY-1": {"impacts": {"gwp": {"unit": "kgCO2eq", "description": "Total climate change", "embedded": {"value": 6.68, "min": 6.68, "max": 6.68, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "adp": {"unit": "kgSbeq", "description": "Use of minerals and fossil ressources", "embedded": {"value": 1.41e-06, "min": 1.41e-06, "max": 1.41e-06, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "pe": {"unit": "MJ", "description": "Consumption of primary energy", "embedded": {"value": 68.6, "min": 68.6, "max": 68.6, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}}, "units": {"value": 1, "status": "ARCHETYPE", "min": 1, "max": 1}, "duration": {"value": 35040.0, "unit": "hours"}}, "CPU-1": {"impacts": {"gwp": {"unit": "kgCO2eq", "description": "Total climate change", "embedded": {"value": 40.0, "min": 21.84, "max": 163.6, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 10000.0, "min": 587.5, "max": 28900.0}}, "adp": {"unit": "kgSbeq", "description": "Use of minerals and fossil ressources", "embedded": {"value": 0.04081, "min": 0.0408, "max": 0.04084, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 0.0016, "min": 0.0003382, "max": 0.006783}}, "pe": {"unit": "MJ", "description": "Consumption of primary energy", "embedded": {"value": 600.0, "min": 359.9, "max": 2267.0, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 300000.0, "min": 332.0, "max": 11960000.0, "warnings": ["Uncertainty from technical characteristics is very important. Results should be interpreted with caution (see min and max values)"]}}}, "units": {"value": 2.0, "status": "ARCHETYPE", "min": 2.0, "max": 2.0}, "die_size": {"value": 521.0, "status": "COMPLETED", "unit": "mm2", "source": "Average value for all families", "min": 41.2, "max": 3640.0}, "duration": {"value": 35040.0, "unit": "hours"}, "avg_power": {"value": 364.46, "status": "COMPLETED", "unit": "W", "min": 364.46, "max": 364.46}, "time_workload": {"value": 50.0, "status": "ARCHETYPE", "unit": "%", "min": 0.0, "max": 100.0}, "usage_location": {"value": "EEE", "status": "DEFAULT", "unit": "CodSP3 - NCS Country Codes - NATO"}, "use_time_ratio": {"value": 1.0, "status": "ARCHETYPE", "unit": "/1", "min": 1.0, "max": 1.0}, "hours_life_time": {"value": 35040.0, "status": "COMPLETED", "unit": "hours", "source": "from device", "min": 35040.0, "max": 35040.0}, "params": {"value": {"a": 171.2, "b": 0.0354, "c": 36.89, "d": -10.13}, "status": "ARCHETYPE"}, "gwp_factor": {"value": 0.38, "status": "DEFAULT", "unit": "kg CO2eq/kWh", "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", "min": 0.023, "max": 1.13161}, "adp_factor": {"value": 6.42317e-08, "status": "DEFAULT", "unit": "kg Sbeq/kWh", "source": "ADEME Base IMPACTS \u00ae", "min": 1.324e-08, "max": 2.65575e-07}, "pe_factor": {"value": 12.873, "status": "DEFAULT", "unit": "MJ/kWh", "source": "ADPf / (1-%renewable_energy)", "min": 0.013, "max": 468.15}}, "RAM-1": {"impacts": {"gwp": {"unit": "kgCO2eq", "description": "Total climate change", "embedded": {"value": 490.0, "min": 209.2, "max": 1179.0, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 8000.0, "min": 263.7, "max": 36040.0}}, "adp": {"unit": "kgSbeq", "description": "Use of minerals and fossil ressources", "embedded": {"value": 0.026, "min": 0.01523, "max": 0.04916, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 0.0013, "min": 0.0001518, "max": 0.008457}}, "pe": {"unit": "MJ", "description": "Consumption of primary energy", "embedded": {"value": 6000.0, "min": 2651.0, "max": 14720.0, "warnings": ["End of life is not included in the calculation"]}, "use": {"value": 300000.0, "min": 149.0, "max": 14910000.0, "warnings": ["Uncertainty from technical characteristics is very important. Results should be interpreted with caution (see min and max values)"]}}}, "units": {"value": 8.0, "status": "ARCHETYPE", "min": 6.0, "max": 10.0}, "capacity": {"value": 32.0, "status": "ARCHETYPE", "unit": "GB", "min": 32.0, "max": 32.0}, "density": {"value": 1.2443636363636363, "status": "COMPLETED", "unit": "GB/cm2", "source": "Average of 11 rows", "min": 0.625, "max": 2.375}, "duration": {"value": 35040.0, "unit": "hours"}, "avg_power": {"value": 72.704, "status": "COMPLETED", "unit": "W", "min": 54.52799999999999, "max": 90.88}, "time_workload": {"value": 50.0, "status": "ARCHETYPE", "unit": "%", "min": 0.0, "max": 100.0}, "usage_location": {"value": "EEE", "status": "DEFAULT", "unit": "CodSP3 - NCS Country Codes - NATO"}, "use_time_ratio": {"value": 1.0, "status": "ARCHETYPE", "unit": "/1", "min": 1.0, "max": 1.0}, "hours_life_time": {"value": 35040.0, "status": "COMPLETED", "unit": "hours", "source": "from device", "min": 35040.0, "max": 35040.0}, "params": {"value": {"a": 9.088}, "status": "COMPLETED", "source": "(ram_electrical_factor_per_go : 0.284) * (ram_capacity: 32.0) "}, "gwp_factor": {"value": 0.38, "status": "DEFAULT", "unit": "kg CO2eq/kWh", "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", "min": 0.023, "max": 1.13161}, "adp_factor": {"value": 6.42317e-08, "status": "DEFAULT", "unit": "kg Sbeq/kWh", "source": "ADEME Base IMPACTS \u00ae", "min": 1.324e-08, "max": 2.65575e-07}, "pe_factor": {"value": 12.873, "status": "DEFAULT", "unit": "MJ/kWh", "source": "ADPf / (1-%renewable_energy)", "min": 0.013, "max": 468.15}}, "SSD-1": {"impacts": {"gwp": {"unit": "kgCO2eq", "description": "Total climate change", "embedded": {"value": 50.0, "min": 23.53, "max": 281.0, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "adp": {"unit": "kgSbeq", "description": "Use of minerals and fossil ressources", "embedded": {"value": 0.0017, "min": 0.001055, "max": 0.008809, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "pe": {"unit": "MJ", "description": "Consumption of primary energy", "embedded": {"value": 600.0, "min": 290.2, "max": 3483.0, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}}, "units": {"value": 1.0, "status": "ARCHETYPE", "min": 1.0, "max": 2.0}, "capacity": {"value": 1000.0, "status": "ARCHETYPE", "unit": "GB", "min": 1000.0, "max": 1000.0}, "density": {"value": 54.8842105263158, "status": "COMPLETED", "unit": "GB/cm2", "source": "Average of 19 rows", "min": 16.4, "max": 128.0}, "duration": {"value": 35040.0, "unit": "hours"}}, "POWER_SUPPLY-1": {"impacts": {"gwp": {"unit": "kgCO2eq", "description": "Total climate change", "embedded": {"value": 150.0, "min": 48.6, "max": 243.0, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "adp": {"unit": "kgSbeq", "description": "Use of minerals and fossil ressources", "embedded": {"value": 0.05, "min": 0.0166, "max": 0.083, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "pe": {"unit": "MJ", "description": "Consumption of primary energy", "embedded": {"value": 2100.0, "min": 704.0, "max": 3520.0, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}}, "units": {"value": 2.0, "status": "ARCHETYPE", "min": 2.0, "max": 2.0}, "unit_weight": {"value": 2.99, "status": "ARCHETYPE", "unit": "kg", "min": 1.0, "max": 5.0}, "duration": {"value": 35040.0, "unit": "hours"}}, "CASE-1": {"impacts": {"gwp": {"unit": "kgCO2eq", "description": "Total climate change", "embedded": {"value": 150.0, "min": 85.9, "max": 150.0, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "adp": {"unit": "kgSbeq", "description": "Use of minerals and fossil ressources", "embedded": {"value": 0.0202, "min": 0.0202, "max": 0.02767, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "pe": {"unit": "MJ", "description": "Consumption of primary energy", "embedded": {"value": 2200.0, "min": 1229.0, "max": 2200.0, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}}, "units": {"value": 1, "status": "ARCHETYPE", "min": 1, "max": 1}, "case_type": {"value": "rack", "status": "ARCHETYPE"}, "duration": {"value": 35040.0, "unit": "hours"}}, "MOTHERBOARD-1": {"impacts": {"gwp": {"unit": "kgCO2eq", "description": "Total climate change", "embedded": {"value": 66.1, "min": 66.1, "max": 66.1, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "adp": {"unit": "kgSbeq", "description": "Use of minerals and fossil ressources", "embedded": {"value": 0.00369, "min": 0.00369, "max": 0.00369, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}, "pe": {"unit": "MJ", "description": "Consumption of primary energy", "embedded": {"value": 836.0, "min": 836.0, "max": 836.0, "warnings": ["End of life is not included in the calculation"]}, "use": "not implemented"}}, "units": {"value": 1, "status": "ARCHETYPE", "min": 1, "max": 1}, "duration": {"value": 35040.0, "unit": "hours"}}, "avg_power": {"value": 2.911697275862069, "status": "INPUT", "unit": "W"}, "usage_location": {"value": "EEE", "status": "INPUT", "unit": "CodSP3 - NCS Country Codes - NATO"}, "use_time_ratio": {"value": 1.0, "status": "ARCHETYPE", "unit": "/1", "min": 1.0, "max": 1.0}, "hours_life_time": {"value": 35040.0, "status": "COMPLETED", "unit": "hours", "source": "from device", "min": 35040.0, "max": 35040.0}, "gwp_factor": {"value": 0.38, "status": "COMPLETED", "unit": "kg CO2eq/kWh", "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", "min": 0.38, "max": 0.38}, "adp_factor": {"value": 6.42317e-08, "status": "COMPLETED", "unit": "kg Sbeq/kWh", "source": "ADEME Base IMPACTS \u00ae", "min": 6.42317e-08, "max": 6.42317e-08}, "pe_factor": {"value": 12.873, "status": "COMPLETED", "unit": "MJ/kWh", "source": "ADPf / (1-%renewable_energy)", "min": 12.873, "max": 12.873}, "units": {"value": 1, "status": "ARCHETYPE", "min": 1, "max": 1}}}, "start_time": 1714047295.6773918, "end_time": 1714050895.6773918, "power_data": {"raw_data": [{"host": {"consumption": 0.0, "timestamp": 1714050609.5303588, "components": {"disks": []}}, "consumers": [], "sockets": []}, {"host": {"consumption": 4837934.0, "timestamp": 1714050619.5760736, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3258818560", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 4829128.0, "domains": [{"name": "core", "consumption": 861910.0, "timestamp": 1714050619.534158}], "timestamp": 1714050619.5333738}]}, {"host": {"consumption": 4336772.0, "timestamp": 1714050629.6196637, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3257823232", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 4340778.0, "domains": [{"name": "core", "consumption": 340552.0, "timestamp": 1714050629.583029}], "timestamp": 1714050629.5823667}]}, {"host": {"consumption": 3959597.0, "timestamp": 1714050639.6662745, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3257794560", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 3963287.0, "domains": [{"name": "core", "consumption": 233109.0, "timestamp": 1714050639.626042}], "timestamp": 1714050639.6253095}]}, {"host": {"consumption": 2875749.0, "timestamp": 1714050649.7136774, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3257761792", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2880442.0, "domains": [{"name": "core", "consumption": 150432.0, "timestamp": 1714050649.673646}], "timestamp": 1714050649.6729755}]}, {"host": {"consumption": 2344716.0, "timestamp": 1714050659.7682877, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3257769984", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2342969.0, "domains": [{"name": "core", "consumption": 108567.0, "timestamp": 1714050659.7204263}], "timestamp": 1714050659.719766}]}, {"host": {"consumption": 2423952.0, "timestamp": 1714050669.8246953, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256954880", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2424140.0, "domains": [{"name": "core", "consumption": 157851.0, "timestamp": 1714050669.776394}], "timestamp": 1714050669.7757287}]}, {"host": {"consumption": 2386135.0, "timestamp": 1714050679.8799796, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256950784", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2384340.0, "domains": [{"name": "core", "consumption": 112721.0, "timestamp": 1714050679.8309493}], "timestamp": 1714050679.8301027}]}, {"host": {"consumption": 2422960.0, "timestamp": 1714050689.9413106, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3257040896", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2425202.0, "domains": [{"name": "core", "consumption": 88030.0, "timestamp": 1714050689.8877292}], "timestamp": 1714050689.8870673}]}, {"host": {"consumption": 2400792.0, "timestamp": 1714050699.9988215, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3257040896", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2400337.0, "domains": [{"name": "core", "consumption": 108788.0, "timestamp": 1714050699.9487965}], "timestamp": 1714050699.9480736}]}, {"host": {"consumption": 2377137.0, "timestamp": 1714050710.0650983, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256233984", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2378404.0, "domains": [{"name": "core", "consumption": 80929.0, "timestamp": 1714050710.0126016}], "timestamp": 1714050710.0119147}]}, {"host": {"consumption": 3453613.0, "timestamp": 1714050720.1119895, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256233984", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 3451031.0, "domains": [{"name": "core", "consumption": 143623.0, "timestamp": 1714050720.0730257}], "timestamp": 1714050720.072306}]}, {"host": {"consumption": 2391053.0, "timestamp": 1714050730.1596022, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256512512", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2390881.0, "domains": [{"name": "core", "consumption": 87937.0, "timestamp": 1714050730.119086}], "timestamp": 1714050730.1183357}]}, {"host": {"consumption": 2373410.0, "timestamp": 1714050740.2157648, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256500224", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2374401.0, "domains": [{"name": "core", "consumption": 85716.0, "timestamp": 1714050740.1680138}], "timestamp": 1714050740.1670768}]}, {"host": {"consumption": 3619855.0, "timestamp": 1714050750.2727349, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256270848", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 3618308.0, "domains": [{"name": "core", "consumption": 402310.0, "timestamp": 1714050750.223619}], "timestamp": 1714050750.2229202}]}, {"host": {"consumption": 2561285.0, "timestamp": 1714050760.3367336, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3255484416", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2548108.0, "domains": [{"name": "core", "consumption": 132357.0, "timestamp": 1714050760.283399}], "timestamp": 1714050760.2826276}]}, {"host": {"consumption": 2390917.0, "timestamp": 1714050770.399907, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3255496704", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2404677.0, "domains": [{"name": "core", "consumption": 73807.0, "timestamp": 1714050770.3503423}], "timestamp": 1714050770.3490674}]}, {"host": {"consumption": 2503232.0, "timestamp": 1714050780.452806, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3255484416", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2502490.0, "domains": [{"name": "core", "consumption": 104714.0, "timestamp": 1714050780.4068437}], "timestamp": 1714050780.4061348}]}, {"host": {"consumption": 2353636.0, "timestamp": 1714050790.5184891, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3255484416", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2347337.0, "domains": [{"name": "core", "consumption": 88720.0, "timestamp": 1714050790.4598715}], "timestamp": 1714050790.4591603}]}, {"host": {"consumption": 2576118.0, "timestamp": 1714050800.5747895, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256954880", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2583281.0, "domains": [{"name": "core", "consumption": 182473.0, "timestamp": 1714050800.5264494}], "timestamp": 1714050800.5257907}]}, {"host": {"consumption": 2406927.0, "timestamp": 1714050810.6301062, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3256135680", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2406472.0, "domains": [{"name": "core", "consumption": 559061.0, "timestamp": 1714050810.581942}], "timestamp": 1714050810.5812838}]}, {"host": {"consumption": 3958908.0, "timestamp": 1714050820.685751, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3251761152", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 3950184.0, "domains": [{"name": "core", "consumption": 884193.0, "timestamp": 1714050820.6366255}], "timestamp": 1714050820.6359894}]}, {"host": {"consumption": 5963138.0, "timestamp": 1714050830.7515006, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3255197696", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 5974054.0, "domains": [{"name": "core", "consumption": 645767.0, "timestamp": 1714050830.6936398}], "timestamp": 1714050830.692971}]}, {"host": {"consumption": 2465605.0, "timestamp": 1714050840.8065033, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3255209984", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2466516.0, "domains": [{"name": "core", "consumption": 824598.0, "timestamp": 1714050840.758721}], "timestamp": 1714050840.7579138}]}, {"host": {"consumption": 2429380.0, "timestamp": 1714050850.8606722, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3255209984", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2430564.0, "domains": [{"name": "core", "consumption": 356691.0, "timestamp": 1714050850.8141007}], "timestamp": 1714050850.8134236}]}, {"host": {"consumption": 2520553.0, "timestamp": 1714050860.9165232, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3254431744", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 2519423.0, "domains": [{"name": "core", "consumption": 975977.0, "timestamp": 1714050860.8676693}], "timestamp": 1714050860.8669431}]}, {"host": {"consumption": 3092541.0, "timestamp": 1714050870.9734244, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3254419456", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 3082233.0, "domains": [{"name": "core", "consumption": 369003.0, "timestamp": 1714050870.9234526}], "timestamp": 1714050870.922792}]}, {"host": {"consumption": 3812342.0, "timestamp": 1714050881.031177, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3254419456", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 3816419.0, "domains": [{"name": "core", "consumption": 173603.0, "timestamp": 1714050880.9800797}], "timestamp": 1714050880.9794118}]}, {"host": {"consumption": 3200964.0, "timestamp": 1714050891.0927029, "components": {"disks": [{"disk_type": "SSD", "disk_mount_point": "/etc/hosts", "disk_is_removable": false, "disk_file_system": "ext4", "disk_total_bytes": "153681051648", "disk_available_bytes": "3254415360", "disk_name": "/dev/nvme0n1p5"}]}}, "consumers": [], "sockets": [{"id": 0, "consumption": 3206864.0, "domains": [{"name": "core", "consumption": 102793.0, "timestamp": 1714050891.040935}], "timestamp": 1714050891.040277}]}], "avg_power": 2.911697275862069, "warning": "The time window is lower than one hour, but the energy consumption estimate is in Watt.Hour. So this is an extrapolation of the power usage profile on one hour. Be careful with this data. "}}, "electricity_carbon_intensity": {"value": 0.38, "description": "Carbon intensity of the electricity mix. Mix considered : EEE", "type": "gauge", "unit": "kg CO2eq / kWh", "long_unit": "Kilograms CO2 equivalent per KiloWattHour"}} \ No newline at end of file +{ + "emissions_calculation_data": { + "energy_consumption_warning": "The time window is lower than one hour, but the energy consumption estimate is in Watt.Hour. So this is an extrapolation of the power usage profile on one hour. Be careful with this data. " + }, + "location_warning": { + "warning_message": "Location is either set as default, or has not been set, and is therefore set to the default BoaviztAPI location. Be aware that the presented results can be drastically different due to location. It is recommended that you set the asset location with the corresponding country code, see: https://doc.api.boavizta.org/Explanations/usage/countries/" + }, + "total_operational_emissions": { + "value": { + "value": 138.6, + "min": 138.6, + "max": 138.6 + }, + "description": "GHG emissions related to usage, from start_time to end_time.", + "type": "gauge", + "unit": "kg CO2eq", + "long_unit": "kilograms CO2 equivalent" + }, + "total_operational_abiotic_resources_depletion": { + "value": { + "value": 0.00002342, + "min": 0.00002342, + "max": 0.00002342 + }, + "description": "Abiotic Resources Depletion (minerals & metals, ADPe) due to the usage phase.", + "type": "gauge", + "unit": "kgSbeq", + "long_unit": "kilograms Antimony equivalent" + }, + "total_operational_primary_energy_consumed": { + "value": { + "value": 4694, + "min": 4694, + "max": 4694 + }, + "description": "Primary Energy consumed due to the usage phase.", + "type": "gauge", + "unit": "MJ", + "long_unit": "Mega Joules" + }, + "start_time": { + "value": 1717500637.2979465, + "description": "Start time for the evaluation, in timestamp format (seconds since 1970)", + "type": "counter", + "unit": "s", + "long_unit": "seconds" + }, + "end_time": { + "value": 1717504237.2979465, + "description": "End time for the evaluation, in timestamp format (seconds since 1970)", + "type": "counter", + "unit": "s", + "long_unit": "seconds" + }, + "average_power_measured": { + "value": 10.4062055, + "description": "Average power measured from start_time to end_time", + "type": "gauge", + "unit": "W", + "long_unit": "Watts" + }, + "embedded_emissions": { + "value": 900, + "description": "Embedded carbon emissions (manufacturing phase)", + "type": "gauge", + "unit": "kg CO2eq", + "long_unit": "kilograms CO2 equivalent" + }, + "embedded_abiotic_resources_depletion": { + "value": 0.14, + "description": "Embedded abiotic ressources consumed (manufacturing phase)", + "type": "gauge", + "unit": "kg Sbeq", + "long_unit": "kilograms ADP equivalent" + }, + "embedded_primary_energy": { + "value": 13000, + "description": "Embedded primary energy consumed (manufacturing phase)", + "type": "gauge", + "unit": "MJ", + "long_unit": "Mega Joules" + }, + "raw_data": { + "hardware_data": { + "disks": [ + { + "units": 1, + "logicalname": "/dev/nvme0n1", + "manufacturer": "toshiba", + "type": "ssd", + "capacity": 238 + } + ], + "cpus": [ + { + "units": 1, + "name": "Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz", + "vendor": "Intel Corp.", + "core_units": "4" + } + ], + "rams": [ + { + "units": 1, + "manufacturer": "Micron", + "capacity": 4 + }, + { + "units": 1, + "manufacturer": "Micron", + "capacity": 4 + } + ] + }, + "resources_data": "not implemented yet", + "boaviztapi_data": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 900, + "min": 461.8, + "max": 2089, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 138.6, + "min": 138.6, + "max": 138.6 + } + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.14, + "min": 0.09758, + "max": 0.2132, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 0.00002342, + "min": 0.00002342, + "max": 0.00002342 + } + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 13000, + "min": 6138, + "max": 27090, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 4694, + "min": 4694, + "max": 4694 + } + } + }, + "verbose": { + "duration": { + "value": 35040, + "unit": "hours" + }, + "ASSEMBLY-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 6.68, + "min": 6.68, + "max": 6.68, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.00000141, + "min": 0.00000141, + "max": 0.00000141, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 68.6, + "min": 68.6, + "max": 68.6, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 1 + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "CPU-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 40, + "min": 21.84, + "max": 163.6, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 10000, + "min": 587.5, + "max": 28900 + } + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.04081, + "min": 0.0408, + "max": 0.04084, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 0.0016, + "min": 0.0003382, + "max": 0.006783 + } + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 600, + "min": 359.9, + "max": 2267, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 300000, + "min": 332, + "max": 11960000, + "warnings": [ + "Uncertainty from technical characteristics is very important. Results should be interpreted with caution (see min and max values)" + ] + } + } + }, + "units": { + "value": 2, + "status": "ARCHETYPE", + "min": 2, + "max": 2 + }, + "die_size": { + "value": 521, + "status": "COMPLETED", + "unit": "mm2", + "source": "Average value for all families", + "min": 41.2, + "max": 3640 + }, + "duration": { + "value": 35040, + "unit": "hours" + }, + "avg_power": { + "value": 364.46, + "status": "COMPLETED", + "unit": "W", + "min": 364.46, + "max": 364.46 + }, + "time_workload": { + "value": 50, + "status": "ARCHETYPE", + "unit": "%", + "min": 0, + "max": 100 + }, + "usage_location": { + "value": "EEE", + "status": "DEFAULT", + "unit": "CodSP3 - NCS Country Codes - NATO" + }, + "use_time_ratio": { + "value": 1, + "status": "ARCHETYPE", + "unit": "/1", + "min": 1, + "max": 1 + }, + "hours_life_time": { + "value": 35040, + "status": "COMPLETED", + "unit": "hours", + "source": "from device", + "min": 35040, + "max": 35040 + }, + "params": { + "value": { + "a": 171.2, + "b": 0.0354, + "c": 36.89, + "d": -10.13 + }, + "status": "ARCHETYPE" + }, + "gwp_factor": { + "value": 0.38, + "status": "DEFAULT", + "unit": "kg CO2eq/kWh", + "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", + "min": 0.023, + "max": 1.13161 + }, + "adp_factor": { + "value": 6.42317e-8, + "status": "DEFAULT", + "unit": "kg Sbeq/kWh", + "source": "ADEME Base IMPACTS ®", + "min": 1.324e-8, + "max": 2.65575e-7 + }, + "pe_factor": { + "value": 12.873, + "status": "DEFAULT", + "unit": "MJ/kWh", + "source": "ADPf / (1-%renewable_energy)", + "min": 0.013, + "max": 468.15 + } + }, + "RAM-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 490, + "min": 209.2, + "max": 1179, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 8000, + "min": 263.7, + "max": 36040 + } + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.026, + "min": 0.01523, + "max": 0.04916, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 0.0013, + "min": 0.0001518, + "max": 0.008457 + } + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 6000, + "min": 2651, + "max": 14720, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 300000, + "min": 149, + "max": 14910000, + "warnings": [ + "Uncertainty from technical characteristics is very important. Results should be interpreted with caution (see min and max values)" + ] + } + } + }, + "units": { + "value": 8, + "status": "ARCHETYPE", + "min": 6, + "max": 10 + }, + "capacity": { + "value": 32, + "status": "ARCHETYPE", + "unit": "GB", + "min": 32, + "max": 32 + }, + "density": { + "value": 1.2443636363636363, + "status": "COMPLETED", + "unit": "GB/cm2", + "source": "Average of 11 rows", + "min": 0.625, + "max": 2.375 + }, + "duration": { + "value": 35040, + "unit": "hours" + }, + "avg_power": { + "value": 72.704, + "status": "COMPLETED", + "unit": "W", + "min": 54.52799999999999, + "max": 90.88 + }, + "time_workload": { + "value": 50, + "status": "ARCHETYPE", + "unit": "%", + "min": 0, + "max": 100 + }, + "usage_location": { + "value": "EEE", + "status": "DEFAULT", + "unit": "CodSP3 - NCS Country Codes - NATO" + }, + "use_time_ratio": { + "value": 1, + "status": "ARCHETYPE", + "unit": "/1", + "min": 1, + "max": 1 + }, + "hours_life_time": { + "value": 35040, + "status": "COMPLETED", + "unit": "hours", + "source": "from device", + "min": 35040, + "max": 35040 + }, + "params": { + "value": { + "a": 9.088 + }, + "status": "COMPLETED", + "source": "(ram_electrical_factor_per_go : 0.284) * (ram_capacity: 32.0) " + }, + "gwp_factor": { + "value": 0.38, + "status": "DEFAULT", + "unit": "kg CO2eq/kWh", + "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", + "min": 0.023, + "max": 1.13161 + }, + "adp_factor": { + "value": 6.42317e-8, + "status": "DEFAULT", + "unit": "kg Sbeq/kWh", + "source": "ADEME Base IMPACTS ®", + "min": 1.324e-8, + "max": 2.65575e-7 + }, + "pe_factor": { + "value": 12.873, + "status": "DEFAULT", + "unit": "MJ/kWh", + "source": "ADPf / (1-%renewable_energy)", + "min": 0.013, + "max": 468.15 + } + }, + "SSD-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 50, + "min": 23.53, + "max": 281, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.0017, + "min": 0.001055, + "max": 0.008809, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 600, + "min": 290.2, + "max": 3483, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 2 + }, + "capacity": { + "value": 1000, + "status": "ARCHETYPE", + "unit": "GB", + "min": 1000, + "max": 1000 + }, + "density": { + "value": 54.8842105263158, + "status": "COMPLETED", + "unit": "GB/cm2", + "source": "Average of 19 rows", + "min": 16.4, + "max": 128 + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "POWER_SUPPLY-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 150, + "min": 48.6, + "max": 243, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.05, + "min": 0.0166, + "max": 0.083, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 2100, + "min": 704, + "max": 3520, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 2, + "status": "ARCHETYPE", + "min": 2, + "max": 2 + }, + "unit_weight": { + "value": 2.99, + "status": "ARCHETYPE", + "unit": "kg", + "min": 1, + "max": 5 + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "CASE-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 150, + "min": 85.9, + "max": 150, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.0202, + "min": 0.0202, + "max": 0.02767, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 2200, + "min": 1229, + "max": 2200, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 1 + }, + "case_type": { + "value": "rack", + "status": "ARCHETYPE" + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "MOTHERBOARD-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 66.1, + "min": 66.1, + "max": 66.1, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.00369, + "min": 0.00369, + "max": 0.00369, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 836, + "min": 836, + "max": 836, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 1 + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "avg_power": { + "value": 10.4062055, + "status": "INPUT", + "unit": "W" + }, + "usage_location": { + "value": "EEE", + "status": "INPUT", + "unit": "CodSP3 - NCS Country Codes - NATO" + }, + "use_time_ratio": { + "value": 1, + "status": "ARCHETYPE", + "unit": "/1", + "min": 1, + "max": 1 + }, + "hours_life_time": { + "value": 35040, + "status": "COMPLETED", + "unit": "hours", + "source": "from device", + "min": 35040, + "max": 35040 + }, + "gwp_factor": { + "value": 0.38, + "status": "COMPLETED", + "unit": "kg CO2eq/kWh", + "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", + "min": 0.38, + "max": 0.38 + }, + "adp_factor": { + "value": 6.42317e-8, + "status": "COMPLETED", + "unit": "kg Sbeq/kWh", + "source": "ADEME Base IMPACTS ®", + "min": 6.42317e-8, + "max": 6.42317e-8 + }, + "pe_factor": { + "value": 12.873, + "status": "COMPLETED", + "unit": "MJ/kWh", + "source": "ADPf / (1-%renewable_energy)", + "min": 12.873, + "max": 12.873 + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 1 + } + } + }, + "start_time": 1717500637.2979465, + "end_time": 1717504237.2979465, + "power_data": { + "raw_data": [ + { + "host": { + "consumption": 0, + "timestamp": 1717504204.5280154, + "components": { + "disks": [] + } + }, + "consumers": [], + "sockets": [] + }, + { + "host": { + "consumption": 20309356, + "timestamp": 1717504214.5485115, + "components": { + "disks": [ + { + "disk_type": "SSD", + "disk_mount_point": "/etc/hosts", + "disk_is_removable": false, + "disk_file_system": "ext4", + "disk_total_bytes": "250375106560", + "disk_available_bytes": "165655085056", + "disk_name": "/dev/nvme0n1p2" + } + ] + } + }, + "consumers": [ + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox", + "pid": 3099, + "resources_usage": { + "cpu_usage": "5.9772415", + "cpu_usage_unit": "%", + "memory_usage": "508436480", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 1213939.2, + "timestamp": 1717504214.5484614, + "container": null + }, + { + "exe": "/usr/bin/python3.9", + "cmdline": "/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000", + "pid": 176778, + "resources_usage": { + "cpu_usage": "5.3645115", + "cpu_usage_unit": "%", + "memory_usage": "131502080", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "751403008", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 1089497.6, + "timestamp": 1717504214.54841, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID58-isForBrowser-prefsLen32076-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{1e76e076-a55a-41cf-bf27-94855c01b247}3099truetab", + "pid": 101097, + "resources_usage": { + "cpu_usage": "2.813555", + "cpu_usage_unit": "%", + "memory_usage": "262508544", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 571414.9, + "timestamp": 1717504214.5484433, + "container": null + }, + { + "exe": "/usr/bin/gnome-shell", + "cmdline": "/usr/bin/gnome-shell", + "pid": 2063, + "resources_usage": { + "cpu_usage": "1.9507315", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 396181, + "timestamp": 1717504214.5483658, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen41490-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{87653da9-ac6d-4c8e-bd74-4723d5684bc9}3099truetab", + "pid": 3811, + "resources_usage": { + "cpu_usage": "0.887833", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 180313.16, + "timestamp": 1717504214.548356, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID152-isForBrowser-prefsLen32076-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{c4b6e702-62e0-4c2c-b312-b639f3da3c1c}3099truetab", + "pid": 173787, + "resources_usage": { + "cpu_usage": "0.52519697", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 106664.12, + "timestamp": 1717504214.5483842, + "container": null + }, + { + "exe": "/", + "cmdline": "runcinit", + "pid": 176900, + "resources_usage": { + "cpu_usage": "0.46267352", + "cpu_usage_unit": "%", + "memory_usage": "24141824", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 93966.01, + "timestamp": 1717504214.5483909, + "container": null + }, + { + "exe": "/usr/libexec/gnome-terminal-server", + "cmdline": "/usr/libexec/gnome-terminal-server", + "pid": 4836, + "resources_usage": { + "cpu_usage": "0.28760785", + "cpu_usage_unit": "%", + "memory_usage": "76136448", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 58411.3, + "timestamp": 1717504214.54837, + "container": null + }, + { + "exe": "/squashfs-root/usr/bin/nvim", + "cmdline": "/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.", + "pid": 96283, + "resources_usage": { + "cpu_usage": "0.21257971", + "cpu_usage_unit": "%", + "memory_usage": "227631104", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 43173.57, + "timestamp": 1717504214.548365, + "container": null + }, + { + "exe": "/usr/bin/ibus-daemon", + "cmdline": "/usr/bin/ibus-daemon--paneldisable", + "pid": 2598, + "resources_usage": { + "cpu_usage": "0.112542205", + "cpu_usage_unit": "%", + "memory_usage": "12480512", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 22856.596, + "timestamp": 1717504214.5483723, + "container": null + } + ], + "sockets": [ + { + "id": 0, + "consumption": 11652205, + "domains": [ + { + "name": "uncore", + "consumption": 180098, + "timestamp": 1717504214.530277 + }, + { + "name": "core", + "consumption": 8775168, + "timestamp": 1717504214.530263 + }, + { + "name": "dram", + "consumption": 1111438, + "timestamp": 1717504214.5302465 + } + ], + "timestamp": 1717504214.5299857 + } + ] + }, + { + "host": { + "consumption": 11439694, + "timestamp": 1717504224.6661015, + "components": { + "disks": [ + { + "disk_type": "SSD", + "disk_mount_point": "/etc/hosts", + "disk_is_removable": false, + "disk_file_system": "ext4", + "disk_total_bytes": "250375106560", + "disk_available_bytes": "165655097344", + "disk_name": "/dev/nvme0n1p2" + } + ] + } + }, + "consumers": [ + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox", + "pid": 3099, + "resources_usage": { + "cpu_usage": "5.2776732", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 603749.7, + "timestamp": 1717504224.6659212, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID152-isForBrowser-prefsLen32076-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{c4b6e702-62e0-4c2c-b312-b639f3da3c1c}3099truetab", + "pid": 173787, + "resources_usage": { + "cpu_usage": "3.1340103", + "cpu_usage_unit": "%", + "memory_usage": "174120960", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 358521.2, + "timestamp": 1717504224.6657825, + "container": null + }, + { + "exe": "/usr/bin/gnome-shell", + "cmdline": "/usr/bin/gnome-shell", + "pid": 2063, + "resources_usage": { + "cpu_usage": "2.5322802", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 289685.1, + "timestamp": 1717504224.665756, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID58-isForBrowser-prefsLen32076-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{1e76e076-a55a-41cf-bf27-94855c01b247}3099truetab", + "pid": 101097, + "resources_usage": { + "cpu_usage": "1.6547574", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 189299.19, + "timestamp": 1717504224.6658857, + "container": null + }, + { + "exe": "/squashfs-root/usr/bin/nvim", + "cmdline": "/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.", + "pid": 96283, + "resources_usage": { + "cpu_usage": "0.23818476", + "cpu_usage_unit": "%", + "memory_usage": "227631104", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 27247.607, + "timestamp": 1717504224.6657548, + "container": null + }, + { + "exe": "/usr/local/bin/scaphandre", + "cmdline": "/usr/local/bin/scaphandre--no-headerjson-s10--resources-f/app/data/power_data.json", + "pid": 176771, + "resources_usage": { + "cpu_usage": "0.1504325", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 17209.018, + "timestamp": 1717504224.6657345, + "container": null + }, + { + "exe": "/usr/libexec/gsd-media-keys", + "cmdline": "/usr/libexec/gsd-media-keys", + "pid": 2610, + "resources_usage": { + "cpu_usage": "0.06268021", + "cpu_usage_unit": "%", + "memory_usage": "27652096", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "887459840", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 7170.424, + "timestamp": 1717504224.665734, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen41490-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{87653da9-ac6d-4c8e-bd74-4723d5684bc9}3099truetab", + "pid": 3811, + "resources_usage": { + "cpu_usage": "0.050144166", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 5736.3394, + "timestamp": 1717504224.6657436, + "container": null + }, + { + "exe": "/usr/libexec/gnome-terminal-server", + "cmdline": "/usr/libexec/gnome-terminal-server", + "pid": 4836, + "resources_usage": { + "cpu_usage": "0.050144166", + "cpu_usage_unit": "%", + "memory_usage": "76136448", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "638849024", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 5736.3394, + "timestamp": 1717504224.6657631, + "container": null + }, + { + "exe": "/usr/bin/containerd", + "cmdline": "/usr/bin/containerd", + "pid": 699, + "resources_usage": { + "cpu_usage": "0.025072083", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 2868.1697, + "timestamp": 1717504224.6657722, + "container": null + } + ], + "sockets": [ + { + "id": 0, + "consumption": 4396806, + "domains": [ + { + "name": "uncore", + "consumption": 133312, + "timestamp": 1717504224.5596187 + }, + { + "name": "core", + "consumption": 1916276, + "timestamp": 1717504224.5595467 + }, + { + "name": "dram", + "consumption": 895722, + "timestamp": 1717504224.5594404 + } + ], + "timestamp": 1717504224.5583096 + } + ] + }, + { + "host": { + "consumption": 9875772, + "timestamp": 1717504234.7663224, + "components": { + "disks": [ + { + "disk_type": "SSD", + "disk_mount_point": "/etc/hosts", + "disk_is_removable": false, + "disk_file_system": "ext4", + "disk_total_bytes": "250375106560", + "disk_available_bytes": "165655089152", + "disk_name": "/dev/nvme0n1p2" + } + ] + } + }, + "consumers": [ + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox", + "pid": 3099, + "resources_usage": { + "cpu_usage": "2.9987452", + "cpu_usage_unit": "%", + "memory_usage": "508329984", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 296149.25, + "timestamp": 1717504234.76627, + "container": null + }, + { + "exe": "/usr/bin/gnome-shell", + "cmdline": "/usr/bin/gnome-shell", + "pid": 2063, + "resources_usage": { + "cpu_usage": "2.158093", + "cpu_usage_unit": "%", + "memory_usage": "308137984", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 213128.34, + "timestamp": 1717504234.7661667, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID58-isForBrowser-prefsLen32076-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{1e76e076-a55a-41cf-bf27-94855c01b247}3099truetab", + "pid": 101097, + "resources_usage": { + "cpu_usage": "1.7565873", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 173476.55, + "timestamp": 1717504234.7662466, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID152-isForBrowser-prefsLen32076-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{c4b6e702-62e0-4c2c-b312-b639f3da3c1c}3099truetab", + "pid": 173787, + "resources_usage": { + "cpu_usage": "1.4303639", + "cpu_usage_unit": "%", + "memory_usage": "164651008", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "2636976128", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 141259.48, + "timestamp": 1717504234.7661831, + "container": null + }, + { + "exe": "/usr/local/bin/scaphandre", + "cmdline": "/usr/local/bin/scaphandre--no-headerjson-s10--resources-f/app/data/power_data.json", + "pid": 176771, + "resources_usage": { + "cpu_usage": "0.22584693", + "cpu_usage_unit": "%", + "memory_usage": "33337344", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 22304.129, + "timestamp": 1717504234.766153, + "container": null + }, + { + "exe": "/squashfs-root/usr/bin/nvim", + "cmdline": "/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.", + "pid": 96283, + "resources_usage": { + "cpu_usage": "0.22584693", + "cpu_usage_unit": "%", + "memory_usage": "227631104", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 22304.129, + "timestamp": 1717504234.766166, + "container": null + }, + { + "exe": "/usr/libexec/gsd-media-keys", + "cmdline": "/usr/libexec/gsd-media-keys", + "pid": 2610, + "resources_usage": { + "cpu_usage": "0.06273526", + "cpu_usage_unit": "%", + "memory_usage": "27652096", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "887459840", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 6195.5913, + "timestamp": 1717504234.7661529, + "container": null + }, + { + "exe": "/usr/lib/systemd/systemd-oomd", + "cmdline": "/lib/systemd/systemd-oomd", + "pid": 460, + "resources_usage": { + "cpu_usage": "0.037641153", + "cpu_usage_unit": "%", + "memory_usage": "6680576", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 3717.3545, + "timestamp": 1717504234.7661595, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen41490-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{87653da9-ac6d-4c8e-bd74-4723d5684bc9}3099truetab", + "pid": 3811, + "resources_usage": { + "cpu_usage": "0.037641153", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 3717.3545, + "timestamp": 1717504234.7661598, + "container": null + }, + { + "exe": "/usr/bin/containerd", + "cmdline": "/usr/bin/containerd", + "pid": 699, + "resources_usage": { + "cpu_usage": "0.037641153", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 3717.3545, + "timestamp": 1717504234.7661762, + "container": null + } + ], + "sockets": [ + { + "id": 0, + "consumption": 3165101, + "domains": [ + { + "name": "uncore", + "consumption": 48247, + "timestamp": 1717504234.6836913 + }, + { + "name": "core", + "consumption": 878365, + "timestamp": 1717504234.6834612 + }, + { + "name": "dram", + "consumption": 776832, + "timestamp": 1717504234.6832268 + } + ], + "timestamp": 1717504234.6821008 + } + ] + } + ], + "avg_power": 10.4062055, + "warning": "The time window is lower than one hour, but the energy consumption estimate is in Watt.Hour. So this is an extrapolation of the power usage profile on one hour. Be careful with this data. " + } + }, + "electricity_carbon_intensity": { + "value": 0.38, + "description": "Carbon intensity of the electricity mix. Mix considered : EEE", + "type": "gauge", + "unit": "kg CO2eq / kWh", + "long_unit": "Kilograms CO2 equivalent per KiloWattHour" + } +} From 693b055bfc25b4f9ee1abf49affc9292d2d3b45a Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 4 Jun 2024 15:38:52 +0200 Subject: [PATCH 153/227] test: refactor to test process class --- tests/api/test_api_unit.py | 45 ++++++++++++++------------------------ 1 file changed, 17 insertions(+), 28 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index ccdc2e0..6287100 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -13,13 +13,9 @@ compute_average_consumption, get_power_data, get_metrics, - get_process_info, - get_total_ram_in_bytes, - get_process_ram_shares, - get_ram_embedded_impact_shares, ) from boagent.api.utils import format_prometheus_output - +from boagent.api.process import Process current_dir = os.path.dirname(__file__) mock_power_data = os.path.join(f"{current_dir}", "../mocks/power_data.json") @@ -486,6 +482,7 @@ def setUp(self): self.measure_power = False self.lifetime = 5.0 self.fetch_hardware = False + self.pid = 70335 with open(mock_boaviztapi_response_not_verbose, "r") as boaviztapi_data: self.boaviztapi_data = json.load(boaviztapi_data) @@ -493,6 +490,8 @@ def setUp(self): with open(mock_get_metrics_verbose) as get_metrics_verbose: self.get_metrics_verbose = json.load(get_metrics_verbose) + self.process = Process(mock_get_metrics_verbose, self.pid) + @patch("boagent.api.api.query_machine_impact_data") def test_get_total_embedded_impacts_for_host( self, mocked_query_machine_impact_data @@ -514,51 +513,41 @@ def test_get_total_embedded_impacts_for_host( assert "embedded_abiotic_resources_depletion" in total_embedded_impacts_host assert "embedded_primary_energy" in total_embedded_impacts_host - @patch( - "boagent.api.api.POWER_DATA_FILE_PATH", mock_formatted_scaphandre_with_processes - ) def test_get_process_info(self): - process_details = get_process_info(70335) + process_details = self.process.process_info for process in process_details: assert type(process) is dict assert type(process_details) is list def test_get_total_ram_in_bytes(self): - total_ram_in_bytes = get_total_ram_in_bytes() + total_ram_in_bytes = self.process.total_ram_in_bytes assert type(total_ram_in_bytes) is int - @patch( - "boagent.api.api.POWER_DATA_FILE_PATH", mock_formatted_scaphandre_with_processes - ) def test_get_process_ram_share_by_timestamp(self): - process_info = get_process_info(70335) - process_ram_shares = get_process_ram_shares(process_info, 8589934592) + process_ram_shares = self.process.ram_shares for ram_share in process_ram_shares: assert type(ram_share) is float assert type(process_ram_shares) is list - @patch( - "boagent.api.api.POWER_DATA_FILE_PATH", mock_formatted_scaphandre_with_processes - ) def test_get_embedded_impact_share_for_ram_by_timestamp(self): - host_ram_embedded_impacts = self.get_metrics_verbose["raw_data"][ - "boaviztapi_data" - ]["verbose"]["RAM-1"] - process_info = get_process_info(70335) - process_ram_shares = get_process_ram_shares(process_info, 8589934592) - embedded_impact_shares = get_ram_embedded_impact_shares( - host_ram_embedded_impacts, process_ram_shares - ) + embedded_impact_shares = self.process.ram_embedded_impact_shares for embedded_impact_share in embedded_impact_shares: - assert type(embedded_impact_share) is float + assert type(embedded_impact_share) is dict assert type(embedded_impact_shares) is list - assert False is True + + def test_get_process_cpu_load_shares_by_timestamp(self): + + process_cpu_load_shares = self.process.cpu_load_shares + + for cpu_load_share in process_cpu_load_shares: + assert type(cpu_load_share) is float + assert type(process_cpu_load_shares) is list loader = TestLoader() From 5a8f8ea9226afbe03630ae57652b6c1998079b51 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 4 Jun 2024 15:58:02 +0200 Subject: [PATCH 154/227] refactor: calculate abstract component embedded impact shares instead of specific component --- boagent/api/process.py | 56 +++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/boagent/api/process.py b/boagent/api/process.py index f04fae8..4089b57 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -9,8 +9,13 @@ def __init__(self, metrics_data, pid): self.process_info = self.get_process_info() self.total_ram_in_bytes = self.get_total_ram_in_bytes() self.ram_shares = self.get_ram_shares() - self.ram_embedded_impact_shares = self.get_ram_embedded_impact_shares() + self.ram_embedded_impact_shares = self.get_component_embedded_impact_shares( + "ram", self.ram_shares + ) self.cpu_load_shares = self.get_cpu_load_shares() + self.cpu_embedded_impact_shares = self.get_component_embedded_impact_shares( + "cpu", self.cpu_load_shares + ) def process_metrics(self): @@ -47,30 +52,6 @@ def get_ram_shares(self): return process_ram_shares - def get_ram_embedded_impact_shares(self): - - ram_impacts_data = self.processed_metrics["raw_data"]["boaviztapi_data"][ - "verbose" - ]["RAM-1"]["impacts"] - ram_embedded_impact_shares = list() - for impact in ram_impacts_data: - impact_embedded_value = ram_impacts_data[impact]["embedded"]["value"] - for process_ram_share in self.ram_shares: - if process_ram_share == 0.0: - ram_embedded_impact = { - f"{impact}_embedded_share": process_ram_share - } - ram_embedded_impact_shares.append(ram_embedded_impact) - else: - ram_embedded_impact_share = round( - impact_embedded_value * process_ram_share, 2 - ) - ram_embedded_impact = { - f"{impact}_embedded_share": ram_embedded_impact_share - } - ram_embedded_impact_shares.append(ram_embedded_impact) - return ram_embedded_impact_shares - def get_cpu_load_shares(self): process_cpu_load_shares = list() @@ -79,3 +60,28 @@ def get_cpu_load_shares(self): process_cpu_load_shares.append(process_cpu_load_share) return process_cpu_load_shares + + def get_component_embedded_impact_shares(self, queried_component, component_shares): + + component = f"{queried_component.upper()}-1" + component_impacts_data = self.processed_metrics["raw_data"]["boaviztapi_data"][ + "verbose" + ][component]["impacts"] + component_embedded_impact_shares = list() + for impact in component_impacts_data: + impact_embedded_value = component_impacts_data[impact]["embedded"]["value"] + for process_component_share in component_shares: + if process_component_share == 0.0: + component_embedded_impact = { + f"{impact}_embedded_share": process_component_share + } + component_embedded_impact_shares.append(component_embedded_impact) + else: + component_embedded_impact_share = round( + impact_embedded_value * process_component_share, 2 + ) + component_embedded_impact = { + f"{impact}_embedded_share": component_embedded_impact_share + } + component_embedded_impact_shares.append(component_embedded_impact) + return component_embedded_impact_shares From 2dc985e6980cca0075e9db10e3587a6334732f0f Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 4 Jun 2024 15:58:38 +0200 Subject: [PATCH 155/227] test: cpu embedded impact shares --- tests/api/test_api_unit.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 6287100..c12606a 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -535,11 +535,11 @@ def test_get_process_ram_share_by_timestamp(self): def test_get_embedded_impact_share_for_ram_by_timestamp(self): - embedded_impact_shares = self.process.ram_embedded_impact_shares + ram_embedded_impact_shares = self.process.ram_embedded_impact_shares - for embedded_impact_share in embedded_impact_shares: - assert type(embedded_impact_share) is dict - assert type(embedded_impact_shares) is list + for ram_embedded_impact_share in ram_embedded_impact_shares: + assert type(ram_embedded_impact_share) is dict + assert type(ram_embedded_impact_shares) is list def test_get_process_cpu_load_shares_by_timestamp(self): @@ -549,6 +549,14 @@ def test_get_process_cpu_load_shares_by_timestamp(self): assert type(cpu_load_share) is float assert type(process_cpu_load_shares) is list + def test_get_embedded_impact_share_for_cpu_by_timestamp(self): + + cpu_embedded_impact_shares = self.process.cpu_embedded_impact_shares + + for cpu_embedded_impact_share in cpu_embedded_impact_shares: + assert type(cpu_embedded_impact_share) is dict + assert type(cpu_embedded_impact_shares) is list + loader = TestLoader() suite = TestSuite() From a0359148097ce3f12004983e59f40a5a753091c1 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 4 Jun 2024 17:44:35 +0200 Subject: [PATCH 156/227] feat: WIP calculate average values for each impact for each component --- boagent/api/process.py | 48 +++++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/boagent/api/process.py b/boagent/api/process.py index 4089b57..de03fbe 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -10,11 +10,17 @@ def __init__(self, metrics_data, pid): self.total_ram_in_bytes = self.get_total_ram_in_bytes() self.ram_shares = self.get_ram_shares() self.ram_embedded_impact_shares = self.get_component_embedded_impact_shares( - "ram", self.ram_shares + "RAM", self.ram_shares ) self.cpu_load_shares = self.get_cpu_load_shares() self.cpu_embedded_impact_shares = self.get_component_embedded_impact_shares( - "cpu", self.cpu_load_shares + "CPU", self.cpu_load_shares + ) + self.cpu_average_embedded_impacts = self.get_component_average_embedded_impact( + "cpu" + ) + self.ram_average_embedded_impacts = self.get_component_average_embedded_impact( + "ram" ) def process_metrics(self): @@ -46,7 +52,8 @@ def get_ram_shares(self): process_ram_shares = list() for timestamp in self.process_info: process_ram_share = ( - int(timestamp["resources_usage"]["memory_usage"]) / self.total_ram_bytes + int(timestamp["resources_usage"]["memory_usage"]) + / self.total_ram_in_bytes ) process_ram_shares.append(process_ram_share) @@ -56,14 +63,14 @@ def get_cpu_load_shares(self): process_cpu_load_shares = list() for timestamp in self.process_info: - process_cpu_load_share = timestamp["resources_usage"]["cpu_usage"] + process_cpu_load_share = float(timestamp["resources_usage"]["cpu_usage"]) process_cpu_load_shares.append(process_cpu_load_share) return process_cpu_load_shares def get_component_embedded_impact_shares(self, queried_component, component_shares): - component = f"{queried_component.upper()}-1" + component = f"{queried_component}-1" component_impacts_data = self.processed_metrics["raw_data"]["boaviztapi_data"][ "verbose" ][component]["impacts"] @@ -73,15 +80,40 @@ def get_component_embedded_impact_shares(self, queried_component, component_shar for process_component_share in component_shares: if process_component_share == 0.0: component_embedded_impact = { - f"{impact}_embedded_share": process_component_share + f"{impact}_embedded_share": float(process_component_share) } component_embedded_impact_shares.append(component_embedded_impact) else: component_embedded_impact_share = round( - impact_embedded_value * process_component_share, 2 + float(impact_embedded_value) * float(process_component_share), 2 ) component_embedded_impact = { - f"{impact}_embedded_share": component_embedded_impact_share + f"{impact}_embedded_share": float( + component_embedded_impact_share + ) } component_embedded_impact_shares.append(component_embedded_impact) return component_embedded_impact_shares + + def get_component_average_embedded_impact(self, queried_component): + + embedded_impacts_sums = { + impact_criteria: sum( + impact_dictionary[impact_criteria] + for impact_dictionary in self.ram_embedded_impact_shares + if impact_criteria in impact_dictionary + ) + for impact_criteria in set( + impact_criteria + for impact_dictionary in self.ram_embedded_impact_shares + for impact_criteria in impact_dictionary + ) + } + + average_values = list() + for impact_criteria in embedded_impacts_sums: + average_result = embedded_impacts_sums[impact_criteria] / ( + len(self.ram_embedded_impact_shares) / 3 + ) + average_value = {f"{impact_criteria}_average": average_result} + average_values.append(average_value) From 746ce4266e331209aa86fe0daef7e9e7b6361f8f Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 4 Jun 2024 17:45:42 +0200 Subject: [PATCH 157/227] test: calculate average embedded impacts for component --- tests/api/test_api_unit.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index c12606a..5366339 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -482,7 +482,7 @@ def setUp(self): self.measure_power = False self.lifetime = 5.0 self.fetch_hardware = False - self.pid = 70335 + self.pid = 3099 with open(mock_boaviztapi_response_not_verbose, "r") as boaviztapi_data: self.boaviztapi_data = json.load(boaviztapi_data) @@ -528,9 +528,9 @@ def test_get_total_ram_in_bytes(self): def test_get_process_ram_share_by_timestamp(self): process_ram_shares = self.process.ram_shares - for ram_share in process_ram_shares: assert type(ram_share) is float + assert ram_share >= 0.0 assert type(process_ram_shares) is list def test_get_embedded_impact_share_for_ram_by_timestamp(self): @@ -539,6 +539,8 @@ def test_get_embedded_impact_share_for_ram_by_timestamp(self): for ram_embedded_impact_share in ram_embedded_impact_shares: assert type(ram_embedded_impact_share) is dict + for value in ram_embedded_impact_share: + assert type(ram_embedded_impact_share[value]) is float assert type(ram_embedded_impact_shares) is list def test_get_process_cpu_load_shares_by_timestamp(self): @@ -557,6 +559,14 @@ def test_get_embedded_impact_share_for_cpu_by_timestamp(self): assert type(cpu_embedded_impact_share) is dict assert type(cpu_embedded_impact_shares) is list + def test_get_average_embedded_impact_share_for_cpu_and_ram(self): + + cpu_average_embedded_impact = self.process.cpu_average_embedded_impacts + ram_average_embedded_impact = self.process.ram_average_embedded_impacts + + assert type(cpu_average_embedded_impact) is float + assert type(ram_average_embedded_impact) is float + loader = TestLoader() suite = TestSuite() From 5655945bc02da952f94b9110c4e795b412cc67a7 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 5 Jun 2024 12:08:26 +0200 Subject: [PATCH 158/227] refactor: calculate average for gwp, adp and pe criterias for queried_component --- boagent/api/process.py | 75 ++++++++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 32 deletions(-) diff --git a/boagent/api/process.py b/boagent/api/process.py index de03fbe..7b5c40a 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -1,4 +1,5 @@ import json +from collections import defaultdict class Process: @@ -54,9 +55,8 @@ def get_ram_shares(self): process_ram_share = ( int(timestamp["resources_usage"]["memory_usage"]) / self.total_ram_in_bytes - ) + ) * 100 process_ram_shares.append(process_ram_share) - return process_ram_shares def get_cpu_load_shares(self): @@ -65,7 +65,6 @@ def get_cpu_load_shares(self): for timestamp in self.process_info: process_cpu_load_share = float(timestamp["resources_usage"]["cpu_usage"]) process_cpu_load_shares.append(process_cpu_load_share) - return process_cpu_load_shares def get_component_embedded_impact_shares(self, queried_component, component_shares): @@ -79,41 +78,53 @@ def get_component_embedded_impact_shares(self, queried_component, component_shar impact_embedded_value = component_impacts_data[impact]["embedded"]["value"] for process_component_share in component_shares: if process_component_share == 0.0: - component_embedded_impact = { - f"{impact}_embedded_share": float(process_component_share) - } + component_embedded_impact = ( + f"{impact}_embedded_share", + float(process_component_share), + ) component_embedded_impact_shares.append(component_embedded_impact) else: - component_embedded_impact_share = round( - float(impact_embedded_value) * float(process_component_share), 2 + component_embedded_impact_share = ( + float(impact_embedded_value) * float(process_component_share) + ) / 100 + component_embedded_impact = ( + f"{impact}_embedded_share", + float(component_embedded_impact_share), ) - component_embedded_impact = { - f"{impact}_embedded_share": float( - component_embedded_impact_share - ) - } component_embedded_impact_shares.append(component_embedded_impact) return component_embedded_impact_shares def get_component_average_embedded_impact(self, queried_component): + gwp_list = defaultdict(list) + adp_list = defaultdict(list) + pe_list = defaultdict(list) + + if queried_component == "cpu": + component_impact_shares = self.cpu_embedded_impact_shares + if queried_component == "ram": + component_impact_shares = self.ram_embedded_impact_shares + + for impact_key, impact_value in component_impact_shares: + if impact_key == "gwp_embedded_share": + gwp_list[impact_key].append(impact_value) + if impact_key == "adp_embedded_share": + adp_list[impact_key].append(impact_value) + if impact_key == "pe_embedded_share": + pe_list[impact_key].append(impact_value) + + gwp_average = sum(gwp_list["gwp_embedded_share"]) / len( + gwp_list["gwp_embedded_share"] + ) + adp_average = sum(adp_list["adp_embedded_share"]) / len( + adp_list["adp_embedded_share"] + ) + pe_average = sum(pe_list["pe_embedded_share"]) / len( + pe_list["pe_embedded_share"] + ) - embedded_impacts_sums = { - impact_criteria: sum( - impact_dictionary[impact_criteria] - for impact_dictionary in self.ram_embedded_impact_shares - if impact_criteria in impact_dictionary - ) - for impact_criteria in set( - impact_criteria - for impact_dictionary in self.ram_embedded_impact_shares - for impact_criteria in impact_dictionary - ) + component_average_impacts = { + f"gwp_{queried_component}_average_impact": gwp_average, + f"adp_{queried_component}_average_impact": adp_average, + f"pe_{queried_component}_average_impact": pe_average, } - - average_values = list() - for impact_criteria in embedded_impacts_sums: - average_result = embedded_impacts_sums[impact_criteria] / ( - len(self.ram_embedded_impact_shares) / 3 - ) - average_value = {f"{impact_criteria}_average": average_result} - average_values.append(average_value) + return component_average_impacts From 94b88a90dcb3a59433cb8a98059e7f6f56277160 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 5 Jun 2024 12:09:34 +0200 Subject: [PATCH 159/227] test: average impact share for cpu and ram, rewrote a few assertions for previous tests --- tests/api/test_api_unit.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 5366339..185af7c 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -522,15 +522,18 @@ def test_get_process_info(self): def test_get_total_ram_in_bytes(self): + expected_ram_total = 8589934592 total_ram_in_bytes = self.process.total_ram_in_bytes assert type(total_ram_in_bytes) is int + self.assertEqual(total_ram_in_bytes, expected_ram_total) def test_get_process_ram_share_by_timestamp(self): + expected_ram_shares = [5.918979644775391, 0.0, 5.9177398681640625] process_ram_shares = self.process.ram_shares - for ram_share in process_ram_shares: + for index, ram_share in enumerate(process_ram_shares): assert type(ram_share) is float - assert ram_share >= 0.0 + self.assertEqual(ram_share, expected_ram_shares[index]) assert type(process_ram_shares) is list def test_get_embedded_impact_share_for_ram_by_timestamp(self): @@ -538,17 +541,19 @@ def test_get_embedded_impact_share_for_ram_by_timestamp(self): ram_embedded_impact_shares = self.process.ram_embedded_impact_shares for ram_embedded_impact_share in ram_embedded_impact_shares: - assert type(ram_embedded_impact_share) is dict + assert type(ram_embedded_impact_share) is tuple for value in ram_embedded_impact_share: - assert type(ram_embedded_impact_share[value]) is float + assert type(ram_embedded_impact_share[1]) is float assert type(ram_embedded_impact_shares) is list def test_get_process_cpu_load_shares_by_timestamp(self): + expected_cpu_load_shares = [5.9772415, 5.2776732, 2.9987452] process_cpu_load_shares = self.process.cpu_load_shares - for cpu_load_share in process_cpu_load_shares: + for index, cpu_load_share in enumerate(process_cpu_load_shares): assert type(cpu_load_share) is float + self.assertEqual(cpu_load_share, expected_cpu_load_shares[index]) assert type(process_cpu_load_shares) is list def test_get_embedded_impact_share_for_cpu_by_timestamp(self): @@ -556,16 +561,20 @@ def test_get_embedded_impact_share_for_cpu_by_timestamp(self): cpu_embedded_impact_shares = self.process.cpu_embedded_impact_shares for cpu_embedded_impact_share in cpu_embedded_impact_shares: - assert type(cpu_embedded_impact_share) is dict + assert type(cpu_embedded_impact_share) is tuple assert type(cpu_embedded_impact_shares) is list def test_get_average_embedded_impact_share_for_cpu_and_ram(self): - cpu_average_embedded_impact = self.process.cpu_average_embedded_impacts - ram_average_embedded_impact = self.process.ram_average_embedded_impacts + impact_criterias = ["gwp", "adp", "pe"] + cpu_average_embedded_impacts = self.process.cpu_average_embedded_impacts + ram_average_embedded_impacts = self.process.ram_average_embedded_impacts - assert type(cpu_average_embedded_impact) is float - assert type(ram_average_embedded_impact) is float + assert type(cpu_average_embedded_impacts) is dict + assert type(ram_average_embedded_impacts) is dict + for criteria in impact_criterias: + assert f"{criteria}_cpu_average_impact" in cpu_average_embedded_impacts + assert f"{criteria}_ram_average_impact" in ram_average_embedded_impacts loader = TestLoader() From 150908f7d2bed4a12f909108416493ad558c61f9 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 5 Jun 2024 16:11:34 +0200 Subject: [PATCH 160/227] feat: get max and min in addition of average values, refactored a few functions with list comprehensions --- boagent/api/process.py | 83 +++++++++++++++++++++++++----------------- 1 file changed, 49 insertions(+), 34 deletions(-) diff --git a/boagent/api/process.py b/boagent/api/process.py index 7b5c40a..764772f 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -1,4 +1,4 @@ -import json +from json import load from collections import defaultdict @@ -8,26 +8,14 @@ def __init__(self, metrics_data, pid): self.pid = pid self.processed_metrics = self.process_metrics() self.process_info = self.get_process_info() - self.total_ram_in_bytes = self.get_total_ram_in_bytes() + self.process_name = self.get_process_name() self.ram_shares = self.get_ram_shares() - self.ram_embedded_impact_shares = self.get_component_embedded_impact_shares( - "RAM", self.ram_shares - ) self.cpu_load_shares = self.get_cpu_load_shares() - self.cpu_embedded_impact_shares = self.get_component_embedded_impact_shares( - "CPU", self.cpu_load_shares - ) - self.cpu_average_embedded_impacts = self.get_component_average_embedded_impact( - "cpu" - ) - self.ram_average_embedded_impacts = self.get_component_average_embedded_impact( - "ram" - ) def process_metrics(self): with open(self.metrics_data, "r") as metrics_data_file: - metrics_data = json.load(metrics_data_file) + metrics_data = load(metrics_data_file) return metrics_data @@ -40,6 +28,10 @@ def get_process_info(self): process_info.append(process) return process_info + def get_process_name(self): + process_name = self.process_info[0]["exe"].split("/")[-1] + return process_name + def get_total_ram_in_bytes(self): ram_data = self.processed_metrics["raw_data"]["hardware_data"]["rams"] @@ -50,21 +42,26 @@ def get_total_ram_in_bytes(self): return total_ram_in_bytes def get_ram_shares(self): - process_ram_shares = list() - for timestamp in self.process_info: - process_ram_share = ( - int(timestamp["resources_usage"]["memory_usage"]) - / self.total_ram_in_bytes - ) * 100 - process_ram_shares.append(process_ram_share) + + process_ram_shares = [ + ( + ( + int(timestamp["resources_usage"]["memory_usage"]) + / self.get_total_ram_in_bytes() + ) + * 100 + ) + for timestamp in self.process_info + ] + return process_ram_shares def get_cpu_load_shares(self): - process_cpu_load_shares = list() - for timestamp in self.process_info: - process_cpu_load_share = float(timestamp["resources_usage"]["cpu_usage"]) - process_cpu_load_shares.append(process_cpu_load_share) + process_cpu_load_shares = [ + float(timestamp["resources_usage"]["cpu_usage"]) + for timestamp in self.process_info + ] return process_cpu_load_shares def get_component_embedded_impact_shares(self, queried_component, component_shares): @@ -94,16 +91,20 @@ def get_component_embedded_impact_shares(self, queried_component, component_shar component_embedded_impact_shares.append(component_embedded_impact) return component_embedded_impact_shares - def get_component_average_embedded_impact(self, queried_component): + def get_component_embedded_impact_values(self, queried_component): + if queried_component == "cpu": + component_impact_shares = self.get_component_embedded_impact_shares( + "CPU", self.cpu_load_shares + ) + if queried_component == "ram": + component_impact_shares = self.get_component_embedded_impact_shares( + "RAM", self.ram_shares + ) + gwp_list = defaultdict(list) adp_list = defaultdict(list) pe_list = defaultdict(list) - if queried_component == "cpu": - component_impact_shares = self.cpu_embedded_impact_shares - if queried_component == "ram": - component_impact_shares = self.ram_embedded_impact_shares - for impact_key, impact_value in component_impact_shares: if impact_key == "gwp_embedded_share": gwp_list[impact_key].append(impact_value) @@ -122,9 +123,23 @@ def get_component_average_embedded_impact(self, queried_component): pe_list["pe_embedded_share"] ) - component_average_impacts = { + gwp_max = max(gwp_list["gwp_embedded_share"]) + adp_max = max(adp_list["adp_embedded_share"]) + pe_max = max(pe_list["pe_embedded_share"]) + + gwp_min = min(gwp_list["gwp_embedded_share"]) + adp_min = min(adp_list["adp_embedded_share"]) + pe_min = min(pe_list["pe_embedded_share"]) + + component_embedded_impact_values = { f"gwp_{queried_component}_average_impact": gwp_average, f"adp_{queried_component}_average_impact": adp_average, f"pe_{queried_component}_average_impact": pe_average, + f"gwp_{queried_component}_max_impact": gwp_max, + f"adp_{queried_component}_max_impact": adp_max, + f"pe_{queried_component}_max_impact": pe_max, + f"gwp_{queried_component}_min_impact": gwp_min, + f"adp_{queried_component}_min_impact": adp_min, + f"pe_{queried_component}_min_impact": pe_min, } - return component_average_impacts + return component_embedded_impact_values From 64cd6dc37bb3d36847e8d9f80040f1f65dea4edc Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 5 Jun 2024 16:12:44 +0200 Subject: [PATCH 161/227] test: avg, min and max embedded impacts for cpu and ram, call process methods instead of attributes for some tests --- tests/api/test_api_unit.py | 39 ++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 185af7c..ff602a9 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -520,10 +520,17 @@ def test_get_process_info(self): assert type(process) is dict assert type(process_details) is list + def test_get_process_name(self): + + expected_process_name = "firefox" + process_name = self.process.get_process_name() + + self.assertEqual(expected_process_name, process_name) + def test_get_total_ram_in_bytes(self): expected_ram_total = 8589934592 - total_ram_in_bytes = self.process.total_ram_in_bytes + total_ram_in_bytes = self.process.get_total_ram_in_bytes() assert type(total_ram_in_bytes) is int self.assertEqual(total_ram_in_bytes, expected_ram_total) @@ -538,7 +545,9 @@ def test_get_process_ram_share_by_timestamp(self): def test_get_embedded_impact_share_for_ram_by_timestamp(self): - ram_embedded_impact_shares = self.process.ram_embedded_impact_shares + ram_embedded_impact_shares = self.process.get_component_embedded_impact_shares( + "RAM", self.process.ram_shares + ) for ram_embedded_impact_share in ram_embedded_impact_shares: assert type(ram_embedded_impact_share) is tuple @@ -558,23 +567,33 @@ def test_get_process_cpu_load_shares_by_timestamp(self): def test_get_embedded_impact_share_for_cpu_by_timestamp(self): - cpu_embedded_impact_shares = self.process.cpu_embedded_impact_shares + cpu_embedded_impact_shares = self.process.get_component_embedded_impact_shares( + "CPU", self.process.cpu_load_shares + ) for cpu_embedded_impact_share in cpu_embedded_impact_shares: assert type(cpu_embedded_impact_share) is tuple assert type(cpu_embedded_impact_shares) is list - def test_get_average_embedded_impact_share_for_cpu_and_ram(self): + def test_get_avg_min_max_embedded_impact_shares_for_cpu_and_ram(self): impact_criterias = ["gwp", "adp", "pe"] - cpu_average_embedded_impacts = self.process.cpu_average_embedded_impacts - ram_average_embedded_impacts = self.process.ram_average_embedded_impacts + cpu_embedded_impact_values = self.process.get_component_embedded_impact_values( + "cpu" + ) + ram_embedded_impact_values = self.process.get_component_embedded_impact_values( + "ram" + ) - assert type(cpu_average_embedded_impacts) is dict - assert type(ram_average_embedded_impacts) is dict + assert type(cpu_embedded_impact_values) is dict + assert type(ram_embedded_impact_values) is dict for criteria in impact_criterias: - assert f"{criteria}_cpu_average_impact" in cpu_average_embedded_impacts - assert f"{criteria}_ram_average_impact" in ram_average_embedded_impacts + assert f"{criteria}_cpu_average_impact" in cpu_embedded_impact_values + assert f"{criteria}_cpu_max_impact" in cpu_embedded_impact_values + assert f"{criteria}_cpu_min_impact" in cpu_embedded_impact_values + assert f"{criteria}_ram_average_impact" in ram_embedded_impact_values + assert f"{criteria}_ram_max_impact" in ram_embedded_impact_values + assert f"{criteria}_ram_min_impact" in ram_embedded_impact_values loader = TestLoader() From 5fdb961554db6f3255f57df6ca20684af56c4ee9 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 5 Jun 2024 17:50:36 +0200 Subject: [PATCH 162/227] feat: WIP process_id validation in Process class for error handling --- boagent/api/api.py | 29 ++++++++++++++++++----------- boagent/api/process.py | 5 ++++- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 08eb83a..3463030 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -24,6 +24,7 @@ ) from .config import Settings +from .process import Process from .database import ( get_session, @@ -283,7 +284,7 @@ async def process_embedded_impacts( fetch_hardware: bool = True, ): - boaviztapi_data = get_metrics( + metrics_data = get_metrics( iso8601_or_timestamp_as_timestamp(start_time), iso8601_or_timestamp_as_timestamp(end_time), verbose, @@ -292,17 +293,23 @@ async def process_embedded_impacts( lifetime, fetch_hardware, ) + try: + queried_process = Process(metrics_data, process_id) + except Exception as error: + print(error) + else: + process_cpu_embedded_impact_values = ( + queried_process.get_component_embedded_impact_values("cpu") + ) + process_ram_embedded_impact_values = ( + queried_process.get_component_embedded_impact_values("ram") + ) - gwp_impact = boaviztapi_data["embedded_emissions"]["value"] - adp_impact = boaviztapi_data["embedded_abiotic_resources_depletion"]["value"] - pe_impact = boaviztapi_data["embedded_primary_energy"]["value"] - host_impacts = { - "host_gwp_impact": gwp_impact, - "host_adp_impact": adp_impact, - "host_pe_impact": pe_impact, - } - - return host_impacts + process_embedded_impact_values = [ + process_cpu_embedded_impact_values, + process_ram_embedded_impact_values, + ] + return process_embedded_impact_values @app.get("/last_info") diff --git a/boagent/api/process.py b/boagent/api/process.py index 764772f..b3ad28b 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -7,6 +7,7 @@ def __init__(self, metrics_data, pid): self.metrics_data = metrics_data self.pid = pid self.processed_metrics = self.process_metrics() + self.validated_pid = self.validate_pid() self.process_info = self.get_process_info() self.process_name = self.get_process_name() self.ram_shares = self.get_ram_shares() @@ -16,9 +17,11 @@ def process_metrics(self): with open(self.metrics_data, "r") as metrics_data_file: metrics_data = load(metrics_data_file) - return metrics_data + def validate_pid(self): + pass + def get_process_info(self): process_info = list() From bea9557de14f1c396fea0f6f67f92087966f87f2 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 5 Jun 2024 17:51:17 +0200 Subject: [PATCH 163/227] test: success and error handling for process_embedded_impacts route --- tests/api/test_api_integration.py | 40 ++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/tests/api/test_api_integration.py b/tests/api/test_api_integration.py index e3679a5..df18e9e 100644 --- a/tests/api/test_api_integration.py +++ b/tests/api/test_api_integration.py @@ -35,6 +35,10 @@ client = TestClient(app) +mock_get_metrics_verbose = os.path.join( + f"{current_dir}", "../mocks/get_metrics_verbose.json" +) + class ApiEndpointsTest(TestCase): def setUp(self): @@ -192,11 +196,41 @@ def test_read_query_with_measure_power_and_fetch_hardware_verbose( assert response.status_code == 200 @patch("boagent.api.api.get_metrics") - def test_read_process_embedded_impacts(self, mocked_get_metrics): - mocked_get_metrics.return_value = self.get_metrics_not_verbose - response = client.get("/process_embedded_impacts") + def test_get_process_embedded_impacts_with_success(self, mocked_get_metrics): + mocked_get_metrics.return_value = mock_get_metrics_verbose + params = { + "process_id": 3099, + "start_time": "1717500637.2979465", + "end_time": "1717504237.2979465", + "verbose": "true", + "location": "FRA", + "measure_power": "true", + "lifetime": 5, + "fetch_hardware": "true", + } + response = client.get("/process_embedded_impacts", params=params) assert response.status_code == 200 + @patch("boagent.api.api.get_metrics") + def test_get_process_embedded_impacts_with_error_if_pid_not_found_in_metrics_data( + self, mocked_get_metrics + ): + + mocked_get_metrics.return_value = mock_get_metrics_verbose + params = { + "process_id": 1234, + "start_time": "1717500637.2979465", + "end_time": "1717504237.2979465", + "verbose": "true", + "location": "FRA", + "measure_power": "true", + "lifetime": 5, + "fetch_hardware": "true", + } + + response = client.get("/process_embedded_impacts", params=params) + assert response.status_code == 400 + def test_read_yearly_embedded(self): response = client.get("/yearly_embedded") assert response.status_code == 200 From bcac79c2df08ccb80c57405b5113cdbd73cb87d3 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 5 Jun 2024 17:51:58 +0200 Subject: [PATCH 164/227] test: WIP validate PID error handling --- tests/api/test_api_unit.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index ff602a9..82a113e 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -527,6 +527,15 @@ def test_get_process_name(self): self.assertEqual(expected_process_name, process_name) + def test_validate_pid(self): + + self.process = Process(mock_get_metrics_verbose, 1234) + with self.assertRaises(Exception) as context_manager: + self.process.validate_pid() + + exception = context_manager.exception + print(exception) + def test_get_total_ram_in_bytes(self): expected_ram_total = 8589934592 From 6d8483ae49bc3dab73364cbdb8d907475d3a27f8 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 6 Jun 2024 16:39:56 +0200 Subject: [PATCH 165/227] feat: validating PID, refactored get_process_info --- boagent/api/process.py | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/boagent/api/process.py b/boagent/api/process.py index b3ad28b..9c5ef4c 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -1,5 +1,6 @@ from json import load from collections import defaultdict +from .exceptions import InvalidPIDException class Process: @@ -20,15 +21,34 @@ def process_metrics(self): return metrics_data def validate_pid(self): - pass + timestamps = [ + timestamp + for timestamp in self.processed_metrics["raw_data"]["power_data"][ + "raw_data" + ] + ] + consumers = [timestamp["consumers"] for timestamp in timestamps] + pids = [process["pid"] for consumer in consumers for process in consumer] + if self.pid not in pids: + raise InvalidPIDException(self.pid) + else: + return True def get_process_info(self): - process_info = list() - for timestamp in self.processed_metrics["raw_data"]["power_data"]["raw_data"]: - for process in timestamp["consumers"]: - if process["pid"] == self.pid: - process_info.append(process) + timestamps = [ + timestamp + for timestamp in self.processed_metrics["raw_data"]["power_data"][ + "raw_data" + ] + ] + consumers = [timestamp["consumers"] for timestamp in timestamps] + process_info = [ + process + for consumer in consumers + for process in consumer + if process["pid"] == self.pid + ] return process_info def get_process_name(self): From 834ab703096482e30fcb715733bf865f6b0d0da5 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 6 Jun 2024 16:40:20 +0200 Subject: [PATCH 166/227] feat: create invalid process_id exception --- boagent/api/exceptions.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 boagent/api/exceptions.py diff --git a/boagent/api/exceptions.py b/boagent/api/exceptions.py new file mode 100644 index 0000000..9681544 --- /dev/null +++ b/boagent/api/exceptions.py @@ -0,0 +1,5 @@ +class InvalidPIDException(Exception): + def __init__(self, pid): + self.pid = pid + self.message = f"Process_id {self.pid} has not been found in metrics data. Check the queried PID" + super().__init__(self.message) From e7930d8d2fcf561ce53c98e05dabf2d6dad64746 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 6 Jun 2024 16:40:53 +0200 Subject: [PATCH 167/227] test: check invalid pid exception and message --- tests/api/test_api_unit.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 82a113e..323f9cc 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -15,7 +15,7 @@ get_metrics, ) from boagent.api.utils import format_prometheus_output -from boagent.api.process import Process +from boagent.api.process import Process, InvalidPIDException current_dir = os.path.dirname(__file__) mock_power_data = os.path.join(f"{current_dir}", "../mocks/power_data.json") @@ -527,14 +527,16 @@ def test_get_process_name(self): self.assertEqual(expected_process_name, process_name) - def test_validate_pid(self): + def test_validate_pid_with_error_if_process_id_not_in_metrics(self): - self.process = Process(mock_get_metrics_verbose, 1234) - with self.assertRaises(Exception) as context_manager: - self.process.validate_pid() + expected_error_message = ( + "Process_id 1234 has not been found in metrics data. Check the queried PID" + ) + + with self.assertRaises(InvalidPIDException) as context_manager: + self.process = Process(mock_get_metrics_verbose, 1234) - exception = context_manager.exception - print(exception) + self.assertEqual(context_manager.exception.message, expected_error_message) def test_get_total_ram_in_bytes(self): From 7106d400371e7b25353ae546a3a856dfdbc83224 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 10 Jun 2024 10:57:55 +0200 Subject: [PATCH 168/227] test: add assertion to check response content for process_embedded_impacts route with invalid pid --- tests/api/test_api_integration.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/api/test_api_integration.py b/tests/api/test_api_integration.py index df18e9e..a2f7a8e 100644 --- a/tests/api/test_api_integration.py +++ b/tests/api/test_api_integration.py @@ -230,6 +230,10 @@ def test_get_process_embedded_impacts_with_error_if_pid_not_found_in_metrics_dat response = client.get("/process_embedded_impacts", params=params) assert response.status_code == 400 + assert ( + response.text + == "Process_id 1234 has not been found in metrics data. Check the queried PID" + ) def test_read_yearly_embedded(self): response = client.get("/yearly_embedded") From 5799077f3d73f0b7c799f49006e0a6e3b7a44ef2 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 10 Jun 2024 11:00:26 +0200 Subject: [PATCH 169/227] refactor: pids as set to only have unique values and not iterate through whole list of pids --- boagent/api/process.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/boagent/api/process.py b/boagent/api/process.py index 9c5ef4c..9bc1aa7 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -28,11 +28,11 @@ def validate_pid(self): ] ] consumers = [timestamp["consumers"] for timestamp in timestamps] - pids = [process["pid"] for consumer in consumers for process in consumer] - if self.pid not in pids: - raise InvalidPIDException(self.pid) - else: + pids = set([process["pid"] for consumer in consumers for process in consumer]) + if self.pid in pids: return True + else: + raise InvalidPIDException(self.pid) def get_process_info(self): From 591dd1540779bf6253c437e6de078b939b7beed5 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 10 Jun 2024 11:01:06 +0200 Subject: [PATCH 170/227] feat: process_embedded_impacts response with invalid pid --- boagent/api/api.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 3463030..27ef529 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -14,6 +14,7 @@ from fastapi.responses import HTMLResponse from boaviztapi_sdk.api.server_api import ServerApi from boaviztapi_sdk.models.server import Server +from boagent.api.exceptions import InvalidPIDException from boagent.hardware.lshw import Lshw from .utils import ( iso8601_or_timestamp_as_timestamp, @@ -295,8 +296,8 @@ async def process_embedded_impacts( ) try: queried_process = Process(metrics_data, process_id) - except Exception as error: - print(error) + except InvalidPIDException as invalid_pid: + return Response(status_code=400, content=invalid_pid.message) else: process_cpu_embedded_impact_values = ( queried_process.get_component_embedded_impact_values("cpu") From f5f7036d280cf2145a2a6aecb5b7eddc603f68ed Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 10 Jun 2024 11:02:16 +0200 Subject: [PATCH 171/227] test: assertions to check data in process_details --- tests/api/test_api_unit.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 323f9cc..53276e7 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -518,6 +518,10 @@ def test_get_process_info(self): process_details = self.process.process_info for process in process_details: assert type(process) is dict + self.assertEqual(process["pid"], 3099) + self.assertEqual( + process["exe"], "/snap/firefox/4336/usr/lib/firefox/firefox" + ) assert type(process_details) is list def test_get_process_name(self): From eac077fd4b9643df107f7a19930f2fffd5483bf1 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 10 Jun 2024 11:19:49 +0200 Subject: [PATCH 172/227] doc: document parameters for process_embedded_impacts route --- boagent/api/api.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 27ef529..6cd996b 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -223,7 +223,7 @@ async def query( verbose: Get detailled metrics with extra information.\n location: Country code to configure the local electricity grid to take into account.\n measure_power: Get electricity consumption metrics from Scaphandre or not.\n - lifetime: Full lifetime of the machine to consider.\n + lifetime: Full lifetime of the machine to evaluate.\n fetch_hardware: Regenerate hardware.json file with current machine hardware or not.\n """ return get_metrics( @@ -256,7 +256,7 @@ async def query_with_time_workload( verbose: Get detailled metrics with extra information.\n location: Country code to configure the local electricity grid to take into account.\n measure_power: Get electricity consumption metrics from Scaphandre or not.\n - lifetime: Full lifetime of the machine to consider.\n + lifetime: Full lifetime of the machine to evaluate.\n fetch_hardware: Regenerate hardware.json file with current machine hardware or not.\n time_workload: Workload percentage for CPU and RAM. Can be a float or a list of dictionaries with format {"time_percentage": float, "load_percentage": float} @@ -278,12 +278,20 @@ async def process_embedded_impacts( process_id: int = 0, start_time: str = "0.0", end_time: str = "0.0", - verbose: bool = True, location: str = "EEE", - measure_power: bool = True, lifetime: float = DEFAULT_LIFETIME, - fetch_hardware: bool = True, ): + """ + process_id: The process ID queried to be evaluated for embedded impacts for each available component. + start_time: Start time for evaluation. Accepts either UNIX Timestamp or ISO8601 date format. \n + end_time: End time for evaluation. Accepts either UNIX Timestamp or ISO8601 date format. \n + location: Country code to configure the local electricity grid to take into account.\n + lifetime: Full lifetime of the machine to evaluate.\n + """ + + verbose = True + measure_power = True + fetch_hardware = True metrics_data = get_metrics( iso8601_or_timestamp_as_timestamp(start_time), From 8f26a25c783921dd99fce205da731708988f6516 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 12 Jun 2024 14:19:40 +0200 Subject: [PATCH 173/227] fix: error handling when invalid component is queried --- boagent/api/process.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/boagent/api/process.py b/boagent/api/process.py index 9bc1aa7..8f97ca6 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -119,10 +119,12 @@ def get_component_embedded_impact_values(self, queried_component): component_impact_shares = self.get_component_embedded_impact_shares( "CPU", self.cpu_load_shares ) - if queried_component == "ram": + elif queried_component == "ram": component_impact_shares = self.get_component_embedded_impact_shares( "RAM", self.ram_shares ) + else: + return "Queried component is not available for evaluation." gwp_list = defaultdict(list) adp_list = defaultdict(list) From bc3afde641608c02e04929cc67ca6ab1f7d40326 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 12 Jun 2024 14:20:38 +0200 Subject: [PATCH 174/227] test: assertions to check data in process_embedded_impacts response --- tests/api/test_api_integration.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/api/test_api_integration.py b/tests/api/test_api_integration.py index a2f7a8e..91bb87e 100644 --- a/tests/api/test_api_integration.py +++ b/tests/api/test_api_integration.py @@ -210,6 +210,8 @@ def test_get_process_embedded_impacts_with_success(self, mocked_get_metrics): } response = client.get("/process_embedded_impacts", params=params) assert response.status_code == 200 + self.assertIn("process_cpu_embedded_impact_values", response.json()) + self.assertIn("process_ram_embedded_impact_values", response.json()) @patch("boagent.api.api.get_metrics") def test_get_process_embedded_impacts_with_error_if_pid_not_found_in_metrics_data( From decacaa40e97dc7de4a729f5966e8779e9ab6e64 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 12 Jun 2024 17:49:18 +0200 Subject: [PATCH 175/227] feat: return json content for process_embedded_impacts --- boagent/api/api.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 6cd996b..e8079dd 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -314,11 +314,12 @@ async def process_embedded_impacts( queried_process.get_component_embedded_impact_values("ram") ) - process_embedded_impact_values = [ - process_cpu_embedded_impact_values, - process_ram_embedded_impact_values, - ] - return process_embedded_impact_values + process_embedded_impact_values = { + "process_cpu_embedded_impact_values": process_cpu_embedded_impact_values, + "process_ram_embedded_impact_values": process_ram_embedded_impact_values, + } + json_content = json.dumps(process_embedded_impact_values) + return Response(status_code=200, content=json_content) @app.get("/last_info") From c4bfb61d775bdf937f98d3901f04dc777aa01df4 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 12 Jun 2024 17:50:17 +0200 Subject: [PATCH 176/227] feat: WIP get ssd embedded impacts through 219M . --- boagent/api/process.py | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/boagent/api/process.py b/boagent/api/process.py index 8f97ca6..10faee6 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -1,5 +1,6 @@ from json import load from collections import defaultdict +from subprocess import getoutput from .exceptions import InvalidPIDException @@ -11,8 +12,11 @@ def __init__(self, metrics_data, pid): self.validated_pid = self.validate_pid() self.process_info = self.get_process_info() self.process_name = self.get_process_name() + self.process_exe = self.get_process_exe() + self.disk_usage = self.get_process_disk_usage() self.ram_shares = self.get_ram_shares() self.cpu_load_shares = self.get_cpu_load_shares() + self.storage_share = self.get_process_storage_share() def process_metrics(self): @@ -55,6 +59,10 @@ def get_process_name(self): process_name = self.process_info[0]["exe"].split("/")[-1] return process_name + def get_process_exe(self): + process_exe = self.process_info[0]["exe"] + return process_exe + def get_total_ram_in_bytes(self): ram_data = self.processed_metrics["raw_data"]["hardware_data"]["rams"] @@ -87,6 +95,41 @@ def get_cpu_load_shares(self): ] return process_cpu_load_shares + def get_process_disk_usage(self): + + process_directory = self.process_exe.rsplit("/", 1)[0] + process_disk_usage = getoutput(f"du -hs {process_directory}").split()[0] + return process_disk_usage + + def get_process_storage_share(self): + + disks_total_size_in_bytes = ( + self.processed_metrics["raw_data"]["hardware_data"]["disks"][0]["capacity"] + * 1073741824 + ) + process_disk_space_unit = self.disk_usage[-1] + process_disk_space_size = self.disk_usage[:-1] + + if process_disk_space_unit == "K": + formatted_process_size = float(process_disk_space_size.replace(",", ".")) + process_storage_share = ( + (formatted_process_size * 1024) / disks_total_size_in_bytes * 100 + ) + return [process_storage_share] + elif process_disk_space_unit == "M": + process_storage_share = ( + (int(process_disk_space_size) * 1048576) + / disks_total_size_in_bytes + * 100 + ) + return [process_storage_share] + elif process_disk_space_unit == "G": + formatted_process_size = float(process_disk_space_size.replace(",", ".")) + process_storage_share = ( + (formatted_process_size * 1073741824) / disks_total_size_in_bytes * 100 + ) + return [process_storage_share] + def get_component_embedded_impact_shares(self, queried_component, component_shares): component = f"{queried_component}-1" @@ -123,6 +166,10 @@ def get_component_embedded_impact_values(self, queried_component): component_impact_shares = self.get_component_embedded_impact_shares( "RAM", self.ram_shares ) + elif queried_component == "ssd": + component_impact_shares = self.get_component_embedded_impact_shares( + "SSD", self.storage_share + ) else: return "Queried component is not available for evaluation." From 10efcc927f1d8d26b58caf917a9e9e9b5838b2c0 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 12 Jun 2024 18:10:47 +0200 Subject: [PATCH 177/227] test: process exe, process disk usage, process ssd embedded impact --- tests/api/test_api_unit.py | 54 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 53276e7..447be34 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -531,6 +531,13 @@ def test_get_process_name(self): self.assertEqual(expected_process_name, process_name) + def test_get_process_exe(self): + + expected_process_exe = "/snap/firefox/4336/usr/lib/firefox/firefox" + process_exe = self.process.get_process_exe() + + self.assertEqual(expected_process_exe, process_exe) + def test_validate_pid_with_error_if_process_id_not_in_metrics(self): expected_error_message = ( @@ -558,6 +565,32 @@ def test_get_process_ram_share_by_timestamp(self): self.assertEqual(ram_share, expected_ram_shares[index]) assert type(process_ram_shares) is list + def test_get_process_storage_share_with_process_storage_size_in_megabytes(self): + + # Firefox snap directory occupies 383M according to `du -hs` + # Total disk storage in bytes, for reference = 255550554112 + + expected_storage_share = [0.15715270483193278] + process_storage_share = self.process.storage_share + assert type(process_storage_share) is list + self.assertEqual(process_storage_share, expected_storage_share) + + def test_get_process_storage_share_with_process_storage_size_in_gigabytes(self): + + with patch.object(self.process, "disk_usage", "1,2G"): + expected_storage_share = [0.5042016806722689] + process_storage_share = self.process.get_process_storage_share() + assert type(process_storage_share) is list + self.assertEqual(process_storage_share, expected_storage_share) + + def test_get_process_storage_share_with_process_storage_size_in_kilobytes(self): + + with patch.object(self.process, "disk_usage", "7,3K"): + expected_storage_share = [2.9251355083048842e-06] + process_storage_share = self.process.get_process_storage_share() + assert type(process_storage_share) is list + self.assertEqual(process_storage_share, expected_storage_share) + def test_get_embedded_impact_share_for_ram_by_timestamp(self): ram_embedded_impact_shares = self.process.get_component_embedded_impact_shares( @@ -610,6 +643,27 @@ def test_get_avg_min_max_embedded_impact_shares_for_cpu_and_ram(self): assert f"{criteria}_ram_max_impact" in ram_embedded_impact_values assert f"{criteria}_ram_min_impact" in ram_embedded_impact_values + def test_get_embedded_impact_values_with_error_if_invalid_component_queried(self): + + invalid_component_queried = self.process.get_component_embedded_impact_values( + "invalid_component" + ) + assert ( + invalid_component_queried + == "Queried component is not available for evaluation." + ) + + def test_get_embedded_impact_values_for_ssd(self): + + impact_criterias = ["gwp", "adp", "pe"] + storage_embedded_impact_values = ( + self.process.get_component_embedded_impact_values("ssd") + ) + + assert type(storage_embedded_impact_values) is dict + for criteria in impact_criterias: + assert f"{criteria}_ssd_average_impact" in storage_embedded_impact_values + loader = TestLoader() suite = TestSuite() From 101258f3c65327823239ee82d00ecea89c18b30e Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 19 Jun 2024 14:43:18 +0200 Subject: [PATCH 178/227] refactor: setting process class properties with decorators --- boagent/api/process.py | 55 +++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/boagent/api/process.py b/boagent/api/process.py index 10faee6..9460b30 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -5,26 +5,24 @@ class Process: - def __init__(self, metrics_data, pid): - self.metrics_data = metrics_data - self.pid = pid - self.processed_metrics = self.process_metrics() - self.validated_pid = self.validate_pid() + def __init__(self, metrics_file_path, pid): + self.metrics_file_path = metrics_file_path + self.validate_pid(pid) + self._pid = pid self.process_info = self.get_process_info() - self.process_name = self.get_process_name() - self.process_exe = self.get_process_exe() self.disk_usage = self.get_process_disk_usage() - self.ram_shares = self.get_ram_shares() - self.cpu_load_shares = self.get_cpu_load_shares() self.storage_share = self.get_process_storage_share() - def process_metrics(self): + @property + def processed_metrics(self): + """The metrics in JSON format parsed from the metrics file path.""" - with open(self.metrics_data, "r") as metrics_data_file: - metrics_data = load(metrics_data_file) - return metrics_data + with open(self.metrics_file_path, "r") as metrics_data_file: + processed_metrics = load(metrics_data_file) + return processed_metrics + + def validate_pid(self, value): - def validate_pid(self): timestamps = [ timestamp for timestamp in self.processed_metrics["raw_data"]["power_data"][ @@ -33,10 +31,19 @@ def validate_pid(self): ] consumers = [timestamp["consumers"] for timestamp in timestamps] pids = set([process["pid"] for consumer in consumers for process in consumer]) - if self.pid in pids: - return True + if value in pids: + return value else: - raise InvalidPIDException(self.pid) + raise InvalidPIDException(value) + + @property + def pid(self, pid): + """The PID queried in data coming from Scaphandre.""" + return self._pid + + @pid.setter + def pid(self, value): + self._pid = self.validate_pid(value) def get_process_info(self): @@ -51,15 +58,17 @@ def get_process_info(self): process for consumer in consumers for process in consumer - if process["pid"] == self.pid + if process["pid"] == self._pid ] return process_info - def get_process_name(self): + @property + def process_name(self): process_name = self.process_info[0]["exe"].split("/")[-1] return process_name - def get_process_exe(self): + @property + def process_exe(self): process_exe = self.process_info[0]["exe"] return process_exe @@ -72,7 +81,8 @@ def get_total_ram_in_bytes(self): return total_ram_in_bytes - def get_ram_shares(self): + @property + def ram_shares(self): process_ram_shares = [ ( @@ -87,7 +97,8 @@ def get_ram_shares(self): return process_ram_shares - def get_cpu_load_shares(self): + @property + def cpu_load_shares(self): process_cpu_load_shares = [ float(timestamp["resources_usage"]["cpu_usage"]) From 7aed87ba29db1a9f683af7206970227d19ce3ac0 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 19 Jun 2024 14:44:30 +0200 Subject: [PATCH 179/227] test: process name and exe as attributes, assertions for process pid as attribute --- tests/api/test_api_unit.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 447be34..9d32190 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -527,14 +527,14 @@ def test_get_process_info(self): def test_get_process_name(self): expected_process_name = "firefox" - process_name = self.process.get_process_name() + process_name = self.process.process_name self.assertEqual(expected_process_name, process_name) def test_get_process_exe(self): expected_process_exe = "/snap/firefox/4336/usr/lib/firefox/firefox" - process_exe = self.process.get_process_exe() + process_exe = self.process.process_exe self.assertEqual(expected_process_exe, process_exe) @@ -549,6 +549,11 @@ def test_validate_pid_with_error_if_process_id_not_in_metrics(self): self.assertEqual(context_manager.exception.message, expected_error_message) + with self.assertRaises(InvalidPIDException) as context_manager: + self.process.pid = 1234 + + self.assertEqual(context_manager.exception.message, expected_error_message) + def test_get_total_ram_in_bytes(self): expected_ram_total = 8589934592 From 2de42c905285de228d1576c18bc8bdfc8750b50a Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 19 Jun 2024 17:44:37 +0200 Subject: [PATCH 180/227] config: install poetry --- poetry.lock | 1068 ++++++++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 28 ++ 2 files changed, 1096 insertions(+) create mode 100644 poetry.lock create mode 100644 pyproject.toml diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..3214cfc --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1068 @@ +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + +[[package]] +name = "anyio" +version = "4.4.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, + {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] + +[[package]] +name = "boaviztapi-sdk" +version = "1.2.4" +description = "BOAVIZTAPI - DEMO" +optional = false +python-versions = "^3.7" +files = [ + {file = "boaviztapi-sdk-1.2.4.tar.gz", hash = "sha256:614d56ca421d697ab0c1429643c2e60e2e48909c79ce45b7f5b20f4ff5cd7f64"}, +] + +[package.dependencies] +pydantic = ">=2" +python-dateutil = ">=2.8.2" +typing-extensions = ">=4.7.1" +urllib3 = ">=1.25.3" + +[[package]] +name = "certifi" +version = "2024.6.2" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, + {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, +] + +[[package]] +name = "cfgv" +version = "3.4.0" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "croniter" +version = "1.4.1" +description = "croniter provides iteration for datetime object with cron like format" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "croniter-1.4.1-py2.py3-none-any.whl", hash = "sha256:9595da48af37ea06ec3a9f899738f1b2c1c13da3c38cea606ef7cd03ea421128"}, + {file = "croniter-1.4.1.tar.gz", hash = "sha256:1a6df60eacec3b7a0aa52a8f2ef251ae3dd2a7c7c8b9874e73e791636d55a361"}, +] + +[package.dependencies] +python-dateutil = "*" + +[[package]] +name = "distlib" +version = "0.3.8" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, + {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.2.1" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, + {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "fastapi" +version = "0.110.3" +description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fastapi-0.110.3-py3-none-any.whl", hash = "sha256:fd7600612f755e4050beb74001310b5a7e1796d149c2ee363124abdfa0289d32"}, + {file = "fastapi-0.110.3.tar.gz", hash = "sha256:555700b0159379e94fdbfc6bb66a0f1c43f4cf7060f25239af3d84b63a656626"}, +] + +[package.dependencies] +pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" +starlette = ">=0.37.2,<0.38.0" +typing-extensions = ">=4.8.0" + +[package.extras] +all = ["email_validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] + +[[package]] +name = "filelock" +version = "3.15.1" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.15.1-py3-none-any.whl", hash = "sha256:71b3102950e91dfc1bb4209b64be4dc8854f40e5f534428d8684f953ac847fac"}, + {file = "filelock-3.15.1.tar.gz", hash = "sha256:58a2549afdf9e02e10720eaa4d4470f56386d7a6f72edd7d0596337af8ed7ad8"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] + +[[package]] +name = "greenlet" +version = "3.0.3" +description = "Lightweight in-process concurrent programming" +optional = false +python-versions = ">=3.7" +files = [ + {file = "greenlet-3.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dca1e2f3ca00b84a396bc1bce13dd21f680f035314d2379c4160c98153b2059b"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ed7fb269f15dc662787f4119ec300ad0702fa1b19d2135a37c2c4de6fadfd4a"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd4f49ae60e10adbc94b45c0b5e6a179acc1736cf7a90160b404076ee283cf83"}, + {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73a411ef564e0e097dbe7e866bb2dda0f027e072b04da387282b02c308807405"}, + {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7f362975f2d179f9e26928c5b517524e89dd48530a0202570d55ad6ca5d8a56f"}, + {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:649dde7de1a5eceb258f9cb00bdf50e978c9db1b996964cd80703614c86495eb"}, + {file = "greenlet-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:68834da854554926fbedd38c76e60c4a2e3198c6fbed520b106a8986445caaf9"}, + {file = "greenlet-3.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b1b5667cced97081bf57b8fa1d6bfca67814b0afd38208d52538316e9422fc61"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52f59dd9c96ad2fc0d5724107444f76eb20aaccb675bf825df6435acb7703559"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afaff6cf5200befd5cec055b07d1c0a5a06c040fe5ad148abcd11ba6ab9b114e"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2797aa5aedac23af156bbb5a6aa2cd3427ada2972c828244eb7d1b9255846379"}, + {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7f009caad047246ed379e1c4dbcb8b020f0a390667ea74d2387be2998f58a22"}, + {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c5e1536de2aad7bf62e27baf79225d0d64360d4168cf2e6becb91baf1ed074f3"}, + {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:894393ce10ceac937e56ec00bb71c4c2f8209ad516e96033e4b3b1de270e200d"}, + {file = "greenlet-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:1ea188d4f49089fc6fb283845ab18a2518d279c7cd9da1065d7a84e991748728"}, + {file = "greenlet-3.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149e94a2dd82d19838fe4b2259f1b6b9957d5ba1b25640d2380bea9c5df37676"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15d79dd26056573940fcb8c7413d84118086f2ec1a8acdfa854631084393efcc"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b7db1ebff4ba09aaaeae6aa491daeb226c8150fc20e836ad00041bcb11230"}, + {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf"}, + {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1f672519db1796ca0d8753f9e78ec02355e862d0998193038c7073045899f305"}, + {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2516a9957eed41dd8f1ec0c604f1cdc86758b587d964668b5b196a9db5bfcde6"}, + {file = "greenlet-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:bba5387a6975598857d86de9eac14210a49d554a77eb8261cc68b7d082f78ce2"}, + {file = "greenlet-3.0.3-cp37-cp37m-macosx_11_0_universal2.whl", hash = "sha256:5b51e85cb5ceda94e79d019ed36b35386e8c37d22f07d6a751cb659b180d5274"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daf3cb43b7cf2ba96d614252ce1684c1bccee6b2183a01328c98d36fcd7d5cb0"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99bf650dc5d69546e076f413a87481ee1d2d09aaaaaca058c9251b6d8c14783f"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dd6e660effd852586b6a8478a1d244b8dc90ab5b1321751d2ea15deb49ed414"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3391d1e16e2a5a1507d83e4a8b100f4ee626e8eca43cf2cadb543de69827c4c"}, + {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1f145462f1fa6e4a4ae3c0f782e580ce44d57c8f2c7aae1b6fa88c0b2efdb41"}, + {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1a7191e42732df52cb5f39d3527217e7ab73cae2cb3694d241e18f53d84ea9a7"}, + {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6"}, + {file = "greenlet-3.0.3-cp37-cp37m-win32.whl", hash = "sha256:b542be2440edc2d48547b5923c408cbe0fc94afb9f18741faa6ae970dbcb9b6d"}, + {file = "greenlet-3.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67"}, + {file = "greenlet-3.0.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1996cb9306c8595335bb157d133daf5cf9f693ef413e7673cb07e3e5871379ca"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc0f794e6ad661e321caa8d2f0a55ce01213c74722587256fb6566049a8b04"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9db1c18f0eaad2f804728c67d6c610778456e3e1cc4ab4bbd5eeb8e6053c6fc"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7170375bcc99f1a2fbd9c306f5be8764eaf3ac6b5cb968862cad4c7057756506"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b66c9c1e7ccabad3a7d037b2bcb740122a7b17a53734b7d72a344ce39882a1b"}, + {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:098d86f528c855ead3479afe84b49242e174ed262456c342d70fc7f972bc13c4"}, + {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:81bb9c6d52e8321f09c3d165b2a78c680506d9af285bfccbad9fb7ad5a5da3e5"}, + {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da"}, + {file = "greenlet-3.0.3-cp38-cp38-win32.whl", hash = "sha256:d46677c85c5ba00a9cb6f7a00b2bfa6f812192d2c9f7d9c4f6a55b60216712f3"}, + {file = "greenlet-3.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:419b386f84949bf0e7c73e6032e3457b82a787c1ab4a0e43732898a761cc9dbf"}, + {file = "greenlet-3.0.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:da70d4d51c8b306bb7a031d5cff6cc25ad253affe89b70352af5f1cb68e74b53"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d73a9fe764d77f87f8ec26a0c85144d6a951a6c438dfe50487df5595c6373eac"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7dcbe92cc99f08c8dd11f930de4d99ef756c3591a5377d1d9cd7dd5e896da71"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1551a8195c0d4a68fac7a4325efac0d541b48def35feb49d803674ac32582f61"}, + {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64d7675ad83578e3fc149b617a444fab8efdafc9385471f868eb5ff83e446b8b"}, + {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b37eef18ea55f2ffd8f00ff8fe7c8d3818abd3e25fb73fae2ca3b672e333a7a6"}, + {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:77457465d89b8263bca14759d7c1684df840b6811b2499838cc5b040a8b5b113"}, + {file = "greenlet-3.0.3-cp39-cp39-win32.whl", hash = "sha256:57e8974f23e47dac22b83436bdcf23080ade568ce77df33159e019d161ce1d1e"}, + {file = "greenlet-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c5ee858cfe08f34712f548c3c363e807e7186f03ad7a5039ebadb29e8c6be067"}, + {file = "greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491"}, +] + +[package.extras] +docs = ["Sphinx", "furo"] +test = ["objgraph", "psutil"] + +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "identify" +version = "2.5.36" +description = "File identification library for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, + {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.7" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "nodeenv" +version = "1.9.1" +description = "Node.js virtual environment builder" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, +] + +[[package]] +name = "numpy" +version = "2.0.0" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-2.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:04494f6ec467ccb5369d1808570ae55f6ed9b5809d7f035059000a37b8d7e86f"}, + {file = "numpy-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2635dbd200c2d6faf2ef9a0d04f0ecc6b13b3cad54f7c67c61155138835515d2"}, + {file = "numpy-2.0.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:0a43f0974d501842866cc83471bdb0116ba0dffdbaac33ec05e6afed5b615238"}, + {file = "numpy-2.0.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:8d83bb187fb647643bd56e1ae43f273c7f4dbcdf94550d7938cfc32566756514"}, + {file = "numpy-2.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79e843d186c8fb1b102bef3e2bc35ef81160ffef3194646a7fdd6a73c6b97196"}, + {file = "numpy-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d7696c615765091cc5093f76fd1fa069870304beaccfd58b5dcc69e55ef49c1"}, + {file = "numpy-2.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b4c76e3d4c56f145d41b7b6751255feefae92edbc9a61e1758a98204200f30fc"}, + {file = "numpy-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:acd3a644e4807e73b4e1867b769fbf1ce8c5d80e7caaef0d90dcdc640dfc9787"}, + {file = "numpy-2.0.0-cp310-cp310-win32.whl", hash = "sha256:cee6cc0584f71adefe2c908856ccc98702baf95ff80092e4ca46061538a2ba98"}, + {file = "numpy-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:ed08d2703b5972ec736451b818c2eb9da80d66c3e84aed1deeb0c345fefe461b"}, + {file = "numpy-2.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad0c86f3455fbd0de6c31a3056eb822fc939f81b1618f10ff3406971893b62a5"}, + {file = "numpy-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7f387600d424f91576af20518334df3d97bc76a300a755f9a8d6e4f5cadd289"}, + {file = "numpy-2.0.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:34f003cb88b1ba38cb9a9a4a3161c1604973d7f9d5552c38bc2f04f829536609"}, + {file = "numpy-2.0.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:b6f6a8f45d0313db07d6d1d37bd0b112f887e1369758a5419c0370ba915b3871"}, + {file = "numpy-2.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f64641b42b2429f56ee08b4f427a4d2daf916ec59686061de751a55aafa22e4"}, + {file = "numpy-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7039a136017eaa92c1848152827e1424701532ca8e8967fe480fe1569dae581"}, + {file = "numpy-2.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:46e161722e0f619749d1cd892167039015b2c2817296104487cd03ed4a955995"}, + {file = "numpy-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0e50842b2295ba8414c8c1d9d957083d5dfe9e16828b37de883f51fc53c4016f"}, + {file = "numpy-2.0.0-cp311-cp311-win32.whl", hash = "sha256:2ce46fd0b8a0c947ae047d222f7136fc4d55538741373107574271bc00e20e8f"}, + {file = "numpy-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd6acc766814ea6443628f4e6751d0da6593dae29c08c0b2606164db026970c"}, + {file = "numpy-2.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:354f373279768fa5a584bac997de6a6c9bc535c482592d7a813bb0c09be6c76f"}, + {file = "numpy-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4d2f62e55a4cd9c58c1d9a1c9edaedcd857a73cb6fda875bf79093f9d9086f85"}, + {file = "numpy-2.0.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:1e72728e7501a450288fc8e1f9ebc73d90cfd4671ebbd631f3e7857c39bd16f2"}, + {file = "numpy-2.0.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:84554fc53daa8f6abf8e8a66e076aff6ece62de68523d9f665f32d2fc50fd66e"}, + {file = "numpy-2.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c73aafd1afca80afecb22718f8700b40ac7cab927b8abab3c3e337d70e10e5a2"}, + {file = "numpy-2.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49d9f7d256fbc804391a7f72d4a617302b1afac1112fac19b6c6cec63fe7fe8a"}, + {file = "numpy-2.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0ec84b9ba0654f3b962802edc91424331f423dcf5d5f926676e0150789cb3d95"}, + {file = "numpy-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:feff59f27338135776f6d4e2ec7aeeac5d5f7a08a83e80869121ef8164b74af9"}, + {file = "numpy-2.0.0-cp312-cp312-win32.whl", hash = "sha256:c5a59996dc61835133b56a32ebe4ef3740ea5bc19b3983ac60cc32be5a665d54"}, + {file = "numpy-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:a356364941fb0593bb899a1076b92dfa2029f6f5b8ba88a14fd0984aaf76d0df"}, + {file = "numpy-2.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e61155fae27570692ad1d327e81c6cf27d535a5d7ef97648a17d922224b216de"}, + {file = "numpy-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4554eb96f0fd263041baf16cf0881b3f5dafae7a59b1049acb9540c4d57bc8cb"}, + {file = "numpy-2.0.0-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:903703372d46bce88b6920a0cd86c3ad82dae2dbef157b5fc01b70ea1cfc430f"}, + {file = "numpy-2.0.0-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:3e8e01233d57639b2e30966c63d36fcea099d17c53bf424d77f088b0f4babd86"}, + {file = "numpy-2.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cde1753efe513705a0c6d28f5884e22bdc30438bf0085c5c486cdaff40cd67a"}, + {file = "numpy-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:821eedb7165ead9eebdb569986968b541f9908979c2da8a4967ecac4439bae3d"}, + {file = "numpy-2.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a1712c015831da583b21c5bfe15e8684137097969c6d22e8316ba66b5baabe4"}, + {file = "numpy-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9c27f0946a3536403efb0e1c28def1ae6730a72cd0d5878db38824855e3afc44"}, + {file = "numpy-2.0.0-cp39-cp39-win32.whl", hash = "sha256:63b92c512d9dbcc37f9d81b123dec99fdb318ba38c8059afc78086fe73820275"}, + {file = "numpy-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:3f6bed7f840d44c08ebdb73b1825282b801799e325bcbdfa6bc5c370e5aecc65"}, + {file = "numpy-2.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9416a5c2e92ace094e9f0082c5fd473502c91651fb896bc17690d6fc475128d6"}, + {file = "numpy-2.0.0-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:17067d097ed036636fa79f6a869ac26df7db1ba22039d962422506640314933a"}, + {file = "numpy-2.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ecb5b0582cd125f67a629072fed6f83562d9dd04d7e03256c9829bdec027ad"}, + {file = "numpy-2.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cef04d068f5fb0518a77857953193b6bb94809a806bd0a14983a8f12ada060c9"}, + {file = "numpy-2.0.0.tar.gz", hash = "sha256:cf5d1c9e6837f8af9f92b6bd3e86d513cdc11f60fd62185cc49ec7d1aba34864"}, +] + +[[package]] +name = "packaging" +version = "24.1" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, +] + +[[package]] +name = "pandas" +version = "2.2.2" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, + {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, + {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, + {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, + {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, + {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, + {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.7" + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] + +[[package]] +name = "platformdirs" +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pre-commit" +version = "3.7.1" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.9" +files = [ + {file = "pre_commit-3.7.1-py2.py3-none-any.whl", hash = "sha256:fae36fd1d7ad7d6a5a1c0b0d5adb2ed1a3bda5a21bf6c3e5372073d7a11cd4c5"}, + {file = "pre_commit-3.7.1.tar.gz", hash = "sha256:8ca3ad567bc78a4972a3f1a477e94a79d4597e8140a6e0b651c5e33899c3654a"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "pydantic" +version = "2.7.4" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic-2.7.4-py3-none-any.whl", hash = "sha256:ee8538d41ccb9c0a9ad3e0e5f07bf15ed8015b481ced539a1759d8cc89ae90d0"}, + {file = "pydantic-2.7.4.tar.gz", hash = "sha256:0c84efd9548d545f63ac0060c1e4d39bb9b14db8b3c0652338aecc07b5adec52"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +pydantic-core = "2.18.4" +typing-extensions = ">=4.6.1" + +[package.extras] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.18.4" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_core-2.18.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f76d0ad001edd426b92233d45c746fd08f467d56100fd8f30e9ace4b005266e4"}, + {file = "pydantic_core-2.18.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:59ff3e89f4eaf14050c8022011862df275b552caef8082e37b542b066ce1ff26"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a55b5b16c839df1070bc113c1f7f94a0af4433fcfa1b41799ce7606e5c79ce0a"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4d0dcc59664fcb8974b356fe0a18a672d6d7cf9f54746c05f43275fc48636851"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8951eee36c57cd128f779e641e21eb40bc5073eb28b2d23f33eb0ef14ffb3f5d"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4701b19f7e3a06ea655513f7938de6f108123bf7c86bbebb1196eb9bd35cf724"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00a3f196329e08e43d99b79b286d60ce46bed10f2280d25a1718399457e06be"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:97736815b9cc893b2b7f663628e63f436018b75f44854c8027040e05230eeddb"}, + {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6891a2ae0e8692679c07728819b6e2b822fb30ca7445f67bbf6509b25a96332c"}, + {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bc4ff9805858bd54d1a20efff925ccd89c9d2e7cf4986144b30802bf78091c3e"}, + {file = "pydantic_core-2.18.4-cp310-none-win32.whl", hash = "sha256:1b4de2e51bbcb61fdebd0ab86ef28062704f62c82bbf4addc4e37fa4b00b7cbc"}, + {file = "pydantic_core-2.18.4-cp310-none-win_amd64.whl", hash = "sha256:6a750aec7bf431517a9fd78cb93c97b9b0c496090fee84a47a0d23668976b4b0"}, + {file = "pydantic_core-2.18.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:942ba11e7dfb66dc70f9ae66b33452f51ac7bb90676da39a7345e99ffb55402d"}, + {file = "pydantic_core-2.18.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2ebef0e0b4454320274f5e83a41844c63438fdc874ea40a8b5b4ecb7693f1c4"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a642295cd0c8df1b86fc3dced1d067874c353a188dc8e0f744626d49e9aa51c4"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f09baa656c904807e832cf9cce799c6460c450c4ad80803517032da0cd062e2"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98906207f29bc2c459ff64fa007afd10a8c8ac080f7e4d5beff4c97086a3dabd"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19894b95aacfa98e7cb093cd7881a0c76f55731efad31073db4521e2b6ff5b7d"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fbbdc827fe5e42e4d196c746b890b3d72876bdbf160b0eafe9f0334525119c8"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f85d05aa0918283cf29a30b547b4df2fbb56b45b135f9e35b6807cb28bc47951"}, + {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e85637bc8fe81ddb73fda9e56bab24560bdddfa98aa64f87aaa4e4b6730c23d2"}, + {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2f5966897e5461f818e136b8451d0551a2e77259eb0f73a837027b47dc95dab9"}, + {file = "pydantic_core-2.18.4-cp311-none-win32.whl", hash = "sha256:44c7486a4228413c317952e9d89598bcdfb06399735e49e0f8df643e1ccd0558"}, + {file = "pydantic_core-2.18.4-cp311-none-win_amd64.whl", hash = "sha256:8a7164fe2005d03c64fd3b85649891cd4953a8de53107940bf272500ba8a788b"}, + {file = "pydantic_core-2.18.4-cp311-none-win_arm64.whl", hash = "sha256:4e99bc050fe65c450344421017f98298a97cefc18c53bb2f7b3531eb39bc7805"}, + {file = "pydantic_core-2.18.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6f5c4d41b2771c730ea1c34e458e781b18cc668d194958e0112455fff4e402b2"}, + {file = "pydantic_core-2.18.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2fdf2156aa3d017fddf8aea5adfba9f777db1d6022d392b682d2a8329e087cef"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4748321b5078216070b151d5271ef3e7cc905ab170bbfd27d5c83ee3ec436695"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847a35c4d58721c5dc3dba599878ebbdfd96784f3fb8bb2c356e123bdcd73f34"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c40d4eaad41f78e3bbda31b89edc46a3f3dc6e171bf0ecf097ff7a0ffff7cb1"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:21a5e440dbe315ab9825fcd459b8814bb92b27c974cbc23c3e8baa2b76890077"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01dd777215e2aa86dfd664daed5957704b769e726626393438f9c87690ce78c3"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4b06beb3b3f1479d32befd1f3079cc47b34fa2da62457cdf6c963393340b56e9"}, + {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:564d7922e4b13a16b98772441879fcdcbe82ff50daa622d681dd682175ea918c"}, + {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0eb2a4f660fcd8e2b1c90ad566db2b98d7f3f4717c64fe0a83e0adb39766d5b8"}, + {file = "pydantic_core-2.18.4-cp312-none-win32.whl", hash = "sha256:8b8bab4c97248095ae0c4455b5a1cd1cdd96e4e4769306ab19dda135ea4cdb07"}, + {file = "pydantic_core-2.18.4-cp312-none-win_amd64.whl", hash = "sha256:14601cdb733d741b8958224030e2bfe21a4a881fb3dd6fbb21f071cabd48fa0a"}, + {file = "pydantic_core-2.18.4-cp312-none-win_arm64.whl", hash = "sha256:c1322d7dd74713dcc157a2b7898a564ab091ca6c58302d5c7b4c07296e3fd00f"}, + {file = "pydantic_core-2.18.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:823be1deb01793da05ecb0484d6c9e20baebb39bd42b5d72636ae9cf8350dbd2"}, + {file = "pydantic_core-2.18.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ebef0dd9bf9b812bf75bda96743f2a6c5734a02092ae7f721c048d156d5fabae"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae1d6df168efb88d7d522664693607b80b4080be6750c913eefb77e34c12c71a"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9899c94762343f2cc2fc64c13e7cae4c3cc65cdfc87dd810a31654c9b7358cc"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99457f184ad90235cfe8461c4d70ab7dd2680e28821c29eca00252ba90308c78"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18f469a3d2a2fdafe99296a87e8a4c37748b5080a26b806a707f25a902c040a8"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7cdf28938ac6b8b49ae5e92f2735056a7ba99c9b110a474473fd71185c1af5d"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:938cb21650855054dc54dfd9120a851c974f95450f00683399006aa6e8abb057"}, + {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:44cd83ab6a51da80fb5adbd9560e26018e2ac7826f9626bc06ca3dc074cd198b"}, + {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:972658f4a72d02b8abfa2581d92d59f59897d2e9f7e708fdabe922f9087773af"}, + {file = "pydantic_core-2.18.4-cp38-none-win32.whl", hash = "sha256:1d886dc848e60cb7666f771e406acae54ab279b9f1e4143babc9c2258213daa2"}, + {file = "pydantic_core-2.18.4-cp38-none-win_amd64.whl", hash = "sha256:bb4462bd43c2460774914b8525f79b00f8f407c945d50881568f294c1d9b4443"}, + {file = "pydantic_core-2.18.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:44a688331d4a4e2129140a8118479443bd6f1905231138971372fcde37e43528"}, + {file = "pydantic_core-2.18.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a2fdd81edd64342c85ac7cf2753ccae0b79bf2dfa063785503cb85a7d3593223"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86110d7e1907ab36691f80b33eb2da87d780f4739ae773e5fc83fb272f88825f"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46387e38bd641b3ee5ce247563b60c5ca098da9c56c75c157a05eaa0933ed154"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:123c3cec203e3f5ac7b000bd82235f1a3eced8665b63d18be751f115588fea30"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dc1803ac5c32ec324c5261c7209e8f8ce88e83254c4e1aebdc8b0a39f9ddb443"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53db086f9f6ab2b4061958d9c276d1dbe3690e8dd727d6abf2321d6cce37fa94"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abc267fa9837245cc28ea6929f19fa335f3dc330a35d2e45509b6566dc18be23"}, + {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a0d829524aaefdebccb869eed855e2d04c21d2d7479b6cada7ace5448416597b"}, + {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:509daade3b8649f80d4e5ff21aa5673e4ebe58590b25fe42fac5f0f52c6f034a"}, + {file = "pydantic_core-2.18.4-cp39-none-win32.whl", hash = "sha256:ca26a1e73c48cfc54c4a76ff78df3727b9d9f4ccc8dbee4ae3f73306a591676d"}, + {file = "pydantic_core-2.18.4-cp39-none-win_amd64.whl", hash = "sha256:c67598100338d5d985db1b3d21f3619ef392e185e71b8d52bceacc4a7771ea7e"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:574d92eac874f7f4db0ca653514d823a0d22e2354359d0759e3f6a406db5d55d"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1f4d26ceb5eb9eed4af91bebeae4b06c3fb28966ca3a8fb765208cf6b51102ab"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77450e6d20016ec41f43ca4a6c63e9fdde03f0ae3fe90e7c27bdbeaece8b1ed4"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d323a01da91851a4f17bf592faf46149c9169d68430b3146dcba2bb5e5719abc"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43d447dd2ae072a0065389092a231283f62d960030ecd27565672bd40746c507"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:578e24f761f3b425834f297b9935e1ce2e30f51400964ce4801002435a1b41ef"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:81b5efb2f126454586d0f40c4d834010979cb80785173d1586df845a632e4e6d"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ab86ce7c8f9bea87b9d12c7f0af71102acbf5ecbc66c17796cff45dae54ef9a5"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:90afc12421df2b1b4dcc975f814e21bc1754640d502a2fbcc6d41e77af5ec312"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:51991a89639a912c17bef4b45c87bd83593aee0437d8102556af4885811d59f5"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:293afe532740370aba8c060882f7d26cfd00c94cae32fd2e212a3a6e3b7bc15e"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48ece5bde2e768197a2d0f6e925f9d7e3e826f0ad2271120f8144a9db18d5c8"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eae237477a873ab46e8dd748e515c72c0c804fb380fbe6c85533c7de51f23a8f"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:834b5230b5dfc0c1ec37b2fda433b271cbbc0e507560b5d1588e2cc1148cf1ce"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e858ac0a25074ba4bce653f9b5d0a85b7456eaddadc0ce82d3878c22489fa4ee"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2fd41f6eff4c20778d717af1cc50eca52f5afe7805ee530a4fbd0bae284f16e9"}, + {file = "pydantic_core-2.18.4.tar.gz", hash = "sha256:ec3beeada09ff865c344ff3bc2f427f5e6c26401cc6113d77e372c3fdac73864"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pydantic-settings" +version = "2.3.3" +description = "Settings management using Pydantic" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pydantic_settings-2.3.3-py3-none-any.whl", hash = "sha256:e4ed62ad851670975ec11285141db888fd24947f9440bd4380d7d8788d4965de"}, + {file = "pydantic_settings-2.3.3.tar.gz", hash = "sha256:87fda838b64b5039b970cd47c3e8a1ee460ce136278ff672980af21516f6e6ce"}, +] + +[package.dependencies] +pydantic = ">=2.7.0" +python-dotenv = ">=0.21.0" + +[package.extras] +toml = ["tomli (>=2.0.1)"] +yaml = ["pyyaml (>=6.0.1)"] + +[[package]] +name = "pytest" +version = "8.2.2" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-8.2.2-py3-none-any.whl", hash = "sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343"}, + {file = "pytest-8.2.2.tar.gz", hash = "sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.5,<2.0" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-dotenv" +version = "1.0.1" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, + {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "pytz" +version = "2024.1" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.8" +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "sqlalchemy" +version = "1.4.52" +description = "Database Abstraction Library" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "SQLAlchemy-1.4.52-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:f68016f9a5713684c1507cc37133c28035f29925c75c0df2f9d0f7571e23720a"}, + {file = "SQLAlchemy-1.4.52-cp310-cp310-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24bb0f81fbbb13d737b7f76d1821ec0b117ce8cbb8ee5e8641ad2de41aa916d3"}, + {file = "SQLAlchemy-1.4.52-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e93983cc0d2edae253b3f2141b0a3fb07e41c76cd79c2ad743fc27eb79c3f6db"}, + {file = "SQLAlchemy-1.4.52-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:84e10772cfc333eb08d0b7ef808cd76e4a9a30a725fb62a0495877a57ee41d81"}, + {file = "SQLAlchemy-1.4.52-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:427988398d2902de042093d17f2b9619a5ebc605bf6372f7d70e29bde6736842"}, + {file = "SQLAlchemy-1.4.52-cp310-cp310-win32.whl", hash = "sha256:1296f2cdd6db09b98ceb3c93025f0da4835303b8ac46c15c2136e27ee4d18d94"}, + {file = "SQLAlchemy-1.4.52-cp310-cp310-win_amd64.whl", hash = "sha256:80e7f697bccc56ac6eac9e2df5c98b47de57e7006d2e46e1a3c17c546254f6ef"}, + {file = "SQLAlchemy-1.4.52-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2f251af4c75a675ea42766880ff430ac33291c8d0057acca79710f9e5a77383d"}, + {file = "SQLAlchemy-1.4.52-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb8f9e4c4718f111d7b530c4e6fb4d28f9f110eb82e7961412955b3875b66de0"}, + {file = "SQLAlchemy-1.4.52-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afb1672b57f58c0318ad2cff80b384e816735ffc7e848d8aa51e0b0fc2f4b7bb"}, + {file = "SQLAlchemy-1.4.52-cp311-cp311-win32.whl", hash = "sha256:6e41cb5cda641f3754568d2ed8962f772a7f2b59403b95c60c89f3e0bd25f15e"}, + {file = "SQLAlchemy-1.4.52-cp311-cp311-win_amd64.whl", hash = "sha256:5bed4f8c3b69779de9d99eb03fd9ab67a850d74ab0243d1be9d4080e77b6af12"}, + {file = "SQLAlchemy-1.4.52-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:49e3772eb3380ac88d35495843daf3c03f094b713e66c7d017e322144a5c6b7c"}, + {file = "SQLAlchemy-1.4.52-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:618827c1a1c243d2540314c6e100aee7af09a709bd005bae971686fab6723554"}, + {file = "SQLAlchemy-1.4.52-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de9acf369aaadb71a725b7e83a5ef40ca3de1cf4cdc93fa847df6b12d3cd924b"}, + {file = "SQLAlchemy-1.4.52-cp312-cp312-win32.whl", hash = "sha256:763bd97c4ebc74136ecf3526b34808c58945023a59927b416acebcd68d1fc126"}, + {file = "SQLAlchemy-1.4.52-cp312-cp312-win_amd64.whl", hash = "sha256:f12aaf94f4d9679ca475975578739e12cc5b461172e04d66f7a3c39dd14ffc64"}, + {file = "SQLAlchemy-1.4.52-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:853fcfd1f54224ea7aabcf34b227d2b64a08cbac116ecf376907968b29b8e763"}, + {file = "SQLAlchemy-1.4.52-cp36-cp36m-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f98dbb8fcc6d1c03ae8ec735d3c62110949a3b8bc6e215053aa27096857afb45"}, + {file = "SQLAlchemy-1.4.52-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e135fff2e84103bc15c07edd8569612ce317d64bdb391f49ce57124a73f45c5"}, + {file = "SQLAlchemy-1.4.52-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b5de6af8852500d01398f5047d62ca3431d1e29a331d0b56c3e14cb03f8094c"}, + {file = "SQLAlchemy-1.4.52-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3491c85df263a5c2157c594f54a1a9c72265b75d3777e61ee13c556d9e43ffc9"}, + {file = "SQLAlchemy-1.4.52-cp36-cp36m-win32.whl", hash = "sha256:427c282dd0deba1f07bcbf499cbcc9fe9a626743f5d4989bfdfd3ed3513003dd"}, + {file = "SQLAlchemy-1.4.52-cp36-cp36m-win_amd64.whl", hash = "sha256:ca5ce82b11731492204cff8845c5e8ca1a4bd1ade85e3b8fcf86e7601bfc6a39"}, + {file = "SQLAlchemy-1.4.52-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:29d4247313abb2015f8979137fe65f4eaceead5247d39603cc4b4a610936cd2b"}, + {file = "SQLAlchemy-1.4.52-cp37-cp37m-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a752bff4796bf22803d052d4841ebc3c55c26fb65551f2c96e90ac7c62be763a"}, + {file = "SQLAlchemy-1.4.52-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7ea11727feb2861deaa293c7971a4df57ef1c90e42cb53f0da40c3468388000"}, + {file = "SQLAlchemy-1.4.52-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d913f8953e098ca931ad7f58797f91deed26b435ec3756478b75c608aa80d139"}, + {file = "SQLAlchemy-1.4.52-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a251146b921725547ea1735b060a11e1be705017b568c9f8067ca61e6ef85f20"}, + {file = "SQLAlchemy-1.4.52-cp37-cp37m-win32.whl", hash = "sha256:1f8e1c6a6b7f8e9407ad9afc0ea41c1f65225ce505b79bc0342159de9c890782"}, + {file = "SQLAlchemy-1.4.52-cp37-cp37m-win_amd64.whl", hash = "sha256:346ed50cb2c30f5d7a03d888e25744154ceac6f0e6e1ab3bc7b5b77138d37710"}, + {file = "SQLAlchemy-1.4.52-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:4dae6001457d4497736e3bc422165f107ecdd70b0d651fab7f731276e8b9e12d"}, + {file = "SQLAlchemy-1.4.52-cp38-cp38-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5d2e08d79f5bf250afb4a61426b41026e448da446b55e4770c2afdc1e200fce"}, + {file = "SQLAlchemy-1.4.52-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bbce5dd7c7735e01d24f5a60177f3e589078f83c8a29e124a6521b76d825b85"}, + {file = "SQLAlchemy-1.4.52-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bdb7b4d889631a3b2a81a3347c4c3f031812eb4adeaa3ee4e6b0d028ad1852b5"}, + {file = "SQLAlchemy-1.4.52-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c294ae4e6bbd060dd79e2bd5bba8b6274d08ffd65b58d106394cb6abbf35cf45"}, + {file = "SQLAlchemy-1.4.52-cp38-cp38-win32.whl", hash = "sha256:bcdfb4b47fe04967669874fb1ce782a006756fdbebe7263f6a000e1db969120e"}, + {file = "SQLAlchemy-1.4.52-cp38-cp38-win_amd64.whl", hash = "sha256:7d0dbc56cb6af5088f3658982d3d8c1d6a82691f31f7b0da682c7b98fa914e91"}, + {file = "SQLAlchemy-1.4.52-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:a551d5f3dc63f096ed41775ceec72fdf91462bb95abdc179010dc95a93957800"}, + {file = "SQLAlchemy-1.4.52-cp39-cp39-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ab773f9ad848118df7a9bbabca53e3f1002387cdbb6ee81693db808b82aaab0"}, + {file = "SQLAlchemy-1.4.52-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2de46f5d5396d5331127cfa71f837cca945f9a2b04f7cb5a01949cf676db7d1"}, + {file = "SQLAlchemy-1.4.52-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7027be7930a90d18a386b25ee8af30514c61f3852c7268899f23fdfbd3107181"}, + {file = "SQLAlchemy-1.4.52-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99224d621affbb3c1a4f72b631f8393045f4ce647dd3262f12fe3576918f8bf3"}, + {file = "SQLAlchemy-1.4.52-cp39-cp39-win32.whl", hash = "sha256:c124912fd4e1bb9d1e7dc193ed482a9f812769cb1e69363ab68e01801e859821"}, + {file = "SQLAlchemy-1.4.52-cp39-cp39-win_amd64.whl", hash = "sha256:2c286fab42e49db23c46ab02479f328b8bdb837d3e281cae546cc4085c83b680"}, + {file = "SQLAlchemy-1.4.52.tar.gz", hash = "sha256:80e63bbdc5217dad3485059bdf6f65a7d43f33c8bde619df5c220edf03d87296"}, +] + +[package.dependencies] +greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} + +[package.extras] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] +aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"] +asyncio = ["greenlet (!=0.4.17)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4)", "greenlet (!=0.4.17)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2)"] +mssql = ["pyodbc"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mypy = ["mypy (>=0.910)", "sqlalchemy2-stubs"] +mysql = ["mysqlclient (>=1.4.0)", "mysqlclient (>=1.4.0,<2)"] +mysql-connector = ["mysql-connector-python"] +oracle = ["cx_oracle (>=7)", "cx_oracle (>=7,<8)"] +postgresql = ["psycopg2 (>=2.7)"] +postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] +postgresql-pg8000 = ["pg8000 (>=1.16.6,!=1.29.0)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +pymysql = ["pymysql", "pymysql (<1)"] +sqlcipher = ["sqlcipher3_binary"] + +[[package]] +name = "starlette" +version = "0.37.2" +description = "The little ASGI library that shines." +optional = false +python-versions = ">=3.8" +files = [ + {file = "starlette-0.37.2-py3-none-any.whl", hash = "sha256:6fe59f29268538e5d0d182f2791a479a0c64638e6935d1c6989e63fb2699c6ee"}, + {file = "starlette-0.37.2.tar.gz", hash = "sha256:9af890290133b79fc3db55474ade20f6220a364a0402e0b556e7cd5e1e093823"}, +] + +[package.dependencies] +anyio = ">=3.4.0,<5" + +[package.extras] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + +[[package]] +name = "tzdata" +version = "2024.1" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, + {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, +] + +[[package]] +name = "urllib3" +version = "2.2.2" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, + {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "uvicorn" +version = "0.19.0" +description = "The lightning-fast ASGI server." +optional = false +python-versions = ">=3.7" +files = [ + {file = "uvicorn-0.19.0-py3-none-any.whl", hash = "sha256:cc277f7e73435748e69e075a721841f7c4a95dba06d12a72fe9874acced16f6f"}, + {file = "uvicorn-0.19.0.tar.gz", hash = "sha256:cf538f3018536edb1f4a826311137ab4944ed741d52aeb98846f52215de57f25"}, +] + +[package.dependencies] +click = ">=7.0" +h11 = ">=0.8" + +[package.extras] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.0)"] + +[[package]] +name = "virtualenv" +version = "20.26.2" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.26.2-py3-none-any.whl", hash = "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"}, + {file = "virtualenv-20.26.2.tar.gz", hash = "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.10" +content-hash = "ec44252879b4d9c485ec52ffe628220da4274908e6dbcff4fb142a7ffd2488d2" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..f96e0ae --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,28 @@ +[tool.poetry] +name = "boagent" +version = "0.9.0" +description = "Local API to collect and compute data on used device and running applications to give insight on their environmental impacts." +authors = [] +license = "Apache-2.0" +readme = "README.md" +package-mode = false + +[tool.poetry.dependencies] +python = "^3.10" +boaviztapi-sdk = "^1.2.4" +croniter = "^1.3.7" +fastapi = "^0.110.0" +pandas = "^2.2.1" +pydantic = "^2.6.4" +pydantic-settings = "^2.2.1" +requests = "^2.28.1" +SQLAlchemy = "^1.4.42" +uvicorn = "^0.19.0" + +[tool.poetry.group.dev.dependencies] +pytest = "^8.0.2" +pre-commit = "^3.6.2" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" From 5a1acc01ea1fa5d51622b092e9c727b35a49c1da Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 19 Jun 2024 17:46:19 +0200 Subject: [PATCH 181/227] feat: install dependencies and run uvicorn through poetry --- Dockerfile | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index d02ec54..3b276f3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,20 +2,18 @@ FROM python:3.10-slim LABEL org.opencontainers.image.authors="bpetit@hubblo.org" -RUN apt update && apt install lshw nvme-cli -y - -RUN useradd -ms /bin/bash boagent - WORKDIR /home/boagent -COPY requirements.txt requirements.txt +RUN python3 -m pip install --upgrade poetry + +RUN apt update && apt install lshw nvme-cli -y -RUN pip3 install -r requirements.txt +COPY pyproject.toml . -ENV PATH $PATH:/home/boagent/.local/bin +RUN poetry install --only main COPY . . EXPOSE 8000 -ENTRYPOINT [ "/bin/bash", "-c", "uvicorn --reload boagent.api.api:app --host 0.0.0.0" ] +ENTRYPOINT ["poetry", "run", "uvicorn", "--reload", "boagent.api.api:app", "--host", "0.0.0.0"] From 4234206ecfe646feb87f48c63d99cde46c0bf642 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 22 Jul 2024 16:32:24 +0200 Subject: [PATCH 182/227] fix: json key for cpu from 'vendor' to 'manufacturer' --- boagent/hardware/lshw.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py index 0529c23..1f71fd3 100644 --- a/boagent/hardware/lshw.py +++ b/boagent/hardware/lshw.py @@ -155,7 +155,7 @@ def find_cpus(self, obj): { "units": +1, "name": obj["product"], - "vendor": obj["vendor"], + "manufacturer": obj["vendor"], "core_units": obj["configuration"][ "cores" ], # ONLY AVAILABLE AS ROOT From b7b2361e01cdafef659e27d0c3c526fe7a7f4e41 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 23 Jul 2024 09:45:14 +0200 Subject: [PATCH 183/227] fix: cpu core_units as integer --- boagent/hardware/lshw.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py index 1f71fd3..a413255 100644 --- a/boagent/hardware/lshw.py +++ b/boagent/hardware/lshw.py @@ -156,9 +156,9 @@ def find_cpus(self, obj): "units": +1, "name": obj["product"], "manufacturer": obj["vendor"], - "core_units": obj["configuration"][ - "cores" - ], # ONLY AVAILABLE AS ROOT + "core_units": int( + obj["configuration"]["cores"] + ), # ONLY AVAILABLE AS ROOT # "description": obj["description"], # "location": obj["slot"], } From 002c7e7f6c1190e722bc76543ffae4da55fe67db Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 23 Jul 2024 09:47:00 +0200 Subject: [PATCH 184/227] test: cpu manufacturer key, cpu core_units as integer --- tests/hardware/test_lshw.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/hardware/test_lshw.py b/tests/hardware/test_lshw.py index f34214c..bdc5753 100644 --- a/tests/hardware/test_lshw.py +++ b/tests/hardware/test_lshw.py @@ -33,8 +33,8 @@ def test_read_get_hw_linux_memory(self): def test_read_cpus_vendor(self): for cpu in lshw_cpus_data: - assert "vendor" in cpu - assert type(cpu["vendor"]) is str + assert "manufacturer" in cpu + assert type(cpu["manufacturer"]) is str def test_read_cpus_name(self): @@ -46,7 +46,7 @@ def test_read_cpus_core_units(self): for cpu in lshw_cpus_data: assert "core_units" in cpu - assert type(cpu["core_units"]) is str + assert type(cpu["core_units"]) is int def test_read_cpus_units(self): From 676e1db615778b39016bd4a6d92bf4d0614448ef Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 16 Sep 2024 17:29:15 +0200 Subject: [PATCH 185/227] fix: calculate storage embedded impact for process through written bytes on disk usage --- boagent/api/api.py | 4 ++ boagent/api/process.py | 63 +++++++++++++------------------ tests/api/test_api_integration.py | 1 + tests/api/test_api_unit.py | 53 ++++++++++++++++---------- 4 files changed, 65 insertions(+), 56 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index e8079dd..773528e 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -313,10 +313,14 @@ async def process_embedded_impacts( process_ram_embedded_impact_values = ( queried_process.get_component_embedded_impact_values("ram") ) + process_ssd_embedded_impact_values = ( + queried_process.get_component_embedded_impact_values("ssd") + ) process_embedded_impact_values = { "process_cpu_embedded_impact_values": process_cpu_embedded_impact_values, "process_ram_embedded_impact_values": process_ram_embedded_impact_values, + "process_ssd_embedded_impact_values": process_ssd_embedded_impact_values, } json_content = json.dumps(process_embedded_impact_values) return Response(status_code=200, content=json_content) diff --git a/boagent/api/process.py b/boagent/api/process.py index 9460b30..580d88c 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -1,6 +1,5 @@ from json import load from collections import defaultdict -from subprocess import getoutput from .exceptions import InvalidPIDException @@ -10,8 +9,6 @@ def __init__(self, metrics_file_path, pid): self.validate_pid(pid) self._pid = pid self.process_info = self.get_process_info() - self.disk_usage = self.get_process_disk_usage() - self.storage_share = self.get_process_storage_share() @property def processed_metrics(self): @@ -81,6 +78,21 @@ def get_total_ram_in_bytes(self): return total_ram_in_bytes + def get_disk_usage_in_bytes(self): + + disk_total_bytes = int( + self.processed_metrics["raw_data"]["power_data"]["raw_data"][1]["host"][ + "components" + ]["disks"][0]["disk_total_bytes"] + ) + disk_available_bytes = int( + self.processed_metrics["raw_data"]["power_data"]["raw_data"][1]["host"][ + "components" + ]["disks"][0]["disk_available_bytes"] + ) + disk_usage_in_bytes = disk_total_bytes - disk_available_bytes + return disk_usage_in_bytes + @property def ram_shares(self): @@ -106,40 +118,19 @@ def cpu_load_shares(self): ] return process_cpu_load_shares - def get_process_disk_usage(self): - - process_directory = self.process_exe.rsplit("/", 1)[0] - process_disk_usage = getoutput(f"du -hs {process_directory}").split()[0] - return process_disk_usage - - def get_process_storage_share(self): - - disks_total_size_in_bytes = ( - self.processed_metrics["raw_data"]["hardware_data"]["disks"][0]["capacity"] - * 1073741824 - ) - process_disk_space_unit = self.disk_usage[-1] - process_disk_space_size = self.disk_usage[:-1] - - if process_disk_space_unit == "K": - formatted_process_size = float(process_disk_space_size.replace(",", ".")) - process_storage_share = ( - (formatted_process_size * 1024) / disks_total_size_in_bytes * 100 - ) - return [process_storage_share] - elif process_disk_space_unit == "M": - process_storage_share = ( - (int(process_disk_space_size) * 1048576) - / disks_total_size_in_bytes + @property + def storage_shares(self): + process_storage_shares = [ + ( + ( + int(timestamp["resources_usage"]["disk_usage_write"]) + / self.get_disk_usage_in_bytes() + ) * 100 ) - return [process_storage_share] - elif process_disk_space_unit == "G": - formatted_process_size = float(process_disk_space_size.replace(",", ".")) - process_storage_share = ( - (formatted_process_size * 1073741824) / disks_total_size_in_bytes * 100 - ) - return [process_storage_share] + for timestamp in self.process_info + ] + return process_storage_shares def get_component_embedded_impact_shares(self, queried_component, component_shares): @@ -179,7 +170,7 @@ def get_component_embedded_impact_values(self, queried_component): ) elif queried_component == "ssd": component_impact_shares = self.get_component_embedded_impact_shares( - "SSD", self.storage_share + "SSD", self.storage_shares ) else: return "Queried component is not available for evaluation." diff --git a/tests/api/test_api_integration.py b/tests/api/test_api_integration.py index 91bb87e..fc718f7 100644 --- a/tests/api/test_api_integration.py +++ b/tests/api/test_api_integration.py @@ -212,6 +212,7 @@ def test_get_process_embedded_impacts_with_success(self, mocked_get_metrics): assert response.status_code == 200 self.assertIn("process_cpu_embedded_impact_values", response.json()) self.assertIn("process_ram_embedded_impact_values", response.json()) + self.assertIn("process_ssd_embedded_impact_values", response.json()) @patch("boagent.api.api.get_metrics") def test_get_process_embedded_impacts_with_error_if_pid_not_found_in_metrics_data( diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 9d32190..c626c93 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -570,31 +570,44 @@ def test_get_process_ram_share_by_timestamp(self): self.assertEqual(ram_share, expected_ram_shares[index]) assert type(process_ram_shares) is list - def test_get_process_storage_share_with_process_storage_size_in_megabytes(self): - - # Firefox snap directory occupies 383M according to `du -hs` - # Total disk storage in bytes, for reference = 255550554112 + def test_get_disk_usage_in_bytes(self): + disk_total_bytes = int( + self.get_metrics_verbose["raw_data"]["power_data"]["raw_data"][1]["host"][ + "components" + ]["disks"][0]["disk_total_bytes"] + ) + disk_available_bytes = int( + self.get_metrics_verbose["raw_data"]["power_data"]["raw_data"][1]["host"][ + "components" + ]["disks"][0]["disk_available_bytes"] + ) + expected_disk_usage = disk_total_bytes - disk_available_bytes + disk_usage = self.process.get_disk_usage_in_bytes() + assert type(disk_usage) is int + self.assertEqual(expected_disk_usage, disk_usage) - expected_storage_share = [0.15715270483193278] - process_storage_share = self.process.storage_share - assert type(process_storage_share) is list - self.assertEqual(process_storage_share, expected_storage_share) + def test_get_process_storage_share_by_timestamp(self): - def test_get_process_storage_share_with_process_storage_size_in_gigabytes(self): + expected_storage_shares = [0.0, 0.0, 0.0] + process_storage_shares = self.process.storage_shares + for index, storage_share in enumerate(process_storage_shares): + assert type(storage_share) is float + self.assertEqual(storage_share, expected_storage_shares[index]) + assert type(process_storage_shares) is list - with patch.object(self.process, "disk_usage", "1,2G"): - expected_storage_share = [0.5042016806722689] - process_storage_share = self.process.get_process_storage_share() - assert type(process_storage_share) is list - self.assertEqual(process_storage_share, expected_storage_share) + def test_get_embedded_impact_share_for_storage_by_timestamp(self): - def test_get_process_storage_share_with_process_storage_size_in_kilobytes(self): + storage_embedded_impact_shares = ( + self.process.get_component_embedded_impact_shares( + "SSD", self.process.storage_shares + ) + ) - with patch.object(self.process, "disk_usage", "7,3K"): - expected_storage_share = [2.9251355083048842e-06] - process_storage_share = self.process.get_process_storage_share() - assert type(process_storage_share) is list - self.assertEqual(process_storage_share, expected_storage_share) + for storage_embedded_impact_share in storage_embedded_impact_shares: + assert type(storage_embedded_impact_share) is tuple + for value in storage_embedded_impact_share: + assert type(storage_embedded_impact_share[1]) is float + assert type(storage_embedded_impact_shares) def test_get_embedded_impact_share_for_ram_by_timestamp(self): From 319e025dd55c5a09b596574f4deb8daecffe0156 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 17 Sep 2024 10:35:19 +0200 Subject: [PATCH 186/227] refactor: create distinct process route tests file --- tests/api/test_api_process.py | 249 ++++++++++++++++++++++++++++++++++ tests/api/test_api_unit.py | 213 ----------------------------- 2 files changed, 249 insertions(+), 213 deletions(-) create mode 100644 tests/api/test_api_process.py diff --git a/tests/api/test_api_process.py b/tests/api/test_api_process.py new file mode 100644 index 0000000..3b3078d --- /dev/null +++ b/tests/api/test_api_process.py @@ -0,0 +1,249 @@ +import os +import json +from unittest import TestCase, TestSuite, TestLoader +from unittest.mock import patch +from boagent.api.api import ( + get_metrics, +) +from boagent.api.process import Process, InvalidPIDException + +current_dir = os.path.dirname(__file__) +mock_power_data = os.path.join(f"{current_dir}", "../mocks/power_data.json") +mock_hardware_data = os.path.join(f"{current_dir}", "../mocks/hardware_data.json") +mock_boaviztapi_response_not_verbose = os.path.join( + f"{current_dir}", "../mocks/boaviztapi_response_not_verbose.json" +) +mock_boaviztapi_response_verbose = os.path.join( + f"{current_dir}", "../mocks/boaviztapi_response_verbose.json" +) +mock_formatted_scaphandre = os.path.join( + f"{current_dir}", "../mocks/formatted_power_data_one_hour.json" +) +mock_formatted_scaphandre_with_processes = os.path.join( + f"{current_dir}", "../mocks/formatted_scaphandre.json" +) +mock_get_metrics_not_verbose = os.path.join( + f"{current_dir}", "../mocks/get_metrics_not_verbose.json" +) +mock_get_metrics_verbose = os.path.join( + f"{current_dir}", "../mocks/get_metrics_verbose.json" +) +hardware_cli = os.path.join(f"{current_dir}", "../../boagent/hardware/hardware_cli.py") +hardware_data = os.path.join(f"{current_dir}", "../../boagent/api/hardware_data.json") + + +class AllocateEmbeddedImpactForProcess(TestCase): + def setUp(self): + + self.start_time = 1710837858 + self.end_time = 1710841458 + self.verbose = False + self.location = "EEE" + self.measure_power = False + self.lifetime = 5.0 + self.fetch_hardware = False + self.pid = 3099 + + with open(mock_boaviztapi_response_not_verbose, "r") as boaviztapi_data: + self.boaviztapi_data = json.load(boaviztapi_data) + + with open(mock_get_metrics_verbose) as get_metrics_verbose: + self.get_metrics_verbose = json.load(get_metrics_verbose) + + self.process = Process(mock_get_metrics_verbose, self.pid) + + @patch("boagent.api.api.query_machine_impact_data") + def test_get_total_embedded_impacts_for_host( + self, mocked_query_machine_impact_data + ): + + total_embedded_impacts_host = get_metrics( + self.start_time, + self.end_time, + self.verbose, + self.location, + self.measure_power, + self.lifetime, + self.fetch_hardware, + ) + + mocked_query_machine_impact_data.return_value = self.boaviztapi_data + + assert "embedded_emissions" in total_embedded_impacts_host + assert "embedded_abiotic_resources_depletion" in total_embedded_impacts_host + assert "embedded_primary_energy" in total_embedded_impacts_host + + def test_get_process_info(self): + + process_details = self.process.process_info + for process in process_details: + assert type(process) is dict + self.assertEqual(process["pid"], 3099) + self.assertEqual( + process["exe"], "/snap/firefox/4336/usr/lib/firefox/firefox" + ) + assert type(process_details) is list + + def test_get_process_name(self): + + expected_process_name = "firefox" + process_name = self.process.process_name + + self.assertEqual(expected_process_name, process_name) + + def test_get_process_exe(self): + + expected_process_exe = "/snap/firefox/4336/usr/lib/firefox/firefox" + process_exe = self.process.process_exe + + self.assertEqual(expected_process_exe, process_exe) + + def test_validate_pid_with_error_if_process_id_not_in_metrics(self): + + expected_error_message = ( + "Process_id 1234 has not been found in metrics data. Check the queried PID" + ) + + with self.assertRaises(InvalidPIDException) as context_manager: + self.process = Process(mock_get_metrics_verbose, 1234) + + self.assertEqual(context_manager.exception.message, expected_error_message) + + with self.assertRaises(InvalidPIDException) as context_manager: + self.process.pid = 1234 + + self.assertEqual(context_manager.exception.message, expected_error_message) + + def test_get_total_ram_in_bytes(self): + + expected_ram_total = 8589934592 + total_ram_in_bytes = self.process.get_total_ram_in_bytes() + assert type(total_ram_in_bytes) is int + self.assertEqual(total_ram_in_bytes, expected_ram_total) + + def test_get_process_ram_share_by_timestamp(self): + + expected_ram_shares = [5.918979644775391, 0.0, 5.9177398681640625] + process_ram_shares = self.process.ram_shares + for index, ram_share in enumerate(process_ram_shares): + assert type(ram_share) is float + self.assertEqual(ram_share, expected_ram_shares[index]) + assert type(process_ram_shares) is list + + def test_get_disk_usage_in_bytes(self): + disk_total_bytes = int( + self.get_metrics_verbose["raw_data"]["power_data"]["raw_data"][1]["host"][ + "components" + ]["disks"][0]["disk_total_bytes"] + ) + disk_available_bytes = int( + self.get_metrics_verbose["raw_data"]["power_data"]["raw_data"][1]["host"][ + "components" + ]["disks"][0]["disk_available_bytes"] + ) + expected_disk_usage = disk_total_bytes - disk_available_bytes + disk_usage = self.process.get_disk_usage_in_bytes() + assert type(disk_usage) is int + self.assertEqual(expected_disk_usage, disk_usage) + + def test_get_process_storage_share_by_timestamp(self): + + expected_storage_shares = [0.0, 0.0, 0.0] + process_storage_shares = self.process.storage_shares + for index, storage_share in enumerate(process_storage_shares): + assert type(storage_share) is float + self.assertEqual(storage_share, expected_storage_shares[index]) + assert type(process_storage_shares) is list + + def test_get_embedded_impact_share_for_storage_by_timestamp(self): + + storage_embedded_impact_shares = ( + self.process.get_component_embedded_impact_shares( + "SSD", self.process.storage_shares + ) + ) + + for storage_embedded_impact_share in storage_embedded_impact_shares: + assert type(storage_embedded_impact_share) is tuple + for value in storage_embedded_impact_share: + assert type(storage_embedded_impact_share[1]) is float + assert type(storage_embedded_impact_shares) + + def test_get_embedded_impact_share_for_ram_by_timestamp(self): + + ram_embedded_impact_shares = self.process.get_component_embedded_impact_shares( + "RAM", self.process.ram_shares + ) + + for ram_embedded_impact_share in ram_embedded_impact_shares: + assert type(ram_embedded_impact_share) is tuple + for value in ram_embedded_impact_share: + assert type(ram_embedded_impact_share[1]) is float + assert type(ram_embedded_impact_shares) is list + + def test_get_process_cpu_load_shares_by_timestamp(self): + + expected_cpu_load_shares = [5.9772415, 5.2776732, 2.9987452] + process_cpu_load_shares = self.process.cpu_load_shares + + for index, cpu_load_share in enumerate(process_cpu_load_shares): + assert type(cpu_load_share) is float + self.assertEqual(cpu_load_share, expected_cpu_load_shares[index]) + assert type(process_cpu_load_shares) is list + + def test_get_embedded_impact_share_for_cpu_by_timestamp(self): + + cpu_embedded_impact_shares = self.process.get_component_embedded_impact_shares( + "CPU", self.process.cpu_load_shares + ) + + for cpu_embedded_impact_share in cpu_embedded_impact_shares: + assert type(cpu_embedded_impact_share) is tuple + assert type(cpu_embedded_impact_shares) is list + + def test_get_avg_min_max_embedded_impact_shares_for_cpu_and_ram(self): + + impact_criterias = ["gwp", "adp", "pe"] + cpu_embedded_impact_values = self.process.get_component_embedded_impact_values( + "cpu" + ) + ram_embedded_impact_values = self.process.get_component_embedded_impact_values( + "ram" + ) + + assert type(cpu_embedded_impact_values) is dict + assert type(ram_embedded_impact_values) is dict + for criteria in impact_criterias: + assert f"{criteria}_cpu_average_impact" in cpu_embedded_impact_values + assert f"{criteria}_cpu_max_impact" in cpu_embedded_impact_values + assert f"{criteria}_cpu_min_impact" in cpu_embedded_impact_values + assert f"{criteria}_ram_average_impact" in ram_embedded_impact_values + assert f"{criteria}_ram_max_impact" in ram_embedded_impact_values + assert f"{criteria}_ram_min_impact" in ram_embedded_impact_values + + def test_get_embedded_impact_values_with_error_if_invalid_component_queried(self): + + invalid_component_queried = self.process.get_component_embedded_impact_values( + "invalid_component" + ) + assert ( + invalid_component_queried + == "Queried component is not available for evaluation." + ) + + def test_get_embedded_impact_values_for_ssd(self): + + impact_criterias = ["gwp", "adp", "pe"] + storage_embedded_impact_values = ( + self.process.get_component_embedded_impact_values("ssd") + ) + + assert type(storage_embedded_impact_values) is dict + for criteria in impact_criterias: + assert f"{criteria}_ssd_average_impact" in storage_embedded_impact_values + + +loader = TestLoader() +suite = TestSuite() + +suite.addTests(loader.loadTestsFromTestCase(AllocateEmbeddedImpactForProcess)) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index c626c93..5205645 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -15,7 +15,6 @@ get_metrics, ) from boagent.api.utils import format_prometheus_output -from boagent.api.process import Process, InvalidPIDException current_dir = os.path.dirname(__file__) mock_power_data = os.path.join(f"{current_dir}", "../mocks/power_data.json") @@ -472,217 +471,6 @@ def test_get_metrics_verbose_with_scaphandre( assert "power_data" in metrics["raw_data"] -class AllocateEmbeddedImpactForProcess(TestCase): - def setUp(self): - - self.start_time = 1710837858 - self.end_time = 1710841458 - self.verbose = False - self.location = "EEE" - self.measure_power = False - self.lifetime = 5.0 - self.fetch_hardware = False - self.pid = 3099 - - with open(mock_boaviztapi_response_not_verbose, "r") as boaviztapi_data: - self.boaviztapi_data = json.load(boaviztapi_data) - - with open(mock_get_metrics_verbose) as get_metrics_verbose: - self.get_metrics_verbose = json.load(get_metrics_verbose) - - self.process = Process(mock_get_metrics_verbose, self.pid) - - @patch("boagent.api.api.query_machine_impact_data") - def test_get_total_embedded_impacts_for_host( - self, mocked_query_machine_impact_data - ): - - total_embedded_impacts_host = get_metrics( - self.start_time, - self.end_time, - self.verbose, - self.location, - self.measure_power, - self.lifetime, - self.fetch_hardware, - ) - - mocked_query_machine_impact_data.return_value = self.boaviztapi_data - - assert "embedded_emissions" in total_embedded_impacts_host - assert "embedded_abiotic_resources_depletion" in total_embedded_impacts_host - assert "embedded_primary_energy" in total_embedded_impacts_host - - def test_get_process_info(self): - - process_details = self.process.process_info - for process in process_details: - assert type(process) is dict - self.assertEqual(process["pid"], 3099) - self.assertEqual( - process["exe"], "/snap/firefox/4336/usr/lib/firefox/firefox" - ) - assert type(process_details) is list - - def test_get_process_name(self): - - expected_process_name = "firefox" - process_name = self.process.process_name - - self.assertEqual(expected_process_name, process_name) - - def test_get_process_exe(self): - - expected_process_exe = "/snap/firefox/4336/usr/lib/firefox/firefox" - process_exe = self.process.process_exe - - self.assertEqual(expected_process_exe, process_exe) - - def test_validate_pid_with_error_if_process_id_not_in_metrics(self): - - expected_error_message = ( - "Process_id 1234 has not been found in metrics data. Check the queried PID" - ) - - with self.assertRaises(InvalidPIDException) as context_manager: - self.process = Process(mock_get_metrics_verbose, 1234) - - self.assertEqual(context_manager.exception.message, expected_error_message) - - with self.assertRaises(InvalidPIDException) as context_manager: - self.process.pid = 1234 - - self.assertEqual(context_manager.exception.message, expected_error_message) - - def test_get_total_ram_in_bytes(self): - - expected_ram_total = 8589934592 - total_ram_in_bytes = self.process.get_total_ram_in_bytes() - assert type(total_ram_in_bytes) is int - self.assertEqual(total_ram_in_bytes, expected_ram_total) - - def test_get_process_ram_share_by_timestamp(self): - - expected_ram_shares = [5.918979644775391, 0.0, 5.9177398681640625] - process_ram_shares = self.process.ram_shares - for index, ram_share in enumerate(process_ram_shares): - assert type(ram_share) is float - self.assertEqual(ram_share, expected_ram_shares[index]) - assert type(process_ram_shares) is list - - def test_get_disk_usage_in_bytes(self): - disk_total_bytes = int( - self.get_metrics_verbose["raw_data"]["power_data"]["raw_data"][1]["host"][ - "components" - ]["disks"][0]["disk_total_bytes"] - ) - disk_available_bytes = int( - self.get_metrics_verbose["raw_data"]["power_data"]["raw_data"][1]["host"][ - "components" - ]["disks"][0]["disk_available_bytes"] - ) - expected_disk_usage = disk_total_bytes - disk_available_bytes - disk_usage = self.process.get_disk_usage_in_bytes() - assert type(disk_usage) is int - self.assertEqual(expected_disk_usage, disk_usage) - - def test_get_process_storage_share_by_timestamp(self): - - expected_storage_shares = [0.0, 0.0, 0.0] - process_storage_shares = self.process.storage_shares - for index, storage_share in enumerate(process_storage_shares): - assert type(storage_share) is float - self.assertEqual(storage_share, expected_storage_shares[index]) - assert type(process_storage_shares) is list - - def test_get_embedded_impact_share_for_storage_by_timestamp(self): - - storage_embedded_impact_shares = ( - self.process.get_component_embedded_impact_shares( - "SSD", self.process.storage_shares - ) - ) - - for storage_embedded_impact_share in storage_embedded_impact_shares: - assert type(storage_embedded_impact_share) is tuple - for value in storage_embedded_impact_share: - assert type(storage_embedded_impact_share[1]) is float - assert type(storage_embedded_impact_shares) - - def test_get_embedded_impact_share_for_ram_by_timestamp(self): - - ram_embedded_impact_shares = self.process.get_component_embedded_impact_shares( - "RAM", self.process.ram_shares - ) - - for ram_embedded_impact_share in ram_embedded_impact_shares: - assert type(ram_embedded_impact_share) is tuple - for value in ram_embedded_impact_share: - assert type(ram_embedded_impact_share[1]) is float - assert type(ram_embedded_impact_shares) is list - - def test_get_process_cpu_load_shares_by_timestamp(self): - - expected_cpu_load_shares = [5.9772415, 5.2776732, 2.9987452] - process_cpu_load_shares = self.process.cpu_load_shares - - for index, cpu_load_share in enumerate(process_cpu_load_shares): - assert type(cpu_load_share) is float - self.assertEqual(cpu_load_share, expected_cpu_load_shares[index]) - assert type(process_cpu_load_shares) is list - - def test_get_embedded_impact_share_for_cpu_by_timestamp(self): - - cpu_embedded_impact_shares = self.process.get_component_embedded_impact_shares( - "CPU", self.process.cpu_load_shares - ) - - for cpu_embedded_impact_share in cpu_embedded_impact_shares: - assert type(cpu_embedded_impact_share) is tuple - assert type(cpu_embedded_impact_shares) is list - - def test_get_avg_min_max_embedded_impact_shares_for_cpu_and_ram(self): - - impact_criterias = ["gwp", "adp", "pe"] - cpu_embedded_impact_values = self.process.get_component_embedded_impact_values( - "cpu" - ) - ram_embedded_impact_values = self.process.get_component_embedded_impact_values( - "ram" - ) - - assert type(cpu_embedded_impact_values) is dict - assert type(ram_embedded_impact_values) is dict - for criteria in impact_criterias: - assert f"{criteria}_cpu_average_impact" in cpu_embedded_impact_values - assert f"{criteria}_cpu_max_impact" in cpu_embedded_impact_values - assert f"{criteria}_cpu_min_impact" in cpu_embedded_impact_values - assert f"{criteria}_ram_average_impact" in ram_embedded_impact_values - assert f"{criteria}_ram_max_impact" in ram_embedded_impact_values - assert f"{criteria}_ram_min_impact" in ram_embedded_impact_values - - def test_get_embedded_impact_values_with_error_if_invalid_component_queried(self): - - invalid_component_queried = self.process.get_component_embedded_impact_values( - "invalid_component" - ) - assert ( - invalid_component_queried - == "Queried component is not available for evaluation." - ) - - def test_get_embedded_impact_values_for_ssd(self): - - impact_criterias = ["gwp", "adp", "pe"] - storage_embedded_impact_values = ( - self.process.get_component_embedded_impact_values("ssd") - ) - - assert type(storage_embedded_impact_values) is dict - for criteria in impact_criterias: - assert f"{criteria}_ssd_average_impact" in storage_embedded_impact_values - - loader = TestLoader() suite = TestSuite() @@ -693,4 +481,3 @@ def test_get_embedded_impact_values_for_ssd(self): suite.addTests(loader.loadTestsFromTestCase(GetMetricsNotVerboseNoScaphandreTest)) suite.addTests(loader.loadTestsFromTestCase(GetMetricsVerboseNoScaphandreTest)) suite.addTests(loader.loadTestsFromTestCase(GetMetricsVerboseWithScaphandreTest)) -suite.addTests(loader.loadTestsFromTestCase(AllocateEmbeddedImpactForProcess)) From 176de06f5437e71e76d895989e7aabc7f47f447b Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 17 Sep 2024 12:12:29 +0200 Subject: [PATCH 187/227] chore: modify fake get metrics with hdd and no hdd --- tests/mocks/get_metrics_verbose.json | 68 + tests/mocks/get_metrics_verbose_no_hdd.json | 1576 +++++++++++++++++++ 2 files changed, 1644 insertions(+) create mode 100644 tests/mocks/get_metrics_verbose_no_hdd.json diff --git a/tests/mocks/get_metrics_verbose.json b/tests/mocks/get_metrics_verbose.json index 7306f6c..98104c9 100644 --- a/tests/mocks/get_metrics_verbose.json +++ b/tests/mocks/get_metrics_verbose.json @@ -584,6 +584,74 @@ "unit": "hours" } }, + "HDD-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 50, + "min": 23.53, + "max": 281, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.0017, + "min": 0.001055, + "max": 0.008809, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 600, + "min": 290.2, + "max": 3483, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 2 + }, + "capacity": { + "value": 1000, + "status": "ARCHETYPE", + "unit": "GB", + "min": 1000, + "max": 1000 + }, + "density": { + "value": 54.8842105263158, + "status": "COMPLETED", + "unit": "GB/cm2", + "source": "Average of 19 rows", + "min": 16.4, + "max": 128 + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, "POWER_SUPPLY-1": { "impacts": { "gwp": { diff --git a/tests/mocks/get_metrics_verbose_no_hdd.json b/tests/mocks/get_metrics_verbose_no_hdd.json new file mode 100644 index 0000000..7306f6c --- /dev/null +++ b/tests/mocks/get_metrics_verbose_no_hdd.json @@ -0,0 +1,1576 @@ +{ + "emissions_calculation_data": { + "energy_consumption_warning": "The time window is lower than one hour, but the energy consumption estimate is in Watt.Hour. So this is an extrapolation of the power usage profile on one hour. Be careful with this data. " + }, + "location_warning": { + "warning_message": "Location is either set as default, or has not been set, and is therefore set to the default BoaviztAPI location. Be aware that the presented results can be drastically different due to location. It is recommended that you set the asset location with the corresponding country code, see: https://doc.api.boavizta.org/Explanations/usage/countries/" + }, + "total_operational_emissions": { + "value": { + "value": 138.6, + "min": 138.6, + "max": 138.6 + }, + "description": "GHG emissions related to usage, from start_time to end_time.", + "type": "gauge", + "unit": "kg CO2eq", + "long_unit": "kilograms CO2 equivalent" + }, + "total_operational_abiotic_resources_depletion": { + "value": { + "value": 0.00002342, + "min": 0.00002342, + "max": 0.00002342 + }, + "description": "Abiotic Resources Depletion (minerals & metals, ADPe) due to the usage phase.", + "type": "gauge", + "unit": "kgSbeq", + "long_unit": "kilograms Antimony equivalent" + }, + "total_operational_primary_energy_consumed": { + "value": { + "value": 4694, + "min": 4694, + "max": 4694 + }, + "description": "Primary Energy consumed due to the usage phase.", + "type": "gauge", + "unit": "MJ", + "long_unit": "Mega Joules" + }, + "start_time": { + "value": 1717500637.2979465, + "description": "Start time for the evaluation, in timestamp format (seconds since 1970)", + "type": "counter", + "unit": "s", + "long_unit": "seconds" + }, + "end_time": { + "value": 1717504237.2979465, + "description": "End time for the evaluation, in timestamp format (seconds since 1970)", + "type": "counter", + "unit": "s", + "long_unit": "seconds" + }, + "average_power_measured": { + "value": 10.4062055, + "description": "Average power measured from start_time to end_time", + "type": "gauge", + "unit": "W", + "long_unit": "Watts" + }, + "embedded_emissions": { + "value": 900, + "description": "Embedded carbon emissions (manufacturing phase)", + "type": "gauge", + "unit": "kg CO2eq", + "long_unit": "kilograms CO2 equivalent" + }, + "embedded_abiotic_resources_depletion": { + "value": 0.14, + "description": "Embedded abiotic ressources consumed (manufacturing phase)", + "type": "gauge", + "unit": "kg Sbeq", + "long_unit": "kilograms ADP equivalent" + }, + "embedded_primary_energy": { + "value": 13000, + "description": "Embedded primary energy consumed (manufacturing phase)", + "type": "gauge", + "unit": "MJ", + "long_unit": "Mega Joules" + }, + "raw_data": { + "hardware_data": { + "disks": [ + { + "units": 1, + "logicalname": "/dev/nvme0n1", + "manufacturer": "toshiba", + "type": "ssd", + "capacity": 238 + } + ], + "cpus": [ + { + "units": 1, + "name": "Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz", + "vendor": "Intel Corp.", + "core_units": "4" + } + ], + "rams": [ + { + "units": 1, + "manufacturer": "Micron", + "capacity": 4 + }, + { + "units": 1, + "manufacturer": "Micron", + "capacity": 4 + } + ] + }, + "resources_data": "not implemented yet", + "boaviztapi_data": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 900, + "min": 461.8, + "max": 2089, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 138.6, + "min": 138.6, + "max": 138.6 + } + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.14, + "min": 0.09758, + "max": 0.2132, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 0.00002342, + "min": 0.00002342, + "max": 0.00002342 + } + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 13000, + "min": 6138, + "max": 27090, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 4694, + "min": 4694, + "max": 4694 + } + } + }, + "verbose": { + "duration": { + "value": 35040, + "unit": "hours" + }, + "ASSEMBLY-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 6.68, + "min": 6.68, + "max": 6.68, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.00000141, + "min": 0.00000141, + "max": 0.00000141, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 68.6, + "min": 68.6, + "max": 68.6, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 1 + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "CPU-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 40, + "min": 21.84, + "max": 163.6, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 10000, + "min": 587.5, + "max": 28900 + } + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.04081, + "min": 0.0408, + "max": 0.04084, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 0.0016, + "min": 0.0003382, + "max": 0.006783 + } + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 600, + "min": 359.9, + "max": 2267, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 300000, + "min": 332, + "max": 11960000, + "warnings": [ + "Uncertainty from technical characteristics is very important. Results should be interpreted with caution (see min and max values)" + ] + } + } + }, + "units": { + "value": 2, + "status": "ARCHETYPE", + "min": 2, + "max": 2 + }, + "die_size": { + "value": 521, + "status": "COMPLETED", + "unit": "mm2", + "source": "Average value for all families", + "min": 41.2, + "max": 3640 + }, + "duration": { + "value": 35040, + "unit": "hours" + }, + "avg_power": { + "value": 364.46, + "status": "COMPLETED", + "unit": "W", + "min": 364.46, + "max": 364.46 + }, + "time_workload": { + "value": 50, + "status": "ARCHETYPE", + "unit": "%", + "min": 0, + "max": 100 + }, + "usage_location": { + "value": "EEE", + "status": "DEFAULT", + "unit": "CodSP3 - NCS Country Codes - NATO" + }, + "use_time_ratio": { + "value": 1, + "status": "ARCHETYPE", + "unit": "/1", + "min": 1, + "max": 1 + }, + "hours_life_time": { + "value": 35040, + "status": "COMPLETED", + "unit": "hours", + "source": "from device", + "min": 35040, + "max": 35040 + }, + "params": { + "value": { + "a": 171.2, + "b": 0.0354, + "c": 36.89, + "d": -10.13 + }, + "status": "ARCHETYPE" + }, + "gwp_factor": { + "value": 0.38, + "status": "DEFAULT", + "unit": "kg CO2eq/kWh", + "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", + "min": 0.023, + "max": 1.13161 + }, + "adp_factor": { + "value": 6.42317e-8, + "status": "DEFAULT", + "unit": "kg Sbeq/kWh", + "source": "ADEME Base IMPACTS ®", + "min": 1.324e-8, + "max": 2.65575e-7 + }, + "pe_factor": { + "value": 12.873, + "status": "DEFAULT", + "unit": "MJ/kWh", + "source": "ADPf / (1-%renewable_energy)", + "min": 0.013, + "max": 468.15 + } + }, + "RAM-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 490, + "min": 209.2, + "max": 1179, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 8000, + "min": 263.7, + "max": 36040 + } + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.026, + "min": 0.01523, + "max": 0.04916, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 0.0013, + "min": 0.0001518, + "max": 0.008457 + } + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 6000, + "min": 2651, + "max": 14720, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": { + "value": 300000, + "min": 149, + "max": 14910000, + "warnings": [ + "Uncertainty from technical characteristics is very important. Results should be interpreted with caution (see min and max values)" + ] + } + } + }, + "units": { + "value": 8, + "status": "ARCHETYPE", + "min": 6, + "max": 10 + }, + "capacity": { + "value": 32, + "status": "ARCHETYPE", + "unit": "GB", + "min": 32, + "max": 32 + }, + "density": { + "value": 1.2443636363636363, + "status": "COMPLETED", + "unit": "GB/cm2", + "source": "Average of 11 rows", + "min": 0.625, + "max": 2.375 + }, + "duration": { + "value": 35040, + "unit": "hours" + }, + "avg_power": { + "value": 72.704, + "status": "COMPLETED", + "unit": "W", + "min": 54.52799999999999, + "max": 90.88 + }, + "time_workload": { + "value": 50, + "status": "ARCHETYPE", + "unit": "%", + "min": 0, + "max": 100 + }, + "usage_location": { + "value": "EEE", + "status": "DEFAULT", + "unit": "CodSP3 - NCS Country Codes - NATO" + }, + "use_time_ratio": { + "value": 1, + "status": "ARCHETYPE", + "unit": "/1", + "min": 1, + "max": 1 + }, + "hours_life_time": { + "value": 35040, + "status": "COMPLETED", + "unit": "hours", + "source": "from device", + "min": 35040, + "max": 35040 + }, + "params": { + "value": { + "a": 9.088 + }, + "status": "COMPLETED", + "source": "(ram_electrical_factor_per_go : 0.284) * (ram_capacity: 32.0) " + }, + "gwp_factor": { + "value": 0.38, + "status": "DEFAULT", + "unit": "kg CO2eq/kWh", + "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", + "min": 0.023, + "max": 1.13161 + }, + "adp_factor": { + "value": 6.42317e-8, + "status": "DEFAULT", + "unit": "kg Sbeq/kWh", + "source": "ADEME Base IMPACTS ®", + "min": 1.324e-8, + "max": 2.65575e-7 + }, + "pe_factor": { + "value": 12.873, + "status": "DEFAULT", + "unit": "MJ/kWh", + "source": "ADPf / (1-%renewable_energy)", + "min": 0.013, + "max": 468.15 + } + }, + "SSD-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 50, + "min": 23.53, + "max": 281, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.0017, + "min": 0.001055, + "max": 0.008809, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 600, + "min": 290.2, + "max": 3483, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 2 + }, + "capacity": { + "value": 1000, + "status": "ARCHETYPE", + "unit": "GB", + "min": 1000, + "max": 1000 + }, + "density": { + "value": 54.8842105263158, + "status": "COMPLETED", + "unit": "GB/cm2", + "source": "Average of 19 rows", + "min": 16.4, + "max": 128 + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "POWER_SUPPLY-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 150, + "min": 48.6, + "max": 243, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.05, + "min": 0.0166, + "max": 0.083, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 2100, + "min": 704, + "max": 3520, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 2, + "status": "ARCHETYPE", + "min": 2, + "max": 2 + }, + "unit_weight": { + "value": 2.99, + "status": "ARCHETYPE", + "unit": "kg", + "min": 1, + "max": 5 + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "CASE-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 150, + "min": 85.9, + "max": 150, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.0202, + "min": 0.0202, + "max": 0.02767, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 2200, + "min": 1229, + "max": 2200, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 1 + }, + "case_type": { + "value": "rack", + "status": "ARCHETYPE" + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "MOTHERBOARD-1": { + "impacts": { + "gwp": { + "unit": "kgCO2eq", + "description": "Total climate change", + "embedded": { + "value": 66.1, + "min": 66.1, + "max": 66.1, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "adp": { + "unit": "kgSbeq", + "description": "Use of minerals and fossil ressources", + "embedded": { + "value": 0.00369, + "min": 0.00369, + "max": 0.00369, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + }, + "pe": { + "unit": "MJ", + "description": "Consumption of primary energy", + "embedded": { + "value": 836, + "min": 836, + "max": 836, + "warnings": [ + "End of life is not included in the calculation" + ] + }, + "use": "not implemented" + } + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 1 + }, + "duration": { + "value": 35040, + "unit": "hours" + } + }, + "avg_power": { + "value": 10.4062055, + "status": "INPUT", + "unit": "W" + }, + "usage_location": { + "value": "EEE", + "status": "INPUT", + "unit": "CodSP3 - NCS Country Codes - NATO" + }, + "use_time_ratio": { + "value": 1, + "status": "ARCHETYPE", + "unit": "/1", + "min": 1, + "max": 1 + }, + "hours_life_time": { + "value": 35040, + "status": "COMPLETED", + "unit": "hours", + "source": "from device", + "min": 35040, + "max": 35040 + }, + "gwp_factor": { + "value": 0.38, + "status": "COMPLETED", + "unit": "kg CO2eq/kWh", + "source": "https://www.sciencedirect.com/science/article/pii/S0306261921012149", + "min": 0.38, + "max": 0.38 + }, + "adp_factor": { + "value": 6.42317e-8, + "status": "COMPLETED", + "unit": "kg Sbeq/kWh", + "source": "ADEME Base IMPACTS ®", + "min": 6.42317e-8, + "max": 6.42317e-8 + }, + "pe_factor": { + "value": 12.873, + "status": "COMPLETED", + "unit": "MJ/kWh", + "source": "ADPf / (1-%renewable_energy)", + "min": 12.873, + "max": 12.873 + }, + "units": { + "value": 1, + "status": "ARCHETYPE", + "min": 1, + "max": 1 + } + } + }, + "start_time": 1717500637.2979465, + "end_time": 1717504237.2979465, + "power_data": { + "raw_data": [ + { + "host": { + "consumption": 0, + "timestamp": 1717504204.5280154, + "components": { + "disks": [] + } + }, + "consumers": [], + "sockets": [] + }, + { + "host": { + "consumption": 20309356, + "timestamp": 1717504214.5485115, + "components": { + "disks": [ + { + "disk_type": "SSD", + "disk_mount_point": "/etc/hosts", + "disk_is_removable": false, + "disk_file_system": "ext4", + "disk_total_bytes": "250375106560", + "disk_available_bytes": "165655085056", + "disk_name": "/dev/nvme0n1p2" + } + ] + } + }, + "consumers": [ + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox", + "pid": 3099, + "resources_usage": { + "cpu_usage": "5.9772415", + "cpu_usage_unit": "%", + "memory_usage": "508436480", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 1213939.2, + "timestamp": 1717504214.5484614, + "container": null + }, + { + "exe": "/usr/bin/python3.9", + "cmdline": "/usr/bin/python3.9./uvicornboaviztapi.main:app--host0.0.0.0--port5000", + "pid": 176778, + "resources_usage": { + "cpu_usage": "5.3645115", + "cpu_usage_unit": "%", + "memory_usage": "131502080", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "751403008", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 1089497.6, + "timestamp": 1717504214.54841, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID58-isForBrowser-prefsLen32076-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{1e76e076-a55a-41cf-bf27-94855c01b247}3099truetab", + "pid": 101097, + "resources_usage": { + "cpu_usage": "2.813555", + "cpu_usage_unit": "%", + "memory_usage": "262508544", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 571414.9, + "timestamp": 1717504214.5484433, + "container": null + }, + { + "exe": "/usr/bin/gnome-shell", + "cmdline": "/usr/bin/gnome-shell", + "pid": 2063, + "resources_usage": { + "cpu_usage": "1.9507315", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 396181, + "timestamp": 1717504214.5483658, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen41490-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{87653da9-ac6d-4c8e-bd74-4723d5684bc9}3099truetab", + "pid": 3811, + "resources_usage": { + "cpu_usage": "0.887833", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 180313.16, + "timestamp": 1717504214.548356, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID152-isForBrowser-prefsLen32076-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{c4b6e702-62e0-4c2c-b312-b639f3da3c1c}3099truetab", + "pid": 173787, + "resources_usage": { + "cpu_usage": "0.52519697", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 106664.12, + "timestamp": 1717504214.5483842, + "container": null + }, + { + "exe": "/", + "cmdline": "runcinit", + "pid": 176900, + "resources_usage": { + "cpu_usage": "0.46267352", + "cpu_usage_unit": "%", + "memory_usage": "24141824", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 93966.01, + "timestamp": 1717504214.5483909, + "container": null + }, + { + "exe": "/usr/libexec/gnome-terminal-server", + "cmdline": "/usr/libexec/gnome-terminal-server", + "pid": 4836, + "resources_usage": { + "cpu_usage": "0.28760785", + "cpu_usage_unit": "%", + "memory_usage": "76136448", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 58411.3, + "timestamp": 1717504214.54837, + "container": null + }, + { + "exe": "/squashfs-root/usr/bin/nvim", + "cmdline": "/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.", + "pid": 96283, + "resources_usage": { + "cpu_usage": "0.21257971", + "cpu_usage_unit": "%", + "memory_usage": "227631104", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 43173.57, + "timestamp": 1717504214.548365, + "container": null + }, + { + "exe": "/usr/bin/ibus-daemon", + "cmdline": "/usr/bin/ibus-daemon--paneldisable", + "pid": 2598, + "resources_usage": { + "cpu_usage": "0.112542205", + "cpu_usage_unit": "%", + "memory_usage": "12480512", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 22856.596, + "timestamp": 1717504214.5483723, + "container": null + } + ], + "sockets": [ + { + "id": 0, + "consumption": 11652205, + "domains": [ + { + "name": "uncore", + "consumption": 180098, + "timestamp": 1717504214.530277 + }, + { + "name": "core", + "consumption": 8775168, + "timestamp": 1717504214.530263 + }, + { + "name": "dram", + "consumption": 1111438, + "timestamp": 1717504214.5302465 + } + ], + "timestamp": 1717504214.5299857 + } + ] + }, + { + "host": { + "consumption": 11439694, + "timestamp": 1717504224.6661015, + "components": { + "disks": [ + { + "disk_type": "SSD", + "disk_mount_point": "/etc/hosts", + "disk_is_removable": false, + "disk_file_system": "ext4", + "disk_total_bytes": "250375106560", + "disk_available_bytes": "165655097344", + "disk_name": "/dev/nvme0n1p2" + } + ] + } + }, + "consumers": [ + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox", + "pid": 3099, + "resources_usage": { + "cpu_usage": "5.2776732", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 603749.7, + "timestamp": 1717504224.6659212, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID152-isForBrowser-prefsLen32076-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{c4b6e702-62e0-4c2c-b312-b639f3da3c1c}3099truetab", + "pid": 173787, + "resources_usage": { + "cpu_usage": "3.1340103", + "cpu_usage_unit": "%", + "memory_usage": "174120960", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 358521.2, + "timestamp": 1717504224.6657825, + "container": null + }, + { + "exe": "/usr/bin/gnome-shell", + "cmdline": "/usr/bin/gnome-shell", + "pid": 2063, + "resources_usage": { + "cpu_usage": "2.5322802", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 289685.1, + "timestamp": 1717504224.665756, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID58-isForBrowser-prefsLen32076-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{1e76e076-a55a-41cf-bf27-94855c01b247}3099truetab", + "pid": 101097, + "resources_usage": { + "cpu_usage": "1.6547574", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 189299.19, + "timestamp": 1717504224.6658857, + "container": null + }, + { + "exe": "/squashfs-root/usr/bin/nvim", + "cmdline": "/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.", + "pid": 96283, + "resources_usage": { + "cpu_usage": "0.23818476", + "cpu_usage_unit": "%", + "memory_usage": "227631104", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 27247.607, + "timestamp": 1717504224.6657548, + "container": null + }, + { + "exe": "/usr/local/bin/scaphandre", + "cmdline": "/usr/local/bin/scaphandre--no-headerjson-s10--resources-f/app/data/power_data.json", + "pid": 176771, + "resources_usage": { + "cpu_usage": "0.1504325", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 17209.018, + "timestamp": 1717504224.6657345, + "container": null + }, + { + "exe": "/usr/libexec/gsd-media-keys", + "cmdline": "/usr/libexec/gsd-media-keys", + "pid": 2610, + "resources_usage": { + "cpu_usage": "0.06268021", + "cpu_usage_unit": "%", + "memory_usage": "27652096", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "887459840", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 7170.424, + "timestamp": 1717504224.665734, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen41490-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{87653da9-ac6d-4c8e-bd74-4723d5684bc9}3099truetab", + "pid": 3811, + "resources_usage": { + "cpu_usage": "0.050144166", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 5736.3394, + "timestamp": 1717504224.6657436, + "container": null + }, + { + "exe": "/usr/libexec/gnome-terminal-server", + "cmdline": "/usr/libexec/gnome-terminal-server", + "pid": 4836, + "resources_usage": { + "cpu_usage": "0.050144166", + "cpu_usage_unit": "%", + "memory_usage": "76136448", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "638849024", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 5736.3394, + "timestamp": 1717504224.6657631, + "container": null + }, + { + "exe": "/usr/bin/containerd", + "cmdline": "/usr/bin/containerd", + "pid": 699, + "resources_usage": { + "cpu_usage": "0.025072083", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 2868.1697, + "timestamp": 1717504224.6657722, + "container": null + } + ], + "sockets": [ + { + "id": 0, + "consumption": 4396806, + "domains": [ + { + "name": "uncore", + "consumption": 133312, + "timestamp": 1717504224.5596187 + }, + { + "name": "core", + "consumption": 1916276, + "timestamp": 1717504224.5595467 + }, + { + "name": "dram", + "consumption": 895722, + "timestamp": 1717504224.5594404 + } + ], + "timestamp": 1717504224.5583096 + } + ] + }, + { + "host": { + "consumption": 9875772, + "timestamp": 1717504234.7663224, + "components": { + "disks": [ + { + "disk_type": "SSD", + "disk_mount_point": "/etc/hosts", + "disk_is_removable": false, + "disk_file_system": "ext4", + "disk_total_bytes": "250375106560", + "disk_available_bytes": "165655089152", + "disk_name": "/dev/nvme0n1p2" + } + ] + } + }, + "consumers": [ + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox", + "pid": 3099, + "resources_usage": { + "cpu_usage": "2.9987452", + "cpu_usage_unit": "%", + "memory_usage": "508329984", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 296149.25, + "timestamp": 1717504234.76627, + "container": null + }, + { + "exe": "/usr/bin/gnome-shell", + "cmdline": "/usr/bin/gnome-shell", + "pid": 2063, + "resources_usage": { + "cpu_usage": "2.158093", + "cpu_usage_unit": "%", + "memory_usage": "308137984", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 213128.34, + "timestamp": 1717504234.7661667, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID58-isForBrowser-prefsLen32076-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{1e76e076-a55a-41cf-bf27-94855c01b247}3099truetab", + "pid": 101097, + "resources_usage": { + "cpu_usage": "1.7565873", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 173476.55, + "timestamp": 1717504234.7662466, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID152-isForBrowser-prefsLen32076-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{c4b6e702-62e0-4c2c-b312-b639f3da3c1c}3099truetab", + "pid": 173787, + "resources_usage": { + "cpu_usage": "1.4303639", + "cpu_usage_unit": "%", + "memory_usage": "164651008", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "2636976128", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 141259.48, + "timestamp": 1717504234.7661831, + "container": null + }, + { + "exe": "/usr/local/bin/scaphandre", + "cmdline": "/usr/local/bin/scaphandre--no-headerjson-s10--resources-f/app/data/power_data.json", + "pid": 176771, + "resources_usage": { + "cpu_usage": "0.22584693", + "cpu_usage_unit": "%", + "memory_usage": "33337344", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 22304.129, + "timestamp": 1717504234.766153, + "container": null + }, + { + "exe": "/squashfs-root/usr/bin/nvim", + "cmdline": "/squashfs-root/usr/bin/nvim--embed-u/home/repair/.local/share/lunarvim/lvim/init.lua.", + "pid": 96283, + "resources_usage": { + "cpu_usage": "0.22584693", + "cpu_usage_unit": "%", + "memory_usage": "227631104", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 22304.129, + "timestamp": 1717504234.766166, + "container": null + }, + { + "exe": "/usr/libexec/gsd-media-keys", + "cmdline": "/usr/libexec/gsd-media-keys", + "pid": 2610, + "resources_usage": { + "cpu_usage": "0.06273526", + "cpu_usage_unit": "%", + "memory_usage": "27652096", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "887459840", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 6195.5913, + "timestamp": 1717504234.7661529, + "container": null + }, + { + "exe": "/usr/lib/systemd/systemd-oomd", + "cmdline": "/lib/systemd/systemd-oomd", + "pid": 460, + "resources_usage": { + "cpu_usage": "0.037641153", + "cpu_usage_unit": "%", + "memory_usage": "6680576", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 3717.3545, + "timestamp": 1717504234.7661595, + "container": null + }, + { + "exe": "/snap/firefox/4336/usr/lib/firefox/firefox", + "cmdline": "/snap/firefox/4336/usr/lib/firefox/firefox-contentproc-childID2-isForBrowser-prefsLen41490-prefMapSize244787-jsInitLen231800-parentBuildID20240527194810-greomni/snap/firefox/4336/usr/lib/firefox/omni.ja-appomni/snap/firefox/4336/usr/lib/firefox/browser/omni.ja-appDir/snap/firefox/4336/usr/lib/firefox/browser{87653da9-ac6d-4c8e-bd74-4723d5684bc9}3099truetab", + "pid": 3811, + "resources_usage": { + "cpu_usage": "0.037641153", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 3717.3545, + "timestamp": 1717504234.7661598, + "container": null + }, + { + "exe": "/usr/bin/containerd", + "cmdline": "/usr/bin/containerd", + "pid": 699, + "resources_usage": { + "cpu_usage": "0.037641153", + "cpu_usage_unit": "%", + "memory_usage": "0", + "memory_usage_unit": "Bytes", + "memory_virtual_usage": "0", + "memory_virtual_usage_unit": "Bytes", + "disk_usage_write": "0", + "disk_usage_write_unit": "Bytes", + "disk_usage_read": "0", + "disk_usage_read_unit": "Bytes" + }, + "consumption": 3717.3545, + "timestamp": 1717504234.7661762, + "container": null + } + ], + "sockets": [ + { + "id": 0, + "consumption": 3165101, + "domains": [ + { + "name": "uncore", + "consumption": 48247, + "timestamp": 1717504234.6836913 + }, + { + "name": "core", + "consumption": 878365, + "timestamp": 1717504234.6834612 + }, + { + "name": "dram", + "consumption": 776832, + "timestamp": 1717504234.6832268 + } + ], + "timestamp": 1717504234.6821008 + } + ] + } + ], + "avg_power": 10.4062055, + "warning": "The time window is lower than one hour, but the energy consumption estimate is in Watt.Hour. So this is an extrapolation of the power usage profile on one hour. Be careful with this data. " + } + }, + "electricity_carbon_intensity": { + "value": 0.38, + "description": "Carbon intensity of the electricity mix. Mix considered : EEE", + "type": "gauge", + "unit": "kg CO2eq / kWh", + "long_unit": "Kilograms CO2 equivalent per KiloWattHour" + } +} From e3ebaf33975d1ad64ddf8b69dc87e06ee48a7040 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 17 Sep 2024 12:13:29 +0200 Subject: [PATCH 188/227] feat: add hdd as queryable component --- boagent/api/process.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/boagent/api/process.py b/boagent/api/process.py index 580d88c..a4365ee 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -172,6 +172,10 @@ def get_component_embedded_impact_values(self, queried_component): component_impact_shares = self.get_component_embedded_impact_shares( "SSD", self.storage_shares ) + elif queried_component == "hdd": + component_impact_shares = self.get_component_embedded_impact_shares( + "HDD", self.storage_shares + ) else: return "Queried component is not available for evaluation." From 67ac6a978f7840204220465c5618841e7c447880 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 17 Sep 2024 12:15:25 +0200 Subject: [PATCH 189/227] refactor: add embedded_impact_values as property of process class --- boagent/api/api.py | 16 +--------------- boagent/api/process.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 773528e..9b9f7d6 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -307,21 +307,7 @@ async def process_embedded_impacts( except InvalidPIDException as invalid_pid: return Response(status_code=400, content=invalid_pid.message) else: - process_cpu_embedded_impact_values = ( - queried_process.get_component_embedded_impact_values("cpu") - ) - process_ram_embedded_impact_values = ( - queried_process.get_component_embedded_impact_values("ram") - ) - process_ssd_embedded_impact_values = ( - queried_process.get_component_embedded_impact_values("ssd") - ) - - process_embedded_impact_values = { - "process_cpu_embedded_impact_values": process_cpu_embedded_impact_values, - "process_ram_embedded_impact_values": process_ram_embedded_impact_values, - "process_ssd_embedded_impact_values": process_ssd_embedded_impact_values, - } + process_embedded_impact_values = queried_process.embedded_impact_values json_content = json.dumps(process_embedded_impact_values) return Response(status_code=200, content=json_content) diff --git a/boagent/api/process.py b/boagent/api/process.py index a4365ee..23badc3 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -9,6 +9,7 @@ def __init__(self, metrics_file_path, pid): self.validate_pid(pid) self._pid = pid self.process_info = self.get_process_info() + self.embedded_impact_values = self.get_embedded_impact_values() @property def processed_metrics(self): @@ -221,3 +222,22 @@ def get_component_embedded_impact_values(self, queried_component): f"pe_{queried_component}_min_impact": pe_min, } return component_embedded_impact_values + + def get_embedded_impact_values(self): + process_embedded_impact_values = {} + components = ["cpu", "ram", "hdd", "ssd"] + + for component in components: + try: + process_component_embedded_impact_values = ( + self.get_component_embedded_impact_values(component) + ) + process_embedded_impact_values[ + f"process_{component}_embedded_impact_values" + ] = process_component_embedded_impact_values + except KeyError as absent_component: + print( + f"Queried component is not present in Boagent metrics: {absent_component}" + ) + + return process_embedded_impact_values From 50e71bf37d616befcedfab88fe8771e6f4ef9a03 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 17 Sep 2024 12:16:03 +0200 Subject: [PATCH 190/227] test: check hdd embedded impacts are present --- tests/api/test_api_integration.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/api/test_api_integration.py b/tests/api/test_api_integration.py index fc718f7..8ac98b6 100644 --- a/tests/api/test_api_integration.py +++ b/tests/api/test_api_integration.py @@ -213,6 +213,7 @@ def test_get_process_embedded_impacts_with_success(self, mocked_get_metrics): self.assertIn("process_cpu_embedded_impact_values", response.json()) self.assertIn("process_ram_embedded_impact_values", response.json()) self.assertIn("process_ssd_embedded_impact_values", response.json()) + self.assertIn("process_hdd_embedded_impact_values", response.json()) @patch("boagent.api.api.get_metrics") def test_get_process_embedded_impacts_with_error_if_pid_not_found_in_metrics_data( From 12cb70d95f7b8f43c999810687bf44b7611e52af Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 17 Sep 2024 12:16:35 +0200 Subject: [PATCH 191/227] test: embedded_impact_values property and error handling --- tests/api/test_api_process.py | 68 ++++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 17 deletions(-) diff --git a/tests/api/test_api_process.py b/tests/api/test_api_process.py index 3b3078d..461c45c 100644 --- a/tests/api/test_api_process.py +++ b/tests/api/test_api_process.py @@ -13,21 +13,12 @@ mock_boaviztapi_response_not_verbose = os.path.join( f"{current_dir}", "../mocks/boaviztapi_response_not_verbose.json" ) -mock_boaviztapi_response_verbose = os.path.join( - f"{current_dir}", "../mocks/boaviztapi_response_verbose.json" -) -mock_formatted_scaphandre = os.path.join( - f"{current_dir}", "../mocks/formatted_power_data_one_hour.json" -) -mock_formatted_scaphandre_with_processes = os.path.join( - f"{current_dir}", "../mocks/formatted_scaphandre.json" -) -mock_get_metrics_not_verbose = os.path.join( - f"{current_dir}", "../mocks/get_metrics_not_verbose.json" -) mock_get_metrics_verbose = os.path.join( f"{current_dir}", "../mocks/get_metrics_verbose.json" ) +mock_get_metrics_verbose_no_hdd = os.path.join( + f"{current_dir}", "../mocks/get_metrics_verbose_no_hdd.json" +) hardware_cli = os.path.join(f"{current_dir}", "../../boagent/hardware/hardware_cli.py") hardware_data = os.path.join(f"{current_dir}", "../../boagent/api/hardware_data.json") @@ -155,7 +146,7 @@ def test_get_process_storage_share_by_timestamp(self): self.assertEqual(storage_share, expected_storage_shares[index]) assert type(process_storage_shares) is list - def test_get_embedded_impact_share_for_storage_by_timestamp(self): + def test_get_embedded_impact_share_for_ssd_by_timestamp(self): storage_embedded_impact_shares = ( self.process.get_component_embedded_impact_shares( @@ -169,6 +160,20 @@ def test_get_embedded_impact_share_for_storage_by_timestamp(self): assert type(storage_embedded_impact_share[1]) is float assert type(storage_embedded_impact_shares) + def test_get_embedded_impact_share_for_hdd_by_timestamp(self): + + storage_embedded_impact_shares = ( + self.process.get_component_embedded_impact_shares( + "HDD", self.process.storage_shares + ) + ) + + for storage_embedded_impact_share in storage_embedded_impact_shares: + assert type(storage_embedded_impact_share) is tuple + for value in storage_embedded_impact_share: + assert type(storage_embedded_impact_share[1]) is float + assert type(storage_embedded_impact_shares) + def test_get_embedded_impact_share_for_ram_by_timestamp(self): ram_embedded_impact_shares = self.process.get_component_embedded_impact_shares( @@ -234,13 +239,42 @@ def test_get_embedded_impact_values_with_error_if_invalid_component_queried(self def test_get_embedded_impact_values_for_ssd(self): impact_criterias = ["gwp", "adp", "pe"] - storage_embedded_impact_values = ( - self.process.get_component_embedded_impact_values("ssd") + ssd_embedded_impact_values = self.process.get_component_embedded_impact_values( + "ssd" ) - assert type(storage_embedded_impact_values) is dict + assert type(ssd_embedded_impact_values) is dict for criteria in impact_criterias: - assert f"{criteria}_ssd_average_impact" in storage_embedded_impact_values + assert f"{criteria}_ssd_average_impact" in ssd_embedded_impact_values + + def test_get_embedded_impact_values_for_hdd(self): + + impact_criterias = ["gwp", "adp", "pe"] + hdd_embedded_impact_values = self.process.get_component_embedded_impact_values( + "hdd" + ) + + assert type(hdd_embedded_impact_values) is dict + for criteria in impact_criterias: + assert f"{criteria}_hdd_average_impact" in hdd_embedded_impact_values + + def test_get_all_components_embedded_impact_values(self): + + process_embedded_impacts = self.process.embedded_impact_values + self.assertIn("process_cpu_embedded_impact_values", process_embedded_impacts) + self.assertIn("process_ram_embedded_impact_values", process_embedded_impacts) + self.assertIn("process_ssd_embedded_impact_values", process_embedded_impacts) + self.assertIn("process_hdd_embedded_impact_values", process_embedded_impacts) + + def test_get_components_embedded_impact_values_with_hdd_absent_from_get_metrics( + self, + ): + self.process = Process(mock_get_metrics_verbose_no_hdd, self.pid) + process_embedded_impacts = self.process.embedded_impact_values + self.assertIn("process_cpu_embedded_impact_values", process_embedded_impacts) + self.assertIn("process_ram_embedded_impact_values", process_embedded_impacts) + self.assertIn("process_ssd_embedded_impact_values", process_embedded_impacts) + self.assertNotIn("process_hdd_embedded_impact_values", process_embedded_impacts) loader = TestLoader() From 8e5a53ee6a1a4f9c77acb13b7dab9f4619267ecf Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 18 Sep 2024 15:59:31 +0200 Subject: [PATCH 192/227] refactor: embedded_impact_values as property --- boagent/api/process.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/boagent/api/process.py b/boagent/api/process.py index 23badc3..41425d8 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -9,7 +9,6 @@ def __init__(self, metrics_file_path, pid): self.validate_pid(pid) self._pid = pid self.process_info = self.get_process_info() - self.embedded_impact_values = self.get_embedded_impact_values() @property def processed_metrics(self): @@ -223,7 +222,8 @@ def get_component_embedded_impact_values(self, queried_component): } return component_embedded_impact_values - def get_embedded_impact_values(self): + @property + def embedded_impact_values(self): process_embedded_impact_values = {} components = ["cpu", "ram", "hdd", "ssd"] From 9c9e953ff82e8a2c8c42e6ddfd0b7de2f2411ba4 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 18 Sep 2024 16:00:09 +0200 Subject: [PATCH 193/227] fix: add boolean for fetch_hardware on process route --- boagent/api/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 9b9f7d6..b6d91a8 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -280,6 +280,7 @@ async def process_embedded_impacts( end_time: str = "0.0", location: str = "EEE", lifetime: float = DEFAULT_LIFETIME, + fetch_hardware: bool = False, ): """ process_id: The process ID queried to be evaluated for embedded impacts for each available component. @@ -291,7 +292,6 @@ async def process_embedded_impacts( verbose = True measure_power = True - fetch_hardware = True metrics_data = get_metrics( iso8601_or_timestamp_as_timestamp(start_time), From 84dd6820a53c862c14f5aa826b99fe4d23aa2149 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 19 Sep 2024 17:46:53 +0200 Subject: [PATCH 194/227] fix: send total size of ssd and not used storage --- boagent/hardware/lshw.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py index a413255..4bfc248 100644 --- a/boagent/hardware/lshw.py +++ b/boagent/hardware/lshw.py @@ -140,11 +140,8 @@ def find_storage(self, obj): device["ModelNumber"] ).lower(), "type": "ssd", + "capacity": device["PhysicalSize"] // 1073741824, } - if "UsedSize" in device: - d["capacity"] = device["UsedSize"] // 1073741824 - if "UsedBytes" in device: - d["capacity"] = device["UsedBytes"] // 1073741824 self.disks.append(d) except Exception: pass From d1172746707a49268a86d9c88260111b722cfb6c Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 19 Sep 2024 17:48:10 +0200 Subject: [PATCH 195/227] chore: remove disk and ram folders --- boagent/hardware/disk/README.md | 18 --- boagent/hardware/disk/__init__.py | 1 - boagent/hardware/disk/disk.py | 193 ------------------------------ boagent/hardware/ram/__init__.py | 1 - boagent/hardware/ram/dmidecode.py | 110 ----------------- boagent/hardware/ram/meminfo.py | 34 ------ boagent/hardware/ram/model.py | 15 --- boagent/hardware/ram/ram.py | 17 --- 8 files changed, 389 deletions(-) delete mode 100644 boagent/hardware/disk/README.md delete mode 100644 boagent/hardware/disk/__init__.py delete mode 100644 boagent/hardware/disk/disk.py delete mode 100644 boagent/hardware/ram/__init__.py delete mode 100644 boagent/hardware/ram/dmidecode.py delete mode 100644 boagent/hardware/ram/meminfo.py delete mode 100644 boagent/hardware/ram/model.py delete mode 100644 boagent/hardware/ram/ram.py diff --git a/boagent/hardware/disk/README.md b/boagent/hardware/disk/README.md deleted file mode 100644 index 918a3e6..0000000 --- a/boagent/hardware/disk/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Disk hardware information retrieval. -## Linux -### Drives detection -Hardware drive information can be retrieved with sysfs (mounted on `/sys`). Partitions and -disks (real ones and software raids) can be found under `/sys/dev/block/`. If we are only -interrested in drives, then `/sys/block/` will be the root path of choice. - -Under the `/sys/block/` directory, we will find soft links pointing to devices. -For the running kernel, _virtual_ drives are pointing to paths that looks like `.*/devices/virtual/.*`. -Virtual drives can be `lvm` volumes or `software raid` volumes. -For now on, other patterns can be considered as _real_ drives. One big warning here though, -if we are running in a virtual machine or a containerized environnement then the kernel will think -it is running on real drives. - -## MacOS -TBD -## Windows -TBD diff --git a/boagent/hardware/disk/__init__.py b/boagent/hardware/disk/__init__.py deleted file mode 100644 index 4faf064..0000000 --- a/boagent/hardware/disk/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .disk import Partition, Disk, DiskException, search_physical_drives diff --git a/boagent/hardware/disk/disk.py b/boagent/hardware/disk/disk.py deleted file mode 100644 index 123dc72..0000000 --- a/boagent/hardware/disk/disk.py +++ /dev/null @@ -1,193 +0,0 @@ -from dataclasses import dataclass -import os -import re - - -class DiskException(Exception): - pass - - -@dataclass -class Partition: - major: int | None = None - minor: int | None = None - blocks: int | None = None - name: str | None = None - - @classmethod - def from_proc(cls, data=None): - if not data: - raise DiskException("No data found!") - - data = data.strip().split() - obj = { - "major": int(data[0]), - "minor": int(data[1]), - "blocks": int(data[2]), - "name": data[3], - } - return cls(**obj) - - -class Disk: - def __init__(self, sysfs_device_path): - self._type: str = "type" - self._size: int = 0 - self._blocks: int | str = 0 - self._model: str = "model" - self._vendor: str = "vendor" - self._major_minor: str = "major:minor" - self._partitions: list = [] - self._sysfs_path: str = sysfs_device_path - self._name: str = os.path.basename(sysfs_device_path) - self._looked_up: bool = False - - @property - def type(self): - return self._type - - @property - def size(self): - return self._size - - @property - def model(self): - return self._model - - @property - def vendor(self): - self._vendor = self.__check_vendor(self._model).lower() - return self._vendor - - @staticmethod - def __try_to_read_first_line(item_path: str, default_value: str) -> str: - first_line = default_value - if os.path.exists(item_path): - with open(item_path, "r") as f: - first_line = f.readline().strip() - return first_line - - @staticmethod - # If one of the strings in /sys/block/***/device/model has numbers, it is not a valid vendor - def __check_vendor(model_string: str) -> str: - split_model = model_string.split(" ") - model_first_str = split_model[0] - model_second_str = split_model[1] - check_first_string_for_numbers = re.search("\\d", model_first_str) - result = bool(check_first_string_for_numbers) - if result: - return model_second_str - else: - return model_first_str - - @staticmethod - def __safe_int(maybeint: str) -> int | str: - try: - return int(maybeint) - except ValueError: - return "Unknown" - - @staticmethod - def __rotational_info_to_disk_type(info): - disk_type = "Unknown" - iinfo = Disk.__safe_int(info) - if iinfo is not None: - if iinfo == 0: - disk_type = "ssd" - elif iinfo == 1: - disk_type = "hdd" - return disk_type - - def _populate_partitions(self): - """ - Retrieve partitions information for one device from sysfs - """ - part_info_path_base = f"{self._sysfs_path}/{self._name}" - index = 1 - part_info_path = f"{part_info_path_base}{index}" - while os.path.exists(part_info_path): - majmin = Disk.__try_to_read_first_line( - f"{part_info_path}/dev", "-1:-1" - ).split(":") - - self._partitions.append( - Partition( - major=Disk.__safe_int(majmin[0]), - minor=Disk.__safe_int(majmin[1]), - blocks=Disk.__safe_int( - Disk.__try_to_read_first_line(f"{part_info_path}/size", 0) - ), - name=f"{self._name}{index}", - ) - ) - index += 1 - part_info_path = f"{part_info_path_base}{index}" - - def lookup(self): - """ - Retrieve disk information from /sys/block/xxx where xxx is device logical name. - Data read/guessed : - * disk model (usually "Vendor Model") - * disk type (hdd / ssd), guessed from /sys/block/xxx/queue/rotational - * disk size, computed from sectors count - * partitions - """ - - if self._looked_up: - return - - self._model = Disk.__try_to_read_first_line( - f"{self._sysfs_path}/device/model", "Unknown model" - ) - rotational = Disk.__try_to_read_first_line( - f"{self._sysfs_path}/queue/rotational", "Unknown" - ) - self._type = Disk.__rotational_info_to_disk_type(rotational) - self._major_minor = Disk.__try_to_read_first_line( - f"{self._sysfs_path}/dev", "Unknown" - ) - sectors_count = Disk.__safe_int( - Disk.__try_to_read_first_line(f"{self._sysfs_path}/size", "Unknown") - ) - if type(sectors_count) is int: - # Linux uses 512 bytes sectors - self._size = sectors_count // (2 * 1024 * 1024) - self._blocks = sectors_count - self._populate_partitions() - - self._looked_up = True - - def __repr__(self): - if not self._looked_up: - self.lookup() - - ret = "" - ret = f"Disk ({self._major_minor}) {self._name}: \n" - ret += f"\tBlocks: {self._blocks}\n" - ret += f"\tSize: {self._size}Gb\n" - ret += f"\tModel: {self._model}\n" - ret += f"\tType: {self._type}\n" - ret += "\n" - - ret += f"Disk has {len(self._partitions)} partition(s): \n" - for part in self._partitions: - if part.minor != 0: - ret += f"\tBlocks: {part.blocks}\n" - ret += f"\tSize: {part.blocks // (2 * 1024 * 1024)}Gb\n" - ret += f"\tName: {part.name}\n" - ret += "\n" - - return ret - - -def search_physical_drives(): - disks = [] - - virtual_drive_pattern = re.compile(".*/devices/virtual/.*") - for possible_drive in os.scandir("/sys/block"): - realpath = os.path.realpath(possible_drive.path) - # path seems to point to a "real" drive - if virtual_drive_pattern.match(realpath) is None: - disks.append(Disk(sysfs_device_path=realpath)) - - return disks diff --git a/boagent/hardware/ram/__init__.py b/boagent/hardware/ram/__init__.py deleted file mode 100644 index 5dc23da..0000000 --- a/boagent/hardware/ram/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .ram import get_ram_info diff --git a/boagent/hardware/ram/dmidecode.py b/boagent/hardware/ram/dmidecode.py deleted file mode 100644 index 9ca5688..0000000 --- a/boagent/hardware/ram/dmidecode.py +++ /dev/null @@ -1,110 +0,0 @@ -import re -import subprocess - -from typing import Optional, Mapping, List - -from .model import MemoryDevice - - -class DMIDecodeError(Exception): - pass - - -def get_dmidecode_info() -> List[MemoryDevice]: - try: - cmd_output = execute_dmidecode() - return parse_dmidecode(cmd_output) - except Exception as e: - raise DMIDecodeError("cannot extract ram info from dmidecode.") from e - - -def execute_dmidecode() -> Optional[str]: - proc = subprocess.Popen(["dmidecode", "-t", "17"], stdout=subprocess.PIPE) - stdout, stderr = proc.communicate() - if proc.returncode > 0: - raise RuntimeError("failed to run dmidecode command.") - else: - return stdout.decode() - - -def parse_dmidecode(dmidecode_dump: str) -> List[MemoryDevice]: - memory_devices = [] - for record in dmidecode_dump.split("\n\n"): - if skip_record(record): - continue - - record_lines = record.split("\n") - record_map = build_record_map(record_lines) - - if not is_record_map_valid(record_map): - continue - - memory_devices.append(parse_record_map_to_memory_device(record_map)) - return memory_devices - - -def skip_record(record) -> bool: - if len(record.split("\n")) < 4: - return True - return False - - -def build_record_map(record_lines: List[str]) -> Mapping[str, str]: - record_map = {} - for raw_line in record_lines: - if skip_record_line(raw_line): - continue - line = raw_line.replace("\t", "") - line = line.strip() - key, value = line.split(":") - value = value.strip() - record_map[key] = value - return record_map - - -def skip_record_line(line: str) -> bool: - if not line.startswith("\t"): - return True - return False - - -def is_record_map_valid(record_map: Mapping) -> bool: - if re.search(r"empty", record_map["Manufacturer"], re.IGNORECASE): - return False - return True - - -def parse_record_map_to_memory_device(record_map: Mapping[str, str]): - size = record_map.get("Size") - if size: - size = parse_size_to_gb(size) - - speed = record_map.get("Speed") - if speed: - speed = parse_speed_to_mt_s(speed) - - return MemoryDevice( - manufacturer=record_map.get("Manufacturer"), - model=record_map.get("Part Number"), - size_gb=size, - type_=record_map.get("Type"), - speed_mt_s=speed, - form_factor=record_map.get("Form Factor"), - ) - - -def parse_size_to_gb(size_str: str) -> int: - size = re.search(r"[0-9]+", size_str) - if size: - size = int(size[0]) - if "MB" in size_str: - size = int(size / 1024) - return size - return 0 - - -def parse_speed_to_mt_s(speed_str: str) -> int: - speed = re.search(r"[0-9]+", speed_str) - if speed: - return int(speed[0]) - return 0 diff --git a/boagent/hardware/ram/meminfo.py b/boagent/hardware/ram/meminfo.py deleted file mode 100644 index 556642b..0000000 --- a/boagent/hardware/ram/meminfo.py +++ /dev/null @@ -1,34 +0,0 @@ -import re - -from typing import List - -from .model import MemoryDevice - -CONVERT_KB_IN_GB = 9.536e-7 - - -class MemInfoError(Exception): - pass - - -def get_meminfo() -> List[MemoryDevice]: - try: - memory_size_kb = get_total_memory_in_kb() - memory_size_gb = convert_kb_in_gb(memory_size_kb) - return [MemoryDevice(size_gb=memory_size_gb)] - except Exception as e: - raise MemInfoError("cannot extract ram info from meminfo.") from e - - -def get_total_memory_in_kb() -> int: - with open("/proc/meminfo", "r") as f: - for line in f.readlines(): - if "MemTotal" in line: - mem_total_line = line.strip() - break - total_size_kb = int(re.search(r"[0-9]+", mem_total_line)[0]) - return total_size_kb - - -def convert_kb_in_gb(value: int) -> int: - return int(value * CONVERT_KB_IN_GB) diff --git a/boagent/hardware/ram/model.py b/boagent/hardware/ram/model.py deleted file mode 100644 index 40bde47..0000000 --- a/boagent/hardware/ram/model.py +++ /dev/null @@ -1,15 +0,0 @@ -from dataclasses import dataclass -from typing import Optional - - -# TODO: To be replaced by ComponentRAM from openapi client. - - -@dataclass() -class MemoryDevice: - manufacturer: Optional[str] = None - model: Optional[str] = None - size_gb: Optional[int] = None - type_: Optional[str] = None - speed_mt_s: Optional[int] = None - form_factor: Optional[str] = None diff --git a/boagent/hardware/ram/ram.py b/boagent/hardware/ram/ram.py deleted file mode 100644 index eb0ecea..0000000 --- a/boagent/hardware/ram/ram.py +++ /dev/null @@ -1,17 +0,0 @@ -from typing import List, Optional - -from .dmidecode import get_dmidecode_info, DMIDecodeError -from .meminfo import get_meminfo, MemInfoError -from .model import MemoryDevice - - -def get_ram_info() -> Optional[List[MemoryDevice]]: - try: - return get_dmidecode_info() - except DMIDecodeError: - pass - - try: - return get_meminfo() - except MemInfoError: - pass From 3356de8864b02207c7386ce372f13f2e74eba5fd Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 19 Sep 2024 18:00:58 +0200 Subject: [PATCH 196/227] chore: remove dead code, concerning database, cron, pandas --- boagent/api/api.py | 533 +------------------------------ boagent/api/database.py | 257 --------------- boagent/hardware/hardware_cli.py | 32 -- 3 files changed, 2 insertions(+), 820 deletions(-) delete mode 100644 boagent/api/database.py diff --git a/boagent/api/api.py b/boagent/api/api.py index b6d91a8..8efdebf 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -1,14 +1,6 @@ import json -import math -import os import time -import requests -import pandas as pd - -from pytz import UTC, utc -from datetime import datetime, timedelta -from typing import Dict, Any, Tuple, List, Optional, Union -from croniter import croniter +from typing import Dict, Any, List, Union from fastapi import FastAPI, Response, Body from fastapi.staticfiles import StaticFiles from fastapi.responses import HTMLResponse @@ -26,15 +18,6 @@ from .config import Settings from .process import Process - -from .database import ( - get_session, - select_metric, - get_most_recent_data, - get_max, - new_highlight_spikes, -) - from .models import WorkloadTime, time_workload_example settings = Settings() @@ -98,30 +81,6 @@ async def web(): return res -@app.get("/csv", tags=["csv"]) -async def csv( - data: str, since: str = "now", until: str = "24h", inwatt: bool = True -) -> Response: - start_date, stop_date = parse_date_info(since, until) - - """session = get_session(DB_PATH) - df = select_metric(session, data, start_date, stop_date) - df['timestamp'] = df['timestamp'].apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S')) - session.close() - - if data == "power" and inwatt: - df['value'] = df['value'] / 1000.0 - - return Response( - content=df.to_csv(index=False), - media_type="text/csv" - )""" - - return Response( - status_code=501, content="Converting data to CSV is not implemented yet." - ) - - @app.get("/yearly_embedded") async def yearly_embedded(): hardware_data = get_hardware_data(False) @@ -139,47 +98,6 @@ async def yearly_embedded(): ) -@app.get("/yearly_operational") -async def operational_impact_yearly(): - """since = "now" - until = "24h" - start_date, stop_date = parse_date_info(since, until) - session = get_session(DB_PATH) - - df_power = select_metric(session, 'power', start_date, stop_date) - df_power['power_watt'] = df_power['value'] / 1000 - # df_power = df_power.drop(columns=['value']) - df_power = df_power.set_index('timestamp') - - df_carbon_intensity = select_metric(session, 'carbonintensity', start_date, stop_date) - df_carbon_intensity['carbon_intensity_g_per_watt_second'] = df_carbon_intensity['value'] / (1000 * 3600) - - yearly_operational = (df_power['power_watt'].mean()*df_carbon_intensity["carbon_intensity_g_per_watt_second"].mean())*(3600*24*365) # in gCO2eq - - return round(yearly_operational/1000.0) # in kgCO2eq""" - - return Response( - status_code=501, - content="Getting yearly operational impact is not implemented yet.", - ) - - -@app.get("/last_data") -async def last_data(table_name: str) -> Response: - """data = get_most_recent_data(table_name) - if data is None: - return Response(status_code=404) - else: - df = pd.DataFrame([[data.timestamp, data.value]], columns=['timestamp', 'value']) - return Response( - content=df.to_csv(index=False), - media_type="text/csv", - status_code=200)""" - return Response( - status_code=501, content="Getting last data is not implemented yet." - ) - - @app.get("/metrics", tags=["metrics"]) async def metrics( start_time: str = "0.0", @@ -312,162 +230,6 @@ async def process_embedded_impacts( return Response(status_code=200, content=json_content) -@app.get("/last_info") -async def last_info(): - res = { - "power": get_most_recent_data("power"), - "carbonintensity": get_most_recent_data("carbonintensity"), - "cpu": get_most_recent_data("cpu"), - "ram": get_most_recent_data("ram"), - } - - return res - - -@app.get("/max_info") -async def max_info(): - res = { - "power": get_max("power"), - "carbonintensity": get_max("carbonintensity"), - "ram": get_max("ram"), - "cpu": get_max("cpu"), - } - return res - - -@app.get("/all_cron") -async def all_cron(): - return get_cron_info() - - -@app.get("/update") -async def update(): - """response = query_electricity_carbon_intensity() - info = parse_electricity_carbon_intensity(response) - session = get_session(DB_PATH) - - add_from_scaphandre(session) # lots lot insert_metric called here - if info['value'] > 0: - insert_metric(session=session, metric_name='carbonintensity', timestamp=info['timestamp'], value=info['value']) - session.commit() - session.close()""" - return Response(status_code=501, content="Update route is not implemented yet.") - - -@app.get("/carbon_intensity_forecast") -async def carbon_intensity_forecast(since: str = "now", until: str = "24h") -> Response: - """df = carbon_intensity_forecast_data(since, until) - df = new_highlight_spikes(df, "value") - return Response( - content=df.to_csv(index=False), - media_type="text/csv" - )""" - return Response( - status_code=501, - content="Getting carbon intensity forecast is not implemented yet.", - ) - - -def carbon_intensity_forecast_data(since: str, until: str) -> pd.DataFrame: - start_date, stop_date = parse_date_info(since, until, forecast=True) - start_date, stop_date = start_date, stop_date - - start_date = upper_round_date_minutes_with_base(start_date, base=5) - response = query_forecast_electricity_carbon_intensity(start_date, stop_date) - forecasts = parse_forecast_electricity_carbon_intensity(response) - return pd.DataFrame(forecasts) - - -@app.get("/carbon_intensity") -async def carbon_intensity(since: str = "now", until: str = "24h") -> Response: - """_, stop_date = parse_date_info(since, until, forecast=True) - start_date, now = parse_date_info(since, until, forecast=False) - - session = get_session(DB_PATH) - df_history = select_metric(session, 'carbonintensity', start_date, now) - - now = upper_round_date_minutes_with_base(now, base=5) - response = query_forecast_electricity_carbon_intensity(now, stop_date) - forecasts = parse_forecast_electricity_carbon_intensity(response) - df_forecast = pd.DataFrame(forecasts) - df_forecast['timestamp'] = df_forecast['timestamp'].apply( - lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%SZ')) - - df = pd.concat([df_history, df_forecast]) - df = df[['timestamp', 'value']] - df = new_highlight_spikes(df, "value") - df['timestamp'] = df['timestamp'].apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S')) - return Response( - content=df.to_csv(index=False), - media_type="text/csv" - )""" - return Response( - status_code=501, content="Getting carbon intensity is not implemented yet." - ) - - -@app.get("/init_carbon_intensity") -async def init_carbon_intensity(): - """engine = get_engine(DB_PATH) - CarbonIntensity.__table__.drop(engine) - create_database(engine) - - session = get_session(DB_PATH) - now = datetime.utcnow() - curr_date = now - timedelta(hours=24) - - while curr_date < now: - # TODO: make bulk select in boaviztapi - response = query_electricity_carbon_intensity(curr_date, curr_date + timedelta(minutes=5)) - info = parse_electricity_carbon_intensity(response) - insert_metric(session, 'carbonintensity', info['timestamp'], info['value']) - curr_date += timedelta(minutes=5) - session.commit()""" - return Response( - status_code=501, content="Init Carbon intensity is not implemented yet." - ) - - -@app.get("/impact") -async def impact(since: str = "now", until: str = "24h") -> Response: - """start_date, stop_date = parse_date_info(since, until) - session = get_session(DB_PATH) - - df_power = select_metric(session, 'power', start_date, stop_date) - df_power['power_watt'] = df_power['value'] / 1000 - df_power = df_power.drop(columns=['value']) - df_power = df_power.set_index('timestamp') - df_power = df_power.resample('1s').mean() - df_power = df_power.fillna(method='ffill') - - df_carbon_intensity = select_metric(session, 'carbonintensity', start_date, stop_date) - df_carbon_intensity['carbon_intensity_g_per_watt_second'] = df_carbon_intensity['value'] / (1000 * 3600) - df_carbon_intensity = df_carbon_intensity.drop(columns=['value']) - df_carbon_intensity = df_carbon_intensity.set_index('timestamp') - df_carbon_intensity = df_carbon_intensity.resample('1s').mean() - df_carbon_intensity = df_carbon_intensity.fillna(method='ffill') - df = df_power.merge(df_carbon_intensity, on='timestamp') - df['operational'] = df['power_watt'] * df['carbon_intensity_g_per_watt_second'] - - hardware_data = get_hardware_data(False) - boaviztapi_data = query_machine_impact_data( - model=None, - configuration=generate_machine_configuration(hardware_data), - usage={} - ) - - if "manufacturer" in boaviztapi_data: - yearly_embedded_emissions = boaviztapi_data["impacts"]["gwp"]["manufacturer"] / DEFAULT_LIFETIME - - df['embedded'] = yearly_embedded_emissions / (3.6*24*365) # from kgCO2eq/year to gCO2eq/s - df = df.drop(columns=['power_watt', 'carbon_intensity_g_per_watt_second']).reset_index() - return Response( - content=df.to_csv(index=False), - media_type="text/csv" - )""" - return Response(status_code=501, content="Getting impact is not implemented yet.") - - def get_metrics( start_time: float, end_time: float, @@ -567,7 +329,7 @@ def get_metrics( """ res["calculated_emissions"] = { "value": boaviztapi_data["impacts"]["gwp"]["value"] * ratio + boaviztapi_data["impacts"]["gwp"]["use"]["value"], - "description": "Total Green House Gaz emissions calculated for manufacturing and usage phases, between " + "description": "Total Green House Gas emissions calculated for manufacturing and usage phases, between " "start_time and end_time", "type": "gauge", "unit": "kg CO2eq", @@ -744,294 +506,3 @@ def generate_machine_configuration(hardware_data) -> Dict[str, Any]: # TODO: if cpu is a small one, guess that power supply is light/average weight of a laptops power supply ? } return config - - -def query_electricity_carbon_intensity( - start_date: Optional[datetime] = None, stop_date: Optional[datetime] = None -) -> Dict[str, Any]: - """DEPRECATED BOAVIZTAPI ROUTE""" - url = ( - BOAVIZTAPI_ENDPOINT - + f"/v1/usage_router/gwp/current_intensity?location={AZURE_LOCATION}" - ) - start_date = start_date or (datetime.utcnow() - timedelta(minutes=5)) - stop_date = stop_date or datetime.utcnow() - response = requests.post( - url, - json={ - "source": "carbon_aware_api", - "url": CARBON_AWARE_API_ENDPOINT, - "token": CARBON_AWARE_API_TOKEN, - "start_date": start_date.strftime("%Y-%m-%dT%H:%M:%SZ"), - "stop_date": stop_date.strftime("%Y-%m-%dT%H:%M:%SZ"), - }, - ) - return response.json() - - -def parse_electricity_carbon_intensity(carbon_aware_api_response: Dict[str, Any]): - intensity_dict = carbon_aware_api_response["_value"] - if "endTime" in intensity_dict and "carbonIntensity" in intensity_dict: - return { - "timestamp": datetime.fromisoformat(intensity_dict["endTime"]), - "value": round(intensity_dict["carbonIntensity"], 3), - } - else: - return {"timestamp": datetime.now(), "value": 0} - - -def query_forecast_electricity_carbon_intensity( - start_date: datetime, stop_date: datetime -) -> Dict[str, Any]: - """DEPRECATED BOAVIZTAPI ROUTE""" - url = ( - BOAVIZTAPI_ENDPOINT - + f"/v1/usage_router/gwp/forecast_intensity?location={AZURE_LOCATION}" - ) - retry = 0 - while retry < 3: - retry += 1 - try: - response = requests.post( - url, - json={ - "source": "carbon_aware_api", - "url": CARBON_AWARE_API_ENDPOINT, - "token": CARBON_AWARE_API_TOKEN, - "start_date": start_date.strftime("%Y-%m-%dT%H:%M:%SZ"), - "stop_date": stop_date.strftime("%Y-%m-%dT%H:%M:%SZ"), - }, - ) - return response.json()[0] - except KeyError: - response_err = response.json() - if response_err["title"] == "ArgumentException": - errors = response_err["errors"] - if "dataStartAt" in errors: - if len(errors["dataStartAt"]) == 1: - error_msg = errors["dataStartAt"][0].split("'") - start_date = datetime.strptime( - error_msg[1][:-10], "%m/%d/%Y %H:%M:%S" - ) - stop_date = datetime.strptime( - error_msg[3][:-10], "%m/%d/%Y %H:%M:%S" - ) - elif "dataEndAt" in errors: - if len(errors["dataEndAt"]) == 1: - error_msg = errors["dataEndAt"][0].split("'") - start_date = datetime.strptime( - error_msg[1][:-10], "%m/%d/%Y %H:%M:%S" - ) - stop_date = datetime.strptime( - error_msg[3][:-10], "%m/%d/%Y %H:%M:%S" - ) - - -def parse_forecast_electricity_carbon_intensity( - response: Dict[str, Any] -) -> List[Dict[str, Any]]: - forecasts = response["forecastData"] - results = [] - for item in forecasts: - results.append( - { - "timestamp": datetime.fromisoformat(item["timestamp"]).strftime( - "%Y-%m-%dT%H:%M:%SZ" - ), - "value": item["value"], - } - ) - return results - - -def parse_date_info( - since: str, until: str, forecast: bool = False -) -> Tuple[datetime, datetime]: - if forecast: - start_date = datetime.utcnow() - end_date = start_date + timedelta(hours=1) - else: - end_date = datetime.utcnow() - start_date = end_date - timedelta(hours=1) - - if since == "now" and not forecast: - end_date = datetime.utcnow() - elif since == "now" and forecast: - start_date = datetime.utcnow() - else: - ValueError(f"unknown value since={since}") - - if until.endswith("d"): - days = int(until.replace("d", "")) - if forecast: - end_date = start_date + timedelta(days=days) - else: - start_date = end_date - timedelta(days=days) - if until.endswith("h"): - hours = int(until.replace("h", "")) - if forecast: - end_date = start_date + timedelta(hours=hours) - else: - start_date = end_date - timedelta(hours=hours) - elif until.endswith("m"): - minutes = int(until.replace("m", "")) - if forecast: - end_date = start_date + timedelta(minutes=minutes) - else: - start_date = end_date - timedelta(minutes=minutes) - else: - ValueError(f"unknown value until={until}") - - return start_date.astimezone(UTC), end_date.astimezone(UTC) - - -def upper_round_date_minutes_with_base(date: datetime, base: int) -> datetime: - delta_minutes = base * math.ceil((date.minute + 1) / base) - date.minute - return date + timedelta(minutes=delta_minutes) - - -def get_cron_per_user(): - user = [] - with open("/etc/passwd", "r") as f: - for line in f.readlines(): - user.append(line.split(":")[0]) - user.sort() - cron_user = [] - for item in user: - output = os.popen(f"crontab -u {item} -l").read() - for line in output.splitlines(): - if line == f"no crontab for {item}": - break - else: - cron_user.append(line) - return cron_user - - -def get_all_cron(): - crons = [] - - if os.geteuid() == 0: - cron_user = get_cron_per_user() - if cron_user: - crons.append(cron_user) - else: - output = os.popen("crontab -l").read() - for line in output.splitlines(): - if line != "" and (line[0].isdigit() or line[0] == "*"): - crons.append(line) - - with open("/etc/crontab", "r") as f: - for line in f.readlines(): - if line != "" and (line[0].isdigit() or line[0] == "*"): - crons.append(line) - return crons - - -def get_cron_info(): - crons_info = [] - base = datetime.today() - cron_lines = get_all_cron() - for cron in cron_lines: - info = {} - sched = "" - for char in cron: - if char.isdigit() or char == "*" or char == " " or char == "\t": - sched += char - info["next"] = croniter(sched, base).get_next(datetime).astimezone(UTC) - info["previous"] = croniter(sched, base).get_prev(datetime).astimezone(UTC) - info["job"] = cron.strip() - crons_info.append(info) - return crons_info - - -def event_is_in_bad_time(event, df: pd.DataFrame): - df = df.set_index("timestamp") - index = df.index.get_indexer([event], method="nearest") - return df.iloc[index].peak.values[0] == 1 - - -def compute_recommendations(since="now", until="24h"): - start_date, stop_date = parse_date_info(since, until) - session = get_session(DB_PATH) - df_power = select_metric(session, "power", start_date, stop_date) - # df_power['timestamp'] = pd.to_datetime(df_power['timestamp']) - df_history = select_metric(session, "carbonintensity", start_date, stop_date) - - df_forecast = carbon_intensity_forecast_data(since, until) - df_forecast["timestamp"] = df_forecast["timestamp"].apply( - lambda x: datetime.strptime(x, "%Y-%m-%dT%H:%M:%SZ") - ) - - df_carbon_intensity = pd.concat([df_history, df_forecast]) - df_carbon_intensity["timestamp"] = df_carbon_intensity["timestamp"].apply( - utc.localize - ) - df_carbon_intensity = new_highlight_spikes(df_carbon_intensity, "value") - - recommendations = [] - crons = get_cron_info() - for cron in crons: - if event_is_in_bad_time(cron["next"], df_carbon_intensity): - recommendations.append( - { - "type": "CRON", - "execution_date": cron["next"], - "preferred_execution_date": find_preferred_execution_date_in_future( - df_forecast - ), - "mode": "forecast", - "job": cron["job"], - } - ) - if event_is_in_bad_time(cron["previous"], df_carbon_intensity): - recommendations.append( - { - "type": "CRON", - "execution_date": datetime.strptime( - str(cron["previous"])[:-6], "%Y-%m-%d %H:%M:%S" - ), - "preferred_execution_date": find_preferred_execution_date_in_history( - cron["previous"], df_power, df_history - ), - "mode": "history", - "job": cron["job"], - } - ) - return recommendations - - -def find_preferred_execution_date_in_future(df_forecast: pd.DataFrame): - bests = df_forecast[df_forecast["value"] == df_forecast["value"].min()] - return bests.iloc[0].timestamp - - -def find_preferred_execution_date_in_history( - execution_date: datetime, df_power: pd.DataFrame, df_intensity: pd.DataFrame -) -> datetime: - df_power = df_power.rename(columns={"value": "power"}) - df_power = df_power.set_index("timestamp") - df_power = df_power.resample("1s").mean() - df_power = df_power.fillna(method="ffill") - df_intensity = df_intensity.rename(columns={"value": "carbon_intensity"}) - df_intensity = df_intensity.set_index("timestamp") - df_intensity = df_intensity.resample("1s").mean() - df_intensity = df_intensity.fillna(method="ffill") - df = df_power.merge(df_intensity, on="timestamp") - df = df.reset_index(names="timestamp") - - df["ratio"] = df["power"] * df["carbon_intensity"] - bests = df[df["ratio"] == df["ratio"].min()] - - for row in bests.itertuples(): - new_execution_date = utc.localize( - datetime.strptime(str(row.timestamp), "%Y-%m-%d %H:%M:%S") - ) - if new_execution_date >= execution_date: - return new_execution_date - - return bests.iloc[0].timestamp - - -@app.get("/recommendation") -async def recommendation(): - return compute_recommendations() diff --git a/boagent/api/database.py b/boagent/api/database.py deleted file mode 100644 index 1449a90..0000000 --- a/boagent/api/database.py +++ /dev/null @@ -1,257 +0,0 @@ -import json -import pandas as pd -import numpy as np - -from typing import Any, Optional -from datetime import datetime, timedelta, timezone -from sqlalchemy import Column, DateTime, Integer, Float, insert, select, inspect -from sqlalchemy.engine import Engine, create_engine -from sqlalchemy.orm import Session, declarative_base, declared_attr -from .config import Settings -from .utils import filter_date_range - -settings = Settings() -DB_PATH = settings.db_path -POWER_DATA_FILE_PATH = settings.power_file_path - -Base = declarative_base() - - -class TimeSeriesRecord(Base): - __abstract__ = True - - id = Column(Integer, autoincrement=True, primary_key=True) - timestamp = Column(DateTime, unique=True, nullable=False) - value = Column(Float, nullable=False) - - @declared_attr - def __tablename__(cls): - return cls.__name__.lower() - - -class CarbonIntensity(TimeSeriesRecord): - pass - - -class Power(TimeSeriesRecord): - pass - - -class Cpu(TimeSeriesRecord): - pass - - -class Ram(TimeSeriesRecord): - pass - - -metrics = { - "carbonintensity": CarbonIntensity, - "power": Power, - "cpu": Cpu, - "ram": Ram, -} - - -def create_database(engine: Engine) -> None: - inspector = inspect(engine) - for model_name, model in metrics.items(): - if not inspector.has_table(model_name): - model.__table__.create(engine) - - -def get_session(db_path: str) -> Session: - engine = get_engine(db_path) - return Session(engine) - - -def get_engine(db_path: str) -> Engine: - sqlite_engine = create_engine(f"sqlite:///{db_path}") - return sqlite_engine - - -def setup_database(): - create_database(get_engine(DB_PATH)) - - -def insert_metric(session: Session, metric_name: str, timestamp: datetime, value: Any): - model = metrics[metric_name] - statement = insert(model).values(timestamp=timestamp, value=value) - session.execute(statement) - - -def insert_metric_and_commit( - session: Session, metric_name: str, timestamp: datetime, value: Any -): - model = metrics[metric_name] - statement = insert(model).values(timestamp=timestamp, value=value) - session.execute(statement) - session.commit() - - -def select_metric( - session: Session, - metric_name: str, - start_date: Optional[datetime] = None, - stop_date: Optional[datetime] = None, -) -> pd.DataFrame: - if metric_name not in metrics: - return pd.DataFrame() - model = metrics[metric_name] - if stop_date is None: - stop_date = datetime.utcnow() - if start_date is None: - start_date = stop_date - timedelta(hours=1) - statement = select(model.timestamp, model.value).where( - model.timestamp >= start_date, model.timestamp <= stop_date - ) - results = session.execute(statement).all() - return pd.DataFrame(results) - - -def get_full_peak(start: int, diffs: list) -> list: - val = diffs[start] - sign = -1 if val < 0 else 0 if val == 0 else 1 - res = [] - recover = 0.25 - i = 1 - if sign > 0: - while val > recover * val and start + i < len(diffs): - val += diffs[start + i] - res.append(start + i) - i = i + 1 - else: - while val < (-3 * recover * val) and start + i < len(diffs): - val += diffs[start + i] - res.append(start + i) - i = i + 1 - return res, sign - - -def highlight_spikes(data: pd.DataFrame, colname: str = None) -> pd.DataFrame: - if len(data.keys()) > 0: - if colname is None: - colname = data.keys()[1] - - diffs = np.diff(data[colname]) - - factor = 1.2 - - avg_diff = sum([abs(d) for d in diffs]) / len(diffs) - - peaks_ids = np.where(abs(diffs) > avg_diff * factor) - - data["peak"] = 0 - - for i in peaks_ids[0].tolist(): - full_peak = get_full_peak(i, diffs.tolist()) - data["peak"][full_peak[0]] = full_peak[1] - # data.loc[:, ("peak", full_peak[0])] = full_peak[1] - - data["peak"][data[[colname]].idxmin()] = -1 - data["peak"][data[[colname]].idxmax()] = 1 - - return data - - -def new_highlight_spikes(df: pd.DataFrame, col: str = "value") -> pd.DataFrame: - df = df.set_index("timestamp").reset_index(names="timestamp") - rol_col = f"_rolling_{col}" - quant_max = df[col].quantile(q=0.70) - quant_min = df[col].quantile(q=0.20) - window = 3 - df[rol_col] = df[col].ewm(span=window).mean() - df["peak"] = 0 - indexes_max = df[df[rol_col] >= quant_max].index - indexes_min = df[df[rol_col] <= quant_min].index - df.loc[indexes_max, "peak"] = 1 - df.loc[indexes_min, "peak"] = -1 - - for row in df.itertuples(): - if row.peak != 0 and row.Index > window + 2: - for i in range(window + 1): - df.loc[row.Index - i, "peak"] = row.peak - - df = df.drop(columns=[rol_col]) - return df - - -def get_most_recent_timestamp(session): - """Get a single row from the table which has the most recent timestamp""" - table_list = [Power, Cpu, Ram] - last_timestamp_list = [] - for table in table_list: - data = session.query(table).order_by(table.timestamp.desc()).first() - if data is not None: - last_timestamp_list.append(data.timestamp) - return max(last_timestamp_list) if last_timestamp_list else None - - -def get_most_recent_data(table_name): - """Get a single row from the table which has the most recent timestamp""" - session = get_session(DB_PATH) - table = metrics[table_name] - data = session.query(table).order_by(table.timestamp.desc()).first() - return data - - -def get_max(table_name): - """Get a single row from the table which has the most recent timestamp""" - session = get_session(DB_PATH) - table = metrics[table_name] - data = session.query(table).order_by(table.value.desc()).first() - return data - - -def add_from_scaphandre(session): - last_timestamp = get_most_recent_timestamp(session) - last_timestamp = ( - last_timestamp + timedelta(seconds=5) - if last_timestamp is not None - else datetime.now() - timedelta(hours=24) - ) - df = scaphandre_to_csv(start_date=last_timestamp, stop_date=datetime.utcnow()) - if df.empty: - return - else: - for row in df.itertuples(): - insert_metric( - session, - metric_name="power", - timestamp=row.timestamp, - value=row.consumption, - ) - insert_metric( - session, - metric_name="cpu", - timestamp=row.timestamp, - value=row.cpu_total_active, - ) - insert_metric( - session, metric_name="ram", timestamp=row.timestamp, value=row.ram_used - ) - - -def scaphandre_to_csv(start_date: datetime, stop_date: datetime) -> pd.DataFrame: - with open( - POWER_DATA_FILE_PATH, "r" - ) as f: # if scaphandre is writing in the json -> KABOUM - data = json.loads(f.read()) - lst = [] - for d in data: - data_point = {} - data_point["timestamp"] = d["host"]["timestamp"] - data_point["consumption"] = d["host"]["consumption"] - data_point["cpu_total_active"] = float(d["resources"]["cpu"]["total_active"]) - data_point["ram_used"] = d["resources"]["ram"]["used"].split()[0] - lst.append(data_point) - - wanted_data = filter_date_range(lst, start_date, stop_date) - for d in wanted_data: - d["timestamp"] = datetime.fromtimestamp(d["timestamp"], tz=timezone.utc) - d["consumption"] = float("{:.4f}".format(d["consumption"] * 10**-3)) - d["cpu_total_active"] = float("{:.4f}".format(d["cpu_total_active"])) - return pd.DataFrame( - wanted_data, - columns=["timestamp", "consumption", "cpu_total_active", "ram_used"], - ) diff --git a/boagent/hardware/hardware_cli.py b/boagent/hardware/hardware_cli.py index 7ee8dc2..c9fe4bf 100755 --- a/boagent/hardware/hardware_cli.py +++ b/boagent/hardware/hardware_cli.py @@ -5,10 +5,6 @@ import sys from boagent.hardware.lshw import Lshw -# from disk import search_physical_drives -# from cpu import get_cpus -# from ram import get_ram_info - lshw = Lshw() lshw_cpus = lshw.cpus @@ -31,22 +27,6 @@ def main(output_file): return 0 -""" def disks(): - disks = search_physical_drives() - for disk in disks: - disk.lookup() - return disks - - -def format_disks(disks): - hardware_data = [] - for disk in disks: - hardware_data.append( - {"capacity": disk.size, "manufacturer": disk.vendor, "type": disk.type} - ) - return hardware_data """ - - def get_disks(): disks = lshw_disks return disks @@ -62,17 +42,5 @@ def get_ram(): return rams -""" def format_rams(rams): - hardware_data = [] - for ram in rams: - options = { - "capacity": ram.size_gb, - } - if ram.manufacturer is not None and len(ram.manufacturer) > 0: - options["manufacturer"] = ram.manufacturer - hardware_data.append(options) - return hardware_data - """ - if __name__ == "__main__": main() From e59a9a382014b84cf577093cedbd7a66b0055563 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 19 Sep 2024 18:03:14 +0200 Subject: [PATCH 197/227] chore: remove tests for deleted routes --- tests/api/test_api_integration.py | 55 ------------------------------- 1 file changed, 55 deletions(-) diff --git a/tests/api/test_api_integration.py b/tests/api/test_api_integration.py index 8ac98b6..a153ddd 100644 --- a/tests/api/test_api_integration.py +++ b/tests/api/test_api_integration.py @@ -242,58 +242,3 @@ def test_get_process_embedded_impacts_with_error_if_pid_not_found_in_metrics_dat def test_read_yearly_embedded(self): response = client.get("/yearly_embedded") assert response.status_code == 200 - - def test_read_last_info(self): - response = client.get("/last_info") - assert response.status_code == 200 - - def test_read_max_info(self): - response = client.get("/max_info") - assert response.status_code == 200 - - def test_read_yearly_operational(self): - """ROUTE NOT IMPLEMENTED YET""" - response = client.get("/yearly_operational") - assert response.status_code == 501 - - @mark.database - def test_read_last_data(self): - """ROUTE NOT IMPLEMENTED YET""" - - params = {"table_name": "cpu"} - response = client.get("/last_data", params=params) - assert response.status_code == 501 - - @mark.database - def test_read_update(self): - """ROUTE NOT IMPLEMENTED YET""" - response = client.get("/update") - assert response.status_code == 501 - - @mark.database - def test_read_carbon_intensity_forecast(self): - """ROUTE NOT IMPLEMENTED YET""" - params = {"since": "now", "until": "24h"} - response = client.get("/carbon_intensity_forecast", params=params) - assert response.status_code == 501 - - @mark.database - def test_read_carbon_intensity(self): - """ROUTE NOT IMPLEMENTED YET""" - params = {"since": "now", "until": "24h"} - response = client.get("/carbon_intensity", params=params) - assert response.status_code == 501 - - @mark.database - def test_impact(self): - """ROUTE NOT IMPLEMENTED YET""" - response = client.get("/impact") - assert response.status_code == 501 - - @mark.database - def test_read_csv(self): - """ROUTE NOT IMPLEMENTED YET""" - params = {"data": "power"} - - response = client.get("/csv", params=params) - assert response.status_code == 501 From 715892f53fe03bac980245212543ea47fc2e0d7c Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 19 Sep 2024 18:09:11 +0200 Subject: [PATCH 198/227] chore: remove yearly_embedded route --- boagent/api/api.py | 17 ----------------- tests/api/test_api_integration.py | 4 ---- 2 files changed, 21 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 8efdebf..41c054b 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -81,23 +81,6 @@ async def web(): return res -@app.get("/yearly_embedded") -async def yearly_embedded(): - hardware_data = get_hardware_data(False) - boaviztapi_data = query_machine_impact_data( - model=None, - configuration=generate_machine_configuration(hardware_data), - usage={}, - ) - if "manufacturer" in boaviztapi_data: - return boaviztapi_data["impacts"]["gwp"]["manufacturer"] / DEFAULT_LIFETIME - else: - return Response( - status_code=200, - content="SSD/HDD manufacturer not recognized by BoaviztAPI yet.", - ) - - @app.get("/metrics", tags=["metrics"]) async def metrics( start_time: str = "0.0", diff --git a/tests/api/test_api_integration.py b/tests/api/test_api_integration.py index a153ddd..22a12c6 100644 --- a/tests/api/test_api_integration.py +++ b/tests/api/test_api_integration.py @@ -238,7 +238,3 @@ def test_get_process_embedded_impacts_with_error_if_pid_not_found_in_metrics_dat response.text == "Process_id 1234 has not been found in metrics data. Check the queried PID" ) - - def test_read_yearly_embedded(self): - response = client.get("/yearly_embedded") - assert response.status_code == 200 From ce37187830f432ba9870ea94857d9551345e726b Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Thu, 19 Sep 2024 18:09:58 +0200 Subject: [PATCH 199/227] chore: remove ready query machine impact test --- tests/api/test_api_unit.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 5205645..ed1eb58 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -72,11 +72,6 @@ def test_get_hardware_data_with_fetch_hardware_true(self): data = get_hardware_data(fetch_hardware=True) assert type(data) is dict - # def test_read_query_machine_impact_data(self): - # server_impact = query_machine_impact_data() - # print(server_impact) - # pass - def tearDown(self) -> None: os.remove(hardware_data) From 625b7db951f69900f2cb3ab2b3244187d298fdde Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 23 Sep 2024 15:48:39 +0200 Subject: [PATCH 200/227] docs: update boagent documentation --- README.md | 50 ++++++++++++++++++++++++++++++++++------------ boagent/api/api.py | 2 +- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 6eb55aa..28ebb3d 100644 --- a/README.md +++ b/README.md @@ -11,21 +11,34 @@ _If no parameters are passed to the API to isolate the application, then the imp ## How to use -This is an API, you could use either your browser, curl, or call it directly from an application (which is the main usecase). +This is an API, you could use either your browser, cURL, or call it directly from an application (which is the main usecase). Once the API is running, a Swagger interface is available on [localhost:8000/docs](http://localhost:8000/docs). + ### Run natively +Boagent will not be able to return proper responses from its endpoints without root privileges in order to fetch hardware data. +It also needs information from BoaviztAPI and Scaphandre, see the [setup informations](#Setup). + To run it : +Without `poetry` + ``` +apt update && apt install lshw nvme-cli -y pip3 install -r requirements.txt cd boagent/api/ uvicorn api:app --reload ``` -Boagent will not be able to return proper responses from its endpoints without root privileges in order to fetch hardware data. +With `poetry` + +``` +apt update && apt install lshw nvme-cli -y +poetry install --only main +poetry run uvicorn --reload boagent.api.api:app +``` ### Run in a docker container @@ -33,15 +46,26 @@ You could pull the [image](https://github.com/Boavizta/boagent/pkgs/container/bo ### Run in docker-compose (with all the requirements) -To get started you need docker and docker-compose installed on your machine. On a debian or ubuntu machine, run : +To get started you need docker and docker-compose installed on your machine. On a Debian or Ubuntu environment, run : # apt update && apt install -y docker.io docker-compose -To get the full setup easily, you could run the stack in docker-compose with `docker-compose up -d`. `docker-compose.yml`, at the root of the project will build a docker image from the source for boagent, and setup a container for [Scaphandre](#Scaphandre) and another for the [BoaviztAPI](#BoaviztAPI), allowing you to get the full evaluation easily on a physical machine. +To get the full setup easily, you could run the stack in docker-compose with `docker-compose up -d`. `docker-compose.yml`, at the root of the project will build a Docker image from the source for Boagent, and setup a container for [Scaphandre](#Scaphandre) and another for the [BoaviztAPI](#BoaviztAPI), allowing you to get the full evaluation easily on a physical machine. Please see [Configuration](#Configuration) for the environment variables you can tweak in the Boagent container. -## Setup required +### Use `hardware_cli` + +To have an example of the retrieved hardware information by Boagent, you can run `sudo ./hardware_cli.py`. +At the moment, it will output the formatted data for CPU, RAM and storage devices used by Boagent when sending a request to BoaviztAPI. +`sudo ./hardware_cli.py --output-file ` can send the formatted output to a file. + +## Setup + +## Linux + +Boagent parses output from `lshw` (a tool listing hardware components and characteristics) and `nvme-cli` (a tool listing information on SSD storage +devices available through NVME interfaces). To get all actually parsed information (and for future developments), Boagent needs those two programs and toexecute them with root privileges. ### BoaviztAPI @@ -49,11 +73,11 @@ You need either to use an existing BoaviztAPI endpoint, or to build the BoaviztA Depending or your setup, specify the endpoint to be used with the environment variable `BOAVIZTAPI_ENDPOINT`, see [Configuration](#Configuration). -Ensure that the version of BoaviztAPI SDK installed (see `requirements.txt`) is the same as the version of the API running the endpoint you use. +Ensure that the version of BoaviztAPI SDK installed (see `requirements.txt` or `pyproject.toml`) is the same as the version of the API running the endpoint you use. ### Scaphandre -To get power consumption metrics, you need [Scaphandre](https://github.com/hubblo-org/scaphandre) running in the background, with the json exporter. This will write power metrics to a file, that Boagent will read : +To get power consumption metrics, you need [Scaphandre](https://github.com/hubblo-org/scaphandre) running in the background, with the JSON exporter. This will write power metrics to a file, that Boagent will read : ``` scaphandre json -s 5 -f power_data.json @@ -63,11 +87,11 @@ scaphandre json -s 5 -f power_data.json Boagent can be configured with the following variables : -- `DEFAULT_LIFETIME`: machines lifetime used to compute the scope 3 / manufacturing, transport, end of life impacts -- `HARDWARE_FILE_PATH`: path to the file containing the hardware list (output from hardware.py) -- `POWER_FILE_PATH`: path to the file containing power mearsurements (output from [Scaphandre](https://github.com/hubblo-org/scaphandre) with JSON exporter) -- `HARDWARE_CLI`: path to the executable file to collect hardware information (hardware.py from this project) -- `BOAVIZTAPI_ENDPOINT`: http endpoint to the BoaviztAPI, in the form `http://myendpoint.com:PORTNUMBER` +- `DEFAULT_LIFETIME`: machines lifetime used to compute the scope 3 / manufacturing, transport, end-of-life impacts +- `HARDWARE_FILE_PATH`: path to the file containing the hardware list (output from `lshw.py`) +- `POWER_FILE_PATH`: path to the file containing power measurements (output from [Scaphandre](https://github.com/hubblo-org/scaphandre) with JSON exporter) +- `HARDWARE_CLI`: path to the executable file to collect hardware information (`lshw.py` from this project) +- `BOAVIZTAPI_ENDPOINT`: HTTP endpoint to the BoaviztAPI, in the form `http://myendpoint.com:PORTNUMBER` You can set those variables in the following order (as interpreted by the tool): @@ -82,7 +106,7 @@ You can check the configuration applied by querying the `/info` route. Currently, Boagent only works for Linux systems. Boagent exposes multiple API endpoints, most notably `/query` and `/metrics`. Both will query an instance of [BoaviztAPI](https://doc.api.boavizta.org/) in order to give the environmental impacts -of the received hardware data. `/query` will return a response in JSON, and `/metrics` will return a response parsable by a Prometheus instance. If needed, both those +of the received hardware data. `/query` will return a response in JSON format, and `/metrics` will return a response parsable by a Prometheus instance. If needed, both those endpoints can return data from [Scaphandre](https://github.com/hubblo-org/scaphandre/) and give the energy consumption of components from the queried hardware. Presently, Boagent gets hardware data through a parsing of the output of `lshw`, a common utility available for Linux distributions that lists a lot of information of all diff --git a/boagent/api/api.py b/boagent/api/api.py index 41c054b..b6dbd2c 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -184,7 +184,7 @@ async def process_embedded_impacts( fetch_hardware: bool = False, ): """ - process_id: The process ID queried to be evaluated for embedded impacts for each available component. + process_id: The process ID queried to be evaluated for embedded impacts for each available component. \n start_time: Start time for evaluation. Accepts either UNIX Timestamp or ISO8601 date format. \n end_time: End time for evaluation. Accepts either UNIX Timestamp or ISO8601 date format. \n location: Country code to configure the local electricity grid to take into account.\n From f53168c33ce41d59974f236ae7150064768e73c2 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 23 Sep 2024 15:49:27 +0200 Subject: [PATCH 201/227] fix: raise python exceptions --- boagent/hardware/lshw.py | 36 ++++++++++-------------------------- 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py index 4bfc248..12c6d0d 100644 --- a/boagent/hardware/lshw.py +++ b/boagent/hardware/lshw.py @@ -1,3 +1,8 @@ +""" +This file is modified code issued from https://github.com/Solvik/netbox-agent/blob/master/netbox_agent/lshw.py, +copyright under Apache-2.0 licence. +""" + from shutil import which import subprocess import json @@ -5,8 +10,6 @@ import re import os -# Commented elements only available when runnning `lshw` as `sudo`. - SYS_BLOCK_PATH = "/sys/block" @@ -18,14 +21,12 @@ def is_tool(name): class Lshw: def __init__(self): if not is_tool("lshw"): - sys.stderr.write("lshw does not seem to be installed.") - sys.exit(1) + raise Exception("lshw does not seem to be installed.") try: data = subprocess.getoutput("lshw -quiet -json 2> /dev/null") json_data = json.loads(data) except json.JSONDecodeError: - sys.stderr.write("lshw does not seem do be executed as root.") - sys.exit(1) + raise Exception("lshw does not seem do be executed as root.") # Starting from version 02.18, `lshw -json` wraps its result in a list # rather than returning directly a dictionary if isinstance(json_data, list): @@ -34,20 +35,15 @@ def __init__(self): self.hw_info = json_data self.info = {} self.memories = [] - # self.interfaces = [] self.cpus = [] self.power = [] self.disks = [] self.gpus = [] - # self.vendor = self.hw_info["vendor"] - # self.product = self.hw_info["product"] - # self.chassis_serial = self.hw_info["serial"] self.motherboard_serial = self.hw_info["children"][0].get("serial", "No S/N") self.motherboard = self.hw_info["children"][0].get("product", "Motherboard") for k in self.hw_info["children"]: if k["class"] == "power": - # self.power[k["id"]] = k self.power.append(k) if "children" in k: @@ -124,8 +120,7 @@ def find_storage(self, obj): self.disks.append(d) if "nvme" in obj["configuration"]["driver"]: if not is_tool("nvme"): - sys.stderr.write("nvme-cli >= 1.0 does not seem to be installed") - sys.exit(1) + raise Exception("nvme-cli >= 1.0 does not seem to be installed") try: nvme = json.loads( subprocess.check_output( @@ -153,17 +148,13 @@ def find_cpus(self, obj): "units": +1, "name": obj["product"], "manufacturer": obj["vendor"], - "core_units": int( - obj["configuration"]["cores"] - ), # ONLY AVAILABLE AS ROOT - # "description": obj["description"], - # "location": obj["slot"], + "core_units": int(obj["configuration"]["cores"]), } ) def find_memories(self, obj): if "children" not in obj: - # print("not a DIMM memory.") + print("not a DIMM memory.") return for dimm in obj["children"]: @@ -202,8 +193,6 @@ def walk_bridge(self, obj): for b in bus["children"]: if b["class"] == "storage": self.find_storage(b) - # if b["class"] == "network": - # self.find_network(b) if b["class"] == "display": self.find_gpus(b) @@ -260,8 +249,3 @@ def get_rotational_int(self, dev_path: str) -> int: with open(rotational_fp, "r") as file: rotational_int = int(file.read()) return rotational_int - - -""" -if __name__ == "__main__": - pass """ From 4b4e3d024f7d13f2cf1bbb69e7b7eeef21dc0642 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 23 Sep 2024 15:50:02 +0200 Subject: [PATCH 202/227] test: check lshw installation --- tests/hardware/test_lshw.py | 12 +++++++++++- tests/mocks/sudo_lshw_data_disks.json | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/tests/hardware/test_lshw.py b/tests/hardware/test_lshw.py index bdc5753..275d905 100644 --- a/tests/hardware/test_lshw.py +++ b/tests/hardware/test_lshw.py @@ -137,15 +137,25 @@ def test_read_disk_type_when_dev_path_not_found(self): disk_type = hw.get_disk_type(dev_erroneous_name) assert disk_type == "unknown" + @patch("boagent.hardware.lshw.is_tool") + def test_check_lshw_is_installed_to_parse_hardware_data_and_raises_error_if_not( + self, mocked_is_tool + ): + another_lshw = Lshw() + mocked_is_tool.return_value = False + with self.assertRaises(Exception) as context: + another_lshw.__init__() + self.assertTrue("lshw does not seem to be installed" in str(context.exception)) + @patch("boagent.hardware.lshw.is_tool") def test_check_nvme_cli_is_installed_to_find_storage_and_raises_error_if_not( self, mocked_is_tool ): + mocked_is_tool.return_value = False with open(f"{mock_lshw_data}_disks.json", "r") as file, self.assertRaises( Exception ) as nvme_cli_exception: - mocked_is_tool.return_value = False data = load(file) hw.find_storage(data) diff --git a/tests/mocks/sudo_lshw_data_disks.json b/tests/mocks/sudo_lshw_data_disks.json index 4d72169..b6ea9f3 100644 --- a/tests/mocks/sudo_lshw_data_disks.json +++ b/tests/mocks/sudo_lshw_data_disks.json @@ -12,7 +12,7 @@ "width": 32, "clock": 33000000, "configuration": { - "driver": "pcieport" + "driver": "nvme" }, "capabilities": { "pci": true, From e86cbe1a96a6140f7f829850afd4130e60c7be35 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 23 Sep 2024 15:55:32 +0200 Subject: [PATCH 203/227] chore: move hardware_cli at project root --- boagent/hardware/hardware_cli.py => hardware_cli.py | 1 + 1 file changed, 1 insertion(+) rename boagent/hardware/hardware_cli.py => hardware_cli.py (99%) diff --git a/boagent/hardware/hardware_cli.py b/hardware_cli.py similarity index 99% rename from boagent/hardware/hardware_cli.py rename to hardware_cli.py index c9fe4bf..77bea82 100755 --- a/boagent/hardware/hardware_cli.py +++ b/hardware_cli.py @@ -3,6 +3,7 @@ import click import json import sys + from boagent.hardware.lshw import Lshw lshw = Lshw() From 34c26fbd2d2b25c9a6efded62eb4fa014ee97f48 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 23 Sep 2024 16:34:12 +0200 Subject: [PATCH 204/227] build: remove sqlalchemy --- poetry.lock | 731 +++++++++++++++++++++---------------------------- pyproject.toml | 1 - 2 files changed, 311 insertions(+), 421 deletions(-) diff --git a/poetry.lock b/poetry.lock index 3214cfc..189cb2b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,13 +13,13 @@ files = [ [[package]] name = "anyio" -version = "4.4.0" +version = "4.6.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, - {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, + {file = "anyio-4.6.0-py3-none-any.whl", hash = "sha256:c7d2e9d63e31599eeb636c8c5c03a7e108d73b345f064f1c19fdc87b79036a9a"}, + {file = "anyio-4.6.0.tar.gz", hash = "sha256:137b4559cbb034c477165047febb6ff83f390fc3b20bf181c1fc0a728cb8beeb"}, ] [package.dependencies] @@ -29,9 +29,9 @@ sniffio = ">=1.1" typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.23)"] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.21.0b1)"] +trio = ["trio (>=0.26.1)"] [[package]] name = "boaviztapi-sdk" @@ -51,13 +51,13 @@ urllib3 = ">=1.25.3" [[package]] name = "certifi" -version = "2024.6.2" +version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, - {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, ] [[package]] @@ -222,13 +222,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.1" +version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, - {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, ] [package.extras] @@ -255,90 +255,19 @@ all = ["email_validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)" [[package]] name = "filelock" -version = "3.15.1" +version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.15.1-py3-none-any.whl", hash = "sha256:71b3102950e91dfc1bb4209b64be4dc8854f40e5f534428d8684f953ac847fac"}, - {file = "filelock-3.15.1.tar.gz", hash = "sha256:58a2549afdf9e02e10720eaa4d4470f56386d7a6f72edd7d0596337af8ed7ad8"}, -] - -[package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-asyncio (>=0.21)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] -typing = ["typing-extensions (>=4.8)"] - -[[package]] -name = "greenlet" -version = "3.0.3" -description = "Lightweight in-process concurrent programming" -optional = false -python-versions = ">=3.7" -files = [ - {file = "greenlet-3.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dca1e2f3ca00b84a396bc1bce13dd21f680f035314d2379c4160c98153b2059b"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ed7fb269f15dc662787f4119ec300ad0702fa1b19d2135a37c2c4de6fadfd4a"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd4f49ae60e10adbc94b45c0b5e6a179acc1736cf7a90160b404076ee283cf83"}, - {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73a411ef564e0e097dbe7e866bb2dda0f027e072b04da387282b02c308807405"}, - {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7f362975f2d179f9e26928c5b517524e89dd48530a0202570d55ad6ca5d8a56f"}, - {file = "greenlet-3.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:649dde7de1a5eceb258f9cb00bdf50e978c9db1b996964cd80703614c86495eb"}, - {file = "greenlet-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:68834da854554926fbedd38c76e60c4a2e3198c6fbed520b106a8986445caaf9"}, - {file = "greenlet-3.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b1b5667cced97081bf57b8fa1d6bfca67814b0afd38208d52538316e9422fc61"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52f59dd9c96ad2fc0d5724107444f76eb20aaccb675bf825df6435acb7703559"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afaff6cf5200befd5cec055b07d1c0a5a06c040fe5ad148abcd11ba6ab9b114e"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe754d231288e1e64323cfad462fcee8f0288654c10bdf4f603a39ed923bef33"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2797aa5aedac23af156bbb5a6aa2cd3427ada2972c828244eb7d1b9255846379"}, - {file = "greenlet-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7f009caad047246ed379e1c4dbcb8b020f0a390667ea74d2387be2998f58a22"}, - {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c5e1536de2aad7bf62e27baf79225d0d64360d4168cf2e6becb91baf1ed074f3"}, - {file = "greenlet-3.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:894393ce10ceac937e56ec00bb71c4c2f8209ad516e96033e4b3b1de270e200d"}, - {file = "greenlet-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:1ea188d4f49089fc6fb283845ab18a2518d279c7cd9da1065d7a84e991748728"}, - {file = "greenlet-3.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:70fb482fdf2c707765ab5f0b6655e9cfcf3780d8d87355a063547b41177599be"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d1ac74f5c0c0524e4a24335350edad7e5f03b9532da7ea4d3c54d527784f2e"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149e94a2dd82d19838fe4b2259f1b6b9957d5ba1b25640d2380bea9c5df37676"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15d79dd26056573940fcb8c7413d84118086f2ec1a8acdfa854631084393efcc"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b7db1ebff4ba09aaaeae6aa491daeb226c8150fc20e836ad00041bcb11230"}, - {file = "greenlet-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fcd2469d6a2cf298f198f0487e0a5b1a47a42ca0fa4dfd1b6862c999f018ebbf"}, - {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1f672519db1796ca0d8753f9e78ec02355e862d0998193038c7073045899f305"}, - {file = "greenlet-3.0.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2516a9957eed41dd8f1ec0c604f1cdc86758b587d964668b5b196a9db5bfcde6"}, - {file = "greenlet-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:bba5387a6975598857d86de9eac14210a49d554a77eb8261cc68b7d082f78ce2"}, - {file = "greenlet-3.0.3-cp37-cp37m-macosx_11_0_universal2.whl", hash = "sha256:5b51e85cb5ceda94e79d019ed36b35386e8c37d22f07d6a751cb659b180d5274"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daf3cb43b7cf2ba96d614252ce1684c1bccee6b2183a01328c98d36fcd7d5cb0"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99bf650dc5d69546e076f413a87481ee1d2d09aaaaaca058c9251b6d8c14783f"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dd6e660effd852586b6a8478a1d244b8dc90ab5b1321751d2ea15deb49ed414"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3391d1e16e2a5a1507d83e4a8b100f4ee626e8eca43cf2cadb543de69827c4c"}, - {file = "greenlet-3.0.3-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1f145462f1fa6e4a4ae3c0f782e580ce44d57c8f2c7aae1b6fa88c0b2efdb41"}, - {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1a7191e42732df52cb5f39d3527217e7ab73cae2cb3694d241e18f53d84ea9a7"}, - {file = "greenlet-3.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0448abc479fab28b00cb472d278828b3ccca164531daab4e970a0458786055d6"}, - {file = "greenlet-3.0.3-cp37-cp37m-win32.whl", hash = "sha256:b542be2440edc2d48547b5923c408cbe0fc94afb9f18741faa6ae970dbcb9b6d"}, - {file = "greenlet-3.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:01bc7ea167cf943b4c802068e178bbf70ae2e8c080467070d01bfa02f337ee67"}, - {file = "greenlet-3.0.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1996cb9306c8595335bb157d133daf5cf9f693ef413e7673cb07e3e5871379ca"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc0f794e6ad661e321caa8d2f0a55ce01213c74722587256fb6566049a8b04"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9db1c18f0eaad2f804728c67d6c610778456e3e1cc4ab4bbd5eeb8e6053c6fc"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7170375bcc99f1a2fbd9c306f5be8764eaf3ac6b5cb968862cad4c7057756506"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b66c9c1e7ccabad3a7d037b2bcb740122a7b17a53734b7d72a344ce39882a1b"}, - {file = "greenlet-3.0.3-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:098d86f528c855ead3479afe84b49242e174ed262456c342d70fc7f972bc13c4"}, - {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:81bb9c6d52e8321f09c3d165b2a78c680506d9af285bfccbad9fb7ad5a5da3e5"}, - {file = "greenlet-3.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fd096eb7ffef17c456cfa587523c5f92321ae02427ff955bebe9e3c63bc9f0da"}, - {file = "greenlet-3.0.3-cp38-cp38-win32.whl", hash = "sha256:d46677c85c5ba00a9cb6f7a00b2bfa6f812192d2c9f7d9c4f6a55b60216712f3"}, - {file = "greenlet-3.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:419b386f84949bf0e7c73e6032e3457b82a787c1ab4a0e43732898a761cc9dbf"}, - {file = "greenlet-3.0.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:da70d4d51c8b306bb7a031d5cff6cc25ad253affe89b70352af5f1cb68e74b53"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086152f8fbc5955df88382e8a75984e2bb1c892ad2e3c80a2508954e52295257"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d73a9fe764d77f87f8ec26a0c85144d6a951a6c438dfe50487df5595c6373eac"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7dcbe92cc99f08c8dd11f930de4d99ef756c3591a5377d1d9cd7dd5e896da71"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1551a8195c0d4a68fac7a4325efac0d541b48def35feb49d803674ac32582f61"}, - {file = "greenlet-3.0.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:64d7675ad83578e3fc149b617a444fab8efdafc9385471f868eb5ff83e446b8b"}, - {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b37eef18ea55f2ffd8f00ff8fe7c8d3818abd3e25fb73fae2ca3b672e333a7a6"}, - {file = "greenlet-3.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:77457465d89b8263bca14759d7c1684df840b6811b2499838cc5b040a8b5b113"}, - {file = "greenlet-3.0.3-cp39-cp39-win32.whl", hash = "sha256:57e8974f23e47dac22b83436bdcf23080ade568ce77df33159e019d161ce1d1e"}, - {file = "greenlet-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c5ee858cfe08f34712f548c3c363e807e7186f03ad7a5039ebadb29e8c6be067"}, - {file = "greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491"}, + {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, + {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, ] [package.extras] -docs = ["Sphinx", "furo"] -test = ["objgraph", "psutil"] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] +typing = ["typing-extensions (>=4.12.2)"] [[package]] name = "h11" @@ -353,13 +282,13 @@ files = [ [[package]] name = "identify" -version = "2.5.36" +version = "2.6.1" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, - {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, + {file = "identify-2.6.1-py2.py3-none-any.whl", hash = "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0"}, + {file = "identify-2.6.1.tar.gz", hash = "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98"}, ] [package.extras] @@ -367,15 +296,18 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.7" +version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + [[package]] name = "iniconfig" version = "2.0.0" @@ -400,56 +332,64 @@ files = [ [[package]] name = "numpy" -version = "2.0.0" +version = "2.1.1" description = "Fundamental package for array computing in Python" optional = false -python-versions = ">=3.9" -files = [ - {file = "numpy-2.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:04494f6ec467ccb5369d1808570ae55f6ed9b5809d7f035059000a37b8d7e86f"}, - {file = "numpy-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2635dbd200c2d6faf2ef9a0d04f0ecc6b13b3cad54f7c67c61155138835515d2"}, - {file = "numpy-2.0.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:0a43f0974d501842866cc83471bdb0116ba0dffdbaac33ec05e6afed5b615238"}, - {file = "numpy-2.0.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:8d83bb187fb647643bd56e1ae43f273c7f4dbcdf94550d7938cfc32566756514"}, - {file = "numpy-2.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79e843d186c8fb1b102bef3e2bc35ef81160ffef3194646a7fdd6a73c6b97196"}, - {file = "numpy-2.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d7696c615765091cc5093f76fd1fa069870304beaccfd58b5dcc69e55ef49c1"}, - {file = "numpy-2.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b4c76e3d4c56f145d41b7b6751255feefae92edbc9a61e1758a98204200f30fc"}, - {file = "numpy-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:acd3a644e4807e73b4e1867b769fbf1ce8c5d80e7caaef0d90dcdc640dfc9787"}, - {file = "numpy-2.0.0-cp310-cp310-win32.whl", hash = "sha256:cee6cc0584f71adefe2c908856ccc98702baf95ff80092e4ca46061538a2ba98"}, - {file = "numpy-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:ed08d2703b5972ec736451b818c2eb9da80d66c3e84aed1deeb0c345fefe461b"}, - {file = "numpy-2.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad0c86f3455fbd0de6c31a3056eb822fc939f81b1618f10ff3406971893b62a5"}, - {file = "numpy-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e7f387600d424f91576af20518334df3d97bc76a300a755f9a8d6e4f5cadd289"}, - {file = "numpy-2.0.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:34f003cb88b1ba38cb9a9a4a3161c1604973d7f9d5552c38bc2f04f829536609"}, - {file = "numpy-2.0.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:b6f6a8f45d0313db07d6d1d37bd0b112f887e1369758a5419c0370ba915b3871"}, - {file = "numpy-2.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f64641b42b2429f56ee08b4f427a4d2daf916ec59686061de751a55aafa22e4"}, - {file = "numpy-2.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7039a136017eaa92c1848152827e1424701532ca8e8967fe480fe1569dae581"}, - {file = "numpy-2.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:46e161722e0f619749d1cd892167039015b2c2817296104487cd03ed4a955995"}, - {file = "numpy-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0e50842b2295ba8414c8c1d9d957083d5dfe9e16828b37de883f51fc53c4016f"}, - {file = "numpy-2.0.0-cp311-cp311-win32.whl", hash = "sha256:2ce46fd0b8a0c947ae047d222f7136fc4d55538741373107574271bc00e20e8f"}, - {file = "numpy-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd6acc766814ea6443628f4e6751d0da6593dae29c08c0b2606164db026970c"}, - {file = "numpy-2.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:354f373279768fa5a584bac997de6a6c9bc535c482592d7a813bb0c09be6c76f"}, - {file = "numpy-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4d2f62e55a4cd9c58c1d9a1c9edaedcd857a73cb6fda875bf79093f9d9086f85"}, - {file = "numpy-2.0.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:1e72728e7501a450288fc8e1f9ebc73d90cfd4671ebbd631f3e7857c39bd16f2"}, - {file = "numpy-2.0.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:84554fc53daa8f6abf8e8a66e076aff6ece62de68523d9f665f32d2fc50fd66e"}, - {file = "numpy-2.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c73aafd1afca80afecb22718f8700b40ac7cab927b8abab3c3e337d70e10e5a2"}, - {file = "numpy-2.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49d9f7d256fbc804391a7f72d4a617302b1afac1112fac19b6c6cec63fe7fe8a"}, - {file = "numpy-2.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0ec84b9ba0654f3b962802edc91424331f423dcf5d5f926676e0150789cb3d95"}, - {file = "numpy-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:feff59f27338135776f6d4e2ec7aeeac5d5f7a08a83e80869121ef8164b74af9"}, - {file = "numpy-2.0.0-cp312-cp312-win32.whl", hash = "sha256:c5a59996dc61835133b56a32ebe4ef3740ea5bc19b3983ac60cc32be5a665d54"}, - {file = "numpy-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:a356364941fb0593bb899a1076b92dfa2029f6f5b8ba88a14fd0984aaf76d0df"}, - {file = "numpy-2.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e61155fae27570692ad1d327e81c6cf27d535a5d7ef97648a17d922224b216de"}, - {file = "numpy-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4554eb96f0fd263041baf16cf0881b3f5dafae7a59b1049acb9540c4d57bc8cb"}, - {file = "numpy-2.0.0-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:903703372d46bce88b6920a0cd86c3ad82dae2dbef157b5fc01b70ea1cfc430f"}, - {file = "numpy-2.0.0-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:3e8e01233d57639b2e30966c63d36fcea099d17c53bf424d77f088b0f4babd86"}, - {file = "numpy-2.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cde1753efe513705a0c6d28f5884e22bdc30438bf0085c5c486cdaff40cd67a"}, - {file = "numpy-2.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:821eedb7165ead9eebdb569986968b541f9908979c2da8a4967ecac4439bae3d"}, - {file = "numpy-2.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a1712c015831da583b21c5bfe15e8684137097969c6d22e8316ba66b5baabe4"}, - {file = "numpy-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9c27f0946a3536403efb0e1c28def1ae6730a72cd0d5878db38824855e3afc44"}, - {file = "numpy-2.0.0-cp39-cp39-win32.whl", hash = "sha256:63b92c512d9dbcc37f9d81b123dec99fdb318ba38c8059afc78086fe73820275"}, - {file = "numpy-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:3f6bed7f840d44c08ebdb73b1825282b801799e325bcbdfa6bc5c370e5aecc65"}, - {file = "numpy-2.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9416a5c2e92ace094e9f0082c5fd473502c91651fb896bc17690d6fc475128d6"}, - {file = "numpy-2.0.0-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:17067d097ed036636fa79f6a869ac26df7db1ba22039d962422506640314933a"}, - {file = "numpy-2.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ecb5b0582cd125f67a629072fed6f83562d9dd04d7e03256c9829bdec027ad"}, - {file = "numpy-2.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cef04d068f5fb0518a77857953193b6bb94809a806bd0a14983a8f12ada060c9"}, - {file = "numpy-2.0.0.tar.gz", hash = "sha256:cf5d1c9e6837f8af9f92b6bd3e86d513cdc11f60fd62185cc49ec7d1aba34864"}, +python-versions = ">=3.10" +files = [ + {file = "numpy-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8a0e34993b510fc19b9a2ce7f31cb8e94ecf6e924a40c0c9dd4f62d0aac47d9"}, + {file = "numpy-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7dd86dfaf7c900c0bbdcb8b16e2f6ddf1eb1fe39c6c8cca6e94844ed3152a8fd"}, + {file = "numpy-2.1.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:5889dd24f03ca5a5b1e8a90a33b5a0846d8977565e4ae003a63d22ecddf6782f"}, + {file = "numpy-2.1.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:59ca673ad11d4b84ceb385290ed0ebe60266e356641428c845b39cd9df6713ab"}, + {file = "numpy-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13ce49a34c44b6de5241f0b38b07e44c1b2dcacd9e36c30f9c2fcb1bb5135db7"}, + {file = "numpy-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913cc1d311060b1d409e609947fa1b9753701dac96e6581b58afc36b7ee35af6"}, + {file = "numpy-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:caf5d284ddea7462c32b8d4a6b8af030b6c9fd5332afb70e7414d7fdded4bfd0"}, + {file = "numpy-2.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:57eb525e7c2a8fdee02d731f647146ff54ea8c973364f3b850069ffb42799647"}, + {file = "numpy-2.1.1-cp310-cp310-win32.whl", hash = "sha256:9a8e06c7a980869ea67bbf551283bbed2856915f0a792dc32dd0f9dd2fb56728"}, + {file = "numpy-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:d10c39947a2d351d6d466b4ae83dad4c37cd6c3cdd6d5d0fa797da56f710a6ae"}, + {file = "numpy-2.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0d07841fd284718feffe7dd17a63a2e6c78679b2d386d3e82f44f0108c905550"}, + {file = "numpy-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b5613cfeb1adfe791e8e681128f5f49f22f3fcaa942255a6124d58ca59d9528f"}, + {file = "numpy-2.1.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0b8cc2715a84b7c3b161f9ebbd942740aaed913584cae9cdc7f8ad5ad41943d0"}, + {file = "numpy-2.1.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:b49742cdb85f1f81e4dc1b39dcf328244f4d8d1ded95dea725b316bd2cf18c95"}, + {file = "numpy-2.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8d5f8a8e3bc87334f025194c6193e408903d21ebaeb10952264943a985066ca"}, + {file = "numpy-2.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d51fc141ddbe3f919e91a096ec739f49d686df8af254b2053ba21a910ae518bf"}, + {file = "numpy-2.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:98ce7fb5b8063cfdd86596b9c762bf2b5e35a2cdd7e967494ab78a1fa7f8b86e"}, + {file = "numpy-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:24c2ad697bd8593887b019817ddd9974a7f429c14a5469d7fad413f28340a6d2"}, + {file = "numpy-2.1.1-cp311-cp311-win32.whl", hash = "sha256:397bc5ce62d3fb73f304bec332171535c187e0643e176a6e9421a6e3eacef06d"}, + {file = "numpy-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:ae8ce252404cdd4de56dcfce8b11eac3c594a9c16c231d081fb705cf23bd4d9e"}, + {file = "numpy-2.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7c803b7934a7f59563db459292e6aa078bb38b7ab1446ca38dd138646a38203e"}, + {file = "numpy-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6435c48250c12f001920f0751fe50c0348f5f240852cfddc5e2f97e007544cbe"}, + {file = "numpy-2.1.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3269c9eb8745e8d975980b3a7411a98976824e1fdef11f0aacf76147f662b15f"}, + {file = "numpy-2.1.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:fac6e277a41163d27dfab5f4ec1f7a83fac94e170665a4a50191b545721c6521"}, + {file = "numpy-2.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcd8f556cdc8cfe35e70efb92463082b7f43dd7e547eb071ffc36abc0ca4699b"}, + {file = "numpy-2.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b9cd92c8f8e7b313b80e93cedc12c0112088541dcedd9197b5dee3738c1201"}, + {file = "numpy-2.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:afd9c680df4de71cd58582b51e88a61feed4abcc7530bcd3d48483f20fc76f2a"}, + {file = "numpy-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8661c94e3aad18e1ea17a11f60f843a4933ccaf1a25a7c6a9182af70610b2313"}, + {file = "numpy-2.1.1-cp312-cp312-win32.whl", hash = "sha256:950802d17a33c07cba7fd7c3dcfa7d64705509206be1606f196d179e539111ed"}, + {file = "numpy-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:3fc5eabfc720db95d68e6646e88f8b399bfedd235994016351b1d9e062c4b270"}, + {file = "numpy-2.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:046356b19d7ad1890c751b99acad5e82dc4a02232013bd9a9a712fddf8eb60f5"}, + {file = "numpy-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6e5a9cb2be39350ae6c8f79410744e80154df658d5bea06e06e0ac5bb75480d5"}, + {file = "numpy-2.1.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:d4c57b68c8ef5e1ebf47238e99bf27657511ec3f071c465f6b1bccbef12d4136"}, + {file = "numpy-2.1.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:8ae0fd135e0b157365ac7cc31fff27f07a5572bdfc38f9c2d43b2aff416cc8b0"}, + {file = "numpy-2.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:981707f6b31b59c0c24bcda52e5605f9701cb46da4b86c2e8023656ad3e833cb"}, + {file = "numpy-2.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ca4b53e1e0b279142113b8c5eb7d7a877e967c306edc34f3b58e9be12fda8df"}, + {file = "numpy-2.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e097507396c0be4e547ff15b13dc3866f45f3680f789c1a1301b07dadd3fbc78"}, + {file = "numpy-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7506387e191fe8cdb267f912469a3cccc538ab108471291636a96a54e599556"}, + {file = "numpy-2.1.1-cp313-cp313-win32.whl", hash = "sha256:251105b7c42abe40e3a689881e1793370cc9724ad50d64b30b358bbb3a97553b"}, + {file = "numpy-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:f212d4f46b67ff604d11fff7cc62d36b3e8714edf68e44e9760e19be38c03eb0"}, + {file = "numpy-2.1.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:920b0911bb2e4414c50e55bd658baeb78281a47feeb064ab40c2b66ecba85553"}, + {file = "numpy-2.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:bab7c09454460a487e631ffc0c42057e3d8f2a9ddccd1e60c7bb8ed774992480"}, + {file = "numpy-2.1.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:cea427d1350f3fd0d2818ce7350095c1a2ee33e30961d2f0fef48576ddbbe90f"}, + {file = "numpy-2.1.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:e30356d530528a42eeba51420ae8bf6c6c09559051887196599d96ee5f536468"}, + {file = "numpy-2.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8dfa9e94fc127c40979c3eacbae1e61fda4fe71d84869cc129e2721973231ef"}, + {file = "numpy-2.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910b47a6d0635ec1bd53b88f86120a52bf56dcc27b51f18c7b4a2e2224c29f0f"}, + {file = "numpy-2.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:13cc11c00000848702322af4de0147ced365c81d66053a67c2e962a485b3717c"}, + {file = "numpy-2.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:53e27293b3a2b661c03f79aa51c3987492bd4641ef933e366e0f9f6c9bf257ec"}, + {file = "numpy-2.1.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7be6a07520b88214ea85d8ac8b7d6d8a1839b0b5cb87412ac9f49fa934eb15d5"}, + {file = "numpy-2.1.1-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:52ac2e48f5ad847cd43c4755520a2317f3380213493b9d8a4c5e37f3b87df504"}, + {file = "numpy-2.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50a95ca3560a6058d6ea91d4629a83a897ee27c00630aed9d933dff191f170cd"}, + {file = "numpy-2.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:99f4a9ee60eed1385a86e82288971a51e71df052ed0b2900ed30bc840c0f2e39"}, + {file = "numpy-2.1.1.tar.gz", hash = "sha256:d0cf7d55b1051387807405b3898efafa862997b4cba8aa5dbe657be794afeafd"}, ] [[package]] @@ -465,47 +405,60 @@ files = [ [[package]] name = "pandas" -version = "2.2.2" +version = "2.2.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" files = [ - {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, - {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, - {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, - {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, - {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, - {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, - {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, - {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, - {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, - {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, - {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, - {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, - {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, - {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, - {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, - {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, - {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, - {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, - {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, - {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, - {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, - {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, - {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, - {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, - {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, - {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, - {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, - {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, - {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, + {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, + {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"}, + {file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32"}, + {file = "pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"}, + {file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb"}, + {file = "pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761"}, + {file = "pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e"}, + {file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"}, ] [package.dependencies] numpy = [ + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.22.4", markers = "python_version < \"3.11\""}, {version = ">=1.23.2", markers = "python_version == \"3.11\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -538,19 +491,19 @@ xml = ["lxml (>=4.9.2)"] [[package]] name = "platformdirs" -version = "4.2.2" +version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, - {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] -type = ["mypy (>=1.8)"] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] [[package]] name = "pluggy" @@ -569,13 +522,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "3.7.1" +version = "3.8.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" files = [ - {file = "pre_commit-3.7.1-py2.py3-none-any.whl", hash = "sha256:fae36fd1d7ad7d6a5a1c0b0d5adb2ed1a3bda5a21bf6c3e5372073d7a11cd4c5"}, - {file = "pre_commit-3.7.1.tar.gz", hash = "sha256:8ca3ad567bc78a4972a3f1a477e94a79d4597e8140a6e0b651c5e33899c3654a"}, + {file = "pre_commit-3.8.0-py2.py3-none-any.whl", hash = "sha256:9a90a53bf82fdd8778d58085faf8d83df56e40dfe18f45b19446e26bf1b3a63f"}, + {file = "pre_commit-3.8.0.tar.gz", hash = "sha256:8bb6494d4a20423842e198980c9ecf9f96607a07ea29549e180eef9ae80fe7af"}, ] [package.dependencies] @@ -587,109 +540,123 @@ virtualenv = ">=20.10.0" [[package]] name = "pydantic" -version = "2.7.4" +version = "2.9.2" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.7.4-py3-none-any.whl", hash = "sha256:ee8538d41ccb9c0a9ad3e0e5f07bf15ed8015b481ced539a1759d8cc89ae90d0"}, - {file = "pydantic-2.7.4.tar.gz", hash = "sha256:0c84efd9548d545f63ac0060c1e4d39bb9b14db8b3c0652338aecc07b5adec52"}, + {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, + {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, ] [package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.18.4" -typing-extensions = ">=4.6.1" +annotated-types = ">=0.6.0" +pydantic-core = "2.23.4" +typing-extensions = [ + {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, + {version = ">=4.6.1", markers = "python_version < \"3.13\""}, +] [package.extras] email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.18.4" +version = "2.23.4" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.18.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f76d0ad001edd426b92233d45c746fd08f467d56100fd8f30e9ace4b005266e4"}, - {file = "pydantic_core-2.18.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:59ff3e89f4eaf14050c8022011862df275b552caef8082e37b542b066ce1ff26"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a55b5b16c839df1070bc113c1f7f94a0af4433fcfa1b41799ce7606e5c79ce0a"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4d0dcc59664fcb8974b356fe0a18a672d6d7cf9f54746c05f43275fc48636851"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8951eee36c57cd128f779e641e21eb40bc5073eb28b2d23f33eb0ef14ffb3f5d"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4701b19f7e3a06ea655513f7938de6f108123bf7c86bbebb1196eb9bd35cf724"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00a3f196329e08e43d99b79b286d60ce46bed10f2280d25a1718399457e06be"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:97736815b9cc893b2b7f663628e63f436018b75f44854c8027040e05230eeddb"}, - {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6891a2ae0e8692679c07728819b6e2b822fb30ca7445f67bbf6509b25a96332c"}, - {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bc4ff9805858bd54d1a20efff925ccd89c9d2e7cf4986144b30802bf78091c3e"}, - {file = "pydantic_core-2.18.4-cp310-none-win32.whl", hash = "sha256:1b4de2e51bbcb61fdebd0ab86ef28062704f62c82bbf4addc4e37fa4b00b7cbc"}, - {file = "pydantic_core-2.18.4-cp310-none-win_amd64.whl", hash = "sha256:6a750aec7bf431517a9fd78cb93c97b9b0c496090fee84a47a0d23668976b4b0"}, - {file = "pydantic_core-2.18.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:942ba11e7dfb66dc70f9ae66b33452f51ac7bb90676da39a7345e99ffb55402d"}, - {file = "pydantic_core-2.18.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2ebef0e0b4454320274f5e83a41844c63438fdc874ea40a8b5b4ecb7693f1c4"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a642295cd0c8df1b86fc3dced1d067874c353a188dc8e0f744626d49e9aa51c4"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f09baa656c904807e832cf9cce799c6460c450c4ad80803517032da0cd062e2"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98906207f29bc2c459ff64fa007afd10a8c8ac080f7e4d5beff4c97086a3dabd"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19894b95aacfa98e7cb093cd7881a0c76f55731efad31073db4521e2b6ff5b7d"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fbbdc827fe5e42e4d196c746b890b3d72876bdbf160b0eafe9f0334525119c8"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f85d05aa0918283cf29a30b547b4df2fbb56b45b135f9e35b6807cb28bc47951"}, - {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e85637bc8fe81ddb73fda9e56bab24560bdddfa98aa64f87aaa4e4b6730c23d2"}, - {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2f5966897e5461f818e136b8451d0551a2e77259eb0f73a837027b47dc95dab9"}, - {file = "pydantic_core-2.18.4-cp311-none-win32.whl", hash = "sha256:44c7486a4228413c317952e9d89598bcdfb06399735e49e0f8df643e1ccd0558"}, - {file = "pydantic_core-2.18.4-cp311-none-win_amd64.whl", hash = "sha256:8a7164fe2005d03c64fd3b85649891cd4953a8de53107940bf272500ba8a788b"}, - {file = "pydantic_core-2.18.4-cp311-none-win_arm64.whl", hash = "sha256:4e99bc050fe65c450344421017f98298a97cefc18c53bb2f7b3531eb39bc7805"}, - {file = "pydantic_core-2.18.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6f5c4d41b2771c730ea1c34e458e781b18cc668d194958e0112455fff4e402b2"}, - {file = "pydantic_core-2.18.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2fdf2156aa3d017fddf8aea5adfba9f777db1d6022d392b682d2a8329e087cef"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4748321b5078216070b151d5271ef3e7cc905ab170bbfd27d5c83ee3ec436695"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847a35c4d58721c5dc3dba599878ebbdfd96784f3fb8bb2c356e123bdcd73f34"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c40d4eaad41f78e3bbda31b89edc46a3f3dc6e171bf0ecf097ff7a0ffff7cb1"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:21a5e440dbe315ab9825fcd459b8814bb92b27c974cbc23c3e8baa2b76890077"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01dd777215e2aa86dfd664daed5957704b769e726626393438f9c87690ce78c3"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4b06beb3b3f1479d32befd1f3079cc47b34fa2da62457cdf6c963393340b56e9"}, - {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:564d7922e4b13a16b98772441879fcdcbe82ff50daa622d681dd682175ea918c"}, - {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0eb2a4f660fcd8e2b1c90ad566db2b98d7f3f4717c64fe0a83e0adb39766d5b8"}, - {file = "pydantic_core-2.18.4-cp312-none-win32.whl", hash = "sha256:8b8bab4c97248095ae0c4455b5a1cd1cdd96e4e4769306ab19dda135ea4cdb07"}, - {file = "pydantic_core-2.18.4-cp312-none-win_amd64.whl", hash = "sha256:14601cdb733d741b8958224030e2bfe21a4a881fb3dd6fbb21f071cabd48fa0a"}, - {file = "pydantic_core-2.18.4-cp312-none-win_arm64.whl", hash = "sha256:c1322d7dd74713dcc157a2b7898a564ab091ca6c58302d5c7b4c07296e3fd00f"}, - {file = "pydantic_core-2.18.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:823be1deb01793da05ecb0484d6c9e20baebb39bd42b5d72636ae9cf8350dbd2"}, - {file = "pydantic_core-2.18.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ebef0dd9bf9b812bf75bda96743f2a6c5734a02092ae7f721c048d156d5fabae"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae1d6df168efb88d7d522664693607b80b4080be6750c913eefb77e34c12c71a"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9899c94762343f2cc2fc64c13e7cae4c3cc65cdfc87dd810a31654c9b7358cc"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99457f184ad90235cfe8461c4d70ab7dd2680e28821c29eca00252ba90308c78"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18f469a3d2a2fdafe99296a87e8a4c37748b5080a26b806a707f25a902c040a8"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7cdf28938ac6b8b49ae5e92f2735056a7ba99c9b110a474473fd71185c1af5d"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:938cb21650855054dc54dfd9120a851c974f95450f00683399006aa6e8abb057"}, - {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:44cd83ab6a51da80fb5adbd9560e26018e2ac7826f9626bc06ca3dc074cd198b"}, - {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:972658f4a72d02b8abfa2581d92d59f59897d2e9f7e708fdabe922f9087773af"}, - {file = "pydantic_core-2.18.4-cp38-none-win32.whl", hash = "sha256:1d886dc848e60cb7666f771e406acae54ab279b9f1e4143babc9c2258213daa2"}, - {file = "pydantic_core-2.18.4-cp38-none-win_amd64.whl", hash = "sha256:bb4462bd43c2460774914b8525f79b00f8f407c945d50881568f294c1d9b4443"}, - {file = "pydantic_core-2.18.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:44a688331d4a4e2129140a8118479443bd6f1905231138971372fcde37e43528"}, - {file = "pydantic_core-2.18.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a2fdd81edd64342c85ac7cf2753ccae0b79bf2dfa063785503cb85a7d3593223"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86110d7e1907ab36691f80b33eb2da87d780f4739ae773e5fc83fb272f88825f"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46387e38bd641b3ee5ce247563b60c5ca098da9c56c75c157a05eaa0933ed154"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:123c3cec203e3f5ac7b000bd82235f1a3eced8665b63d18be751f115588fea30"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dc1803ac5c32ec324c5261c7209e8f8ce88e83254c4e1aebdc8b0a39f9ddb443"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53db086f9f6ab2b4061958d9c276d1dbe3690e8dd727d6abf2321d6cce37fa94"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abc267fa9837245cc28ea6929f19fa335f3dc330a35d2e45509b6566dc18be23"}, - {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a0d829524aaefdebccb869eed855e2d04c21d2d7479b6cada7ace5448416597b"}, - {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:509daade3b8649f80d4e5ff21aa5673e4ebe58590b25fe42fac5f0f52c6f034a"}, - {file = "pydantic_core-2.18.4-cp39-none-win32.whl", hash = "sha256:ca26a1e73c48cfc54c4a76ff78df3727b9d9f4ccc8dbee4ae3f73306a591676d"}, - {file = "pydantic_core-2.18.4-cp39-none-win_amd64.whl", hash = "sha256:c67598100338d5d985db1b3d21f3619ef392e185e71b8d52bceacc4a7771ea7e"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:574d92eac874f7f4db0ca653514d823a0d22e2354359d0759e3f6a406db5d55d"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1f4d26ceb5eb9eed4af91bebeae4b06c3fb28966ca3a8fb765208cf6b51102ab"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77450e6d20016ec41f43ca4a6c63e9fdde03f0ae3fe90e7c27bdbeaece8b1ed4"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d323a01da91851a4f17bf592faf46149c9169d68430b3146dcba2bb5e5719abc"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43d447dd2ae072a0065389092a231283f62d960030ecd27565672bd40746c507"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:578e24f761f3b425834f297b9935e1ce2e30f51400964ce4801002435a1b41ef"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:81b5efb2f126454586d0f40c4d834010979cb80785173d1586df845a632e4e6d"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ab86ce7c8f9bea87b9d12c7f0af71102acbf5ecbc66c17796cff45dae54ef9a5"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:90afc12421df2b1b4dcc975f814e21bc1754640d502a2fbcc6d41e77af5ec312"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:51991a89639a912c17bef4b45c87bd83593aee0437d8102556af4885811d59f5"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:293afe532740370aba8c060882f7d26cfd00c94cae32fd2e212a3a6e3b7bc15e"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48ece5bde2e768197a2d0f6e925f9d7e3e826f0ad2271120f8144a9db18d5c8"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eae237477a873ab46e8dd748e515c72c0c804fb380fbe6c85533c7de51f23a8f"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:834b5230b5dfc0c1ec37b2fda433b271cbbc0e507560b5d1588e2cc1148cf1ce"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e858ac0a25074ba4bce653f9b5d0a85b7456eaddadc0ce82d3878c22489fa4ee"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2fd41f6eff4c20778d717af1cc50eca52f5afe7805ee530a4fbd0bae284f16e9"}, - {file = "pydantic_core-2.18.4.tar.gz", hash = "sha256:ec3beeada09ff865c344ff3bc2f427f5e6c26401cc6113d77e372c3fdac73864"}, + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, + {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2"}, + {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3"}, + {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071"}, + {file = "pydantic_core-2.23.4-cp310-none-win32.whl", hash = "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119"}, + {file = "pydantic_core-2.23.4-cp310-none-win_amd64.whl", hash = "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f"}, + {file = "pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8"}, + {file = "pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e"}, + {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b"}, + {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0"}, + {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64"}, + {file = "pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f"}, + {file = "pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3"}, + {file = "pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231"}, + {file = "pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36"}, + {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126"}, + {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e"}, + {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24"}, + {file = "pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84"}, + {file = "pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9"}, + {file = "pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc"}, + {file = "pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b"}, + {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327"}, + {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6"}, + {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f"}, + {file = "pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769"}, + {file = "pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5"}, + {file = "pydantic_core-2.23.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555"}, + {file = "pydantic_core-2.23.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad"}, + {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12"}, + {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2"}, + {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb"}, + {file = "pydantic_core-2.23.4-cp38-none-win32.whl", hash = "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6"}, + {file = "pydantic_core-2.23.4-cp38-none-win_amd64.whl", hash = "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556"}, + {file = "pydantic_core-2.23.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a"}, + {file = "pydantic_core-2.23.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c"}, + {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55"}, + {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040"}, + {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605"}, + {file = "pydantic_core-2.23.4-cp39-none-win32.whl", hash = "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6"}, + {file = "pydantic_core-2.23.4-cp39-none-win_amd64.whl", hash = "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433"}, + {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8"}, + {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e"}, + {file = "pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863"}, ] [package.dependencies] @@ -697,13 +664,13 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pydantic-settings" -version = "2.3.3" +version = "2.5.2" description = "Settings management using Pydantic" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_settings-2.3.3-py3-none-any.whl", hash = "sha256:e4ed62ad851670975ec11285141db888fd24947f9440bd4380d7d8788d4965de"}, - {file = "pydantic_settings-2.3.3.tar.gz", hash = "sha256:87fda838b64b5039b970cd47c3e8a1ee460ce136278ff672980af21516f6e6ce"}, + {file = "pydantic_settings-2.5.2-py3-none-any.whl", hash = "sha256:2c912e55fd5794a59bf8c832b9de832dcfdf4778d79ff79b708744eed499a907"}, + {file = "pydantic_settings-2.5.2.tar.gz", hash = "sha256:f90b139682bee4d2065273d5185d71d37ea46cfe57e1b5ae184fc6a0b2484ca0"}, ] [package.dependencies] @@ -711,18 +678,19 @@ pydantic = ">=2.7.0" python-dotenv = ">=0.21.0" [package.extras] +azure-key-vault = ["azure-identity (>=1.16.0)", "azure-keyvault-secrets (>=4.8.0)"] toml = ["tomli (>=2.0.1)"] yaml = ["pyyaml (>=6.0.1)"] [[package]] name = "pytest" -version = "8.2.2" +version = "8.3.3" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.2.2-py3-none-any.whl", hash = "sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343"}, - {file = "pytest-8.2.2.tar.gz", hash = "sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977"}, + {file = "pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2"}, + {file = "pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181"}, ] [package.dependencies] @@ -730,7 +698,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=1.5,<2.0" +pluggy = ">=1.5,<2" tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] @@ -766,73 +734,75 @@ cli = ["click (>=5.0)"] [[package]] name = "pytz" -version = "2024.1" +version = "2024.2" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, - {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, + {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, + {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, ] [[package]] name = "pyyaml" -version = "6.0.1" +version = "6.0.2" description = "YAML parser and emitter for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] [[package]] @@ -878,85 +848,6 @@ files = [ {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] -[[package]] -name = "sqlalchemy" -version = "1.4.52" -description = "Database Abstraction Library" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -files = [ - {file = "SQLAlchemy-1.4.52-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:f68016f9a5713684c1507cc37133c28035f29925c75c0df2f9d0f7571e23720a"}, - {file = "SQLAlchemy-1.4.52-cp310-cp310-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24bb0f81fbbb13d737b7f76d1821ec0b117ce8cbb8ee5e8641ad2de41aa916d3"}, - {file = "SQLAlchemy-1.4.52-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e93983cc0d2edae253b3f2141b0a3fb07e41c76cd79c2ad743fc27eb79c3f6db"}, - {file = "SQLAlchemy-1.4.52-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:84e10772cfc333eb08d0b7ef808cd76e4a9a30a725fb62a0495877a57ee41d81"}, - {file = "SQLAlchemy-1.4.52-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:427988398d2902de042093d17f2b9619a5ebc605bf6372f7d70e29bde6736842"}, - {file = "SQLAlchemy-1.4.52-cp310-cp310-win32.whl", hash = "sha256:1296f2cdd6db09b98ceb3c93025f0da4835303b8ac46c15c2136e27ee4d18d94"}, - {file = "SQLAlchemy-1.4.52-cp310-cp310-win_amd64.whl", hash = "sha256:80e7f697bccc56ac6eac9e2df5c98b47de57e7006d2e46e1a3c17c546254f6ef"}, - {file = "SQLAlchemy-1.4.52-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2f251af4c75a675ea42766880ff430ac33291c8d0057acca79710f9e5a77383d"}, - {file = "SQLAlchemy-1.4.52-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb8f9e4c4718f111d7b530c4e6fb4d28f9f110eb82e7961412955b3875b66de0"}, - {file = "SQLAlchemy-1.4.52-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afb1672b57f58c0318ad2cff80b384e816735ffc7e848d8aa51e0b0fc2f4b7bb"}, - {file = "SQLAlchemy-1.4.52-cp311-cp311-win32.whl", hash = "sha256:6e41cb5cda641f3754568d2ed8962f772a7f2b59403b95c60c89f3e0bd25f15e"}, - {file = "SQLAlchemy-1.4.52-cp311-cp311-win_amd64.whl", hash = "sha256:5bed4f8c3b69779de9d99eb03fd9ab67a850d74ab0243d1be9d4080e77b6af12"}, - {file = "SQLAlchemy-1.4.52-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:49e3772eb3380ac88d35495843daf3c03f094b713e66c7d017e322144a5c6b7c"}, - {file = "SQLAlchemy-1.4.52-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:618827c1a1c243d2540314c6e100aee7af09a709bd005bae971686fab6723554"}, - {file = "SQLAlchemy-1.4.52-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de9acf369aaadb71a725b7e83a5ef40ca3de1cf4cdc93fa847df6b12d3cd924b"}, - {file = "SQLAlchemy-1.4.52-cp312-cp312-win32.whl", hash = "sha256:763bd97c4ebc74136ecf3526b34808c58945023a59927b416acebcd68d1fc126"}, - {file = "SQLAlchemy-1.4.52-cp312-cp312-win_amd64.whl", hash = "sha256:f12aaf94f4d9679ca475975578739e12cc5b461172e04d66f7a3c39dd14ffc64"}, - {file = "SQLAlchemy-1.4.52-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:853fcfd1f54224ea7aabcf34b227d2b64a08cbac116ecf376907968b29b8e763"}, - {file = "SQLAlchemy-1.4.52-cp36-cp36m-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f98dbb8fcc6d1c03ae8ec735d3c62110949a3b8bc6e215053aa27096857afb45"}, - {file = "SQLAlchemy-1.4.52-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e135fff2e84103bc15c07edd8569612ce317d64bdb391f49ce57124a73f45c5"}, - {file = "SQLAlchemy-1.4.52-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b5de6af8852500d01398f5047d62ca3431d1e29a331d0b56c3e14cb03f8094c"}, - {file = "SQLAlchemy-1.4.52-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3491c85df263a5c2157c594f54a1a9c72265b75d3777e61ee13c556d9e43ffc9"}, - {file = "SQLAlchemy-1.4.52-cp36-cp36m-win32.whl", hash = "sha256:427c282dd0deba1f07bcbf499cbcc9fe9a626743f5d4989bfdfd3ed3513003dd"}, - {file = "SQLAlchemy-1.4.52-cp36-cp36m-win_amd64.whl", hash = "sha256:ca5ce82b11731492204cff8845c5e8ca1a4bd1ade85e3b8fcf86e7601bfc6a39"}, - {file = "SQLAlchemy-1.4.52-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:29d4247313abb2015f8979137fe65f4eaceead5247d39603cc4b4a610936cd2b"}, - {file = "SQLAlchemy-1.4.52-cp37-cp37m-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a752bff4796bf22803d052d4841ebc3c55c26fb65551f2c96e90ac7c62be763a"}, - {file = "SQLAlchemy-1.4.52-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7ea11727feb2861deaa293c7971a4df57ef1c90e42cb53f0da40c3468388000"}, - {file = "SQLAlchemy-1.4.52-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d913f8953e098ca931ad7f58797f91deed26b435ec3756478b75c608aa80d139"}, - {file = "SQLAlchemy-1.4.52-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a251146b921725547ea1735b060a11e1be705017b568c9f8067ca61e6ef85f20"}, - {file = "SQLAlchemy-1.4.52-cp37-cp37m-win32.whl", hash = "sha256:1f8e1c6a6b7f8e9407ad9afc0ea41c1f65225ce505b79bc0342159de9c890782"}, - {file = "SQLAlchemy-1.4.52-cp37-cp37m-win_amd64.whl", hash = "sha256:346ed50cb2c30f5d7a03d888e25744154ceac6f0e6e1ab3bc7b5b77138d37710"}, - {file = "SQLAlchemy-1.4.52-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:4dae6001457d4497736e3bc422165f107ecdd70b0d651fab7f731276e8b9e12d"}, - {file = "SQLAlchemy-1.4.52-cp38-cp38-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5d2e08d79f5bf250afb4a61426b41026e448da446b55e4770c2afdc1e200fce"}, - {file = "SQLAlchemy-1.4.52-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bbce5dd7c7735e01d24f5a60177f3e589078f83c8a29e124a6521b76d825b85"}, - {file = "SQLAlchemy-1.4.52-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bdb7b4d889631a3b2a81a3347c4c3f031812eb4adeaa3ee4e6b0d028ad1852b5"}, - {file = "SQLAlchemy-1.4.52-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c294ae4e6bbd060dd79e2bd5bba8b6274d08ffd65b58d106394cb6abbf35cf45"}, - {file = "SQLAlchemy-1.4.52-cp38-cp38-win32.whl", hash = "sha256:bcdfb4b47fe04967669874fb1ce782a006756fdbebe7263f6a000e1db969120e"}, - {file = "SQLAlchemy-1.4.52-cp38-cp38-win_amd64.whl", hash = "sha256:7d0dbc56cb6af5088f3658982d3d8c1d6a82691f31f7b0da682c7b98fa914e91"}, - {file = "SQLAlchemy-1.4.52-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:a551d5f3dc63f096ed41775ceec72fdf91462bb95abdc179010dc95a93957800"}, - {file = "SQLAlchemy-1.4.52-cp39-cp39-manylinux1_x86_64.manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_5_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ab773f9ad848118df7a9bbabca53e3f1002387cdbb6ee81693db808b82aaab0"}, - {file = "SQLAlchemy-1.4.52-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2de46f5d5396d5331127cfa71f837cca945f9a2b04f7cb5a01949cf676db7d1"}, - {file = "SQLAlchemy-1.4.52-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7027be7930a90d18a386b25ee8af30514c61f3852c7268899f23fdfbd3107181"}, - {file = "SQLAlchemy-1.4.52-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99224d621affbb3c1a4f72b631f8393045f4ce647dd3262f12fe3576918f8bf3"}, - {file = "SQLAlchemy-1.4.52-cp39-cp39-win32.whl", hash = "sha256:c124912fd4e1bb9d1e7dc193ed482a9f812769cb1e69363ab68e01801e859821"}, - {file = "SQLAlchemy-1.4.52-cp39-cp39-win_amd64.whl", hash = "sha256:2c286fab42e49db23c46ab02479f328b8bdb837d3e281cae546cc4085c83b680"}, - {file = "SQLAlchemy-1.4.52.tar.gz", hash = "sha256:80e63bbdc5217dad3485059bdf6f65a7d43f33c8bde619df5c220edf03d87296"}, -] - -[package.dependencies] -greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} - -[package.extras] -aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] -aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"] -asyncio = ["greenlet (!=0.4.17)"] -asyncmy = ["asyncmy (>=0.2.3,!=0.2.4)", "greenlet (!=0.4.17)"] -mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2)"] -mssql = ["pyodbc"] -mssql-pymssql = ["pymssql"] -mssql-pyodbc = ["pyodbc"] -mypy = ["mypy (>=0.910)", "sqlalchemy2-stubs"] -mysql = ["mysqlclient (>=1.4.0)", "mysqlclient (>=1.4.0,<2)"] -mysql-connector = ["mysql-connector-python"] -oracle = ["cx_oracle (>=7)", "cx_oracle (>=7,<8)"] -postgresql = ["psycopg2 (>=2.7)"] -postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] -postgresql-pg8000 = ["pg8000 (>=1.16.6,!=1.29.0)"] -postgresql-psycopg2binary = ["psycopg2-binary"] -postgresql-psycopg2cffi = ["psycopg2cffi"] -pymysql = ["pymysql", "pymysql (<1)"] -sqlcipher = ["sqlcipher3_binary"] - [[package]] name = "starlette" version = "0.37.2" @@ -1009,13 +900,13 @@ files = [ [[package]] name = "urllib3" -version = "2.2.2" +version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, - {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, + {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, + {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, ] [package.extras] @@ -1044,13 +935,13 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", [[package]] name = "virtualenv" -version = "20.26.2" +version = "20.26.5" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.26.2-py3-none-any.whl", hash = "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"}, - {file = "virtualenv-20.26.2.tar.gz", hash = "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c"}, + {file = "virtualenv-20.26.5-py3-none-any.whl", hash = "sha256:4f3ac17b81fba3ce3bd6f4ead2749a72da5929c01774948e243db9ba41df4ff6"}, + {file = "virtualenv-20.26.5.tar.gz", hash = "sha256:ce489cac131aa58f4b25e321d6d186171f78e6cb13fafbf32a840cee67733ff4"}, ] [package.dependencies] @@ -1065,4 +956,4 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "ec44252879b4d9c485ec52ffe628220da4274908e6dbcff4fb142a7ffd2488d2" +content-hash = "90105f84ae5fa725f1e05d5e1f86bd1b2dd765e065c1a464dce8c374e84543b9" diff --git a/pyproject.toml b/pyproject.toml index f96e0ae..b286947 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,6 @@ pandas = "^2.2.1" pydantic = "^2.6.4" pydantic-settings = "^2.2.1" requests = "^2.28.1" -SQLAlchemy = "^1.4.42" uvicorn = "^0.19.0" [tool.poetry.group.dev.dependencies] From d91a424baeb48a85c6b3df294aecfb28166b94e6 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 23 Sep 2024 16:34:56 +0200 Subject: [PATCH 205/227] test: change import of hardware_cli --- tests/hardware/test_hardwarecli.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/hardware/test_hardwarecli.py b/tests/hardware/test_hardwarecli.py index 51c6a5f..f08101d 100644 --- a/tests/hardware/test_hardwarecli.py +++ b/tests/hardware/test_hardwarecli.py @@ -1,6 +1,6 @@ from unittest import TestCase from os.path import exists -from boagent.hardware.hardware_cli import main, get_cpus, get_ram, get_disks +from hardware_cli import main, get_cpus, get_ram, get_disks from click.testing import CliRunner From e4021c31d3b9190f8e20421f8c8cd20db86772b8 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 23 Sep 2024 17:58:06 +0200 Subject: [PATCH 206/227] build: add httpx --- poetry.lock | 48 +++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index 189cb2b..8719cc0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -280,6 +280,52 @@ files = [ {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, ] +[[package]] +name = "httpcore" +version = "1.0.5" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<0.26.0)"] + +[[package]] +name = "httpx" +version = "0.27.2" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, + {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] + [[package]] name = "identify" version = "2.6.1" @@ -956,4 +1002,4 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "90105f84ae5fa725f1e05d5e1f86bd1b2dd765e065c1a464dce8c374e84543b9" +content-hash = "3dc6358daba901c3cdc36b74040071316c853586ad219a5e7a68c4bf19235024" diff --git a/pyproject.toml b/pyproject.toml index b286947..b37b80d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,6 +17,7 @@ pydantic = "^2.6.4" pydantic-settings = "^2.2.1" requests = "^2.28.1" uvicorn = "^0.19.0" +httpx = "^0.27.2" [tool.poetry.group.dev.dependencies] pytest = "^8.0.2" From a79a789539fd7b94b8c44b3b10ca399ff55809e9 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 25 Sep 2024 12:17:55 +0200 Subject: [PATCH 207/227] refactor: serialized_lshw_output as external function --- boagent/hardware/lshw.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py index 12c6d0d..e5bc087 100644 --- a/boagent/hardware/lshw.py +++ b/boagent/hardware/lshw.py @@ -18,21 +18,24 @@ def is_tool(name): return which(name) is not None +def serialized_lshw_output(): + try: + lshw_output = subprocess.getoutput("lshw -quiet -json 2> /dev/null") + serialized_lshw_output = json.loads(lshw_output) + except json.JSONDecodeError: + raise Exception("lshw does not seem do be executed as root.") + else: + if isinstance(serialized_lshw_output, list): + return serialized_lshw_output[0] + else: + return serialized_lshw_output + + class Lshw: def __init__(self): if not is_tool("lshw"): raise Exception("lshw does not seem to be installed.") - try: - data = subprocess.getoutput("lshw -quiet -json 2> /dev/null") - json_data = json.loads(data) - except json.JSONDecodeError: - raise Exception("lshw does not seem do be executed as root.") - # Starting from version 02.18, `lshw -json` wraps its result in a list - # rather than returning directly a dictionary - if isinstance(json_data, list): - self.hw_info = json_data[0] - else: - self.hw_info = json_data + self.hw_info = serialized_lshw_output() self.info = {} self.memories = [] self.cpus = [] @@ -154,7 +157,7 @@ def find_cpus(self, obj): def find_memories(self, obj): if "children" not in obj: - print("not a DIMM memory.") + # print("not a DIMM memory.") return for dimm in obj["children"]: From 725e9cbecb60c3108825a02dc18258cbe2ad1070 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 25 Sep 2024 12:19:14 +0200 Subject: [PATCH 208/227] refactor: error handling with click, lshw instance in main --- hardware_cli.py | 50 ++++++++++++++++++++----------------------------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/hardware_cli.py b/hardware_cli.py index 77bea82..aacd4d7 100755 --- a/hardware_cli.py +++ b/hardware_cli.py @@ -6,41 +6,31 @@ from boagent.hardware.lshw import Lshw -lshw = Lshw() - -lshw_cpus = lshw.cpus -lshw_ram = lshw.memories -lshw_disks = lshw.disks - @click.command() @click.option("--output-file", help="File to output the hardwate data to") def main(output_file): - hardware_data = {} - hardware_data["disks"] = get_disks() - hardware_data["cpus"] = get_cpus() - hardware_data["rams"] = get_ram() - if output_file is not None: - with open(output_file, "w") as fd: - json.dump(hardware_data, fd, indent=4) + try: + lshw = Lshw() + + lshw_cpus = lshw.cpus + lshw_ram = lshw.memories + lshw_disks = lshw.disks + except KeyError: + error_message = "Hardware_cli was not executed with privileges, try `sudo ./hardware_cli.py`." + exception = click.ClickException(error_message) + exception.show() else: - json.dump(hardware_data, sys.stdout, indent=4) - return 0 - - -def get_disks(): - disks = lshw_disks - return disks - - -def get_cpus(): - cpus = lshw_cpus - return cpus - - -def get_ram(): - rams = lshw_ram - return rams + hardware_data = {} + hardware_data["disks"] = lshw_disks + hardware_data["cpus"] = lshw_cpus + hardware_data["rams"] = lshw_ram + if output_file is not None: + with open(output_file, "w") as fd: + json.dump(hardware_data, fd, indent=4) + else: + json.dump(hardware_data, sys.stdout, indent=4) + return 0 if __name__ == "__main__": From 9d74841ece0cde6490ae03a3a73b5ce53139d544 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 25 Sep 2024 12:21:47 +0200 Subject: [PATCH 209/227] fix: mock lshw, lshw attributes to avoid side effects --- tests/hardware/test_hardwarecli.py | 63 +++++++++++++++++++----- tests/hardware/test_lshw.py | 78 +++++++++++++++++------------- 2 files changed, 95 insertions(+), 46 deletions(-) diff --git a/tests/hardware/test_hardwarecli.py b/tests/hardware/test_hardwarecli.py index f08101d..c604721 100644 --- a/tests/hardware/test_hardwarecli.py +++ b/tests/hardware/test_hardwarecli.py @@ -1,25 +1,54 @@ +from json import load from unittest import TestCase +from os import path from os.path import exists -from hardware_cli import main, get_cpus, get_ram, get_disks +from unittest.mock import Mock, patch +from hardware_cli import main from click.testing import CliRunner +current_dir = path.dirname(__file__) +mock_lshw_data = path.join(f"{current_dir}", "../mocks/sudo_lshw_data") +with open(f"{mock_lshw_data}.json") as lshw_json: + data = load(lshw_json) -class HardwarecliTest(TestCase): - def test_read_hardware_cli_cpus(self): - - cpus = get_cpus() - assert type(cpus) is list - def test_read_hardware_cli_ram(self): +class MockLshw: + def __init__(self): + self.cpus = { + "cpus": [ + { + "units": 1, + "name": "AMD Ryzen 5 5600H with Radeon Graphics", + "manufacturer": "Advanced Micro Devices [AMD]", + "core_units": 6, + } + ] + } + self.memories = { + "rams": [ + {"units": 1, "manufacturer": "Samsung", "capacity": 8}, + {"units": 1, "manufacturer": "Kingston", "capacity": 16}, + ] + } + self.disks = { + "disks": [ + { + "units": 1, + "logicalname": "/dev/nvme0n1", + "manufacturer": "samsung", + "type": "ssd", + "capacity": 476, + } + ], + } - ram = get_ram() - assert type(ram) is list - def test_read_hardware_cli_disks(self): +mocked_lshw = Mock() +mocked_lshw.return_value = MockLshw() - disks = get_disks() - assert type(disks) is list +class HardwarecliTest(TestCase): + @patch("hardware_cli.Lshw", mocked_lshw) def test_write_hardware_json_file_from_hardware_cli_with_output_file_flag_on(self): runner = CliRunner() @@ -31,6 +60,7 @@ def test_write_hardware_json_file_from_hardware_cli_with_output_file_flag_on(sel assert result.exit_code == 0 + @patch("hardware_cli.Lshw", mocked_lshw) def test_read_stdout_from_hardware_cli(self): runner = CliRunner() @@ -41,3 +71,12 @@ def test_read_stdout_from_hardware_cli(self): assert result.output.count("disk") >= 1 assert result.output.count("ram") >= 1 assert result.output.count("cpu") >= 1 + + def test_hardware_cli_returns_error_is_not_executed_with_sudo(self): + runner = CliRunner() + result = runner.invoke(main) + assert ( + result.output.__contains__( + "Hardware_cli was not executed with privileges, try `sudo ./hardware_cli.py`" + ) + ) is True diff --git a/tests/hardware/test_lshw.py b/tests/hardware/test_lshw.py index 275d905..ac46fdf 100644 --- a/tests/hardware/test_lshw.py +++ b/tests/hardware/test_lshw.py @@ -1,77 +1,88 @@ from unittest import TestCase from boagent.hardware.lshw import Lshw -from unittest.mock import patch +from unittest.mock import Mock, patch from json import load from os import path current_dir = path.dirname(__file__) mock_lshw_data = path.join(f"{current_dir}", "../mocks/sudo_lshw_data") +with open(f"{mock_lshw_data}.json") as lshw_json: + data = load(lshw_json) -hw = Lshw() - -lshw_cpus_data = hw.cpus -lshw_disks_data = hw.disks -lshw_ram_data = hw.memories +mocked_is_tool = Mock() +mocked_is_tool.return_value = True +mocked_serialized_lshw_output = Mock() +mocked_serialized_lshw_output.return_value = data class LshwTest(TestCase): + @patch("boagent.hardware.lshw.is_tool", mocked_is_tool) + @patch( + "boagent.hardware.lshw.serialized_lshw_output", mocked_serialized_lshw_output + ) + def setUp(self): + self.lshw = Lshw() + self.cpu_data = self.lshw.cpus + self.storage_data = self.lshw.disks + self.ram_data = self.lshw.memories + def test_read_get_hw_linux_cpu(self): - cpu_data = hw.get_hw_linux("cpu") + cpu_data = self.lshw.get_hw_linux("cpu") assert type(cpu_data) is list def test_read_get_hw_linux_storage(self): - storage_data = hw.get_hw_linux("storage") + storage_data = self.lshw.get_hw_linux("storage") assert type(storage_data) is list def test_read_get_hw_linux_memory(self): - memory_data = hw.get_hw_linux("memory") + memory_data = self.lshw.get_hw_linux("memory") assert type(memory_data) is list def test_read_cpus_vendor(self): - for cpu in lshw_cpus_data: + for cpu in self.cpu_data: assert "manufacturer" in cpu assert type(cpu["manufacturer"]) is str def test_read_cpus_name(self): - for cpu in lshw_cpus_data: + for cpu in self.cpu_data: assert "name" in cpu assert type(cpu["name"]) is str def test_read_cpus_core_units(self): - for cpu in lshw_cpus_data: + for cpu in self.cpu_data: assert "core_units" in cpu assert type(cpu["core_units"]) is int def test_read_cpus_units(self): - for cpu in lshw_cpus_data: + for cpu in self.cpu_data: assert "units" in cpu assert type(cpu["units"]) is int def test_read_check_disk_vendor_with_correct_model(self): model = "LENOVO 123456154" - result = hw.check_disk_vendor(model) + result = self.lshw.check_disk_vendor(model) assert result == "LENOVO" def test_read_check_disk_vendor_with_incorrect_model(self): model = "12345121 LENOVO" - result = hw.check_disk_vendor(model) + result = self.lshw.check_disk_vendor(model) assert result == "LENOVO" def test_read_check_disk_vendor_with_one_correct_string_in_model(self): model = "LENOVO" - result = hw.check_disk_vendor(model) + result = self.lshw.check_disk_vendor(model) assert result == "LENOVO" @@ -79,18 +90,18 @@ def test_read_check_disk_vendor_with_one_incorrect_string_in_model(self): model = "12345211" with self.assertRaises(Exception): - hw.check_disk_vendor(model) + self.lshw.check_disk_vendor(model) def test_read_check_disk_vendor_with_multiple_strings_in_model(self): model = "LENOVO 123456 MODEL" - result = hw.check_disk_vendor(model) + result = self.lshw.check_disk_vendor(model) assert result == "LENOVO" def test_read_disks_type(self): - for disk in lshw_disks_data: + for disk in self.storage_data: assert "type" in disk assert type(disk["type"]) is str assert ( @@ -102,7 +113,7 @@ def test_read_disks_type(self): def test_read_disk_dev_name(self): - for disk in lshw_disks_data: + for disk in self.storage_data: assert "logicalname" in disk assert type(disk["logicalname"]) is str @@ -112,7 +123,7 @@ def test_check_disk_type_is_ssd(self, mocked_get_rotational): dev_logicalname = "/dev/ssdonsata" mocked_get_rotational.return_value = 0 - disk_type = hw.get_disk_type(dev_logicalname) + disk_type = self.lshw.get_disk_type(dev_logicalname) assert disk_type == "ssd" @patch("boagent.hardware.lshw.Lshw.get_rotational_int") @@ -121,30 +132,29 @@ def test_check_disk_type_is_hdd(self, mocked_get_rotational): dev_logicalname = "/dev/sdaex" mocked_get_rotational.return_value = 1 - disk_type = hw.get_disk_type(dev_logicalname) + disk_type = self.lshw.get_disk_type(dev_logicalname) assert disk_type == "hdd" def test_int_for_get_rotational_int_when_file_not_found(self): dev_erroneous_name = "/dev/thisnameleadstonorotational" - rotational_int = hw.get_rotational_int(dev_erroneous_name) + rotational_int = self.lshw.get_rotational_int(dev_erroneous_name) self.assertEqual(rotational_int, 2) def test_read_disk_type_when_dev_path_not_found(self): dev_erroneous_name = "/dev/thisnamedoesntexist" - disk_type = hw.get_disk_type(dev_erroneous_name) + disk_type = self.lshw.get_disk_type(dev_erroneous_name) assert disk_type == "unknown" @patch("boagent.hardware.lshw.is_tool") def test_check_lshw_is_installed_to_parse_hardware_data_and_raises_error_if_not( self, mocked_is_tool ): - another_lshw = Lshw() mocked_is_tool.return_value = False with self.assertRaises(Exception) as context: - another_lshw.__init__() + self.lshw.__init__() self.assertTrue("lshw does not seem to be installed" in str(context.exception)) @patch("boagent.hardware.lshw.is_tool") @@ -157,42 +167,42 @@ def test_check_nvme_cli_is_installed_to_find_storage_and_raises_error_if_not( Exception ) as nvme_cli_exception: data = load(file) - hw.find_storage(data) + self.lshw.find_storage(data) caught_exception = nvme_cli_exception.exception assert str(caught_exception) == "nvme-cli >= 1.0 does not seem to be installed" def test_read_disks_manufacturer(self): - for disk in lshw_disks_data: + for disk in self.storage_data: assert "manufacturer" in disk assert type(disk["manufacturer"]) is str def test_read_disks_capacity(self): - for disk in lshw_disks_data: + for disk in self.storage_data: assert "capacity" in disk assert type(disk["capacity"]) is int def test_read_disks_units(self): - for disk in lshw_disks_data: + for disk in self.storage_data: assert "units" in disk assert type(disk["units"]) is int def test_read_ram_manufacturer(self): - for ram in lshw_ram_data: + for ram in self.ram_data: assert "manufacturer" in ram assert type(ram["manufacturer"]) is str def test_read_ram_capacity(self): - for ram in lshw_ram_data[1:]: + for ram in self.ram_data[1:]: assert "capacity" in ram assert type(ram["capacity"]) is int def test_read_ram_units(self): - assert "units" in lshw_ram_data[0] - assert type(lshw_ram_data[0]["units"]) is int + assert "units" in self.ram_data[0] + assert type(self.ram_data[0]["units"]) is int From ebe63a729b7089bf3424994c25a7948e785d27d0 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 25 Sep 2024 13:20:29 +0200 Subject: [PATCH 210/227] test: mock nvme, add assertions to check data from mocks --- tests/hardware/test_lshw.py | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/tests/hardware/test_lshw.py b/tests/hardware/test_lshw.py index ac46fdf..ecffea6 100644 --- a/tests/hardware/test_lshw.py +++ b/tests/hardware/test_lshw.py @@ -6,13 +6,18 @@ current_dir = path.dirname(__file__) mock_lshw_data = path.join(f"{current_dir}", "../mocks/sudo_lshw_data") +mock_nvme_data = path.join(f"{current_dir}", "../mocks/nvme_data_sudo.json") with open(f"{mock_lshw_data}.json") as lshw_json: - data = load(lshw_json) + lshw_data = load(lshw_json) +with open(mock_nvme_data) as nvme_json: + nvme_data = load(nvme_json) mocked_is_tool = Mock() mocked_is_tool.return_value = True mocked_serialized_lshw_output = Mock() -mocked_serialized_lshw_output.return_value = data +mocked_serialized_lshw_output.return_value = lshw_data +mocked_serialized_nvme_output = Mock() +mocked_serialized_nvme_output.return_value = nvme_data class LshwTest(TestCase): @@ -20,6 +25,9 @@ class LshwTest(TestCase): @patch( "boagent.hardware.lshw.serialized_lshw_output", mocked_serialized_lshw_output ) + @patch( + "boagent.hardware.lshw.serialized_nvme_output", mocked_serialized_nvme_output + ) def setUp(self): self.lshw = Lshw() self.cpu_data = self.lshw.cpus @@ -46,24 +54,28 @@ def test_read_cpus_vendor(self): for cpu in self.cpu_data: assert "manufacturer" in cpu assert type(cpu["manufacturer"]) is str + assert cpu["manufacturer"] == "Advanced Micro Devices [AMD]" def test_read_cpus_name(self): for cpu in self.cpu_data: assert "name" in cpu assert type(cpu["name"]) is str + assert cpu["name"] == "AMD Ryzen 5 5600H with Radeon Graphics" def test_read_cpus_core_units(self): for cpu in self.cpu_data: assert "core_units" in cpu assert type(cpu["core_units"]) is int + assert cpu["core_units"] == 6 def test_read_cpus_units(self): for cpu in self.cpu_data: assert "units" in cpu assert type(cpu["units"]) is int + assert cpu["units"] == 1 def test_read_check_disk_vendor_with_correct_model(self): @@ -104,18 +116,14 @@ def test_read_disks_type(self): for disk in self.storage_data: assert "type" in disk assert type(disk["type"]) is str - assert ( - disk["type"] == "ssd" - or disk["type"] == "hdd" - or disk["type"] == "usb" - or disk["type"] == "unknown" - ) + assert disk["type"] == "ssd" def test_read_disk_dev_name(self): for disk in self.storage_data: assert "logicalname" in disk assert type(disk["logicalname"]) is str + assert disk["logicalname"] == "/dev/nvme0n1" @patch("boagent.hardware.lshw.Lshw.get_rotational_int") def test_check_disk_type_is_ssd(self, mocked_get_rotational): @@ -177,32 +185,39 @@ def test_read_disks_manufacturer(self): for disk in self.storage_data: assert "manufacturer" in disk assert type(disk["manufacturer"]) is str + assert disk["manufacturer"] == "toshiba" def test_read_disks_capacity(self): for disk in self.storage_data: assert "capacity" in disk assert type(disk["capacity"]) is int + assert disk["capacity"] == 238 def test_read_disks_units(self): for disk in self.storage_data: assert "units" in disk assert type(disk["units"]) is int + assert disk["units"] == 1 def test_read_ram_manufacturer(self): for ram in self.ram_data: assert "manufacturer" in ram assert type(ram["manufacturer"]) is str + assert ram["manufacturer"] == "Samsung" def test_read_ram_capacity(self): - for ram in self.ram_data[1:]: + for ram in self.ram_data: assert "capacity" in ram assert type(ram["capacity"]) is int + assert ram["capacity"] == 8 def test_read_ram_units(self): - assert "units" in self.ram_data[0] - assert type(self.ram_data[0]["units"]) is int + for ram in self.ram_data: + assert "units" in ram + assert type(ram["units"]) is int + assert ram["units"] == 1 From c499a3491719e235d7e84c377d07ce7b30cc50a6 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 25 Sep 2024 13:21:05 +0200 Subject: [PATCH 211/227] refactor: serialize nvme output as external function --- boagent/hardware/lshw.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/boagent/hardware/lshw.py b/boagent/hardware/lshw.py index e5bc087..8998393 100644 --- a/boagent/hardware/lshw.py +++ b/boagent/hardware/lshw.py @@ -31,6 +31,14 @@ def serialized_lshw_output(): return serialized_lshw_output +def serialized_nvme_output(): + nvme_output = subprocess.check_output( + ["nvme", "-list", "-o", "json"], encoding="utf8" + ) + serialized_nvme_output = json.loads(nvme_output) + return serialized_nvme_output + + class Lshw: def __init__(self): if not is_tool("lshw"): @@ -125,11 +133,7 @@ def find_storage(self, obj): if not is_tool("nvme"): raise Exception("nvme-cli >= 1.0 does not seem to be installed") try: - nvme = json.loads( - subprocess.check_output( - ["nvme", "-list", "-o", "json"], encoding="utf8" - ) - ) + nvme = serialized_nvme_output() for device in nvme["Devices"]: d = { "units": +1, From cefebc8f7d250b35a54ef3e7deaf282fe6f58e62 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 25 Sep 2024 16:11:12 +0200 Subject: [PATCH 212/227] build: change poetry install, remove comments from docker-compose --- Dockerfile | 2 +- docker-compose.yaml | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3b276f3..4309b3b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ RUN apt update && apt install lshw nvme-cli -y COPY pyproject.toml . -RUN poetry install --only main +RUN poetry install COPY . . diff --git a/docker-compose.yaml b/docker-compose.yaml index ceb39f9..3e07ff7 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -3,8 +3,6 @@ version: '3.2' services: boagent: - #image: ghcr.io/boavizta/boagent:0.0.1 - ## UNCOMMENT THE NEXT TWO LINES TO USE THIS DOCKER FILE AS A DEV ENVIRONMENT build: context: . environment: @@ -12,7 +10,6 @@ services: DEFAULT_LIFETIME: 5.0 HARDWARE_FILE_PATH: "/home/boagent/hardware_data.json" POWER_FILE_PATH: "/app/data/power_data.json" - #user: boagent privileged: true depends_on: - boaviztapi From 234dffd13489577e4147b83d9551ad2ad965c488 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 25 Sep 2024 16:11:37 +0200 Subject: [PATCH 213/227] build: modify click imports --- hardware_cli.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hardware_cli.py b/hardware_cli.py index aacd4d7..75a494d 100755 --- a/hardware_cli.py +++ b/hardware_cli.py @@ -1,14 +1,14 @@ #!/usr/bin/env python3 -import click import json import sys from boagent.hardware.lshw import Lshw +from click import command, option, ClickException -@click.command() -@click.option("--output-file", help="File to output the hardwate data to") +@command() +@option("--output-file", help="File to output the hardwate data to") def main(output_file): try: lshw = Lshw() @@ -18,7 +18,7 @@ def main(output_file): lshw_disks = lshw.disks except KeyError: error_message = "Hardware_cli was not executed with privileges, try `sudo ./hardware_cli.py`." - exception = click.ClickException(error_message) + exception = ClickException(error_message) exception.show() else: hardware_data = {} From 828aeb6134377e190336c0b90b0deae30c04d3de Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 25 Sep 2024 16:11:56 +0200 Subject: [PATCH 214/227] build: update dependencies --- poetry.lock | 209 ++++++------------------------------------------- pyproject.toml | 11 +-- 2 files changed, 32 insertions(+), 188 deletions(-) diff --git a/poetry.lock b/poetry.lock index 8719cc0..4e9a19f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -196,18 +196,30 @@ files = [ ] [[package]] -name = "croniter" -version = "1.4.1" -description = "croniter provides iteration for datetime object with cron like format" +name = "deptry" +version = "0.20.0" +description = "A command line utility to check for unused, missing and transitive dependencies in a Python project." optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" files = [ - {file = "croniter-1.4.1-py2.py3-none-any.whl", hash = "sha256:9595da48af37ea06ec3a9f899738f1b2c1c13da3c38cea606ef7cd03ea421128"}, - {file = "croniter-1.4.1.tar.gz", hash = "sha256:1a6df60eacec3b7a0aa52a8f2ef251ae3dd2a7c7c8b9874e73e791636d55a361"}, + {file = "deptry-0.20.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:41434d95124851b83cb05524d1a09ad6fea62006beafed2ef90a6b501c1b237f"}, + {file = "deptry-0.20.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:b3b4b22d1406147de5d606a24042126cd74d52fdfdb0232b9c5fd0270d601610"}, + {file = "deptry-0.20.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:012fb106dbea6ca95196cdcd75ac90c516c8f01292f7934f2e802a7cf025a660"}, + {file = "deptry-0.20.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ce3920e2bd6d2b4427ab31ab8efb94bbef897001c2d395782bc30002966d12d"}, + {file = "deptry-0.20.0-cp38-abi3-win_amd64.whl", hash = "sha256:0c90ce64e637d0e902bc97c5a020adecfee9e9f09ee0bf4c61554994139bebdb"}, + {file = "deptry-0.20.0-cp38-abi3-win_arm64.whl", hash = "sha256:6886ff44aaf26fd83093f14f844ebc84589d90df9bbad9a1625e8a080e6f1be2"}, + {file = "deptry-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ace3b39b1d0763f357c79bab003d1b135bea2eb61102be539992621a42d1ac7b"}, + {file = "deptry-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d1a00f8c9e6c0829a4a523edd5e526e3df06d2b50e0a99446f09f9723df2efad"}, + {file = "deptry-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e233859f150df70ffff76e95f9b7326fc25494b9beb26e776edae20f0f515e7d"}, + {file = "deptry-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f92e7e97ef42477717747b190bc6796ab94b35655af126d8c577f7eae0eb3a9"}, + {file = "deptry-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f6cee6005997791bb77155667be055333fb63ae9a24f0f103f25faf1e7affe34"}, + {file = "deptry-0.20.0.tar.gz", hash = "sha256:62e9aaf3aea9e2ca66c85da98a0ba0290b4d3daea4e1d0ad937d447bd3c36402"}, ] [package.dependencies] -python-dateutil = "*" +click = ">=8.0.0,<9" +colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\""} +tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} [[package]] name = "distlib" @@ -376,68 +388,6 @@ files = [ {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, ] -[[package]] -name = "numpy" -version = "2.1.1" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.10" -files = [ - {file = "numpy-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8a0e34993b510fc19b9a2ce7f31cb8e94ecf6e924a40c0c9dd4f62d0aac47d9"}, - {file = "numpy-2.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7dd86dfaf7c900c0bbdcb8b16e2f6ddf1eb1fe39c6c8cca6e94844ed3152a8fd"}, - {file = "numpy-2.1.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:5889dd24f03ca5a5b1e8a90a33b5a0846d8977565e4ae003a63d22ecddf6782f"}, - {file = "numpy-2.1.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:59ca673ad11d4b84ceb385290ed0ebe60266e356641428c845b39cd9df6713ab"}, - {file = "numpy-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13ce49a34c44b6de5241f0b38b07e44c1b2dcacd9e36c30f9c2fcb1bb5135db7"}, - {file = "numpy-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913cc1d311060b1d409e609947fa1b9753701dac96e6581b58afc36b7ee35af6"}, - {file = "numpy-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:caf5d284ddea7462c32b8d4a6b8af030b6c9fd5332afb70e7414d7fdded4bfd0"}, - {file = "numpy-2.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:57eb525e7c2a8fdee02d731f647146ff54ea8c973364f3b850069ffb42799647"}, - {file = "numpy-2.1.1-cp310-cp310-win32.whl", hash = "sha256:9a8e06c7a980869ea67bbf551283bbed2856915f0a792dc32dd0f9dd2fb56728"}, - {file = "numpy-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:d10c39947a2d351d6d466b4ae83dad4c37cd6c3cdd6d5d0fa797da56f710a6ae"}, - {file = "numpy-2.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0d07841fd284718feffe7dd17a63a2e6c78679b2d386d3e82f44f0108c905550"}, - {file = "numpy-2.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b5613cfeb1adfe791e8e681128f5f49f22f3fcaa942255a6124d58ca59d9528f"}, - {file = "numpy-2.1.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0b8cc2715a84b7c3b161f9ebbd942740aaed913584cae9cdc7f8ad5ad41943d0"}, - {file = "numpy-2.1.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:b49742cdb85f1f81e4dc1b39dcf328244f4d8d1ded95dea725b316bd2cf18c95"}, - {file = "numpy-2.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8d5f8a8e3bc87334f025194c6193e408903d21ebaeb10952264943a985066ca"}, - {file = "numpy-2.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d51fc141ddbe3f919e91a096ec739f49d686df8af254b2053ba21a910ae518bf"}, - {file = "numpy-2.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:98ce7fb5b8063cfdd86596b9c762bf2b5e35a2cdd7e967494ab78a1fa7f8b86e"}, - {file = "numpy-2.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:24c2ad697bd8593887b019817ddd9974a7f429c14a5469d7fad413f28340a6d2"}, - {file = "numpy-2.1.1-cp311-cp311-win32.whl", hash = "sha256:397bc5ce62d3fb73f304bec332171535c187e0643e176a6e9421a6e3eacef06d"}, - {file = "numpy-2.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:ae8ce252404cdd4de56dcfce8b11eac3c594a9c16c231d081fb705cf23bd4d9e"}, - {file = "numpy-2.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:7c803b7934a7f59563db459292e6aa078bb38b7ab1446ca38dd138646a38203e"}, - {file = "numpy-2.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6435c48250c12f001920f0751fe50c0348f5f240852cfddc5e2f97e007544cbe"}, - {file = "numpy-2.1.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3269c9eb8745e8d975980b3a7411a98976824e1fdef11f0aacf76147f662b15f"}, - {file = "numpy-2.1.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:fac6e277a41163d27dfab5f4ec1f7a83fac94e170665a4a50191b545721c6521"}, - {file = "numpy-2.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcd8f556cdc8cfe35e70efb92463082b7f43dd7e547eb071ffc36abc0ca4699b"}, - {file = "numpy-2.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b9cd92c8f8e7b313b80e93cedc12c0112088541dcedd9197b5dee3738c1201"}, - {file = "numpy-2.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:afd9c680df4de71cd58582b51e88a61feed4abcc7530bcd3d48483f20fc76f2a"}, - {file = "numpy-2.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8661c94e3aad18e1ea17a11f60f843a4933ccaf1a25a7c6a9182af70610b2313"}, - {file = "numpy-2.1.1-cp312-cp312-win32.whl", hash = "sha256:950802d17a33c07cba7fd7c3dcfa7d64705509206be1606f196d179e539111ed"}, - {file = "numpy-2.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:3fc5eabfc720db95d68e6646e88f8b399bfedd235994016351b1d9e062c4b270"}, - {file = "numpy-2.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:046356b19d7ad1890c751b99acad5e82dc4a02232013bd9a9a712fddf8eb60f5"}, - {file = "numpy-2.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6e5a9cb2be39350ae6c8f79410744e80154df658d5bea06e06e0ac5bb75480d5"}, - {file = "numpy-2.1.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:d4c57b68c8ef5e1ebf47238e99bf27657511ec3f071c465f6b1bccbef12d4136"}, - {file = "numpy-2.1.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:8ae0fd135e0b157365ac7cc31fff27f07a5572bdfc38f9c2d43b2aff416cc8b0"}, - {file = "numpy-2.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:981707f6b31b59c0c24bcda52e5605f9701cb46da4b86c2e8023656ad3e833cb"}, - {file = "numpy-2.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ca4b53e1e0b279142113b8c5eb7d7a877e967c306edc34f3b58e9be12fda8df"}, - {file = "numpy-2.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:e097507396c0be4e547ff15b13dc3866f45f3680f789c1a1301b07dadd3fbc78"}, - {file = "numpy-2.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7506387e191fe8cdb267f912469a3cccc538ab108471291636a96a54e599556"}, - {file = "numpy-2.1.1-cp313-cp313-win32.whl", hash = "sha256:251105b7c42abe40e3a689881e1793370cc9724ad50d64b30b358bbb3a97553b"}, - {file = "numpy-2.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:f212d4f46b67ff604d11fff7cc62d36b3e8714edf68e44e9760e19be38c03eb0"}, - {file = "numpy-2.1.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:920b0911bb2e4414c50e55bd658baeb78281a47feeb064ab40c2b66ecba85553"}, - {file = "numpy-2.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:bab7c09454460a487e631ffc0c42057e3d8f2a9ddccd1e60c7bb8ed774992480"}, - {file = "numpy-2.1.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:cea427d1350f3fd0d2818ce7350095c1a2ee33e30961d2f0fef48576ddbbe90f"}, - {file = "numpy-2.1.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:e30356d530528a42eeba51420ae8bf6c6c09559051887196599d96ee5f536468"}, - {file = "numpy-2.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8dfa9e94fc127c40979c3eacbae1e61fda4fe71d84869cc129e2721973231ef"}, - {file = "numpy-2.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910b47a6d0635ec1bd53b88f86120a52bf56dcc27b51f18c7b4a2e2224c29f0f"}, - {file = "numpy-2.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:13cc11c00000848702322af4de0147ced365c81d66053a67c2e962a485b3717c"}, - {file = "numpy-2.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:53e27293b3a2b661c03f79aa51c3987492bd4641ef933e366e0f9f6c9bf257ec"}, - {file = "numpy-2.1.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7be6a07520b88214ea85d8ac8b7d6d8a1839b0b5cb87412ac9f49fa934eb15d5"}, - {file = "numpy-2.1.1-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:52ac2e48f5ad847cd43c4755520a2317f3380213493b9d8a4c5e37f3b87df504"}, - {file = "numpy-2.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50a95ca3560a6058d6ea91d4629a83a897ee27c00630aed9d933dff191f170cd"}, - {file = "numpy-2.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:99f4a9ee60eed1385a86e82288971a51e71df052ed0b2900ed30bc840c0f2e39"}, - {file = "numpy-2.1.1.tar.gz", hash = "sha256:d0cf7d55b1051387807405b3898efafa862997b4cba8aa5dbe657be794afeafd"}, -] - [[package]] name = "packaging" version = "24.1" @@ -449,92 +399,6 @@ files = [ {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] -[[package]] -name = "pandas" -version = "2.2.3" -description = "Powerful data structures for data analysis, time series, and statistics" -optional = false -python-versions = ">=3.9" -files = [ - {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, - {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, - {file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"}, - {file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"}, - {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"}, - {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"}, - {file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"}, - {file = "pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039"}, - {file = "pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd"}, - {file = "pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698"}, - {file = "pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc"}, - {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3"}, - {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32"}, - {file = "pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5"}, - {file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"}, - {file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"}, - {file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"}, - {file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"}, - {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"}, - {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"}, - {file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"}, - {file = "pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015"}, - {file = "pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28"}, - {file = "pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0"}, - {file = "pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24"}, - {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659"}, - {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb"}, - {file = "pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"}, - {file = "pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468"}, - {file = "pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18"}, - {file = "pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2"}, - {file = "pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4"}, - {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d"}, - {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a"}, - {file = "pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39"}, - {file = "pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30"}, - {file = "pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c"}, - {file = "pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c"}, - {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea"}, - {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761"}, - {file = "pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e"}, - {file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"}, -] - -[package.dependencies] -numpy = [ - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, - {version = ">=1.22.4", markers = "python_version < \"3.11\""}, - {version = ">=1.23.2", markers = "python_version == \"3.11\""}, -] -python-dateutil = ">=2.8.2" -pytz = ">=2020.1" -tzdata = ">=2022.7" - -[package.extras] -all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] -aws = ["s3fs (>=2022.11.0)"] -clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] -compression = ["zstandard (>=0.19.0)"] -computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] -consortium-standard = ["dataframe-api-compat (>=0.1.7)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] -feather = ["pyarrow (>=10.0.1)"] -fss = ["fsspec (>=2022.11.0)"] -gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] -hdf5 = ["tables (>=3.8.0)"] -html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] -mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] -parquet = ["pyarrow (>=10.0.1)"] -performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] -plot = ["matplotlib (>=3.6.3)"] -postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] -pyarrow = ["pyarrow (>=10.0.1)"] -spss = ["pyreadstat (>=1.2.0)"] -sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] -test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] -xml = ["lxml (>=4.9.2)"] - [[package]] name = "platformdirs" version = "4.3.6" @@ -778,17 +642,6 @@ files = [ [package.extras] cli = ["click (>=5.0)"] -[[package]] -name = "pytz" -version = "2024.2" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, - {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, -] - [[package]] name = "pyyaml" version = "6.0.2" @@ -933,17 +786,6 @@ files = [ {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] -[[package]] -name = "tzdata" -version = "2024.1" -description = "Provider of IANA time zone data" -optional = false -python-versions = ">=2" -files = [ - {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, - {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, -] - [[package]] name = "urllib3" version = "2.2.3" @@ -963,21 +805,22 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "uvicorn" -version = "0.19.0" +version = "0.30.6" description = "The lightning-fast ASGI server." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "uvicorn-0.19.0-py3-none-any.whl", hash = "sha256:cc277f7e73435748e69e075a721841f7c4a95dba06d12a72fe9874acced16f6f"}, - {file = "uvicorn-0.19.0.tar.gz", hash = "sha256:cf538f3018536edb1f4a826311137ab4944ed741d52aeb98846f52215de57f25"}, + {file = "uvicorn-0.30.6-py3-none-any.whl", hash = "sha256:65fd46fe3fda5bdc1b03b94eb634923ff18cd35b2f084813ea79d1f103f711b5"}, + {file = "uvicorn-0.30.6.tar.gz", hash = "sha256:4b15decdda1e72be08209e860a1e10e92439ad5b97cf44cc945fcbee66fc5788"}, ] [package.dependencies] click = ">=7.0" h11 = ">=0.8" +typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} [package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.0)"] +standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] [[package]] name = "virtualenv" @@ -1002,4 +845,4 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "3dc6358daba901c3cdc36b74040071316c853586ad219a5e7a68c4bf19235024" +content-hash = "542420f484c068ee00130651b2d1adf88e0e8c46dd1c5867919339d4fa659d85" diff --git a/pyproject.toml b/pyproject.toml index b37b80d..5bf398b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,18 +10,19 @@ package-mode = false [tool.poetry.dependencies] python = "^3.10" boaviztapi-sdk = "^1.2.4" -croniter = "^1.3.7" fastapi = "^0.110.0" -pandas = "^2.2.1" pydantic = "^2.6.4" pydantic-settings = "^2.2.1" -requests = "^2.28.1" -uvicorn = "^0.19.0" -httpx = "^0.27.2" +click = "^8.1.7" +python-dateutil = "^2.9.0.post0" [tool.poetry.group.dev.dependencies] pytest = "^8.0.2" pre-commit = "^3.6.2" +deptry = "^0.20.0" +httpx = "^0.27.2" +requests = "^2.32.3" +uvicorn = "^0.30.6" [build-system] requires = ["poetry-core"] From 11c86d5d38e54c95767bc34121dd4d628a03c8e2 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 25 Sep 2024 16:14:11 +0200 Subject: [PATCH 215/227] refactor: create mocks module with mocklshw --- tests/api/test_api_unit.py | 13 +++++--- tests/hardware/test_hardwarecli.py | 50 +++++++++--------------------- tests/mocks/mocks.py | 29 +++++++++++++++++ 3 files changed, 53 insertions(+), 39 deletions(-) create mode 100644 tests/mocks/mocks.py diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index ed1eb58..599f164 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -2,7 +2,7 @@ import json from unittest import TestCase, TestSuite, TestLoader -from unittest.mock import patch +from unittest.mock import Mock, patch from boagent.api.api import ( build_hardware_data, @@ -15,6 +15,7 @@ get_metrics, ) from boagent.api.utils import format_prometheus_output +from tests.mocks.mocks import MockLshw current_dir = os.path.dirname(__file__) mock_power_data = os.path.join(f"{current_dir}", "../mocks/power_data.json") @@ -40,8 +41,12 @@ hardware_cli = os.path.join(f"{current_dir}", "../../boagent/hardware/hardware_cli.py") hardware_data = os.path.join(f"{current_dir}", "../../boagent/api/hardware_data.json") +mocked_lshw = Mock() +mocked_lshw.return_value = MockLshw() + @patch("boagent.api.api.HARDWARE_FILE_PATH", hardware_data) +@patch("boagent.api.api.Lshw", mocked_lshw) class ReadHardwareDataTest(TestCase): def test_build_hardware_data(self): @@ -52,9 +57,9 @@ def test_read_hardware_data(self): build_hardware_data() data = read_hardware_data() - assert type(data["cpus"]) is list - assert type(data["rams"]) is list - assert type(data["disks"]) is list + assert type(data["cpus"]) is dict + assert type(data["rams"]) is dict + assert type(data["disks"]) is dict @patch("boagent.api.api.build_hardware_data") def test_get_hardware_data_with_fetch_hardware_false(self, mocked_build_hardware): diff --git a/tests/hardware/test_hardwarecli.py b/tests/hardware/test_hardwarecli.py index c604721..448b8d1 100644 --- a/tests/hardware/test_hardwarecli.py +++ b/tests/hardware/test_hardwarecli.py @@ -5,46 +5,22 @@ from unittest.mock import Mock, patch from hardware_cli import main from click.testing import CliRunner +from tests.mocks.mocks import MockLshw current_dir = path.dirname(__file__) -mock_lshw_data = path.join(f"{current_dir}", "../mocks/sudo_lshw_data") -with open(f"{mock_lshw_data}.json") as lshw_json: - data = load(lshw_json) - - -class MockLshw: - def __init__(self): - self.cpus = { - "cpus": [ - { - "units": 1, - "name": "AMD Ryzen 5 5600H with Radeon Graphics", - "manufacturer": "Advanced Micro Devices [AMD]", - "core_units": 6, - } - ] - } - self.memories = { - "rams": [ - {"units": 1, "manufacturer": "Samsung", "capacity": 8}, - {"units": 1, "manufacturer": "Kingston", "capacity": 16}, - ] - } - self.disks = { - "disks": [ - { - "units": 1, - "logicalname": "/dev/nvme0n1", - "manufacturer": "samsung", - "type": "ssd", - "capacity": 476, - } - ], - } +# Need to use a mock of `lshw` run without `sudo` to reproduce the error case +# where hardware_cli is run without `sudo`. +mock_lshw_data = path.join(f"{current_dir}", "../mocks/lshw_data.json") +with open(mock_lshw_data) as lshw_json: + lshw_data = load(lshw_json) mocked_lshw = Mock() mocked_lshw.return_value = MockLshw() +mocked_is_tool = Mock() +mocked_is_tool.return_value = True +mocked_serialized_lshw_output = Mock() +mocked_serialized_lshw_output.return_value = lshw_data class HardwarecliTest(TestCase): @@ -72,7 +48,11 @@ def test_read_stdout_from_hardware_cli(self): assert result.output.count("ram") >= 1 assert result.output.count("cpu") >= 1 - def test_hardware_cli_returns_error_is_not_executed_with_sudo(self): + @patch("boagent.hardware.lshw.is_tool", mocked_is_tool) + @patch( + "boagent.hardware.lshw.serialized_lshw_output", mocked_serialized_lshw_output + ) + def test_hardware_cli_returns_error_if_not_executed_with_sudo(self): runner = CliRunner() result = runner.invoke(main) assert ( diff --git a/tests/mocks/mocks.py b/tests/mocks/mocks.py new file mode 100644 index 0000000..0af62cd --- /dev/null +++ b/tests/mocks/mocks.py @@ -0,0 +1,29 @@ +class MockLshw: + def __init__(self): + self.cpus = { + "cpus": [ + { + "units": 1, + "name": "AMD Ryzen 5 5600H with Radeon Graphics", + "manufacturer": "Advanced Micro Devices [AMD]", + "core_units": 6, + } + ] + } + self.memories = { + "rams": [ + {"units": 1, "manufacturer": "Samsung", "capacity": 8}, + {"units": 1, "manufacturer": "Kingston", "capacity": 16}, + ] + } + self.disks = { + "disks": [ + { + "units": 1, + "logicalname": "/dev/nvme0n1", + "manufacturer": "samsung", + "type": "ssd", + "capacity": 476, + } + ], + } From 6772341de536f46c24965b52c517831a26957999 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 25 Sep 2024 16:17:51 +0200 Subject: [PATCH 216/227] ci: execute test job, push & pr on main and dev --- .github/workflows/test.yml | 40 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..bc9ec8d --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,40 @@ +name: Execute tests + +on: + push: + branches: + - main + - dev + paths: + - "boagent/**" + - "tests/**" + - "poetry.lock" + - "pyproject.toml" + pull_request: + branches: + - main + - dev + paths: + - "boagent/**" + - "tests/**" + - "poetry.lock" + - "pyproject.toml" + +jobs: + test: + strategy: + matrix: + version: ["3.10"] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Python setup + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.version }} + - name: Poetry setup + run : python3 -m pip install --upgrade poetry wheel + - name: Install dependencies + run: poetry install + - name: Execute tests + run: poetry run python3 -m pytest From 85289f4aa9a056ae3a647bdaf24f3f602bc897c9 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 25 Sep 2024 16:21:22 +0200 Subject: [PATCH 217/227] ci: add python 3.11 for test matrix --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bc9ec8d..82f7c8a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,7 +24,7 @@ jobs: test: strategy: matrix: - version: ["3.10"] + version: ["3.10", "3.11"] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From 7e588fbb394e18834c59de427744792cd2a33bdd Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 25 Sep 2024 16:55:33 +0200 Subject: [PATCH 218/227] fix: filenotfounderror for hardware_data in test --- tests/api/test_api_process.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/api/test_api_process.py b/tests/api/test_api_process.py index 461c45c..ff780e0 100644 --- a/tests/api/test_api_process.py +++ b/tests/api/test_api_process.py @@ -23,6 +23,7 @@ hardware_data = os.path.join(f"{current_dir}", "../../boagent/api/hardware_data.json") +@patch("boagent.api.api.HARDWARE_FILE_PATH", mock_hardware_data) class AllocateEmbeddedImpactForProcess(TestCase): def setUp(self): @@ -48,6 +49,8 @@ def test_get_total_embedded_impacts_for_host( self, mocked_query_machine_impact_data ): + mocked_query_machine_impact_data.return_value = self.boaviztapi_data + total_embedded_impacts_host = get_metrics( self.start_time, self.end_time, @@ -58,8 +61,6 @@ def test_get_total_embedded_impacts_for_host( self.fetch_hardware, ) - mocked_query_machine_impact_data.return_value = self.boaviztapi_data - assert "embedded_emissions" in total_embedded_impacts_host assert "embedded_abiotic_resources_depletion" in total_embedded_impacts_host assert "embedded_primary_energy" in total_embedded_impacts_host From 47665c733cda197a4b3a215a7a022c8d8dea168c Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Mon, 30 Sep 2024 10:25:02 +0200 Subject: [PATCH 219/227] refactor: simplify access to mock files --- tests/api/test_api_integration.py | 23 +++++-------------- tests/api/test_api_process.py | 20 +++++------------ tests/api/test_api_unit.py | 34 +++++++++------------------- tests/hardware/test_hardwarecli.py | 5 +---- tests/hardware/test_lshw.py | 10 ++++----- tests/mocks/mocks.py | 36 ++++++++++++++++++++++++++++++ 6 files changed, 62 insertions(+), 66 deletions(-) diff --git a/tests/api/test_api_integration.py b/tests/api/test_api_integration.py index 22a12c6..19cf1bd 100644 --- a/tests/api/test_api_integration.py +++ b/tests/api/test_api_integration.py @@ -1,5 +1,4 @@ import json -import os from datetime import datetime, timedelta from fastapi.testclient import TestClient @@ -7,8 +6,13 @@ from unittest.mock import patch from pytest import mark from boagent.api.config import Settings +from tests.mocks.mocks import ( + mock_boaviztapi_response_not_verbose, + mock_get_metrics_verbose, + mock_get_metrics_not_verbose, +) -# Mocks for testing environment +# Mock settings for testing environment settings = Settings( hardware_file_path="./tests/mocks/hardware_data.json", db_path="./tests/mocks/boagent.db", @@ -22,23 +26,8 @@ minutes=1 ) -current_dir = os.path.dirname(__file__) -mock_boaviztapi_response_not_verbose = os.path.join( - f"{current_dir}", "../mocks/boaviztapi_response_not_verbose.json" -) -mock_get_metrics_not_verbose = os.path.join( - f"{current_dir}", "../mocks/get_metrics_not_verbose.json" -) -mock_get_metrics_verbose = os.path.join( - f"{current_dir}", "../mocks/get_metrics_verbose.json" -) - client = TestClient(app) -mock_get_metrics_verbose = os.path.join( - f"{current_dir}", "../mocks/get_metrics_verbose.json" -) - class ApiEndpointsTest(TestCase): def setUp(self): diff --git a/tests/api/test_api_process.py b/tests/api/test_api_process.py index ff780e0..eb21a27 100644 --- a/tests/api/test_api_process.py +++ b/tests/api/test_api_process.py @@ -1,4 +1,3 @@ -import os import json from unittest import TestCase, TestSuite, TestLoader from unittest.mock import patch @@ -6,21 +5,12 @@ get_metrics, ) from boagent.api.process import Process, InvalidPIDException - -current_dir = os.path.dirname(__file__) -mock_power_data = os.path.join(f"{current_dir}", "../mocks/power_data.json") -mock_hardware_data = os.path.join(f"{current_dir}", "../mocks/hardware_data.json") -mock_boaviztapi_response_not_verbose = os.path.join( - f"{current_dir}", "../mocks/boaviztapi_response_not_verbose.json" -) -mock_get_metrics_verbose = os.path.join( - f"{current_dir}", "../mocks/get_metrics_verbose.json" -) -mock_get_metrics_verbose_no_hdd = os.path.join( - f"{current_dir}", "../mocks/get_metrics_verbose_no_hdd.json" +from tests.mocks.mocks import ( + mock_hardware_data, + mock_boaviztapi_response_not_verbose, + mock_get_metrics_verbose, + mock_get_metrics_verbose_no_hdd, ) -hardware_cli = os.path.join(f"{current_dir}", "../../boagent/hardware/hardware_cli.py") -hardware_data = os.path.join(f"{current_dir}", "../../boagent/api/hardware_data.json") @patch("boagent.api.api.HARDWARE_FILE_PATH", mock_hardware_data) diff --git a/tests/api/test_api_unit.py b/tests/api/test_api_unit.py index 599f164..6fb0e7a 100644 --- a/tests/api/test_api_unit.py +++ b/tests/api/test_api_unit.py @@ -15,31 +15,17 @@ get_metrics, ) from boagent.api.utils import format_prometheus_output -from tests.mocks.mocks import MockLshw - -current_dir = os.path.dirname(__file__) -mock_power_data = os.path.join(f"{current_dir}", "../mocks/power_data.json") -mock_hardware_data = os.path.join(f"{current_dir}", "../mocks/hardware_data.json") -mock_boaviztapi_response_not_verbose = os.path.join( - f"{current_dir}", "../mocks/boaviztapi_response_not_verbose.json" -) -mock_boaviztapi_response_verbose = os.path.join( - f"{current_dir}", "../mocks/boaviztapi_response_verbose.json" -) -mock_formatted_scaphandre = os.path.join( - f"{current_dir}", "../mocks/formatted_power_data_one_hour.json" -) -mock_formatted_scaphandre_with_processes = os.path.join( - f"{current_dir}", "../mocks/formatted_scaphandre.json" -) -mock_get_metrics_not_verbose = os.path.join( - f"{current_dir}", "../mocks/get_metrics_not_verbose.json" -) -mock_get_metrics_verbose = os.path.join( - f"{current_dir}", "../mocks/get_metrics_verbose.json" +from tests.mocks.mocks import ( + MockLshw, + hardware_data, + mock_power_data, + mock_hardware_data, + mock_boaviztapi_response_not_verbose, + mock_boaviztapi_response_verbose, + mock_formatted_scaphandre, + mock_get_metrics_verbose, + mock_get_metrics_not_verbose, ) -hardware_cli = os.path.join(f"{current_dir}", "../../boagent/hardware/hardware_cli.py") -hardware_data = os.path.join(f"{current_dir}", "../../boagent/api/hardware_data.json") mocked_lshw = Mock() mocked_lshw.return_value = MockLshw() diff --git a/tests/hardware/test_hardwarecli.py b/tests/hardware/test_hardwarecli.py index 448b8d1..68f1e76 100644 --- a/tests/hardware/test_hardwarecli.py +++ b/tests/hardware/test_hardwarecli.py @@ -1,17 +1,14 @@ from json import load from unittest import TestCase -from os import path from os.path import exists from unittest.mock import Mock, patch from hardware_cli import main from click.testing import CliRunner -from tests.mocks.mocks import MockLshw +from tests.mocks.mocks import MockLshw, mock_lshw_data -current_dir = path.dirname(__file__) # Need to use a mock of `lshw` run without `sudo` to reproduce the error case # where hardware_cli is run without `sudo`. -mock_lshw_data = path.join(f"{current_dir}", "../mocks/lshw_data.json") with open(mock_lshw_data) as lshw_json: lshw_data = load(lshw_json) diff --git a/tests/hardware/test_lshw.py b/tests/hardware/test_lshw.py index ecffea6..5aeeb4d 100644 --- a/tests/hardware/test_lshw.py +++ b/tests/hardware/test_lshw.py @@ -2,12 +2,10 @@ from boagent.hardware.lshw import Lshw from unittest.mock import Mock, patch from json import load -from os import path -current_dir = path.dirname(__file__) -mock_lshw_data = path.join(f"{current_dir}", "../mocks/sudo_lshw_data") -mock_nvme_data = path.join(f"{current_dir}", "../mocks/nvme_data_sudo.json") -with open(f"{mock_lshw_data}.json") as lshw_json: +from tests.mocks.mocks import mock_sudo_lshw_data, mock_lshw_data_disks, mock_nvme_data + +with open(mock_sudo_lshw_data) as lshw_json: lshw_data = load(lshw_json) with open(mock_nvme_data) as nvme_json: nvme_data = load(nvme_json) @@ -171,7 +169,7 @@ def test_check_nvme_cli_is_installed_to_find_storage_and_raises_error_if_not( ): mocked_is_tool.return_value = False - with open(f"{mock_lshw_data}_disks.json", "r") as file, self.assertRaises( + with open(mock_lshw_data_disks, "r") as file, self.assertRaises( Exception ) as nvme_cli_exception: data = load(file) diff --git a/tests/mocks/mocks.py b/tests/mocks/mocks.py index 0af62cd..8830525 100644 --- a/tests/mocks/mocks.py +++ b/tests/mocks/mocks.py @@ -1,3 +1,39 @@ +import os + +current_dir = os.path.dirname(__file__) +mock_power_data = os.path.join(f"{current_dir}", "../mocks/power_data.json") +mock_hardware_data = os.path.join(f"{current_dir}", "../mocks/hardware_data.json") +mock_boaviztapi_response_not_verbose = os.path.join( + f"{current_dir}", "../mocks/boaviztapi_response_not_verbose.json" +) +mock_boaviztapi_response_verbose = os.path.join( + f"{current_dir}", "../mocks/boaviztapi_response_verbose.json" +) +mock_formatted_scaphandre = os.path.join( + f"{current_dir}", "../mocks/formatted_power_data_one_hour.json" +) +mock_formatted_scaphandre_with_processes = os.path.join( + f"{current_dir}", "../mocks/formatted_scaphandre.json" +) +mock_get_metrics_not_verbose = os.path.join( + f"{current_dir}", "../mocks/get_metrics_not_verbose.json" +) +mock_get_metrics_verbose = os.path.join( + f"{current_dir}", "../mocks/get_metrics_verbose.json" +) +mock_get_metrics_verbose_no_hdd = os.path.join( + f"{current_dir}", "../mocks/get_metrics_verbose_no_hdd.json" +) +mock_lshw_data = os.path.join(f"{current_dir}", "../mocks/lshw_data.json") +mock_lshw_data_disks = os.path.join( + f"{current_dir}", "../mocks/sudo_lshw_data_disks.json" +) +mock_sudo_lshw_data = os.path.join(f"{current_dir}", "../mocks/sudo_lshw_data.json") +mock_nvme_data = os.path.join(f"{current_dir}", "../mocks/nvme_data_sudo.json") +hardware_cli = os.path.join(f"{current_dir}", "../../boagent/hardware/hardware_cli.py") +hardware_data = os.path.join(f"{current_dir}", "../../boagent/api/hardware_data.json") + + class MockLshw: def __init__(self): self.cpus = { From 33e4a8402dd435734970b5de2ad542a1e906b119 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 1 Oct 2024 14:58:12 +0200 Subject: [PATCH 220/227] fix: use metrics_data in process, not filepath to process metrics --- boagent/api/process.py | 29 ++++++++--------------------- tests/api/test_api_integration.py | 4 ++-- tests/api/test_api_process.py | 11 +++++++---- 3 files changed, 17 insertions(+), 27 deletions(-) diff --git a/boagent/api/process.py b/boagent/api/process.py index 41425d8..aabd1b2 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -1,30 +1,19 @@ -from json import load from collections import defaultdict from .exceptions import InvalidPIDException class Process: - def __init__(self, metrics_file_path, pid): - self.metrics_file_path = metrics_file_path + def __init__(self, metrics_data, pid): + self.metrics_data = metrics_data self.validate_pid(pid) self._pid = pid self.process_info = self.get_process_info() - @property - def processed_metrics(self): - """The metrics in JSON format parsed from the metrics file path.""" - - with open(self.metrics_file_path, "r") as metrics_data_file: - processed_metrics = load(metrics_data_file) - return processed_metrics - def validate_pid(self, value): timestamps = [ timestamp - for timestamp in self.processed_metrics["raw_data"]["power_data"][ - "raw_data" - ] + for timestamp in self.metrics_data["raw_data"]["power_data"]["raw_data"] ] consumers = [timestamp["consumers"] for timestamp in timestamps] pids = set([process["pid"] for consumer in consumers for process in consumer]) @@ -46,9 +35,7 @@ def get_process_info(self): timestamps = [ timestamp - for timestamp in self.processed_metrics["raw_data"]["power_data"][ - "raw_data" - ] + for timestamp in self.metrics_data["raw_data"]["power_data"]["raw_data"] ] consumers = [timestamp["consumers"] for timestamp in timestamps] process_info = [ @@ -71,7 +58,7 @@ def process_exe(self): def get_total_ram_in_bytes(self): - ram_data = self.processed_metrics["raw_data"]["hardware_data"]["rams"] + ram_data = self.metrics_data["raw_data"]["hardware_data"]["rams"] total_ram_in_bytes = ( sum(ram_unit["capacity"] for ram_unit in ram_data) * 1073741824 ) @@ -81,12 +68,12 @@ def get_total_ram_in_bytes(self): def get_disk_usage_in_bytes(self): disk_total_bytes = int( - self.processed_metrics["raw_data"]["power_data"]["raw_data"][1]["host"][ + self.metrics_data["raw_data"]["power_data"]["raw_data"][1]["host"][ "components" ]["disks"][0]["disk_total_bytes"] ) disk_available_bytes = int( - self.processed_metrics["raw_data"]["power_data"]["raw_data"][1]["host"][ + self.metrics_data["raw_data"]["power_data"]["raw_data"][1]["host"][ "components" ]["disks"][0]["disk_available_bytes"] ) @@ -135,7 +122,7 @@ def storage_shares(self): def get_component_embedded_impact_shares(self, queried_component, component_shares): component = f"{queried_component}-1" - component_impacts_data = self.processed_metrics["raw_data"]["boaviztapi_data"][ + component_impacts_data = self.metrics_data["raw_data"]["boaviztapi_data"][ "verbose" ][component]["impacts"] component_embedded_impact_shares = list() diff --git a/tests/api/test_api_integration.py b/tests/api/test_api_integration.py index 19cf1bd..d7392e6 100644 --- a/tests/api/test_api_integration.py +++ b/tests/api/test_api_integration.py @@ -186,7 +186,7 @@ def test_read_query_with_measure_power_and_fetch_hardware_verbose( @patch("boagent.api.api.get_metrics") def test_get_process_embedded_impacts_with_success(self, mocked_get_metrics): - mocked_get_metrics.return_value = mock_get_metrics_verbose + mocked_get_metrics.return_value = self.get_metrics_verbose params = { "process_id": 3099, "start_time": "1717500637.2979465", @@ -209,7 +209,7 @@ def test_get_process_embedded_impacts_with_error_if_pid_not_found_in_metrics_dat self, mocked_get_metrics ): - mocked_get_metrics.return_value = mock_get_metrics_verbose + mocked_get_metrics.return_value = self.get_metrics_verbose params = { "process_id": 1234, "start_time": "1717500637.2979465", diff --git a/tests/api/test_api_process.py b/tests/api/test_api_process.py index eb21a27..d6acfe3 100644 --- a/tests/api/test_api_process.py +++ b/tests/api/test_api_process.py @@ -29,10 +29,13 @@ def setUp(self): with open(mock_boaviztapi_response_not_verbose, "r") as boaviztapi_data: self.boaviztapi_data = json.load(boaviztapi_data) - with open(mock_get_metrics_verbose) as get_metrics_verbose: + with open(mock_get_metrics_verbose, "r") as get_metrics_verbose: self.get_metrics_verbose = json.load(get_metrics_verbose) - self.process = Process(mock_get_metrics_verbose, self.pid) + with open(mock_get_metrics_verbose_no_hdd, "r") as get_metrics_verbose_no_hdd: + self.get_metrics_verbose_no_hdd = json.load(get_metrics_verbose_no_hdd) + + self.process = Process(self.get_metrics_verbose, self.pid) @patch("boagent.api.api.query_machine_impact_data") def test_get_total_embedded_impacts_for_host( @@ -87,7 +90,7 @@ def test_validate_pid_with_error_if_process_id_not_in_metrics(self): ) with self.assertRaises(InvalidPIDException) as context_manager: - self.process = Process(mock_get_metrics_verbose, 1234) + self.process = Process(self.get_metrics_verbose, 1234) self.assertEqual(context_manager.exception.message, expected_error_message) @@ -260,7 +263,7 @@ def test_get_all_components_embedded_impact_values(self): def test_get_components_embedded_impact_values_with_hdd_absent_from_get_metrics( self, ): - self.process = Process(mock_get_metrics_verbose_no_hdd, self.pid) + self.process = Process(self.get_metrics_verbose_no_hdd, self.pid) process_embedded_impacts = self.process.embedded_impact_values self.assertIn("process_cpu_embedded_impact_values", process_embedded_impacts) self.assertIn("process_ram_embedded_impact_values", process_embedded_impacts) From 2741192b46f6c1e4adcd7939af1d330da7832bbf Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 1 Oct 2024 15:35:00 +0200 Subject: [PATCH 221/227] feat: add pid in process_embedded_impacts response --- boagent/api/process.py | 2 +- tests/api/test_api_integration.py | 2 ++ tests/api/test_api_process.py | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/boagent/api/process.py b/boagent/api/process.py index aabd1b2..927adae 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -211,7 +211,7 @@ def get_component_embedded_impact_values(self, queried_component): @property def embedded_impact_values(self): - process_embedded_impact_values = {} + process_embedded_impact_values = {"pid": self._pid} components = ["cpu", "ram", "hdd", "ssd"] for component in components: diff --git a/tests/api/test_api_integration.py b/tests/api/test_api_integration.py index d7392e6..ae77942 100644 --- a/tests/api/test_api_integration.py +++ b/tests/api/test_api_integration.py @@ -199,6 +199,8 @@ def test_get_process_embedded_impacts_with_success(self, mocked_get_metrics): } response = client.get("/process_embedded_impacts", params=params) assert response.status_code == 200 + self.assertIn("pid", response.json()) + self.assertEqual(response.json()["pid"], 3099) self.assertIn("process_cpu_embedded_impact_values", response.json()) self.assertIn("process_ram_embedded_impact_values", response.json()) self.assertIn("process_ssd_embedded_impact_values", response.json()) diff --git a/tests/api/test_api_process.py b/tests/api/test_api_process.py index d6acfe3..92ae3c9 100644 --- a/tests/api/test_api_process.py +++ b/tests/api/test_api_process.py @@ -255,6 +255,7 @@ def test_get_embedded_impact_values_for_hdd(self): def test_get_all_components_embedded_impact_values(self): process_embedded_impacts = self.process.embedded_impact_values + self.assertIn("pid", process_embedded_impacts) self.assertIn("process_cpu_embedded_impact_values", process_embedded_impacts) self.assertIn("process_ram_embedded_impact_values", process_embedded_impacts) self.assertIn("process_ssd_embedded_impact_values", process_embedded_impacts) @@ -265,6 +266,7 @@ def test_get_components_embedded_impact_values_with_hdd_absent_from_get_metrics( ): self.process = Process(self.get_metrics_verbose_no_hdd, self.pid) process_embedded_impacts = self.process.embedded_impact_values + self.assertIn("pid", process_embedded_impacts) self.assertIn("process_cpu_embedded_impact_values", process_embedded_impacts) self.assertIn("process_ram_embedded_impact_values", process_embedded_impacts) self.assertIn("process_ssd_embedded_impact_values", process_embedded_impacts) From 5131d707fd797aa0bb52f0b8251ad4cd5f86148c Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Tue, 8 Oct 2024 10:14:57 +0200 Subject: [PATCH 222/227] feat: add process_embedded_values key in response --- boagent/api/process.py | 7 ++++-- tests/api/test_api_integration.py | 21 +++++++++++++--- tests/api/test_api_process.py | 42 +++++++++++++++++++++++++------ 3 files changed, 56 insertions(+), 14 deletions(-) diff --git a/boagent/api/process.py b/boagent/api/process.py index 927adae..f8d7c3b 100644 --- a/boagent/api/process.py +++ b/boagent/api/process.py @@ -211,7 +211,10 @@ def get_component_embedded_impact_values(self, queried_component): @property def embedded_impact_values(self): - process_embedded_impact_values = {"pid": self._pid} + process_embedded_impact_values = { + "pid": self._pid, + "process_embedded_impacts": {}, + } components = ["cpu", "ram", "hdd", "ssd"] for component in components: @@ -219,7 +222,7 @@ def embedded_impact_values(self): process_component_embedded_impact_values = ( self.get_component_embedded_impact_values(component) ) - process_embedded_impact_values[ + process_embedded_impact_values["process_embedded_impacts"][ f"process_{component}_embedded_impact_values" ] = process_component_embedded_impact_values except KeyError as absent_component: diff --git a/tests/api/test_api_integration.py b/tests/api/test_api_integration.py index ae77942..0389f6f 100644 --- a/tests/api/test_api_integration.py +++ b/tests/api/test_api_integration.py @@ -201,10 +201,23 @@ def test_get_process_embedded_impacts_with_success(self, mocked_get_metrics): assert response.status_code == 200 self.assertIn("pid", response.json()) self.assertEqual(response.json()["pid"], 3099) - self.assertIn("process_cpu_embedded_impact_values", response.json()) - self.assertIn("process_ram_embedded_impact_values", response.json()) - self.assertIn("process_ssd_embedded_impact_values", response.json()) - self.assertIn("process_hdd_embedded_impact_values", response.json()) + self.assertIn("process_embedded_impacts", response.json()) + self.assertIn( + "process_cpu_embedded_impact_values", + response.json()["process_embedded_impacts"], + ) + self.assertIn( + "process_ram_embedded_impact_values", + response.json()["process_embedded_impacts"], + ) + self.assertIn( + "process_ssd_embedded_impact_values", + response.json()["process_embedded_impacts"], + ) + self.assertIn( + "process_hdd_embedded_impact_values", + response.json()["process_embedded_impacts"], + ) @patch("boagent.api.api.get_metrics") def test_get_process_embedded_impacts_with_error_if_pid_not_found_in_metrics_data( diff --git a/tests/api/test_api_process.py b/tests/api/test_api_process.py index 92ae3c9..26ebd8d 100644 --- a/tests/api/test_api_process.py +++ b/tests/api/test_api_process.py @@ -255,11 +255,24 @@ def test_get_embedded_impact_values_for_hdd(self): def test_get_all_components_embedded_impact_values(self): process_embedded_impacts = self.process.embedded_impact_values + self.assertIn("process_embedded_impacts", process_embedded_impacts) self.assertIn("pid", process_embedded_impacts) - self.assertIn("process_cpu_embedded_impact_values", process_embedded_impacts) - self.assertIn("process_ram_embedded_impact_values", process_embedded_impacts) - self.assertIn("process_ssd_embedded_impact_values", process_embedded_impacts) - self.assertIn("process_hdd_embedded_impact_values", process_embedded_impacts) + self.assertIn( + "process_cpu_embedded_impact_values", + process_embedded_impacts["process_embedded_impacts"], + ) + self.assertIn( + "process_ram_embedded_impact_values", + process_embedded_impacts["process_embedded_impacts"], + ) + self.assertIn( + "process_ssd_embedded_impact_values", + process_embedded_impacts["process_embedded_impacts"], + ) + self.assertIn( + "process_hdd_embedded_impact_values", + process_embedded_impacts["process_embedded_impacts"], + ) def test_get_components_embedded_impact_values_with_hdd_absent_from_get_metrics( self, @@ -267,10 +280,23 @@ def test_get_components_embedded_impact_values_with_hdd_absent_from_get_metrics( self.process = Process(self.get_metrics_verbose_no_hdd, self.pid) process_embedded_impacts = self.process.embedded_impact_values self.assertIn("pid", process_embedded_impacts) - self.assertIn("process_cpu_embedded_impact_values", process_embedded_impacts) - self.assertIn("process_ram_embedded_impact_values", process_embedded_impacts) - self.assertIn("process_ssd_embedded_impact_values", process_embedded_impacts) - self.assertNotIn("process_hdd_embedded_impact_values", process_embedded_impacts) + self.assertIn("process_embedded_impacts", process_embedded_impacts) + self.assertIn( + "process_cpu_embedded_impact_values", + process_embedded_impacts["process_embedded_impacts"], + ) + self.assertIn( + "process_ram_embedded_impact_values", + process_embedded_impacts["process_embedded_impacts"], + ) + self.assertIn( + "process_ssd_embedded_impact_values", + process_embedded_impacts["process_embedded_impacts"], + ) + self.assertNotIn( + "process_hdd_embedded_impact_values", + process_embedded_impacts["process_embedded_impacts"], + ) loader = TestLoader() From 017d2481e1f1d9763c0a9eb75dc26f3a064d6986 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 16 Oct 2024 14:27:15 +0200 Subject: [PATCH 223/227] chore: add boavizta contact --- Dockerfile | 4 +++- boagent/__init__.py | 4 ++-- pyproject.toml | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4309b3b..87535aa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,8 @@ FROM python:3.10-slim -LABEL org.opencontainers.image.authors="bpetit@hubblo.org" +LABEL org.opencontainers.image.authors="open-source@boavizta.org" +LABEL org.opencontainers.image.description="Docker image for Boagent, a local API & environmental impact monitoring tool." +LABEL org.opencontainers.image.licenses=Apache-2.0 WORKDIR /home/boagent diff --git a/boagent/__init__.py b/boagent/__init__.py index 9638026..38162a5 100644 --- a/boagent/__init__.py +++ b/boagent/__init__.py @@ -4,6 +4,6 @@ Monitoring agent/framework for evaluating the environmental impacts of a machine and its applications, including several to all steps of the life cycle of the machine and service, plus multiple criterias of impacts (not just CO2eq metrics / Global Warming Potential). Part of the efforts of https://boavizta.org/en and https://sdialliance.org/. """ -__version__ = "0.0.9" -__author__ = "Benoit Petit " +__version__ = "0.1.0" +__author__ = "Boavizta " __credits__ = "Boavizta contributors" diff --git a/pyproject.toml b/pyproject.toml index 5bf398b..6dc658e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,7 +2,7 @@ name = "boagent" version = "0.9.0" description = "Local API to collect and compute data on used device and running applications to give insight on their environmental impacts." -authors = [] +authors = ["Boavizta "] license = "Apache-2.0" readme = "README.md" package-mode = false From 4fd728b226bfcf9b8cea55eaa89c83b030d8192b Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 16 Oct 2024 15:14:19 +0200 Subject: [PATCH 224/227] feat: add tag to process_embedded_impacts route for api docs --- boagent/api/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index b6dbd2c..8018ec5 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -174,7 +174,7 @@ async def query_with_time_workload( ) -@app.get("/process_embedded_impacts") +@app.get("/process_embedded_impacts", tags=["process"]) async def process_embedded_impacts( process_id: int = 0, start_time: str = "0.0", From 73ff0175e1489dacfa4edceb06ff8e68d78ed321 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 16 Oct 2024 15:15:51 +0200 Subject: [PATCH 225/227] refactor: raise httpexception to return invalid pid error message --- boagent/api/api.py | 4 ++-- boagent/api/exceptions.py | 2 +- tests/api/test_api_integration.py | 8 ++++---- tests/api/test_api_process.py | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/boagent/api/api.py b/boagent/api/api.py index 8018ec5..21424d8 100644 --- a/boagent/api/api.py +++ b/boagent/api/api.py @@ -1,7 +1,7 @@ import json import time from typing import Dict, Any, List, Union -from fastapi import FastAPI, Response, Body +from fastapi import FastAPI, Response, Body, HTTPException from fastapi.staticfiles import StaticFiles from fastapi.responses import HTMLResponse from boaviztapi_sdk.api.server_api import ServerApi @@ -206,7 +206,7 @@ async def process_embedded_impacts( try: queried_process = Process(metrics_data, process_id) except InvalidPIDException as invalid_pid: - return Response(status_code=400, content=invalid_pid.message) + raise HTTPException(status_code=400, detail=invalid_pid.message) else: process_embedded_impact_values = queried_process.embedded_impact_values json_content = json.dumps(process_embedded_impact_values) diff --git a/boagent/api/exceptions.py b/boagent/api/exceptions.py index 9681544..bb57c1a 100644 --- a/boagent/api/exceptions.py +++ b/boagent/api/exceptions.py @@ -1,5 +1,5 @@ class InvalidPIDException(Exception): def __init__(self, pid): self.pid = pid - self.message = f"Process_id {self.pid} has not been found in metrics data. Check the queried PID" + self.message = f"Process_id {self.pid} has not been found in metrics data. Check the queried PID." super().__init__(self.message) diff --git a/tests/api/test_api_integration.py b/tests/api/test_api_integration.py index 0389f6f..68ec5be 100644 --- a/tests/api/test_api_integration.py +++ b/tests/api/test_api_integration.py @@ -237,8 +237,8 @@ def test_get_process_embedded_impacts_with_error_if_pid_not_found_in_metrics_dat } response = client.get("/process_embedded_impacts", params=params) - assert response.status_code == 400 - assert ( - response.text - == "Process_id 1234 has not been found in metrics data. Check the queried PID" + error_message = ( + "Process_id 1234 has not been found in metrics data. Check the queried PID." ) + self.assertEqual(response.status_code, 400) + self.assertIs(error_message in response.text, True) diff --git a/tests/api/test_api_process.py b/tests/api/test_api_process.py index 26ebd8d..8414784 100644 --- a/tests/api/test_api_process.py +++ b/tests/api/test_api_process.py @@ -86,7 +86,7 @@ def test_get_process_exe(self): def test_validate_pid_with_error_if_process_id_not_in_metrics(self): expected_error_message = ( - "Process_id 1234 has not been found in metrics data. Check the queried PID" + "Process_id 1234 has not been found in metrics data. Check the queried PID." ) with self.assertRaises(InvalidPIDException) as context_manager: From fe4d6bafadfea1527debb364908ad8ad5cc439ac Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 16 Oct 2024 15:31:13 +0200 Subject: [PATCH 226/227] ci: tag docker image version through poetry --- .github/workflows/release.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5bf077d..6bf8c6f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -24,8 +24,11 @@ jobs: with: python-version: '3.9' + - name: Install poetry + run: python -m pip install --upgrade poetry wheel + - name: Build docker image - run: docker build . --tag ghcr.io/boavizta/boagent:$(python3 setup.py --version) + run: docker build . --tag ghcr.io/boavizta/boagent:$(poetry version -s) - name: Push docker image - run: docker push ghcr.io/boavizta/boagent:$(python3 setup.py --version) + run: docker push ghcr.io/boavizta/boagent:$(poetry version -s) From 80d50426a5c5e6a623cc23b5123dd3a097f823e2 Mon Sep 17 00:00:00 2001 From: Benjamin Dromard Date: Wed, 16 Oct 2024 15:31:39 +0200 Subject: [PATCH 227/227] chore: boagent version in pyproject to 0.1.0 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6dc658e..2b375a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "boagent" -version = "0.9.0" +version = "0.1.0" description = "Local API to collect and compute data on used device and running applications to give insight on their environmental impacts." authors = ["Boavizta "] license = "Apache-2.0"