gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-grid5k] 02/16: add script to create plots


From: gnunet
Subject: [taler-grid5k] 02/16: add script to create plots
Date: Tue, 23 Nov 2021 19:22:19 +0100

This is an automated email from the git hooks/post-receive script.

marco-boss pushed a commit to branch master
in repository grid5k.

commit 0f19e7af65dc5f2406607a6d3857fe3c21b709f5
Author: Boss Marco <bossm8@bfh.ch>
AuthorDate: Fri Nov 19 11:48:19 2021 +0100

    add script to create plots
---
 additional/env                          |   4 +
 additional/plots.sh                     | 137 ++++++++++++++++++++++++++++++++
 experiment/README                       |   0
 experiment/env                          |   0
 experiment/experiment-specification.yml |   0
 5 files changed, 141 insertions(+)

diff --git a/additional/env b/additional/env
new file mode 100644
index 0000000..5648591
--- /dev/null
+++ b/additional/env
@@ -0,0 +1,4 @@
+API_KEY=
+BASE_URL=
+DASHBOARDS=
+OUTPUT_DIR=
diff --git a/additional/plots.sh b/additional/plots.sh
new file mode 100755
index 0000000..3655853
--- /dev/null
+++ b/additional/plots.sh
@@ -0,0 +1,137 @@
+#!/bin/bash
+set -e
+source .env
+
+## export FROM=$(date +%s)   | default now-1h
+## TO=$(date +%s) ./plot.sh  | default now
+
+DRYRUN=$1
+AUTH_HEADER="Authorization: Bearer ${API_KEY}"
+
+function request_png() {
+  CURL_ARGS="--data-urlencode orgId=1 
+             --data-urlencode panelId=${PANEL_ID}
+            --data-urlencode theme=light
+            --data-urlencode from=${FROM:-now-1h}
+            --data-urlencode to=${TO:-now}"
+
+  VAR1=$(echo ${VAR1} | sed -e 's/[^A-Za-z0-9._-]//g')
+  VAR2=$(echo ${VAR2} | sed -e 's/[^A-Za-z0-9._-]//g')
+
+  
FILE="${OUTPUT_DIR:-plots}/${DASH_SLUG}/${VAR1:-${VAR2:-}}/${VAR2:-}/${PANEL_NAME}.png"
+
+  echo "Output: $FILE" 
+  if [ -z "${DRYRUN}" ]; then
+    curl -G \
+       -k -g \
+       -H "${AUTH_HEADER}" \
+       -H "Accept: application/json" \
+       ${CURL_ARGS} \
+       ${ADD_CURL_ARGS} \
+       --create-dirs \
+       --output "$FILE" \
+       "${BASE_URL}/render/d-solo/${DASHBOARD}/${DASH_SLUG}"
+  fi
+}
+  
+function handle_dashboard() {
+  DASH_JSON=$(\
+    curl -X GET -k \
+         -H "${AUTH_HEADER}" \
+         -H "Accept: application/json" \
+         "${BASE_URL}/api/dashboards/uid/${DASHBOARD}" 
+  )
+  
+  readarray -t PANELS < <(\
+    echo ${DASH_JSON} | jq -c '.dashboard.panels[] | select(.type != "row")' 
+  )
+  echo -e "\n\nPanels:\n"
+  echo ${PANELS[@]} | jq -r '.title'
+  
+  DASH_SLUG=$(\
+    echo ${DASH_JSON} | jq -r '.meta.slug' 
+  )
+  echo -e "\n\nDashboard Slug:\n"
+  echo ${DASH_SLUG}
+  
+  DASH_VARIABLES=$(\
+    echo ${DASH_JSON} | jq -rc --arg regex $VAR_REGEX \
+      '.dashboard.templating.list[] | 
+       select( .name | test($regex)) | 
+       {
+          name: .name, 
+          values: [
+            .options[] | select(.value | test("__all") | not) | .value
+          ]
+       }' | jq -s '.' 
+  )
+  echo -e "\n\nDashboard Variables:\n"
+  echo ${DASH_VARIABLES} | jq -rcM '.[] | .name, .values'
+  echo -e "\n"
+  
+  VAR1_NAME=$(jq -r '.[0].name' <<< "${DASH_VARIABLES}")
+  VAR2_NAME=$(jq -r '.[1].name' <<< "${DASH_VARIABLES}")
+  
+  for PANEL in "${PANELS[@]}"; do 
+  
+    PANEL_NAME=$(jq -r '.title' <<< "${PANEL}" | tr 'A-Z' 'a-z' | tr -cs 
'a-z0-9\n' '-')
+    PANEL_ID=$(jq '.id' <<< "${PANEL}")
+    PANEL_EXPR=$(jq -r 'select( .targets != null ) | .targets[].expr' <<< 
"${PANEL}")
+  
+    if echo ${PANEL_EXPR} | grep -q "${VAR1_NAME}"; then
+      DO_ARG1="true"
+    else
+      DO_ARG1="false"
+    fi
+    if echo ${PANEL_EXPR} | grep -q "${VAR2_NAME}"; then
+      DO_ARG2="true"
+    else 
+      DO_ARG2="false"
+    fi
+  
+    if [[ "$DO_ARG1" == "false" && "$DO_ARG2" == "false" ]]; then
+      request_png
+    elif [[ "$DO_ARG1" == "false" ]]; then
+      for VAR2 in $(jq -r '.[1].values[]' <<< "${DASH_VARIABLES}"); do 
+        ADD_CURL_ARGS="--data-urlencode var-${VAR2_NAME}=${VAR2}"
+        request_png
+      done
+    elif [[ "$DO_ARG2" == "false" ]]; then
+      for VAR1 in $(jq -r '.[0].values[]' <<< "${DASH_VARIABLES}"); do 
+        ADD_CURL_ARGS="--data-urlencode var-${VAR1_NAME}=${VAR1}"
+        request_png
+      done
+    else 
+      for VAR1 in $(jq -r '.[0].values[]' <<< "${DASH_VARIABLES}"); do 
+        _ADD_CURL_ARGS="--data-urlencode var-${VAR1_NAME}=${VAR1}"
+        for VAR2 in $(jq -r '.[1].values[]' <<< "${DASH_VARIABLES}"); do
+          ADD_CURL_ARGS="${_ADD_CURL_ARGS} --data-urlencode 
var-${VAR2_NAME}=${VAR2}"
+          request_png
+        done
+      done
+    fi
+  
+  done
+
+  VAR1=""
+  VAR2=""
+}
+
+IFS=';' read -ra _DASHBOARDS <<< "${DASHBOARDS}"
+for D in "${_DASHBOARDS[@]}"; do
+  IFS=':' read -r DASHBOARD VARIABLES <<< "${D}"
+  DASHBOARD=$(echo $DASHBOARD | cut -d " " -f 1)
+
+  echo "Handling Dashboard: $DASHBOARD"
+  read -ra VARIABLES <<< "${VARIABLES}"
+
+  if [ "${#VARIABLES[@]}" -gt 2 ]; then 
+    echo "Currently only two dashboard variables are supported"
+    exit 1
+  fi
+  VAR_REGEX="(${VARIABLES[0]:-^$}|${VARIABLES[1]:-^$})"
+  
+  handle_dashboard &
+done
+
+wait
diff --git a/experiment/README b/experiment/README
old mode 100755
new mode 100644
diff --git a/experiment/env b/experiment/env
old mode 100755
new mode 100644
diff --git a/experiment/experiment-specification.yml 
b/experiment/experiment-specification.yml
old mode 100755
new mode 100644

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]