From e7de8a209b75f8038895d338505f872f004671ce Mon Sep 17 00:00:00 2001
From: Baptiste Jonglez <baptiste.jonglez@inria.fr>
Date: Mon, 23 May 2022 13:10:26 +0200
Subject: [PATCH] Regenerate ReST README

---
 README.rst | 90 +++++++++++++-----------------------------------------
 1 file changed, 21 insertions(+), 69 deletions(-)

diff --git a/README.rst b/README.rst
index cef81d9..f28e73f 100644
--- a/README.rst
+++ b/README.rst
@@ -88,9 +88,10 @@ conform with the Grid5000 API models (with an ’s’!)
     password: MYPASSWORD
     ' > ~/.python-grid5000.yaml
 
-- When accessing the API from a Grid’5000 frontend, providing the username and
-  password is optionnal. Nevertheless you’ll need to deal with SSL verification
-  by specifying the path to the certificate to use:
+- When accessing the API from a Grid’5000 frontend, providing the username
+  and password is optionnal. Authentication should work out-of-the-box; if
+  it fails, try updating python-grid5000, or specify the path to the
+  certificate to use:
 
 ::
 
@@ -614,51 +615,7 @@ connected to other testbeds for experiments involving wide area layer2 networks.
 5.8 Metrics API
 ~~~~~~~~~~~~~~~
 
-5.8.1 Get the timeseries corresponding to a job
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Credits to ``lturpin``.
-
-.. code:: python
-
-    import logging
-    import os
-
-    from grid5000 import Grid5000
-
-
-    logging.basicConfig(level=logging.DEBUG)
-
-
-    def get_job_consumption(job_id, gk, site):
-        metrics = gk.sites[site].metrics
-        job = gk.sites[site].jobs[job_id]
-        # nodes as list : "cluster-number.site.grid5000.fr"
-        nodes_dom = job.assigned_nodes
-        # nodes as list : "cluster-number"
-        nodes = map(lambda node_dom: node_dom.split('.')[0], nodes_dom)
-        # nodes as string : "cluster-number,cluster-number,..."
-        nodes_str = ','.join(nodes)
-
-        start = job.started_at
-        end = job.stopped_at
-        kwargs = {
-            "only": nodes_str,
-            "resolution": 1,
-            "from": start,
-            "to": end
-        }
-        timeseries = metrics["power"].timeseries.list(**kwargs)
-        return timeseries
-
-
-    conf_file = os.path.join(os.environ.get("HOME"), ".python-grid5000.yaml")
-    gk = Grid5000.from_yaml(conf_file)
-
-    timeseries = get_job_consumption("1092446", gk, "lyon")
-    print(timeseries)
-
-5.8.2 Get some timeseries (and plot them)
+5.8.1 Get some timeseries (and plot them)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 For this example you’ll need ``matplotlib``, ``seaborn`` and ``pandas``.
@@ -675,45 +632,40 @@ For this example you’ll need ``matplotlib``, ``seaborn`` and ``pandas``.
     import seaborn as sns
     import time
 
-    logging.basicConfig(level=logging.DEBUG)
+    logging.basicConfig(level=logging.INFO)
 
     conf_file = os.path.join(os.environ.get("HOME"), ".python-grid5000.yaml")
     gk = Grid5000.from_yaml(conf_file)
 
-    metrics = gk.sites["lyon"].metrics
+    metrics = gk.sites["lyon"].clusters["nova"].metrics
     print("--- available metrics")
-    print(metrics.list())
-
-    print("---- power metric")
-    print(metrics["power"])
+    print(metrics)
 
     print("----- a timeserie")
     now = time.time()
+    # NOTE that you can pass a job_id here
     kwargs = {
-        "only": "nova-1,nova-2,nova-3",
-        "resolution": 1,
-        "from": int(now - 600),
-        "to": int(now)
+        "nodes": "nova-1,nova-2,nova-3",
+        "metrics": "wattmetre_power_watt",
+        "start_time": int(now - 600),
     }
-    timeseries = metrics["power"].timeseries.list(**kwargs)
+    metrics = gk.sites["lyon"].metrics.list(**kwargs)
 
     # let's visualize this
     df = pd.DataFrame()
-    for timeserie in timeseries:
-        print(timeserie)
-        timestamp = timeserie.timestamps
-        value = timeserie.values
-        measurement = timeserie.uid
+    for metric in metrics:
+        timestamp = metric.timestamp
+        value = metric.value
+        device_id = metric.device_id
         df = pd.concat([df, pd.DataFrame({
-            "timestamp": timestamp,
-            "value": value,
-            "measurement": [measurement]*len(timestamp)
+            "timestamp": [timestamp],
+            "value": [value],
+            "device_id": [device_id]
         })])
-
     sns.relplot(data=df,
                 x="timestamp",
                 y="value",
-                hue="measurement",
+                hue="device_id",
                 kind="line")
     plt.show()
 
-- 
GitLab