gnunet-svn
[Top][All Lists]
Advanced

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

[taler-grid5k] branch master updated (37fcfca -> a623f12)


From: gnunet
Subject: [taler-grid5k] branch master updated (37fcfca -> a623f12)
Date: Thu, 28 Apr 2022 10:46:10 +0200

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

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

    from 37fcfca  -y for upgrade
     new 9e6e3ad  add sharding/partitioning
     new d7ccc0c  fixes
     new 3e3ee65  fix table naming
     new b558395  if not exists
     new dec8a98  fix shard naming
     new 91e0856  update tables
     new 1b1de43  fix sharding permissions
     new 092cb0b  add missing user
     new b998331  add missing user directory
     new e0a8081  fix
     new bcdc571  update permissions for db
     new bd07134  don't shard wire_out
     new 823392e  fix comments
     new a7bd122  aggregation tracking cant be sharded
     new f605b98  fix wallet startup
     new 7d17d57  re-enable sharding of aggregation tracking tables
     new 791f493  still not working with aggregator
     new f997e53  fix typo
     new 8109d46  update shard sql
     new daa6ce8  fix typos
     new 5712ba0  generic wire-fee year, fix empty shards when partitioned only
     new 608cd8b  add automatic backup script
     new 49131cd  update persistance script
     new 83f3b7c  fix missing with tar
     new 3342905  io load reduced, synchronous_commit seems to be the load issue
     new 8255f22  try to fix sharding issues
     new e34f0d3  include shards in monitoring
     new b8b9075  fixes
     new 7aa1669  fix
     new 012b661  log nested statements to hopefully get function debug output
     new 579f28f  try with explicit analyze as nested does not work
     new 621cd58  undo explain
     new 877eb8b  try adding index
     new 27aaf34  typo
     new 51291ae  add index on known_coins to try to fix recoup_by_reserve
     new 8023cd7  updated deployed image
     new 6064159  update test sql
     new c31c8d1  test
     new 4943512  test do not partition wire_targets
     new be27548  include partition logic of taler
     new e08c774  lower slow query duration
     new e69cabf  hopefully better logging of slow queries with 
pg_stat_statements
     new 8505973  again without analyze
     new 89b5039  no create table in slow queries
     new 9970334  ramdom 0-20 deposit, dont log uri params in nginx, disable 
seqscan
     new 32afad7  add request size to nginx
     new d31f7ac  add monitor to dahu because of link speed
     new a6d2f3c  fix
     new d07a3f9  keepalive in nginx
     new 7a80cce  add offloaded processes
     new 18338ee  fix exchange service
     new f04b5e0  update merchant conf
     new ca9ee77  fix
     new e3f1c42  coin lookahead sign 2 weeks only, -O2
     new 458f854  add certificates for nginx
     new 9c8d022  try to fix wallet build
     new 41ee4b6  update
     new e657d61  try --unsafe-perm
     new 8a296aa  configure proxy caching
     new b22fd57  change cache dir
     new 267a358  fix
     new a91668a  fix lookahead sign
     new ad3cf80  make cipher and key size configurable
     new d1fd403  fix
     new 43b5a87  update persistance script
     new 5478e01  move database to /tmp as it is mounted on the primary disk in 
grid5000 environments
     new 082caf1  set lookahead sign to two days as we get much better client 
performance
     new 60757c0  add possibility to run multiple exchange-httpd hosts - 
services must be run as root, since the nfs does allow to change permissions
     new 87f106d  add secondary initialization
     new 1d3a7ad  fix
     new 59c1a49  further improve performance of log analysis
     new 6820aa1  cleaner regex
     new 7ac597c  better endpoint pipeline definition
     new a1546cd  reduce amount of logging wallets
     new 7893662  also separate wallet from the main syslog receiver
     new 0a09a64  add status label for hopefully better speed
     new e43015a  test custom metrics
     new f7bdc10  fix
     new b6b72c8  add histograms
     new 960e1d5  change denominations
     new 6bd7836  change denominations 1,4,8
     new b441d08  include secondary exchanges in prometheus
     new e5d7c57  finished configuration for secondary exchanges
     new 077c5be  cleaner exchange setup
     new 1f6322f  fixes
     new 2c181f2  -fixes -build libmicrohttpd from source
     new 2b2ce37  cflags via variables
     new ad39860  fix build
     new 18778ab  fix
     new f517563  add doc
     new c72b8f1  split up proxy monitoring
     new edb715b  configure merchant instance
     new ca86c8a  possibility to create multiple instances
     new fd716fb  merchant behind nginx
     new e3ed1c1  fix
     new 23f0170  fixes, add lookahead sign as param
     new ea9dfec  fix
     new 7312f95  fix
     new 37c60b1  add explain analyzer
     new db708d8  correct time calculation
     new a956245  fix
     new 4d59b87  fix
     new 9af5e28  add upstream response time
     new 9dbb426  fix
     new aa3db16  work towards parsing logs
     new 014c5c2  viualizer can parse log lines / formatted output
     new 0a4fdd5  fix most time consuming
     new 7a10fb3  update explain.py - multiline params not working yet - needs 
some style improvements
     new 2a89d86  update promtail message size
     new 685c4a8  install linux-perf
     new 0d055ac  explain analyze now working with correct postgres config
     new cce5ea5  add missing parameter hint to explain.py
     new d396602  some doc about explain.py
     new 4fb7a84  test with sharding
     new e5293ac  fix sharding setup, finish explain script summary
     new dc30686  fix verbose output
     new b1d5342  some db config
     new eab9f0b  add sharding logic
     new 90956e2  add docker-compose to explain-visualizer
     new b233fb5  update postgres exporter to work when there is no merchant, 
update grafana dashboards
     new fe2f24e  fix gitignore
     new 82a4f77  support for multiple merchant nodes
     new e3f3967  update url's to match node names
     new 9c92f12  enable admin api for prometheus in order to test snapshots
     new a139784  periodic prometheus backup which can be viewed locally with 
additional/recover/run.sh
     new 333fbf8  try further with promtail metrics
     new f2c4675  adjust database logs
     new e541378  fix yaml
     new 7671e63  slow query time
     new 6daa726  fix slow query amount
     new 91049f2  fix backup script
     new 575349e  fix regex
     new b6a7ff7  cleaner regex
     new 7b77984  try source
     new a050166  add loki to recover setup
     new e23550c  update dashboards
     new 9f5db12  fix some issues in recover
     new ef1d591  possibility to start more wirewatchers
     new 394683e  fix taler-perf script
     new 9ca1304  move loki data to nfs directly as lost in copy
     new 538bf1b  update recovery script
     new d4299a4  update persistance, possible to remove previous data
     new 6aa0b1c  fixes, changes
     new 22d35f6  possible to provide the complete tar archive for recovery
     new 9498bc4  add some doc
     new fbe6991  update recovery
     new 1df7a7f  add proxy for fakebank
     new 897ecb8  add version to docker-compose
     new db2c367  update proxy configuration for merchant and bank
     new e602a26  various imrovements / fixes
     new a2aecca  add progress for archiving
     new dcb7aeb  deduplicate promtail
     new 73a75f6  show that process is running in persist.sh for long during 
processes
     new 4154d46  more dynamic rsyslog ports, add some info in setup.sh
     new db45c9e  experiment with two postgresql instances
     new 0c73c69  fix
     new ec096cd  fix persist script, delete manually
     new 24e1089  additional scripts improved
     new aa59701  'cluster' (db) scripts added
     new 92bb304  update image, disable mitigations
     new 9277752  add centos image
     new c2c8bbf  add centos image
     new deb771d  update centos
     new b5d249c  update
     new 8e5c02e  remove --no-install-recommends
     new be3ceb3  use centos for db only
     new df97b9f  add g5k commit sha again
     new f3e0b8c  change grub - disable mitigations
     new 1d90d4e  centos add node-exporter
     new e830b99  add node-exporter service files as not present in centos
     new 3a47d92  fix pg repo in centos
     new 5449552  fix bind package in centos
     new 282fa92  createusers not required for db only
     new 17967ce  add mitigations=off in grid5000 base.yaml as it gets overriden
     new aa47dda  postgresql not loaded per default
     new 228fe36  fix node-exporter
     new 2251644  add wget
     new 982cae4  kernel_params used to disable mitigations
     new c8bc78b  fix tar path of centos
     new c1da556  add centos db initialization script
     new a915900  centos database working
     new 1ba6293  add centos note in readme
     new b9d216b  fix promtail
     new 9ee4f87  add documentation
     new cf28bd2  update taler-perf
     new 8a52139  rebuild on all nodes
     new c7c161a  rename to be clearer
     new 4718cb7  add more output to explain.py
     new a623f12  Commented and Documented

The 189 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .gitignore                                         |     1 +
 README.md                                          |    11 +-
 additional/.gitignore                              |     3 +-
 additional/README.md                               |    52 +-
 additional/explain-visualizer/.gitignore           |     4 +
 additional/explain-visualizer/docker-compose.yaml  |    15 +
 additional/explain-visualizer/explain.py           |   554 +
 additional/grafana/database.json                   |  1133 +-
 .../{request-statistics.json => exchange.json}     |  1476 +-
 additional/grafana/load-statistics.json            |   425 +-
 additional/grafana/nodes.json                      | 13820 +++++++++++++++++++
 additional/grafana/proxy.json                      |   640 +
 additional/grafana/request-statistics.json         |   786 +-
 additional/grafana/transactions.json               |   555 +-
 additional/persist.sh                              |   126 +
 additional/plots/config.yaml                       |     9 +-
 additional/recover/.gitignore                      |     4 +
 .../provisioning/dashboards/taler-perf.yaml        |     9 +
 .../provisioning/datasources/prometheus.yaml       |    12 +
 .../recover/assets/prometheus/prometheus.yaml      |     0
 additional/recover/docker-compose.yaml             |    66 +
 additional/recover/run.sh                          |    80 +
 .../rspecs/taler.any.rspec                         |    53 +-
 additional/rspecs/taler.minial.rspec               |    45 +
 .../taler.sharded.minimal-with-wallets.rspec       |   117 +-
 additional/rspecs/taler.sharded.minimal.rspec      |    73 +
 configs/etc/default/prometheus                     |     2 +-
 configs/etc/default/prometheus-nginx-exporter      |     2 +-
 configs/etc/default/prometheus-node-exporter       |   217 +
 configs/etc/default/prometheus-postgres-exporter   |     3 +-
 configs/etc/monitor/exchange-exporters.yaml.tpl    |     6 -
 configs/etc/monitor/loki.yaml                      |    10 +-
 configs/etc/monitor/node-exporters.yaml.tpl        |    34 +-
 configs/etc/monitor/postgres-exporter.yaml         |   230 +-
 configs/etc/monitor/prometheus.yaml                |    19 +-
 configs/etc/monitor/promtail.yaml                  |   133 +
 configs/etc/nginx/sites-available/exchange         |    66 +
 configs/etc/nginx/sites-available/fakebank         |    29 +
 configs/etc/nginx/sites-available/merchant         |    29 +
 configs/etc/nginx/sites-enabled/proxy              |    40 -
 configs/etc/rsyslog.d/taler.conf                   |     4 +-
 configs/etc/taler/conf.d/exchange-business.conf    |    22 +-
 configs/etc/taler/conf.d/exchange-coins.conf       |   150 +-
 configs/etc/taler/conf.d/exchange-secmod.conf      |    17 +
 configs/etc/taler/conf.d/exchange-system.conf      |     5 -
 configs/etc/taler/conf.d/fake-bank.conf            |     2 +-
 configs/etc/taler/conf.d/merchant.conf             |     8 +-
 .../system/prometheus-node-exporter.service        |    15 +
 ....service => taler-exchange-aggregator@.service} |     3 +-
 ...oser.service => taler-exchange-closer@.service} |     3 +-
 .../systemd/system/taler-exchange-httpd.service    |    25 -
 .../lib/systemd/system/taler-exchange-httpd.socket |    14 -
 .../systemd/system/taler-exchange-httpd@.service   |     8 +-
 .../system/taler-exchange-secmod-cs.service        |    18 +
 .../system/taler-exchange-secmod-eddsa.service     |     3 +-
 .../system/taler-exchange-secmod-rsa.service       |     3 +-
 ...er.service => taler-exchange-transfer@.service} |     3 +-
 .../system/taler-exchange-wirewatch.service        |    16 -
 .../usr/lib/systemd/system/taler-exchange.target   |    12 -
 .../systemd/system/taler-prometheus-backup.service |    10 +
 .../systemd/system/taler-prometheus-backup.timer   |    10 +
 docker/Dockerfile                                  |     8 +-
 docker/README.md                                   |    35 +-
 docker/entrypoint.sh                               |    58 +-
 experiment/README.md                               |   140 +-
 experiment/env                                     |    80 +-
 experiment/experiment-specification.yml            |    11 +
 experiment/scripts/bank.sh                         |     7 +-
 experiment/scripts/benchmark.sh                    |    32 +-
 experiment/scripts/createusers.sh                  |    14 +-
 experiment/scripts/database-centos.sh              |   340 +
 experiment/scripts/database.sh                     |   257 +-
 experiment/scripts/dns.sh                          |    22 +
 experiment/scripts/exchange-aggregator.sh          |    40 +
 experiment/scripts/exchange-closer.sh              |    40 +
 experiment/scripts/exchange-proxy.sh               |   116 +
 experiment/scripts/exchange-transfer.sh            |    40 +
 experiment/scripts/exchange-wirewatch.sh           |    55 +
 experiment/scripts/exchange.sh                     |   142 +-
 experiment/scripts/helpers.sh                      |   126 +-
 experiment/scripts/install.sh                      |    75 +-
 experiment/scripts/merchant.sh                     |    38 +-
 experiment/scripts/monitor.sh                      |   198 +-
 experiment/scripts/ping.sh                         |     7 +-
 experiment/scripts/postgres-cluster/README.md      |    24 +
 experiment/scripts/postgres-cluster/db-cluster.sh  |    67 +
 .../scripts/postgres-cluster/exch-cluster.sh       |    67 +
 .../scripts/postgres-cluster/proxy-cluster.sh      |    18 +
 experiment/scripts/prometheus-backup.sh            |    42 +
 experiment/scripts/proxy.sh                        |   112 -
 experiment/scripts/run.sh                          |   113 +-
 experiment/scripts/setup.sh                        |    98 +-
 experiment/scripts/{database.sh => shard.sh}       |   138 +-
 experiment/scripts/taler-perf.sh                   |   155 +-
 experiment/scripts/wallet.sh                       |     3 +-
 experiment/ssh/id_rsa                              |    38 +
 experiment/ssh/id_rsa.pub                          |     1 +
 experiment/taler.many.rspec                        |   453 +
 experiment/taler.rspec                             |    65 +-
 experiment/taler.sharded.rspec                     |   481 +
 image/README.md                                    |    45 +-
 .../grid5000/centos8-x64-min.yaml}                 |    32 +-
 .../{ => centos8}/grid5000/from_scratch/base.yaml  |     0
 .../grid5000/from_scratch/centos-8.yaml}           |    13 +-
 .../centos8/grid5000/from_scratch/centos-base.yaml |    55 +
 .../grid5000/steps/aliases/defaults.yaml           |     0
 .../bootstrap/centos/prepare_autoinstall.yaml      |     7 +
 .../steps/bootstrap/download_installer.yaml        |     0
 .../steps/bootstrap/prepare_appliance.yaml         |     0
 .../grid5000/steps/bootstrap/prepare_disk.yaml     |     0
 .../bootstrap/prepare_ssh_to_out_context.yaml      |     0
 .../steps/bootstrap/start_http_server.yaml         |     0
 .../grid5000/steps/bootstrap/start_qemu.yaml       |     4 +-
 .../grid5000/steps/checkpoints/simple.yaml         |     0
 .../steps/data/helpers/export_appliance.py         |     0
 .../steps/data/helpers/netinstall_iso_finder.py    |    36 +-
 .../steps/data/helpers/simple_http_server.py       |     0
 .../grid5000/steps/data/kickstart/centos8-ks.cfg   |    46 +
 .../grid5000/steps/data/qemu-sendkeys.rb           |     0
 .../steps/data/qemu-sendkeys/netinst-centos        |     1 +
 .../grid5000/steps/disable_checkpoint.yaml         |     0
 .../grid5000/steps/enable_checkpoint.yaml          |     0
 image/{ => centos8}/grid5000/steps/env/bashrc      |     0
 .../{ => centos8}/grid5000/steps/env/functions.sh  |     0
 .../steps/export/centos}/clean_dhcp_leases.yaml    |     2 +-
 .../steps/export/do_qcow2_finish_works.yaml        |     0
 .../grid5000/steps/export/export_g5k.yaml          |    15 +-
 .../grid5000/steps/export/save_appliance_VM.yaml   |     0
 .../setup/centos/8/create_kernel_symlinks.yaml     |    25 +
 .../grid5000/steps/setup/centos/clean_system.yaml  |    26 +
 .../steps/setup/centos/configure_system.yaml       |    61 +
 .../grid5000/steps/setup/centos/disable_kdump.yaml |     7 +
 .../steps/setup/centos/install_packages.yaml       |    13 +
 .../steps/setup/centos/minimal_install.yaml        |    12 +
 .../grid5000/steps/setup/centos/set_g5k_motd.yaml  |    19 +
 .../grid5000/steps/setup/set_g5k_release.yaml      |    14 +
 image/centos8/taler-centos8.yaml                   |    92 +
 .../grid5000/debian11-x64-common.yaml              |     0
 .../{ => debian11}/grid5000/debian11-x64-nfs.yaml  |     0
 .../{ => debian11}/grid5000/from_scratch/base.yaml |     0
 .../grid5000/from_scratch/debian-base.yaml         |     0
 .../grid5000/from_scratch/debian-bullseye.yaml     |     0
 .../grid5000/steps/aliases/defaults.yaml           |     0
 .../bootstrap/debian/prepare_autoinstall.yaml      |     0
 .../steps/bootstrap/download_installer.yaml        |     0
 .../steps/bootstrap/prepare_appliance.yaml         |     0
 .../grid5000/steps/bootstrap/prepare_disk.yaml     |     0
 .../bootstrap/prepare_ssh_to_out_context.yaml      |     0
 .../steps/bootstrap/start_http_server.yaml         |     0
 .../grid5000/steps/bootstrap/start_qemu.yaml       |     0
 .../grid5000/steps/checkpoints/simple.yaml         |     0
 .../steps/data/helpers/export_appliance.py         |     0
 .../steps/data/helpers/netinstall_iso_finder.py    |     0
 .../steps/data/helpers/simple_http_server.py       |     0
 .../steps/data/preseed/debian-bullseye-preseed.cfg |     0
 .../grid5000/steps/data/qemu-sendkeys.rb           |     0
 .../steps/data/qemu-sendkeys/netinst-iso-debian    |     0
 .../grid5000/steps/data/setup/hiera/hiera.yaml     |     0
 .../steps/data/setup/hiera/hieradata/defaults.yaml |     0
 .../steps/data/setup/puppet/manifests/base.pp      |     0
 .../steps/data/setup/puppet/manifests/big.pp       |     0
 .../steps/data/setup/puppet/manifests/min.pp       |     0
 .../steps/data/setup/puppet/manifests/nfs.pp       |     0
 .../steps/data/setup/puppet/manifests/std.pp       |     0
 .../steps/data/setup/puppet/manifests/xen.pp       |     0
 .../modules/env/files/base/cpufreq/cpufrequtils    |     0
 .../modules/env/files/base/ganglia/gmond.conf      |     0
 .../modules/env/files/base/infiniband/90-ib.rules  |     0
 .../modules/env/files/base/infiniband/openib.conf  |     0
 .../modules/env/files/base/infiniband/openibd      |     0
 .../env/files/base/infiniband/openibd.service      |     0
 .../puppet/modules/env/files/base/kexec/kexec      |     0
 .../puppet/modules/env/files/base/mx/ip_over_mx    |     0
 .../modules/env/files/base/ndctl/ndctl.preset      |     0
 .../modules/env/files/base/sshfs/40-fuse.rules     |     0
 .../env/files/base/tuning/limits-grid5000.conf     |     0
 .../env/files/base/tuning/sysctl-00-grid5000.conf  |     0
 .../env/files/base/userns/sysctl-00-userns.conf    |     0
 .../modules/env/files/big/amd_gpu/70-amdgpu.rules  |     0
 .../modules/env/files/big/kvm/60-qemu-system.rules |     0
 .../puppet/modules/env/files/big/kvm/create_tap    |     0
 .../puppet/modules/env/files/big/kvm/random_mac    |     0
 .../setup/puppet/modules/env/files/big/kvm/sudoers |     0
 .../puppet/modules/env/files/big/mic/85-mic.rules  |     0
 .../setup/puppet/modules/env/files/big/mic/fstab   |     0
 .../puppet/modules/env/files/big/mic/mic0.filelist |     0
 .../setup/puppet/modules/env/files/big/mic/mpss    |     0
 .../puppet/modules/env/files/big/nvidia/cuda.conf  |     0
 .../env/files/big/nvidia/dcgm-exporter.service     |     0
 .../env/files/big/nvidia/ganglia-monitor.service   |     0
 .../env/files/big/nvidia/modpython-nvidia.conf     |     0
 .../files/big/nvidia/nvidia-persistenced.service   |     0
 .../env/files/big/nvidia/nvidia-smi.service        |     0
 .../env/files/min/apt/grid5000-archive-key.asc     |     0
 .../env/files/min/cpu_microcode/amd64-microcode    |     0
 .../env/files/min/cpu_microcode/intel-microcode    |     0
 .../modules/env/files/min/image_versioning/git_tag |     0
 .../env/files/min/image_versioning/postinst        |     0
 .../puppet/modules/env/files/min/locales/locale    |     0
 .../modules/env/files/min/locales/locale.gen       |     0
 .../env/files/min/network/g5k-update-host-name     |     0
 .../puppet/modules/env/files/min/network/hosts     |     0
 .../env/files/nfs/ldap/ca2019.grid5000.fr.cert     |     0
 .../puppet/modules/env/files/nfs/ldap/common-auth  |     0
 .../modules/env/files/nfs/ldap/common-password     |     0
 .../puppet/modules/env/files/nfs/ldap/ldap.conf    |     0
 .../modules/env/files/nfs/ldap/libnss-ldap.conf    |     0
 .../puppet/modules/env/files/nfs/ldap/nscd.conf    |     0
 .../puppet/modules/env/files/nfs/ldap/nslcd.conf   |     0
 .../modules/env/files/nfs/ldap/nsswitch.conf       |     0
 .../env/files/nfs/openiscsi/55-openiscsi.rules     |     0
 .../modules/env/files/nfs/openiscsi/iscsidev.sh    |     0
 .../files/std/g5k-manager/g5k-disk-manager-backend |     0
 .../g5k-manager/g5k-disk-manager-backend.service   |     0
 .../env/files/std/g5k-manager/g5k-pmem-manager     |     0
 .../files/std/g5k-manager/g5k-pmem-manager.service |     0
 .../env/files/std/g5k-manager/lib/g5k-manager.rb   |     0
 .../env/files/std/g5k_generator/g5k_generator      |     0
 .../env/files/std/g5kchecks/g5k-checks.conf        |     0
 .../puppet/modules/env/files/std/lvm/lvm.conf      |     0
 .../modules/env/files/std/net_access/iptables      |     0
 .../env/files/std/net_access/iptables.stretch      |     0
 .../modules/env/files/std/net_access/rsyslog.conf  |     0
 .../env/files/std/net_access/syslog_iptables.conf  |     0
 .../files/std/nvidia_configure/nvidia-reset-mig    |     0
 .../std/nvidia_configure/nvidia-reset-mig.service  |     0
 .../modules/env/files/std/oar/batch_job_bashrc     |     0
 .../env/files/std/oar/etc/security/access.conf     |     0
 .../modules/env/files/std/oar/oar-node-service     |     0
 .../env/files/std/oar/oar-node.service.override    |     0
 .../modules/env/files/std/oar/oar_sshclient_config |     0
 .../env/files/std/oar/var/lib/oar/access.conf      |     0
 .../modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k |     0
 .../env/files/std/sudo-g5k/id_rsa_sudo-g5k.pub     |     0
 .../data/setup/puppet/modules/env/files/version    |     0
 .../setup/puppet/modules/env/files/xen/xen/id_rsa  |     0
 .../puppet/modules/env/files/xen/xen/id_rsa.pub    |     0
 .../puppet/modules/env/files/xen/xen/random_mac    |     0
 .../setup/puppet/modules/env/files/xen/xen/xen-g5k |     0
 .../modules/env/files/xen/xen/xen-g5k.service      |     0
 .../modules/env/files/xen/xen/xend-config.sxp      |     0
 .../env/lib/facter/installed_kernelreleases.rb     |     0
 .../setup/puppet/modules/env/manifests/base.pp     |     0
 .../modules/env/manifests/base/add_ca_grid5000.pp  |     0
 .../env/manifests/base/configure_dhclient.pp       |     0
 .../manifests/base/configure_ip_over_infiniband.pp |     0
 .../modules/env/manifests/base/configure_kexec.pp  |     0
 .../env/manifests/base/configure_omnipath.pp       |     0
 .../env/manifests/base/disable_ndctl_monitor.pp    |     0
 .../env/manifests/base/disable_nvme_multipath.pp   |     0
 .../modules/env/manifests/base/do_not_clean_tmp.pp |     0
 .../enable_cpufreq_with_performance_governor.pp    |     0
 .../modules/env/manifests/base/enable_userns.pp    |     0
 .../env/manifests/base/increase_ssh_maxstartups.pp |     0
 .../manifests/base/install_and_disable_ganglia.pp  |     0
 .../env/manifests/base/tcp_tuning_for_10gbe.pp     |     0
 .../base/unlimited_memlock_for_infiniband.pp       |     0
 .../data/setup/puppet/modules/env/manifests/big.pp |     0
 .../modules/env/manifests/big/configure_amd_gpu.pp |     0
 .../env/manifests/big/configure_initramfs.pp       |     0
 .../modules/env/manifests/big/configure_kvm.pp     |     0
 .../env/manifests/big/configure_nvidia_gpu.pp      |     0
 .../env/manifests/big/configure_nvidia_gpu/cuda.pp |     0
 .../manifests/big/configure_nvidia_gpu/drivers.pp  |     0
 .../manifests/big/configure_nvidia_gpu/ganglia.pp  |     0
 .../manifests/big/configure_nvidia_gpu/modules.pp  |     0
 .../big/configure_nvidia_gpu/prometheus.pp         |     0
 .../manifests/big/configure_nvidia_gpu/services.pp |     0
 .../modules/env/manifests/big/configure_postfix.pp |     0
 .../modules/env/manifests/big/configure_sshfs.pp   |     0
 .../modules/env/manifests/big/install_beegfs.pp    |     0
 .../env/manifests/big/install_g5k_jupyterlab.pp    |     0
 .../modules/env/manifests/big/install_openmpi.pp   |     0
 .../manifests/big/install_prometheus_exporters.pp  |     0
 .../modules/env/manifests/big/install_smartd.pp    |     0
 .../env/manifests/big/install_snmp_tools.pp        |     0
 .../manifests/big/prepare_kernel_module_build.pp   |     0
 .../modules/env/manifests/common/apt_pinning.pp    |     0
 .../modules/env/manifests/common/g5kpackages.pp    |     0
 .../env/manifests/common/software_versions.pp      |     0
 .../puppet/modules/env/manifests/commonpackages.pp |     0
 .../setup/puppet/modules/env/manifests/init.pp     |     0
 .../data/setup/puppet/modules/env/manifests/min.pp |     0
 .../env/manifests/min/add_image_version_in_etc.pp  |     0
 .../configure_kernel_and_blacklist_some_modules.pp |     0
 .../min/configure_network_and_install_drivers.pp   |     0
 .../modules/env/manifests/min/generate_etc_motd.pp |     0
 .../manifests/min/install_and_configure_locales.pp |     0
 .../env/manifests/min/install_and_configure_ssh.pp |     0
 .../env/manifests/min/install_cpu_microcode.pp     |     0
 .../env/manifests/min/install_metapackage.pp       |     0
 .../modules/env/manifests/min/install_tgz_g5k.pp   |     0
 .../modules/env/manifests/min/kernel/initramfs.pp  |     0
 .../modules/env/manifests/min/kernel/modules.pp    |     0
 .../modules/env/manifests/min/kernel/remove_old.pp |     0
 .../env/manifests/min/kernel/setup_links.pp        |     0
 .../modules/env/manifests/min/set_root_password.pp |     0
 .../manifests/min/set_timezone_to_europe_paris.pp  |     0
 .../data/setup/puppet/modules/env/manifests/nfs.pp |     0
 .../modules/env/manifests/nfs/configure_iscsi.pp   |     0
 .../modules/env/manifests/nfs/configure_ldap.pp    |     0
 .../env/manifests/nfs/configure_module_path.pp     |     0
 .../modules/env/manifests/nfs/configure_ntp.pp     |     0
 .../env/manifests/nfs/install_nfs_requirements.pp  |     0
 .../manifests/nfs/install_osirim_requirements.pp   |     0
 .../nfs/install_storage5k_requirements.pp          |     0
 .../data/setup/puppet/modules/env/manifests/std.pp |     0
 .../env/manifests/std/add_g5kcode_to_path.pp       |     0
 .../std/configure_g5kdiskmanagerbackend.pp         |     0
 .../env/manifests/std/configure_g5kmanager.pp      |     0
 .../env/manifests/std/configure_g5kpmemmanager.pp  |     0
 .../env/manifests/std/configure_oar_client.pp      |     0
 .../env/manifests/std/configure_rsyslog_remote.pp  |     0
 .../setup/puppet/modules/env/manifests/std/dell.pp |     0
 .../modules/env/manifests/std/dell/params.pp       |     0
 .../env/manifests/std/disable_lvm_pvscan.pp        |     0
 .../modules/env/manifests/std/g5k_generator.pp     |     0
 .../modules/env/manifests/std/install_g5kchecks.pp |     0
 .../env/manifests/std/install_g5ksubnets.pp        |     0
 .../env/manifests/std/install_hwraid_apt_source.pp |     0
 .../modules/env/manifests/std/install_kameleon.pp  |     0
 .../manifests/std/install_libguestfs_backport.pp   |     0
 .../modules/env/manifests/std/install_megacli.pp   |     0
 .../modules/env/manifests/std/install_sudog5k.pp   |     0
 .../puppet/modules/env/manifests/std/ipmitool.pp   |     0
 .../modules/env/manifests/std/nvidia_reset_mig.pp  |     0
 .../data/setup/puppet/modules/env/manifests/xen.pp |     0
 .../modules/env/manifests/xen/configure_xen.pp     |     0
 .../modules/env/manifests/xen/install_grub.pp      |     0
 .../env/templates/base/omnipath/scibian.key.erb    |     0
 .../modules/env/templates/common/apt_pinning.erb   |     0
 .../puppet/modules/env/templates/min/motd.erb      |     0
 .../env/templates/nfs/ldap/common-account.erb      |     0
 .../modules/env/templates/nfs/ntp/ntp.conf.erb     |     0
 .../env/templates/std/dell/linux.dell.com.key.erb  |     0
 .../std/hwraid/hwraid.le-vert.net.key.erb          |     0
 .../grid5000/steps/disable_checkpoint.yaml         |     0
 .../grid5000/steps/enable_checkpoint.yaml          |     0
 image/{ => debian11}/grid5000/steps/env/bashrc     |     0
 .../{ => debian11}/grid5000/steps/env/functions.sh |     0
 .../steps/export/debian/clean_dhcp_leases.yaml     |     0
 .../steps/export/do_qcow2_finish_works.yaml        |     0
 .../grid5000/steps/export/export_g5k.yaml          |     0
 .../grid5000/steps/export/save_appliance_VM.yaml   |     0
 .../grid5000/steps/setup/debian/clean_system.yaml  |     0
 .../steps/setup/debian/configure_apt_sources.yaml  |     0
 .../steps/setup/debian/configure_system.yaml       |     0
 .../steps/setup/debian/install_packages.yaml       |     0
 .../steps/setup/debian/minimal_install.yaml        |     0
 .../steps/setup/debian/run_orchestrator.yaml       |     0
 .../steps/setup/debian/setup_orchestrator.yaml     |     0
 image/{ => debian11}/taler-debian11.yaml           |    49 +-
 notes.txt                                          |     0
 353 files changed, 22444 insertions(+), 3126 deletions(-)
 create mode 100644 additional/explain-visualizer/.gitignore
 create mode 100644 additional/explain-visualizer/docker-compose.yaml
 create mode 100755 additional/explain-visualizer/explain.py
 copy additional/grafana/{request-statistics.json => exchange.json} (54%)
 create mode 100644 additional/grafana/nodes.json
 create mode 100644 additional/grafana/proxy.json
 create mode 100755 additional/persist.sh
 create mode 100644 additional/recover/.gitignore
 create mode 100644 
additional/recover/assets/grafana/provisioning/dashboards/taler-perf.yaml
 create mode 100644 
additional/recover/assets/grafana/provisioning/datasources/prometheus.yaml
 rename experiment/TODO => additional/recover/assets/prometheus/prometheus.yaml 
(100%)
 create mode 100644 additional/recover/docker-compose.yaml
 create mode 100755 additional/recover/run.sh
 copy experiment/taler.rspec => additional/rspecs/taler.any.rspec (83%)
 create mode 100644 additional/rspecs/taler.minial.rspec
 copy experiment/taler.rspec => 
additional/rspecs/taler.sharded.minimal-with-wallets.rspec (72%)
 create mode 100644 additional/rspecs/taler.sharded.minimal.rspec
 create mode 100644 configs/etc/default/prometheus-node-exporter
 delete mode 100644 configs/etc/monitor/exchange-exporters.yaml.tpl
 create mode 100644 configs/etc/nginx/sites-available/exchange
 create mode 100644 configs/etc/nginx/sites-available/fakebank
 create mode 100644 configs/etc/nginx/sites-available/merchant
 delete mode 100644 configs/etc/nginx/sites-enabled/proxy
 create mode 100644 configs/etc/taler/conf.d/exchange-secmod.conf
 create mode 100644 
configs/usr/lib/systemd/system/prometheus-node-exporter.service
 rename configs/usr/lib/systemd/system/{taler-exchange-aggregator.service => 
taler-exchange-aggregator@.service} (92%)
 rename configs/usr/lib/systemd/system/{taler-exchange-closer.service => 
taler-exchange-closer@.service} (76%)
 delete mode 100644 configs/usr/lib/systemd/system/taler-exchange-httpd.service
 delete mode 100644 configs/usr/lib/systemd/system/taler-exchange-httpd.socket
 create mode 100644 
configs/usr/lib/systemd/system/taler-exchange-secmod-cs.service
 rename configs/usr/lib/systemd/system/{taler-exchange-transfer.service => 
taler-exchange-transfer@.service} (81%)
 delete mode 100644 
configs/usr/lib/systemd/system/taler-exchange-wirewatch.service
 delete mode 100644 configs/usr/lib/systemd/system/taler-exchange.target
 create mode 100644 
configs/usr/lib/systemd/system/taler-prometheus-backup.service
 create mode 100644 configs/usr/lib/systemd/system/taler-prometheus-backup.timer
 create mode 100755 experiment/scripts/database-centos.sh
 create mode 100755 experiment/scripts/dns.sh
 create mode 100755 experiment/scripts/exchange-aggregator.sh
 create mode 100755 experiment/scripts/exchange-closer.sh
 create mode 100755 experiment/scripts/exchange-proxy.sh
 create mode 100755 experiment/scripts/exchange-transfer.sh
 create mode 100755 experiment/scripts/exchange-wirewatch.sh
 create mode 100644 experiment/scripts/postgres-cluster/README.md
 create mode 100755 experiment/scripts/postgres-cluster/db-cluster.sh
 create mode 100755 experiment/scripts/postgres-cluster/exch-cluster.sh
 create mode 100755 experiment/scripts/postgres-cluster/proxy-cluster.sh
 create mode 100755 experiment/scripts/prometheus-backup.sh
 delete mode 100755 experiment/scripts/proxy.sh
 copy experiment/scripts/{database.sh => shard.sh} (54%)
 create mode 100644 experiment/ssh/id_rsa
 create mode 100644 experiment/ssh/id_rsa.pub
 create mode 100644 experiment/taler.many.rspec
 create mode 100644 experiment/taler.sharded.rspec
 copy image/{grid5000/debian11-x64-common.yaml => 
centos8/grid5000/centos8-x64-min.yaml} (62%)
 copy image/{ => centos8}/grid5000/from_scratch/base.yaml (100%)
 copy image/{grid5000/from_scratch/debian-bullseye.yaml => 
centos8/grid5000/from_scratch/centos-8.yaml} (62%)
 create mode 100644 image/centos8/grid5000/from_scratch/centos-base.yaml
 copy image/{ => centos8}/grid5000/steps/aliases/defaults.yaml (100%)
 create mode 100644 
image/centos8/grid5000/steps/bootstrap/centos/prepare_autoinstall.yaml
 copy image/{ => centos8}/grid5000/steps/bootstrap/download_installer.yaml 
(100%)
 copy image/{ => centos8}/grid5000/steps/bootstrap/prepare_appliance.yaml (100%)
 copy image/{ => centos8}/grid5000/steps/bootstrap/prepare_disk.yaml (100%)
 copy image/{ => 
centos8}/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml (100%)
 copy image/{ => centos8}/grid5000/steps/bootstrap/start_http_server.yaml (100%)
 copy image/{ => centos8}/grid5000/steps/bootstrap/start_qemu.yaml (98%)
 copy image/{ => centos8}/grid5000/steps/checkpoints/simple.yaml (100%)
 copy image/{ => centos8}/grid5000/steps/data/helpers/export_appliance.py (100%)
 copy image/{ => centos8}/grid5000/steps/data/helpers/netinstall_iso_finder.py 
(76%)
 copy image/{ => centos8}/grid5000/steps/data/helpers/simple_http_server.py 
(100%)
 create mode 100644 image/centos8/grid5000/steps/data/kickstart/centos8-ks.cfg
 copy image/{ => centos8}/grid5000/steps/data/qemu-sendkeys.rb (100%)
 mode change 100644 => 100755
 create mode 100644 
image/centos8/grid5000/steps/data/qemu-sendkeys/netinst-centos
 copy image/{ => centos8}/grid5000/steps/disable_checkpoint.yaml (100%)
 copy image/{ => centos8}/grid5000/steps/enable_checkpoint.yaml (100%)
 copy image/{ => centos8}/grid5000/steps/env/bashrc (100%)
 copy image/{ => centos8}/grid5000/steps/env/functions.sh (100%)
 copy image/{grid5000/steps/export/debian => 
centos8/grid5000/steps/export/centos}/clean_dhcp_leases.yaml (62%)
 copy image/{ => centos8}/grid5000/steps/export/do_qcow2_finish_works.yaml 
(100%)
 copy image/{ => centos8}/grid5000/steps/export/export_g5k.yaml (84%)
 copy image/{ => centos8}/grid5000/steps/export/save_appliance_VM.yaml (100%)
 create mode 100644 
image/centos8/grid5000/steps/setup/centos/8/create_kernel_symlinks.yaml
 create mode 100644 image/centos8/grid5000/steps/setup/centos/clean_system.yaml
 create mode 100644 
image/centos8/grid5000/steps/setup/centos/configure_system.yaml
 create mode 100644 image/centos8/grid5000/steps/setup/centos/disable_kdump.yaml
 create mode 100644 
image/centos8/grid5000/steps/setup/centos/install_packages.yaml
 create mode 100644 
image/centos8/grid5000/steps/setup/centos/minimal_install.yaml
 create mode 100644 image/centos8/grid5000/steps/setup/centos/set_g5k_motd.yaml
 create mode 100644 image/centos8/grid5000/steps/setup/set_g5k_release.yaml
 create mode 100644 image/centos8/taler-centos8.yaml
 rename image/{ => debian11}/grid5000/debian11-x64-common.yaml (100%)
 rename image/{ => debian11}/grid5000/debian11-x64-nfs.yaml (100%)
 rename image/{ => debian11}/grid5000/from_scratch/base.yaml (100%)
 rename image/{ => debian11}/grid5000/from_scratch/debian-base.yaml (100%)
 rename image/{ => debian11}/grid5000/from_scratch/debian-bullseye.yaml (100%)
 rename image/{ => debian11}/grid5000/steps/aliases/defaults.yaml (100%)
 rename image/{ => 
debian11}/grid5000/steps/bootstrap/debian/prepare_autoinstall.yaml (100%)
 rename image/{ => debian11}/grid5000/steps/bootstrap/download_installer.yaml 
(100%)
 rename image/{ => debian11}/grid5000/steps/bootstrap/prepare_appliance.yaml 
(100%)
 rename image/{ => debian11}/grid5000/steps/bootstrap/prepare_disk.yaml (100%)
 rename image/{ => 
debian11}/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml (100%)
 rename image/{ => debian11}/grid5000/steps/bootstrap/start_http_server.yaml 
(100%)
 rename image/{ => debian11}/grid5000/steps/bootstrap/start_qemu.yaml (100%)
 rename image/{ => debian11}/grid5000/steps/checkpoints/simple.yaml (100%)
 rename image/{ => debian11}/grid5000/steps/data/helpers/export_appliance.py 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/helpers/netinstall_iso_finder.py (100%)
 rename image/{ => debian11}/grid5000/steps/data/helpers/simple_http_server.py 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/preseed/debian-bullseye-preseed.cfg (100%)
 rename image/{ => debian11}/grid5000/steps/data/qemu-sendkeys.rb (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/qemu-sendkeys/netinst-iso-debian (100%)
 rename image/{ => debian11}/grid5000/steps/data/setup/hiera/hiera.yaml (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/hiera/hieradata/defaults.yaml (100%)
 rename image/{ => debian11}/grid5000/steps/data/setup/puppet/manifests/base.pp 
(100%)
 rename image/{ => debian11}/grid5000/steps/data/setup/puppet/manifests/big.pp 
(100%)
 rename image/{ => debian11}/grid5000/steps/data/setup/puppet/manifests/min.pp 
(100%)
 rename image/{ => debian11}/grid5000/steps/data/setup/puppet/manifests/nfs.pp 
(100%)
 rename image/{ => debian11}/grid5000/steps/data/setup/puppet/manifests/std.pp 
(100%)
 rename image/{ => debian11}/grid5000/steps/data/setup/puppet/manifests/xen.pp 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/cpufreq/cpufrequtils
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/ganglia/gmond.conf
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/90-ib.rules
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openib.conf
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd.service
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/kexec/kexec 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/mx/ip_over_mx 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/ndctl/ndctl.preset
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/sshfs/40-fuse.rules
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/limits-grid5000.conf
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/sysctl-00-grid5000.conf
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/base/userns/sysctl-00-userns.conf
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/amd_gpu/70-amdgpu.rules
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/60-qemu-system.rules
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/create_tap 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/random_mac 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/sudoers 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/85-mic.rules
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/fstab 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mic0.filelist
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mpss (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/cuda.conf
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/dcgm-exporter.service
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/ganglia-monitor.service
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/modpython-nvidia.conf
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-persistenced.service
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-smi.service
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/apt/grid5000-archive-key.asc
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/amd64-microcode
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/intel-microcode
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/git_tag
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/postinst
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale.gen
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/network/g5k-update-host-name
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/min/network/hosts 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ca2019.grid5000.fr.cert
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-auth
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-password
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ldap.conf 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/libnss-ldap.conf
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nscd.conf 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nslcd.conf
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nsswitch.conf
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/55-openiscsi.rules
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/iscsidev.sh
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend.service
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager.service
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/lib/g5k-manager.rb
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k_generator/g5k_generator
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/g5kchecks/g5k-checks.conf
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/lvm/lvm.conf 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables.stretch
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/rsyslog.conf
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/syslog_iptables.conf
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig.service
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/batch_job_bashrc
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/etc/security/access.conf
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node-service
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node.service.override
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar_sshclient_config
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/var/lib/oar/access.conf
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k.pub
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/version (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa.pub 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/random_mac 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k.service
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xend-config.sxp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/lib/facter/installed_kernelreleases.rb
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base.pp (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/add_ca_grid5000.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_dhclient.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_ip_over_infiniband.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_kexec.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_omnipath.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_ndctl_monitor.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_nvme_multipath.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/do_not_clean_tmp.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_cpufreq_with_performance_governor.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_userns.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/increase_ssh_maxstartups.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/install_and_disable_ganglia.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/tcp_tuning_for_10gbe.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/base/unlimited_memlock_for_infiniband.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big.pp (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_amd_gpu.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_initramfs.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_kvm.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/cuda.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/drivers.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/ganglia.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/modules.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/prometheus.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/services.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_postfix.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_sshfs.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_beegfs.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_g5k_jupyterlab.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_openmpi.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_prometheus_exporters.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_smartd.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_snmp_tools.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/big/prepare_kernel_module_build.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/common/apt_pinning.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/common/g5kpackages.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/common/software_versions.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/commonpackages.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/init.pp (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min.pp (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/add_image_version_in_etc.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_kernel_and_blacklist_some_modules.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_network_and_install_drivers.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/generate_etc_motd.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_locales.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_ssh.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_cpu_microcode.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_metapackage.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_tgz_g5k.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/initramfs.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/modules.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/remove_old.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/setup_links.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_root_password.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_timezone_to_europe_paris.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs.pp (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_iscsi.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ldap.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_module_path.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ntp.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_nfs_requirements.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_osirim_requirements.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_storage5k_requirements.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std.pp (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/add_g5kcode_to_path.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kdiskmanagerbackend.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kmanager.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kpmemmanager.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_oar_client.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_rsyslog_remote.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell.pp 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell/params.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/disable_lvm_pvscan.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/g5k_generator.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5kchecks.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5ksubnets.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_hwraid_apt_source.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_kameleon.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_libguestfs_backport.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_megacli.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_sudog5k.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/ipmitool.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/std/nvidia_reset_mig.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/xen.pp (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/configure_xen.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/install_grub.pp
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/templates/base/omnipath/scibian.key.erb
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/templates/common/apt_pinning.erb
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/templates/min/motd.erb 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ldap/common-account.erb
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ntp/ntp.conf.erb
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/templates/std/dell/linux.dell.com.key.erb
 (100%)
 rename image/{ => 
debian11}/grid5000/steps/data/setup/puppet/modules/env/templates/std/hwraid/hwraid.le-vert.net.key.erb
 (100%)
 rename image/{ => debian11}/grid5000/steps/disable_checkpoint.yaml (100%)
 rename image/{ => debian11}/grid5000/steps/enable_checkpoint.yaml (100%)
 rename image/{ => debian11}/grid5000/steps/env/bashrc (100%)
 rename image/{ => debian11}/grid5000/steps/env/functions.sh (100%)
 rename image/{ => 
debian11}/grid5000/steps/export/debian/clean_dhcp_leases.yaml (100%)
 rename image/{ => debian11}/grid5000/steps/export/do_qcow2_finish_works.yaml 
(100%)
 rename image/{ => debian11}/grid5000/steps/export/export_g5k.yaml (100%)
 rename image/{ => debian11}/grid5000/steps/export/save_appliance_VM.yaml (100%)
 rename image/{ => debian11}/grid5000/steps/setup/debian/clean_system.yaml 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/setup/debian/configure_apt_sources.yaml (100%)
 rename image/{ => debian11}/grid5000/steps/setup/debian/configure_system.yaml 
(100%)
 rename image/{ => debian11}/grid5000/steps/setup/debian/install_packages.yaml 
(100%)
 rename image/{ => debian11}/grid5000/steps/setup/debian/minimal_install.yaml 
(100%)
 rename image/{ => debian11}/grid5000/steps/setup/debian/run_orchestrator.yaml 
(100%)
 rename image/{ => 
debian11}/grid5000/steps/setup/debian/setup_orchestrator.yaml (100%)
 rename image/{ => debian11}/taler-debian11.yaml (80%)
 delete mode 100644 notes.txt

diff --git a/.gitignore b/.gitignore
index 4c49bd7..19ace02 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 .env
+.swp
diff --git a/README.md b/README.md
index 3f170a0..6846a17 100644
--- a/README.md
+++ b/README.md
@@ -32,16 +32,19 @@ data of experiments.
 ### Configs
 
 Contains the configurations for the applications in the environment.
-They will be adjusted copied to '/' (some make sure to add the correct 
directory strucutre) 
-once an experiment is started.
+They will be adjusted copied to '/' once an experiment is started
+(make sure that they match the images directory structure).
+
+**NOTE**: Postgres configuration is located in 
`experiment/script/database[-centos].sh`
+          and not in `configs`
 
 ## Quick Start
 
-To run an experiment, you must
+To run an experiment, you need to
 
 * (optionally) have a grafana instance
 * Make sure the environment exists in the public direcory which is configured 
in 
   `experiment/taler.rspec`. If its not in the grid, use `image/README.md` or 
`docker/README.md`
   to see how to build such an environment.
-* Read `experiment/README.md` for instructions on how to run an experiment 
inside the grid 
+* Read `experiment/README.md` for instructions on how to run an experiment on 
Grid'5000. 
   
diff --git a/additional/.gitignore b/additional/.gitignore
index 2af3b6f..675830d 100644
--- a/additional/.gitignore
+++ b/additional/.gitignore
@@ -1,2 +1,3 @@
 plotter
-*.tar.gz
+*.tar*
+*.log
diff --git a/additional/README.md b/additional/README.md
index 25919f3..7739f9e 100644
--- a/additional/README.md
+++ b/additional/README.md
@@ -1,5 +1,22 @@
 # Additional Resources for Experiments
 
+## persist.sh
+
+Backup Grid'5000 shares which were created by an experiment.
+Contains all logs and the node configuration.
+
+Simply use with: 
+
+```bash
+./persist.sh -b <BACKUP_NAME> <OPTIONAL_PLOT_ARCHIVE_TO_INCLUDE>`.
+```
+
+Once the backup succeeded it is a good idea to delete the remaining data on 
the NFS:
+
+```bash
+./persist.sh -d
+```
+
 ## plots
 
 ### plot.sh
@@ -26,11 +43,33 @@ Basically the steps are the following (inside plots 
directory):
   in the archive which is created once the plots are finished.
   Default is `TO`.
 
+## explain-visualizer
+
+A python script which is able to execute and and summarize an SQL query against
+an exchange database. It is able to execute statements provided as argument 
but also
+directly from postgres logs. In order for the logs be recognizable the 
following must
+be configured in `postgresql.conf`:
+
+* `log_statement=all`
+* `log_error_verbosity=default`
+* `syslog_split_messages=off`
+
+Make sure that syslog is capable to receive bigger messages (e.g. 
`$MaxMessageSize` in rsyslog).
+
+There is also a `docker-compose` which can be used to easily spawn a database 
automatically applying
+the dump from the experiment database. To do so run the following steps (in 
its directory):
+
+* `export DUMP_FILE=<absolute-or-relative-path-to-dump>`
+* `docker-compose up -d`
+* `./explain.py logs -U taler -d taler -H localhost <log-file>`
+
 ## grafana
 
+Dashboard json files to upload to grafana - also needed for experiment 
recovery.
+
 ### Custom
 
-Contains all *custom* dashboards for the experiments. 
+Contains all *custom* (and downloaded library) dashboards for the experiments. 
 Import them vie `Create->Import->Upload JSON` (plus sign) 
 
 The database dashboard is a combination of the following two (plus some custom 
custom panels):
@@ -40,10 +79,19 @@ The database dashboard is a combination of the following 
two (plus some custom c
 
 ### Library
 
-Additional ones needed can be imported from the library.
+Additional ones needed can be imported from the library (or as described 
above).
 In your Grafana instance head to `Create->Import->Import via grafana.com` 
 and copy those ID one after another:
 
 * [Node Exporter Full](https://grafana.com/grafana/dashboards/1860): 1860
 * [Nginx Exporter](https://grafana.com/grafana/dashboards/12708): 12708
 
+## rspecs
+
+Contains various kinds of rpsec files which can be used with jFed. The main 
files
+can be found in `../experiment`.
+
+## recover
+
+Docker setup to recreate the Grafana dashboards of a past experiment. Please 
refer
+to `recover/README.md` for usage information.
diff --git a/additional/explain-visualizer/.gitignore 
b/additional/explain-visualizer/.gitignore
new file mode 100644
index 0000000..8963ec6
--- /dev/null
+++ b/additional/explain-visualizer/.gitignore
@@ -0,0 +1,4 @@
+!*.py
+!*.gitignore
+!*.yaml
+*
diff --git a/additional/explain-visualizer/docker-compose.yaml 
b/additional/explain-visualizer/docker-compose.yaml
new file mode 100644
index 0000000..7c74fef
--- /dev/null
+++ b/additional/explain-visualizer/docker-compose.yaml
@@ -0,0 +1,15 @@
+version: "3.5"
+
+services:
+
+  taler-exchange:
+    image: postgres:13-alpine
+    ports:
+      - 5432:5432
+    environment:
+      POSTGRES_DB: taler
+      POSTGRES_USER: taler
+      POSTGRES_PASSWORD: taler
+      POSTGRES_HOST_AUTH_METHOD: trust
+    volumes:
+      - ${DUMP_FILE}:/docker-entrypoint-initdb.d/00-dump.sql:ro
diff --git a/additional/explain-visualizer/explain.py 
b/additional/explain-visualizer/explain.py
new file mode 100755
index 0000000..e201c50
--- /dev/null
+++ b/additional/explain-visualizer/explain.py
@@ -0,0 +1,554 @@
+#!/usr/bin/env python3
+# Script to analyze the queries executed against the taler-exchange db
+
+from json import loads
+from re import compile, sub, escape
+from subprocess import check_output, CalledProcessError, STDOUT
+from enum import Enum
+from textwrap import fill
+import argparse
+from datetime import datetime
+from os import mkdir, path
+import sys
+
+try:
+    import sqlparse
+    have_sqlparse = True
+except ImportError:
+    have_sqlparse = False
+    print("NOTE: install sqlparse to get prettier sql statements")
+
+
+class Type(Enum):
+    RELATION = 0
+    MODIFY = 1
+    OTHER = 2
+
+
+class Plan:
+    def __init__(self, name: str, _type: Type, indent: int):
+        self.name = name
+        self.partitions_hit = 0
+        self.would_have_hit_partitions = 0
+        self.rows_estimated = 0
+        self.rows_returned = 0
+        self.time_spent = 0
+        self.scan_type = ""
+        self.used_index = ""
+        self.condition = ""
+        self.type = _type
+        self.operation = ""
+        self.tuples_inserted = 0
+        self.tuples_conflicting = 0
+        self.indent = " " * indent
+
+    def print(self):
+        if self.type == Type.RELATION:
+            self._print_relation()
+        elif self.type == Type.MODIFY:
+            self._print_modify()
+        elif self.type == Type.OTHER:
+            self._print_other()
+
+    def _print_relation(self):
+        print(self.indent + self.name + ":\n")
+        if self.partitions_hit == 0:
+            print(self.indent + f"    Not touched")
+            print(self.indent + f"    Partitions would be Hit: 
{self.would_have_hit_partitions}")
+        else:
+            print(self.indent + f"    Partitions Hit: {self.partitions_hit}")
+            print(self.indent + f"    Time Spent:     {self.time_spent} ms")
+            print(self.indent + f"    Rows Estimated: {self.rows_estimated}")
+            print(self.indent + f"    Rows Returned:  {self.rows_returned}")
+            print(self.indent + f"    Scan Method:    {self.scan_type}")
+        if self.scan_type == 'Index Scan':
+            print(self.indent + f"    Index Used: {self.used_index}")
+        print("")
+
+    def _print_other(self):
+        print(self.indent + f"{self.name}:")
+        print("")
+
+    def _print_modify(self):
+        print(self.indent + f"{self.name}:\n")
+        print(self.indent + f"  Operation:         {self.operation}")
+        print(self.indent + f"  Tuples Inserted:   {self.tuples_inserted}")
+        if self.tuples_conflicting != 0:
+          print(self.indent + f"  Tuples Conflicting: 
{self.tuples_conflicting}")
+        print("")
+
+
+# All plans from a single analyze will be stored here
+plans = {}
+
+# The plan which was the most time consuming 
+most_time_consuming = Plan("default", Type.RELATION, 0)
+
+# Regex which strips the partition number from a partition
+# Must be either of the suffixes: _<N> or _default
+partitioned_re = compile('.*_([0-9]+|default)')
+
+# Regexes which will be compiled at start when the identifier of the
+# log lines is set via cli arguments
+log_statement_re = None
+log_execute_re = None
+log_get_params_re = None
+
+# Command line arguments
+args = None
+
+# In which directories to store the current analyzation
+output_dir = None
+
+# Number of queries analyzed
+queries = 0
+
+def print_query(sql):
+    """
+    Print an sql query to stdout
+    """
+    print("\n" + "=" * 80 + "\n")
+    if have_sqlparse:
+        print(sqlparse.format(sql, 
+                              reindent=True, 
+                              keyword_case='upper', 
+                              wrap_after=80))
+    else:
+        print(fill(text=sql, width=80))
+    print("\n" + "=" * 80 + "\n")
+
+
+def get_explain(sql) -> dict:
+    """
+    Execute EXPLAIN ANALYZE against the database, returns the plan as JSON 
dictonary
+    """
+    sql = sql.replace("\n", " ").replace('"', "")
+    sql = "EXPLAIN (ANALYZE, VERBOSE, BUFFERS, FORMAT JSON) " + sql + ";"
+    try:
+        analyze_json = check_output(
+                args=['psql',
+                      '-U', args.db_user,
+                      '-h', args.db_host,
+                      '-d', args.db_name,
+                      '-p', args.db_port,
+                      '-P', 'pager=off',
+                      '-qtAXc', sql],
+                env={'PGPASSWD': args.db_pw},
+                timeout=10,
+                stderr=STDOUT
+        )
+        return loads(analyze_json)[0]
+    except CalledProcessError as e:
+        if not args.ignore:
+            print(e.output.decode('utf-8'), file=sys.stderr)
+            print("\nQuery returned an error, aborting\n", file=sys.stderr)
+            exit(1)
+
+
+def setup_log_regex():
+    """
+    Compile the regular expressions used to identify statements in the logs
+    Must be called only then log_id is configured in args
+    """
+    global log_statement_re, log_execute_re, log_get_params_re
+    log_statement_re = compile(f'.*{args.log_id} LOG:  statement: 
((?!COMMIT)(?!BEGIN)(?!SET)(?!START).*);')
+    log_execute_re = compile(f'.*{args.log_id} LOG:  execute ([a-zA-Z0-9_]+): 
((?!COMMIT)(?!BEGIN)(?!SET)(?!START)[^#]+)(?:#.*DETAIL:  parameters: (.*))?')
+    log_get_params_re = compile('(\$\d+)+ = ([^, ]+)')
+
+
+def ensure_relation_added(relation, indent):
+    """
+    Ensure that a relation is added in the plans dictionary
+    """
+    if relation not in plans:
+        plans[relation] = Plan(relation, Type.RELATION, indent)
+
+def ensure_plan_added(plan, indent):
+    """
+    Ensure an uncategorized plan is added in the plans dictionary
+    """
+    idx = plan + str(indent)
+    plans[idx] = Plan(plan, Type.OTHER, indent)
+
+
+def ensure_modify_added(plan, indent):
+    """
+    Ensure a plan with type 'ModifyTable' is in the plans dictionary
+    """
+    idx = plan['Relation Name']
+    p = Plan(plan['Relation Name'], Type.MODIFY, indent)
+    p.operation = plan['Operation']
+    p.time_spent = plan['Actual Total Time']
+    if 'Tuples Inserted' in plan:
+      p.tuples_inserted = plan['Tuples Inserted']
+      p.tuples_conflicting = plan['Conflicting Tuples']
+    plans[idx] = p
+
+
+def check_most_expensive_time(plan: Plan):
+    """
+    Check and update the most expensive relation scan
+    """
+    global most_time_consuming
+    if most_time_consuming.time_spent < plan.time_spent:
+        most_time_consuming = plan
+
+
+def parse_scan(plan, indent):
+    """
+    Parse a JSON plan which scans a relation (not CTE Scans)
+    """
+    relation = plan['Relation Name']
+
+    # Remove partition suffix as we do not want each partition, 
+    # but only the relation shown
+    if partitioned_re.match(relation):
+        relation = relation.split('_')[0:-1]
+        relation = "_".join(relation)
+
+    ensure_relation_added(relation, indent)
+    _plan = plans[relation]
+
+    if plan['Actual Loops'] > 0:
+        _plan.partitions_hit += 1
+        _plan.time_spent += (plan['Actual Total Time'] * plan['Actual Loops'])
+        _plan.rows_estimated += plan['Plan Rows']
+        _plan.rows_returned += plan['Actual Rows']
+        check_most_expensive_time(_plan)
+    else:
+        _plan.would_have_hit_partitions += 1
+
+    if _plan.scan_type == "":
+        _plan.scan_type = plan['Node Type']
+        if _plan.scan_type == 'Index Scan':
+            _plan.used_index = plan['Index Name']
+
+
+def iterate_plans():
+    """
+    Iterate the plans dict and return each plan
+    """
+    for plan in plans:
+        yield plans[plan]
+
+
+def parse_plan(plan, indent=2):
+    """
+    Parse the JSON plan returned from EXPLAIN (ANALYZE, BUFFERS, VERBOSE 
FORMAT JSON)
+    """
+    if plan['Node Type'] == 'Function Scan':
+        ensure_plan_added(plan['Node Type'], indent)
+    elif 'Scan' in plan['Node Type'] and 'CTE' not in plan['Node Type']:
+        parse_scan(plan, indent + 2)
+    elif plan['Node Type'] == 'ModifyTable':
+        if plan['Operation'] == 'Insert':
+            ensure_modify_added(plan, indent)
+        elif plan['Operation'] == 'Update':
+            for _plan in plan['Plans']:
+                parse_plan(_plan, indent+2)
+    elif 'Plans' in plan:
+        ensure_plan_added(plan['Node Type'], indent)
+        for _plan in plan['Plans']:
+            parse_plan(_plan, indent + 2)
+
+
+def print_summary_and_get_total(attr_name) -> int:
+    """
+    Print a summary of the attribute with attr_name of the Plan class and 
return the total
+    """
+    total = 0
+    for plan in iterate_plans():
+        if plan.type == Type.RELATION:
+            attr = getattr(plan, attr_name)
+            total += attr
+            print("  {:<25} {:>10}".format(plan.name + ":", attr))
+    print(f"\n  (Total: {total})")
+    return total
+
+
+def print_and_get_non_indexed() -> int:
+    """
+    Print all non indexed scans and return the total amount
+    """
+    total = 0
+    for plan in iterate_plans():
+        if plan.scan_type == 'Seq Scan':
+            print(f"  {plan.name}")
+            total += 1
+    print(f"\n  (Total: {total})")
+    return total
+
+
+def parse_visualize_and_get_summary(analyze_json) -> str:
+    """
+    Parse and visualize a json plan returned from EXPLAIN (ANALYZE, BUFFERS, 
VERBOSE, FORMAT JSON)
+    Returns a string with the summary (time, actual rows, sub partition rows, 
partitions hit, non indexed scans)
+    """
+    if analyze_json is None:
+        return
+
+    plan = analyze_json['Plan']
+    if 'JIT' in analyze_json:
+        time = analyze_json['JIT']['Timing']['Total']
+    else:
+        time = analyze_json['Execution Time']
+
+    print("GENERAL:\n")
+    print("  {:<25} {:>10}".format("Estimated Rows:", plan['Plan Rows']))
+    print("  {:<25} {:>10}".format("Actual Rows Returned:", plan['Actual 
Rows']))
+    print("  {:<25} {:>10} ms".format("Actual Execution Time:", time))
+
+    parse_plan(plan)
+
+    print("\n\nSUMMARY: \n")
+    print(f"Rows Returned by Sub-queries:")
+    print("-----------------------------\n")
+    total_sub_rows = print_summary_and_get_total('rows_returned')
+    print("\nPartitions Hit:")
+    print("---------------\n")
+    total_partitions_hit = print_summary_and_get_total('partitions_hit')
+    print("\nPartitions Hit on full Execution (will be hit if filters match):")
+    print("---------------\n")
+    total_possible_hits = 
print_summary_and_get_total('would_have_hit_partitions')
+    print("\nNon Indexed Scans on:")
+    print("---------------------\n")
+    total_non_indexed_scans = print_and_get_non_indexed()
+    print("\nMost Time Consuming:")
+    print("--------------------\n")
+    print("  {:<25} {:>10} ms".format(
+        most_time_consuming.name + ":", 
+        most_time_consuming.time_spent)
+    )
+    print("")
+
+    if args.verbose:
+        print("\nDETAIL:\n")
+        for p in iterate_plans():
+            p.print()
+    print("")
+
+    return "{:<10} {:<10} {:<10} {:<10} {:<10}".format(
+      time,
+      plan['Actual Rows'],
+      total_sub_rows,
+      str(total_partitions_hit)+" ("+str(total_possible_hits)+")",
+      total_non_indexed_scans
+    )
+
+
+def handle_query():
+    """
+    Handle and explain analyze a query passed as argument
+    """
+    explain = get_explain(args.sql)
+    print_query(args.sql)
+    parse_visualize_and_get_summary(explain)
+
+
+def analyze_log_query(name, sql):
+    """
+    Analyze a statement extracted from the logs
+    """
+    # reset global plans
+    global plans, most_time_consuming, queries
+
+    summary = None
+    plans = {}
+    most_time_consuming = Plan("default", Type.RELATION, 0)
+
+    name = str(queries) + "_" + name
+
+    # save the original stdout that it can be reassigned later
+    orig_stdout = sys.stdout
+
+    if explain := get_explain(sql):
+        with open(path.join(output_dir, name + ".txt"), "w+") as of:
+            # Override default stdout so we can simply print in the functions
+            sys.stdout = of
+            print_query(sql)
+            summary = parse_visualize_and_get_summary(explain)
+
+    sys.stdout = orig_stdout
+
+    if summary is None:
+        summary = "error, ignored"
+
+    # Still print, even if failed so we got the same amount each time
+    print("{:<40} {}".format(name, summary))
+    queries = queries + 1
+
+
+def handle_log_statement(match):
+    """
+    Handle a log line which begins with statement:
+    """
+    statement = match.group(1)
+    analyze_log_query("direct", statement)
+    
+
+def handle_log_execute(match):
+    """
+    Handle a log line which begins with execute:
+    This method will replace all parameters in the statement which are found 
in `parameters:'
+    """
+    params = None
+    name = match.group(1)
+    statement = match.group(2)
+ 
+    if '$' in statement:
+        _parameters = match.group(3)
+ 
+        if not _parameters:
+            print_query(statement)
+            err = "ERROR: Could not find query parameters\n" \
+                  "Make sure to set the following in postgres.conf before 
collecting logs:\n\n" \
+                  "  'log_statement=all'\n" \
+                  "  'syslog_split_messages=off'\n" \
+                  "  'log_error_verbosity=default'\n"
+            print(err, file=sys.stderr)
+            exit(1)
+
+        params = log_get_params_re.findall(_parameters)
+ 
+        for param in params:
+            statement = sub(escape(param[0]) + r'\b', 
+                            escape(param[1]), 
+                            statement)
+
+    analyze_log_query(name, statement)
+
+
+def create_output_dir(basename):
+    """
+    Create the directory in which all current analyzes will be written to
+    """
+    global output_dir
+    dirname = basename + "-" + str(round(datetime.now().timestamp()))
+    output_dir = dirname
+    try:
+        mkdir(dirname)
+    except OSError as e:
+        print("ERROR: could not create directory: " + e, file=sys.stderr)
+        exit(1)
+
+
+def handle_logs():
+    """
+    Parse a log file and explain analyze all statements found matching the 
log_id.
+    The script expects all parameters and the whole statement in one log line.
+    Thus the following parameters must be set in postgres.conf:
+      log_statement=all
+      syslog_split_messages=off
+      log_error_verbosity=default
+    (Syslog must be able to handle large messages)
+    """
+    logs = None
+
+    create_output_dir(path.splitext(path.basename(args.file))[0])
+
+    # Needs to be called here since log_id is not set previously
+    setup_log_regex()
+
+    try:
+        logs = open(args.file, 'r')
+    except IOError as e:
+        print(f"Error: cannot open file {args.file}")
+        print(e.strerror)
+        exit(1)
+
+    print("{:40} {:<10} {:<10} {:<10} {:<10} {:<10}".format(
+        "name",
+        "t (ms)",
+        "act-rws",
+        "sub-q-rws",
+        "prts",
+        "n-idx"
+    ))
+
+    for line in logs.readlines():
+
+        if match := log_statement_re.match(line):
+            handle_log_statement(match)
+
+        elif match := log_execute_re.match(line):
+            handle_log_execute(match)
+
+    logs.close()
+    print(f"\nINFO: detailed ouptut written to 
{output_dir}/N_statement_name.txt")
+
+
+def main():
+    parser = argparse.ArgumentParser(description='Summarize Explain Analyze of 
GNU Taler Database')
+
+    global_args = argparse.ArgumentParser(add_help=False)
+    global_args.add_argument('-U', '--user',
+                             dest='db_user',
+                             type=str,
+                             default="",
+                             help='Database user, default current user')
+    global_args.add_argument('-P', '--password',
+                             dest='db_pw',
+                             type=str,
+                             default="",
+                             help='Database password, default ""')
+    global_args.add_argument('-H', '--host',
+                             dest='db_host',
+                             type=str,
+                             default="",
+                             help='Database host, default unix socket')
+    global_args.add_argument('-d', '--database',
+                             dest='db_name',
+                             type=str,
+                             default="",
+                             help='Database name, default current user')
+    global_args.add_argument('-p', '--port',
+                             dest='db_port',
+                             type=str,
+                             default="",
+                             help='Database port, default 5432')
+    global_args.add_argument('-v', '--verbose',
+                             dest='verbose',
+                             action='store_true',
+                             help='Print detailed query plan')
+    global_args.add_argument('-i', '--ignore-errors',
+                             dest='ignore',
+                             action='store_true',
+                             help='Continue when an SQL error occurs')
+
+    s_p = parser.add_subparsers()
+
+    log_p = s_p.add_parser('logs',  
+                           parents=[global_args],
+                           help='Execute queries from a log file (postgres 
must have set log_statement=all).')
+    log_p.add_argument('-l', '--log-identifier',
+                       dest='log_id',
+                       type=str,
+                       default="taler@taler-exchange",
+                       help='Identifier (user@db_name) to filter which 
statements from the logs to analyze (taler@taler-exchange)')
+    log_p.add_argument(metavar='FILE',
+                       dest='file',
+                       type=str,
+                       help='Log file to parse and execute queries')
+    log_p.set_defaults(func=handle_logs)
+
+    sql_p = s_p.add_parser('query',
+                           parents=[global_args],
+                           help='Execute a specified query')
+    sql_p.add_argument(metavar='SQL',
+                       dest='sql',
+                       type=str,
+                       help='The query to run and analyze')
+    sql_p.set_defaults(func=handle_query)
+
+    global args
+    args = parser.parse_args()
+    
+    try:
+        args.func()
+    except:
+        parser.print_help()
+        parser.exit()
+
+
+if __name__ == '__main__':
+    main()
diff --git a/additional/grafana/database.json b/additional/grafana/database.json
index aea6845..1d3140a 100644
--- a/additional/grafana/database.json
+++ b/additional/grafana/database.json
@@ -7,29 +7,15 @@
       "type": "datasource",
       "pluginId": "prometheus",
       "pluginName": "Prometheus"
-    },
-    {
-      "name": "DS_LOKI",
-      "label": "Loki",
-      "description": "",
-      "type": "datasource",
-      "pluginId": "loki",
-      "pluginName": "Loki"
     }
   ],
   "__elements": [],
   "__requires": [
-    {
-      "type": "panel",
-      "id": "bargauge",
-      "name": "Bar gauge",
-      "version": ""
-    },
     {
       "type": "grafana",
       "id": "grafana",
       "name": "Grafana",
-      "version": "8.3.2"
+      "version": "8.4.3"
     },
     {
       "type": "panel",
@@ -37,12 +23,6 @@
       "name": "Graph (old)",
       "version": ""
     },
-    {
-      "type": "datasource",
-      "id": "loki",
-      "name": "Loki",
-      "version": "1.0.0"
-    },
     {
       "type": "datasource",
       "id": "prometheus",
@@ -55,12 +35,6 @@
       "name": "Stat",
       "version": ""
     },
-    {
-      "type": "panel",
-      "id": "table",
-      "name": "Table",
-      "version": ""
-    },
     {
       "type": "panel",
       "id": "timeseries",
@@ -93,7 +67,7 @@
   "gnetId": 6742,
   "graphTooltip": 1,
   "id": null,
-  "iteration": 1639595639929,
+  "iteration": 1649441739195,
   "links": [],
   "liveNow": false,
   "panels": [
@@ -169,7 +143,7 @@
         "text": {},
         "textMode": "name"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
@@ -247,7 +221,7 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
@@ -325,7 +299,7 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
@@ -403,7 +377,7 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
@@ -481,7 +455,7 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
@@ -559,7 +533,7 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
@@ -638,7 +612,7 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
@@ -717,7 +691,7 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
@@ -795,7 +769,7 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
@@ -873,7 +847,7 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
@@ -951,7 +925,7 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
@@ -1007,567 +981,18 @@
       },
       "gridPos": {
         "h": 3,
-        "w": 3,
-        "x": 9,
-        "y": 4
-      },
-      "id": 68,
-      "links": [],
-      "maxDataPoints": 100,
-      "options": {
-        "colorMode": "none",
-        "graphMode": "none",
-        "justifyMode": "auto",
-        "orientation": "horizontal",
-        "reduceOptions": {
-          "calcs": [
-            "lastNotNull"
-          ],
-          "fields": "",
-          "values": false
-        },
-        "text": {},
-        "textMode": "auto"
-      },
-      "pluginVersion": "8.3.2",
-      "targets": [
-        {
-          "exemplar": true,
-          "expr": "pg_settings_max_parallel_workers{instance=\"$instance\", 
server=\"$server\"}",
-          "format": "time_series",
-          "instant": true,
-          "interval": "",
-          "intervalFactor": 1,
-          "legendFormat": "",
-          "refId": "A"
-        }
-      ],
-      "title": "Max Parallel Workers",
-      "type": "stat"
-    },
-    {
-      "description": "",
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "fixedColor": "text",
-            "mode": "fixed"
-          },
-          "mappings": [],
-          "min": 13,
-          "thresholds": {
-            "mode": "absolute",
-            "steps": [
-              {
-                "color": "green",
-                "value": null
-              }
-            ]
-          },
-          "unit": "none"
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 3,
-        "w": 3,
-        "x": 12,
-        "y": 4
-      },
-      "id": 83,
-      "options": {
-        "colorMode": "value",
-        "graphMode": "none",
-        "justifyMode": "auto",
-        "orientation": "auto",
-        "reduceOptions": {
-          "calcs": [
-            "lastNotNull"
-          ],
-          "fields": "",
-          "values": false
-        },
-        "text": {},
-        "textMode": "auto"
-      },
-      "pluginVersion": "8.3.2",
-      "targets": [
-        {
-          "exemplar": true,
-          "expr": 
"pg_settings_max_locks_per_transaction{instance=\"$instance\", 
server=\"$server\"}",
-          "instant": true,
-          "interval": "",
-          "legendFormat": "",
-          "refId": "A"
-        }
-      ],
-      "title": "Max Locks per Transaction",
-      "type": "stat"
-    },
-    {
-      "description": "",
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "fixedColor": "text",
-            "mode": "fixed"
-          },
-          "mappings": [],
-          "thresholds": {
-            "mode": "absolute",
-            "steps": [
-              {
-                "color": "green",
-                "value": null
-              }
-            ]
-          },
-          "unit": "s"
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 3,
-        "w": 3,
-        "x": 15,
-        "y": 4
-      },
-      "id": 82,
-      "options": {
-        "colorMode": "value",
-        "graphMode": "none",
-        "justifyMode": "auto",
-        "orientation": "auto",
-        "reduceOptions": {
-          "calcs": [
-            "lastNotNull"
-          ],
-          "fields": "",
-          "values": false
-        },
-        "text": {},
-        "textMode": "auto"
-      },
-      "pluginVersion": "8.3.2",
-      "targets": [
-        {
-          "exemplar": true,
-          "expr": 
"pg_settings_log_min_duration_statement_seconds{instance=\"$instance\", 
server=\"$server\"}",
-          "instant": true,
-          "interval": "",
-          "legendFormat": "",
-          "refId": "A"
-        }
-      ],
-      "title": "Log Min Duration Statement",
-      "type": "stat"
-    },
-    {
-      "description": "",
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "fixedColor": "text",
-            "mode": "fixed"
-          },
-          "mappings": [],
-          "thresholds": {
-            "mode": "absolute",
-            "steps": [
-              {
-                "color": "green",
-                "value": null
-              }
-            ]
-          },
-          "unit": "s"
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 3,
-        "w": 3,
-        "x": 18,
-        "y": 4
-      },
-      "id": 90,
-      "options": {
-        "colorMode": "value",
-        "graphMode": "none",
-        "justifyMode": "auto",
-        "orientation": "auto",
-        "reduceOptions": {
-          "calcs": [
-            "lastNotNull"
-          ],
-          "fields": "",
-          "values": false
-        },
-        "text": {},
-        "textMode": "auto"
-      },
-      "pluginVersion": "8.3.2",
-      "targets": [
-        {
-          "exemplar": true,
-          "expr": 
"pg_settings_auto_explain_log_min_duration_seconds{instance=\"$instance\", 
server=\"$server\"}",
-          "instant": true,
-          "interval": "",
-          "legendFormat": "",
-          "refId": "A"
-        }
-      ],
-      "title": "Auto Explain Log Min Duration",
-      "type": "stat"
-    },
-    {
-      "datasource": {
-        "type": "prometheus",
-        "uid": "${DS_PROMETHEUS}"
-      },
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "mode": "thresholds"
-          },
-          "decimals": 1,
-          "mappings": [
-            {
-              "options": {
-                "match": "null",
-                "result": {
-                  "index": 0,
-                  "text": "N/A"
-                }
-              },
-              "type": "special"
-            }
-          ],
-          "thresholds": {
-            "mode": "absolute",
-            "steps": [
-              {
-                "color": "green",
-                "value": null
-              }
-            ]
-          },
-          "unit": "s"
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 3,
-        "w": 3,
-        "x": 21,
-        "y": 4
-      },
-      "id": 87,
-      "links": [],
-      "maxDataPoints": 100,
-      "options": {
-        "colorMode": "none",
-        "graphMode": "none",
-        "justifyMode": "auto",
-        "orientation": "horizontal",
-        "reduceOptions": {
-          "calcs": [
-            "lastNotNull"
-          ],
-          "fields": "",
-          "values": false
-        },
-        "text": {},
-        "textMode": "auto"
-      },
-      "pluginVersion": "8.3.2",
-      "targets": [
-        {
-          "exemplar": true,
-          "expr": 
"pg_settings_idle_in_transaction_session_timeout_seconds{instance=\"$instance\",
 server=\"$server\"}",
-          "format": "time_series",
-          "instant": true,
-          "interval": "",
-          "intervalFactor": 1,
-          "legendFormat": "",
-          "refId": "A"
-        }
-      ],
-      "title": "Idle in Transaction Timeout",
-      "type": "stat"
-    },
-    {
-      "collapsed": false,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 7
-      },
-      "id": 85,
-      "panels": [],
-      "title": "Failure Statistics",
-      "type": "row"
-    },
-    {
-      "description": "Serialization Errors per Second and Request-Type",
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "mode": "palette-classic"
-          },
-          "custom": {
-            "axisLabel": "Serialization Errors / Second",
-            "axisPlacement": "auto",
-            "barAlignment": 0,
-            "drawStyle": "line",
-            "fillOpacity": 0,
-            "gradientMode": "none",
-            "hideFrom": {
-              "legend": false,
-              "tooltip": false,
-              "viz": false
-            },
-            "lineInterpolation": "linear",
-            "lineWidth": 1,
-            "pointSize": 5,
-            "scaleDistribution": {
-              "type": "linear"
-            },
-            "showPoints": "auto",
-            "spanNulls": false,
-            "stacking": {
-              "group": "A",
-              "mode": "none"
-            },
-            "thresholdsStyle": {
-              "mode": "off"
-            }
-          },
-          "mappings": [],
-          "thresholds": {
-            "mode": "absolute",
-            "steps": [
-              {
-                "color": "green",
-                "value": null
-              }
-            ]
-          },
-          "unit": "none"
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 9,
-        "w": 12,
-        "x": 0,
-        "y": 8
-      },
-      "id": 92,
-      "options": {
-        "legend": {
-          "calcs": [],
-          "displayMode": "list",
-          "placement": "bottom"
-        },
-        "tooltip": {
-          "mode": "single"
-        }
-      },
-      "pluginVersion": "8.2.5",
-      "targets": [
-        {
-          "exemplar": true,
-          "expr": "sum by (type) 
(rate(taler_exchange_serialization_failures{}[1m]))",
-          "instant": false,
-          "interval": "",
-          "legendFormat": "{{type}}",
-          "refId": "A"
-        }
-      ],
-      "title": "Serialization Errors",
-      "transformations": [],
-      "type": "timeseries"
-    },
-    {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
-      "description": "",
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "mode": "thresholds"
-          },
-          "custom": {
-            "axisLabel": "Slow Queries / Second",
-            "axisPlacement": "auto",
-            "barAlignment": 0,
-            "drawStyle": "line",
-            "fillOpacity": 19,
-            "gradientMode": "hue",
-            "hideFrom": {
-              "legend": false,
-              "tooltip": false,
-              "viz": false
-            },
-            "lineInterpolation": "smooth",
-            "lineWidth": 1,
-            "pointSize": 5,
-            "scaleDistribution": {
-              "type": "linear"
-            },
-            "showPoints": "auto",
-            "spanNulls": false,
-            "stacking": {
-              "group": "A",
-              "mode": "none"
-            },
-            "thresholdsStyle": {
-              "mode": "off"
-            }
-          },
-          "mappings": [],
-          "thresholds": {
-            "mode": "absolute",
-            "steps": [
-              {
-                "color": "green",
-                "value": null
-              },
-              {
-                "color": "#EAB839",
-                "value": 5
-              },
-              {
-                "color": "red",
-                "value": 10
-              }
-            ]
-          },
-          "unit": "SQ/s"
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 9,
-        "w": 12,
-        "x": 12,
-        "y": 8
-      },
-      "id": 97,
-      "options": {
-        "legend": {
-          "calcs": [],
-          "displayMode": "hidden",
-          "placement": "bottom"
-        },
-        "tooltip": {
-          "mode": "single"
-        }
-      },
-      "targets": [
-        {
-          "expr": "rate({app=\"taler-database\"} |~ \"duration:\" [1m])",
-          "refId": "A"
-        }
-      ],
-      "title": "Slow Queries",
-      "type": "timeseries"
-    },
-    {
-      "description": "Number of serialization errors by request endpoint 
(type) since the last exchange restarts",
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "mode": "thresholds"
-          },
-          "mappings": [],
-          "thresholds": {
-            "mode": "absolute",
-            "steps": [
-              {
-                "color": "text",
-                "value": null
-              },
-              {
-                "color": "red",
-                "value": 100
-              }
-            ]
-          }
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 9,
-        "w": 10,
-        "x": 0,
-        "y": 17
-      },
-      "id": 94,
-      "options": {
-        "displayMode": "basic",
-        "orientation": "horizontal",
-        "reduceOptions": {
-          "calcs": [
-            "lastNotNull"
-          ],
-          "fields": "",
-          "values": false
-        },
-        "showUnfilled": true,
-        "text": {}
-      },
-      "pluginVersion": "8.3.2",
-      "targets": [
-        {
-          "exemplar": true,
-          "expr": "sort_desc (sum by(type) 
(taler_exchange_serialization_failures{}))",
-          "instant": true,
-          "interval": "",
-          "legendFormat": "{{type}}",
-          "refId": "A"
-        }
-      ],
-      "title": "Serialization Errors by Request Type",
-      "transformations": [],
-      "type": "bargauge"
-    },
-    {
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "fixedColor": "text",
-            "mode": "fixed"
-          },
-          "mappings": [],
-          "thresholds": {
-            "mode": "absolute",
-            "steps": [
-              {
-                "color": "green",
-                "value": null
-              }
-            ]
-          }
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 3,
-        "w": 4,
-        "x": 10,
-        "y": 17
+        "w": 3,
+        "x": 9,
+        "y": 4
       },
-      "id": 76,
+      "id": 68,
+      "links": [],
+      "maxDataPoints": 100,
       "options": {
-        "colorMode": "value",
+        "colorMode": "none",
         "graphMode": "none",
         "justifyMode": "auto",
-        "orientation": "auto",
+        "orientation": "horizontal",
         "reduceOptions": {
           "calcs": [
             "lastNotNull"
@@ -1578,66 +1003,57 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
-          "expr": "sum(pg_stat_database_xact_commit{instance=~\"$instance\", 
server=\"$server\", datname=\"$db\"})",
+          "expr": "pg_settings_max_parallel_workers{instance=\"$instance\", 
server=\"$server\"}",
+          "format": "time_series",
           "instant": true,
           "interval": "",
+          "intervalFactor": 1,
           "legendFormat": "",
           "refId": "A"
         }
       ],
-      "title": "Count of Commited Transactions",
+      "title": "Max Parallel Workers",
       "type": "stat"
     },
     {
-      "description": "Number of serialization errors per request since the 
last exchange restarts",
+      "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
-            "mode": "thresholds"
+            "fixedColor": "text",
+            "mode": "fixed"
           },
-          "mappings": [
-            {
-              "options": {
-                "match": "nan",
-                "result": {
-                  "index": 0,
-                  "text": "-"
-                }
-              },
-              "type": "special"
-            }
-          ],
+          "mappings": [],
+          "min": 13,
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "text",
+                "color": "green",
                 "value": null
-              },
-              {
-                "color": "red",
-                "value": 2
               }
             ]
           },
-          "unit": "percentunit"
+          "unit": "none"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 9,
-        "w": 10,
-        "x": 14,
-        "y": 17
+        "h": 3,
+        "w": 3,
+        "x": 12,
+        "y": 4
       },
-      "id": 95,
+      "id": 83,
       "options": {
-        "displayMode": "basic",
-        "orientation": "horizontal",
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "auto",
         "reduceOptions": {
           "calcs": [
             "lastNotNull"
@@ -1645,25 +1061,25 @@
           "fields": "",
           "values": false
         },
-        "showUnfilled": true,
-        "text": {}
+        "text": {},
+        "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
-          "expr": "sort_desc(sum by(type) 
(rate(taler_exchange_serialization_failures{}[10m]))\n/\nsum by(type) 
(rate(taler_exchange_received_requests{}[10m])))",
+          "expr": 
"pg_settings_max_locks_per_transaction{instance=\"$instance\", 
server=\"$server\"}",
           "instant": true,
           "interval": "",
-          "legendFormat": "{{type}}",
+          "legendFormat": "",
           "refId": "A"
         }
       ],
-      "title": "Serialization Errors / Request",
-      "type": "bargauge"
+      "title": "Max Locks per Transaction",
+      "type": "stat"
     },
     {
-      "description": "Total number of serialization errors that happened since 
last exchange restarts",
+      "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
@@ -1671,7 +1087,6 @@
             "mode": "fixed"
           },
           "mappings": [],
-          "noValue": "0",
           "thresholds": {
             "mode": "absolute",
             "steps": [
@@ -1680,17 +1095,18 @@
                 "value": null
               }
             ]
-          }
+          },
+          "unit": "s"
         },
         "overrides": []
       },
       "gridPos": {
         "h": 3,
-        "w": 4,
-        "x": 10,
-        "y": 20
+        "w": 3,
+        "x": 15,
+        "y": 4
       },
-      "id": 74,
+      "id": 82,
       "options": {
         "colorMode": "value",
         "graphMode": "none",
@@ -1706,25 +1122,22 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
-          "expr": "sum(taler_exchange_serialization_failures{})",
+          "expr": 
"pg_settings_log_min_duration_statement_seconds{instance=\"$instance\", 
server=\"$server\"}",
+          "instant": true,
           "interval": "",
           "legendFormat": "",
           "refId": "A"
         }
       ],
-      "title": "Total Serialization Errors",
+      "title": "Log Min Duration Statement",
       "type": "stat"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
-      "description": "Number of queries which took longer than the configured 
duration",
+      "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
@@ -1732,7 +1145,6 @@
             "mode": "fixed"
           },
           "mappings": [],
-          "noValue": "0",
           "thresholds": {
             "mode": "absolute",
             "steps": [
@@ -1741,17 +1153,18 @@
                 "value": null
               }
             ]
-          }
+          },
+          "unit": "s"
         },
         "overrides": []
       },
       "gridPos": {
         "h": 3,
-        "w": 4,
-        "x": 10,
-        "y": 23
+        "w": 3,
+        "x": 18,
+        "y": 4
       },
-      "id": 72,
+      "id": 90,
       "options": {
         "colorMode": "value",
         "graphMode": "none",
@@ -1767,35 +1180,43 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "sum(count_over_time({app=\"taler-database\"} |~ \"duration: 
(.*) plan:\" [$__range]))",
+          "exemplar": true,
+          "expr": 
"pg_settings_auto_explain_log_min_duration_seconds{instance=\"$instance\", 
server=\"$server\"}",
           "instant": true,
-          "range": false,
+          "interval": "",
+          "legendFormat": "",
           "refId": "A"
         }
       ],
-      "title": "Total Slow Queries",
+      "title": "Auto Explain Log Min Duration",
       "type": "stat"
     },
     {
       "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
       },
-      "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
             "mode": "thresholds"
           },
-          "custom": {
-            "align": "auto",
-            "displayMode": "json-view",
-            "filterable": false
-          },
-          "mappings": [],
+          "decimals": 1,
+          "mappings": [
+            {
+              "options": {
+                "match": "null",
+                "result": {
+                  "index": 0,
+                  "text": "N/A"
+                }
+              },
+              "type": "special"
+            }
+          ],
           "thresholds": {
             "mode": "absolute",
             "steps": [
@@ -1804,103 +1225,50 @@
                 "value": null
               }
             ]
-          }
+          },
+          "unit": "s"
         },
-        "overrides": [
-          {
-            "matcher": {
-              "id": "byName",
-              "options": "Count"
-            },
-            "properties": [
-              {
-                "id": "custom.width",
-                "value": 100
-              }
-            ]
-          }
-        ]
+        "overrides": []
       },
       "gridPos": {
-        "h": 7,
-        "w": 24,
-        "x": 0,
-        "y": 26
+        "h": 3,
+        "w": 3,
+        "x": 21,
+        "y": 4
       },
-      "id": 89,
+      "id": 87,
+      "links": [],
+      "maxDataPoints": 100,
       "options": {
-        "footer": {
-          "fields": "",
-          "reducer": [
-            "sum"
+        "colorMode": "none",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
           ],
-          "show": false
+          "fields": "",
+          "values": false
         },
-        "frameIndex": 1,
-        "showHeader": true,
-        "sortBy": []
+        "text": {},
+        "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "sum by (query) (count_over_time({app=\"taler-database\"} |~ 
\"011Query Text:\" | regexp \".*011Query Text: (?P<query>.*)\" [$__range]))",
+          "exemplar": true,
+          "expr": 
"pg_settings_idle_in_transaction_session_timeout_seconds{instance=\"$instance\",
 server=\"$server\"}",
+          "format": "time_series",
           "instant": true,
-          "range": false,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
           "refId": "A"
         }
       ],
-      "title": "Slow Query Occurences",
-      "transformations": [
-        {
-          "id": "groupBy",
-          "options": {
-            "fields": {
-              "Query": {
-                "aggregations": [
-                  "count"
-                ],
-                "operation": "groupby"
-              },
-              "Value": {
-                "aggregations": [
-                  "lastNotNull"
-                ],
-                "operation": "aggregate"
-              },
-              "Value #A": {
-                "aggregations": [
-                  "lastNotNull"
-                ],
-                "operation": "aggregate"
-              },
-              "app": {
-                "aggregations": [
-                  "count"
-                ],
-                "operation": "aggregate"
-              },
-              "query": {
-                "aggregations": [],
-                "operation": "groupby"
-              }
-            }
-          }
-        },
-        {
-          "id": "organize",
-          "options": {
-            "excludeByName": {},
-            "indexByName": {},
-            "renameByName": {
-              "Value #A (lastNotNull)": "Count",
-              "Value (lastNotNull)": "Count",
-              "app (count)": "Count",
-              "query": "Query"
-            }
-          }
-        }
-      ],
-      "type": "table"
+      "title": "Idle in Transaction Timeout",
+      "type": "stat"
     },
     {
       "collapsed": false,
@@ -1908,7 +1276,7 @@
         "h": 1,
         "w": 24,
         "x": 0,
-        "y": 33
+        "y": 7
       },
       "id": 36,
       "panels": [],
@@ -1916,10 +1284,6 @@
       "type": "row"
     },
     {
-      "datasource": {
-        "type": "prometheus",
-        "uid": "${DS_PROMETHEUS}"
-      },
       "fieldConfig": {
         "defaults": {
           "color": {
@@ -1975,7 +1339,7 @@
         "h": 10,
         "w": 12,
         "x": 0,
-        "y": 34
+        "y": 8
       },
       "id": 6,
       "links": [],
@@ -1991,14 +1355,19 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "pluginVersion": "8.2.1",
       "targets": [
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "exemplar": true,
-          "expr": "pg_stat_activity_count{instance=\"$instance\", 
datname=\"$db\", server=\"$server\"}",
+          "expr": "pg_stat_activity_count{instance=\"$instance\", 
datname=~\"taler(.*)\", server=\"$server\"}",
           "format": "time_series",
           "interval": "",
           "intervalFactor": 1,
@@ -2014,17 +1383,13 @@
       "bars": false,
       "dashLength": 10,
       "dashes": false,
-      "datasource": {
-        "type": "prometheus",
-        "uid": "${DS_PROMETHEUS}"
-      },
       "fill": 1,
       "fillGradient": 0,
       "gridPos": {
         "h": 10,
         "w": 12,
         "x": 12,
-        "y": 34
+        "y": 8
       },
       "hiddenSeries": false,
       "id": 8,
@@ -2046,7 +1411,7 @@
         "alertThreshold": true
       },
       "percentage": false,
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "pointradius": 5,
       "points": false,
       "renderer": "flot",
@@ -2056,8 +1421,12 @@
       "steppedLine": false,
       "targets": [
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "exemplar": true,
-          "expr": "irate(pg_stat_database_xact_commit{instance=\"$instance\", 
datname=\"$db\", server=\"$server\"}[5m])",
+          "expr": "irate(pg_stat_database_xact_commit{instance=\"$instance\", 
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
           "format": "time_series",
           "interval": "",
           "intervalFactor": 1,
@@ -2065,8 +1434,12 @@
           "refId": "A"
         },
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "exemplar": true,
-          "expr": 
"irate(pg_stat_database_xact_rollback{instance=\"$instance\", datname=\"$db\", 
server=\"$server\"}[5m])",
+          "expr": 
"irate(pg_stat_database_xact_rollback{instance=\"$instance\", 
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
           "format": "time_series",
           "interval": "",
           "intervalFactor": 1,
@@ -2111,17 +1484,13 @@
       "bars": false,
       "dashLength": 10,
       "dashes": false,
-      "datasource": {
-        "type": "prometheus",
-        "uid": "${DS_PROMETHEUS}"
-      },
       "fill": 1,
       "fillGradient": 0,
       "gridPos": {
         "h": 8,
         "w": 12,
         "x": 0,
-        "y": 44
+        "y": 18
       },
       "hiddenSeries": false,
       "id": 18,
@@ -2143,7 +1512,7 @@
         "alertThreshold": true
       },
       "percentage": false,
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "pointradius": 5,
       "points": false,
       "renderer": "flot",
@@ -2153,15 +1522,27 @@
       "steppedLine": false,
       "targets": [
         {
-          "expr": "irate(pg_stat_database_tup_fetched{instance=\"$instance\", 
datname=\"$db\"}[5m])",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "irate(pg_stat_database_tup_fetched{instance=\"$instance\", 
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
           "format": "time_series",
+          "interval": "",
           "intervalFactor": 1,
           "legendFormat": "SELECT (index scan)",
           "refId": "A"
         },
         {
-          "expr": "irate(pg_stat_database_tup_returned{instance=\"$instance\", 
datname=\"$db\"}[5m])",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "irate(pg_stat_database_tup_returned{instance=\"$instance\", 
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
           "format": "time_series",
+          "interval": "",
           "intervalFactor": 1,
           "legendFormat": "SELECT (table scan)",
           "refId": "B"
@@ -2203,17 +1584,13 @@
       "bars": false,
       "dashLength": 10,
       "dashes": false,
-      "datasource": {
-        "type": "prometheus",
-        "uid": "${DS_PROMETHEUS}"
-      },
       "fill": 1,
       "fillGradient": 0,
       "gridPos": {
         "h": 8,
         "w": 12,
         "x": 12,
-        "y": 44
+        "y": 18
       },
       "hiddenSeries": false,
       "id": 20,
@@ -2235,7 +1612,7 @@
         "alertThreshold": true
       },
       "percentage": false,
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "pointradius": 5,
       "points": false,
       "renderer": "flot",
@@ -2245,22 +1622,40 @@
       "steppedLine": false,
       "targets": [
         {
-          "expr": "irate(pg_stat_database_tup_inserted{instance=\"$instance\", 
datname=\"$db\"}[5m])",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "irate(pg_stat_database_tup_inserted{instance=\"$instance\", 
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
           "format": "time_series",
+          "interval": "",
           "intervalFactor": 1,
           "legendFormat": "INSERT",
           "refId": "A"
         },
         {
-          "expr": "irate(pg_stat_database_tup_updated{instance=\"$instance\", 
datname=\"$db\"}[5m])",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "irate(pg_stat_database_tup_updated{instance=\"$instance\", 
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
           "format": "time_series",
+          "interval": "",
           "intervalFactor": 1,
           "legendFormat": "UPDATE",
           "refId": "B"
         },
         {
-          "expr": "irate(pg_stat_database_tup_deleted{instance=\"$instance\", 
datname=\"$db\"}[5m])",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "irate(pg_stat_database_tup_deleted{instance=\"$instance\", 
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
           "format": "time_series",
+          "interval": "",
           "intervalFactor": 1,
           "legendFormat": "DELETE",
           "refId": "C"
@@ -2302,17 +1697,13 @@
       "bars": false,
       "dashLength": 10,
       "dashes": false,
-      "datasource": {
-        "type": "prometheus",
-        "uid": "${DS_PROMETHEUS}"
-      },
       "fill": 1,
       "fillGradient": 0,
       "gridPos": {
         "h": 8,
         "w": 12,
         "x": 0,
-        "y": 52
+        "y": 26
       },
       "hiddenSeries": false,
       "id": 42,
@@ -2336,7 +1727,7 @@
         "alertThreshold": true
       },
       "percentage": false,
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "pointradius": 5,
       "points": false,
       "renderer": "flot",
@@ -2346,8 +1737,14 @@
       "steppedLine": false,
       "targets": [
         {
-          "expr": "pg_stat_activity_max_tx_duration{instance=\"$instance\", 
datname=\"$db\"}",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "pg_stat_activity_max_tx_duration{instance=\"$instance\", 
datname=~\"taler(.*)\", server=\"$server\"}",
           "format": "time_series",
+          "interval": "",
           "intervalFactor": 1,
           "legendFormat": "max_tx_duration [{{state}}]",
           "refId": "A"
@@ -2388,17 +1785,13 @@
       "bars": false,
       "dashLength": 10,
       "dashes": false,
-      "datasource": {
-        "type": "prometheus",
-        "uid": "${DS_PROMETHEUS}"
-      },
       "fill": 1,
       "fillGradient": 0,
       "gridPos": {
         "h": 8,
         "w": 12,
         "x": 12,
-        "y": 52
+        "y": 26
       },
       "hiddenSeries": false,
       "id": 44,
@@ -2419,7 +1812,7 @@
         "alertThreshold": true
       },
       "percentage": false,
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "pointradius": 5,
       "points": false,
       "renderer": "flot",
@@ -2429,8 +1822,12 @@
       "steppedLine": false,
       "targets": [
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "exemplar": true,
-          "expr": "pg_stat_database_blks_hit{instance=\"$instance\", 
datname=\"$db\", server=\"$server\"} / 
(pg_stat_database_blks_read{instance=\"$instance\", datname=\"$db\", 
server=\"$server\"} + pg_stat_database_blks_hit{instance=\"$instance\", 
datname=\"$db\", server=\"$server\"})",
+          "expr": "pg_stat_database_blks_hit{instance=\"$instance\", 
datname=~\"taler(.*)\", server=\"$server\"} / 
(pg_stat_database_blks_read{instance=\"$instance\", datname=~\"taler(.*)\", 
server=\"$server\"} + pg_stat_database_blks_hit{instance=\"$instance\", 
datname=~\"taler(.*)\", server=\"$server\"})",
           "format": "time_series",
           "interval": "",
           "intervalFactor": 1,
@@ -2478,7 +1875,7 @@
         "h": 1,
         "w": 24,
         "x": 0,
-        "y": 60
+        "y": 34
       },
       "id": 50,
       "panels": [],
@@ -2500,7 +1897,7 @@
         "h": 6,
         "w": 17,
         "x": 0,
-        "y": 61
+        "y": 35
       },
       "hiddenSeries": false,
       "id": 46,
@@ -2523,7 +1920,7 @@
         "alertThreshold": true
       },
       "percentage": false,
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "pointradius": 5,
       "points": false,
       "renderer": "flot",
@@ -2615,17 +2012,13 @@
       "bars": false,
       "dashLength": 10,
       "dashes": false,
-      "datasource": {
-        "type": "prometheus",
-        "uid": "${DS_PROMETHEUS}"
-      },
       "fill": 1,
       "fillGradient": 0,
       "gridPos": {
         "h": 6,
         "w": 7,
         "x": 17,
-        "y": 61
+        "y": 35
       },
       "hiddenSeries": false,
       "id": 28,
@@ -2646,7 +2039,7 @@
         "alertThreshold": true
       },
       "percentage": false,
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "pointradius": 5,
       "points": false,
       "renderer": "flot",
@@ -2656,8 +2049,12 @@
       "steppedLine": false,
       "targets": [
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "exemplar": true,
-          "expr": "irate(pg_stat_database_conflicts{instance=\"$instance\", 
datname=\"$db\", server=\"$server\"}[5m])",
+          "expr": "irate(pg_stat_database_conflicts{instance=\"$instance\", 
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
           "format": "time_series",
           "interval": "",
           "intervalFactor": 1,
@@ -2665,8 +2062,12 @@
           "refId": "B"
         },
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "exemplar": true,
-          "expr": "irate(pg_stat_database_deadlocks{instance=\"$instance\", 
datname=\"$db\", server=\"$server\"}[5m])",
+          "expr": "irate(pg_stat_database_deadlocks{instance=\"$instance\", 
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
           "format": "time_series",
           "interval": "",
           "intervalFactor": 1,
@@ -2711,10 +2112,6 @@
       "bars": false,
       "dashLength": 10,
       "dashes": false,
-      "datasource": {
-        "type": "prometheus",
-        "uid": "${DS_PROMETHEUS}"
-      },
       "decimals": 0,
       "fill": 1,
       "fillGradient": 0,
@@ -2722,7 +2119,7 @@
         "h": 7,
         "w": 17,
         "x": 0,
-        "y": 67
+        "y": 41
       },
       "hiddenSeries": false,
       "id": 30,
@@ -2745,7 +2142,7 @@
         "alertThreshold": true
       },
       "percentage": false,
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "pointradius": 5,
       "points": false,
       "renderer": "flot",
@@ -2755,8 +2152,12 @@
       "steppedLine": false,
       "targets": [
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "exemplar": true,
-          "expr": "pg_locks_count{instance=\"$instance\", datname=\"$db\", 
server=\"$server\"}",
+          "expr": "pg_locks_count{instance=\"$instance\", 
datname=~\"taler(.*)\", server=\"$server\"}",
           "format": "time_series",
           "interval": "",
           "intervalFactor": 1,
@@ -2802,10 +2203,6 @@
       "bars": false,
       "dashLength": 10,
       "dashes": false,
-      "datasource": {
-        "type": "prometheus",
-        "uid": "${DS_PROMETHEUS}"
-      },
       "description": "Total amount of data written to temporary files by 
queries in this database. All temporary files are counted, regardless of why 
the temporary file was created, and regardless of the log_temp_files setting.",
       "fill": 1,
       "fillGradient": 0,
@@ -2813,7 +2210,7 @@
         "h": 7,
         "w": 7,
         "x": 17,
-        "y": 67
+        "y": 41
       },
       "hiddenSeries": false,
       "id": 40,
@@ -2834,7 +2231,7 @@
         "alertThreshold": true
       },
       "percentage": false,
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "pointradius": 5,
       "points": false,
       "renderer": "flot",
@@ -2844,8 +2241,14 @@
       "steppedLine": false,
       "targets": [
         {
-          "expr": "irate(pg_stat_database_temp_bytes{instance=\"$instance\", 
datname=\"$db\"}[5m])",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "irate(pg_stat_database_temp_bytes{instance=\"$instance\", 
datname=~\"taler(.*)\", server=\"$server\"}[5m])",
           "format": "time_series",
+          "interval": "",
           "intervalFactor": 1,
           "legendFormat": "Temp Bytes",
           "refId": "A"
@@ -2896,7 +2299,7 @@
         "h": 9,
         "w": 24,
         "x": 0,
-        "y": 74
+        "y": 48
       },
       "hiddenSeries": false,
       "id": 38,
@@ -2918,7 +2321,7 @@
         "alertThreshold": true
       },
       "percentage": false,
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "pointradius": 5,
       "points": false,
       "renderer": "flot",
@@ -2983,10 +2386,6 @@
       "bars": false,
       "dashLength": 10,
       "dashes": false,
-      "datasource": {
-        "type": "prometheus",
-        "uid": "${DS_PROMETHEUS}"
-      },
       "editable": true,
       "error": false,
       "fill": 1,
@@ -2996,7 +2395,7 @@
         "h": 7,
         "w": 20,
         "x": 0,
-        "y": 83
+        "y": 57
       },
       "hiddenSeries": false,
       "id": 80,
@@ -3020,7 +2419,7 @@
         "alertThreshold": true
       },
       "percentage": false,
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "pointradius": 5,
       "points": false,
       "renderer": "flot",
@@ -3031,9 +2430,13 @@
       "targets": [
         {
           "alias": "fetched",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "dsType": "prometheus",
           "exemplar": true,
-          "expr": 
"sum(irate(pg_stat_database_tup_fetched{datname=~\"$db\",instance=~\"$instance\",
 server=\"$server\"}[5m]))",
+          "expr": 
"sum(irate(pg_stat_database_tup_fetched{datname=~\"taler(.*)\",instance=~\"$instance\",
 server=\"$server\"}[5m]))",
           "format": "time_series",
           "groupBy": [
             {
@@ -3087,9 +2490,13 @@
         },
         {
           "alias": "fetched",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "dsType": "prometheus",
           "exemplar": true,
-          "expr": 
"sum(irate(pg_stat_database_tup_returned{datname=~\"$db\",instance=~\"$instance\",
 server=\"$server\"}[5m]))",
+          "expr": 
"sum(irate(pg_stat_database_tup_returned{datname=~\"taler(.*)\",instance=~\"$instance\",
 server=\"$server\"}[5m]))",
           "format": "time_series",
           "groupBy": [
             {
@@ -3143,9 +2550,13 @@
         },
         {
           "alias": "fetched",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "dsType": "prometheus",
           "exemplar": true,
-          "expr": 
"sum(irate(pg_stat_database_tup_inserted{datname=~\"$db\",instance=~\"$instance\",
 server=\"$server\"}[5m]))",
+          "expr": 
"sum(irate(pg_stat_database_tup_inserted{datname=~\"taler(.*)\",instance=~\"$instance\",
 server=\"$server\"}[5m]))",
           "format": "time_series",
           "groupBy": [
             {
@@ -3199,9 +2610,13 @@
         },
         {
           "alias": "fetched",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "dsType": "prometheus",
           "exemplar": true,
-          "expr": 
"sum(irate(pg_stat_database_tup_updated{datname=~\"$db\",instance=~\"$instance\",
 server=\"$server\"}[5m]))",
+          "expr": 
"sum(irate(pg_stat_database_tup_updated{datname=~\"taler(.*)\",instance=~\"$instance\",
 server=\"$server\"}[5m]))",
           "format": "time_series",
           "groupBy": [
             {
@@ -3255,9 +2670,13 @@
         },
         {
           "alias": "fetched",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "dsType": "prometheus",
           "exemplar": true,
-          "expr": 
"sum(irate(pg_stat_database_tup_deleted{datname=~\"$db\",instance=~\"$instance\",
 server=\"$server\"}[5m]))",
+          "expr": 
"sum(irate(pg_stat_database_tup_deleted{datname=~\"taler(.*)\",instance=~\"$instance\",
 server=\"$server\"}[5m]))",
           "format": "time_series",
           "groupBy": [
             {
@@ -3344,10 +2763,6 @@
       }
     },
     {
-      "datasource": {
-        "type": "prometheus",
-        "uid": "${DS_PROMETHEUS}"
-      },
       "fieldConfig": {
         "defaults": {
           "color": {
@@ -3387,7 +2802,7 @@
         "h": 7,
         "w": 4,
         "x": 20,
-        "y": 83
+        "y": 57
       },
       "id": 78,
       "links": [],
@@ -3407,12 +2822,16 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "dsType": "prometheus",
           "exemplar": true,
-          "expr": 
"sum(irate(pg_stat_database_xact_commit{datname=\"$db\",instance=~\"$instance\",
 server=\"$server\"}[5m])) + 
sum(irate(pg_stat_database_xact_rollback{datname=\"$db\",instance=~\"$instance\",
 server=\"$server\"}[5m]))",
+          "expr": 
"sum(irate(pg_stat_database_xact_commit{datname=~\"taler(.*)\",instance=~\"$instance\",
 server=\"$server\"}[5m])) + 
sum(irate(pg_stat_database_xact_rollback{datname=~\"taler(.*)\",instance=~\"$instance\",
 server=\"$server\"}[5m]))",
           "format": "time_series",
           "groupBy": [
             {
@@ -3470,7 +2889,7 @@
     }
   ],
   "refresh": "1m",
-  "schemaVersion": 33,
+  "schemaVersion": 35,
   "style": "dark",
   "tags": [
     "performance",
@@ -3504,32 +2923,6 @@
         "type": "query",
         "useTags": false
       },
-      {
-        "current": {},
-        "datasource": {
-          "type": "prometheus",
-          "uid": "${DS_PROMETHEUS}"
-        },
-        "definition": "",
-        "hide": 0,
-        "includeAll": false,
-        "label": "Database",
-        "multi": false,
-        "name": "db",
-        "options": [],
-        "query": {
-          "query": 
"label_values(pg_stat_database_tup_fetched{datname!~\"template.*|postgres\"},datname)",
-          "refId": "Prometheus-db-Variable-Query"
-        },
-        "refresh": 1,
-        "regex": "",
-        "skipUrlSync": false,
-        "sort": 1,
-        "tagValuesQuery": "",
-        "tagsQuery": "",
-        "type": "query",
-        "useTags": false
-      },
       {
         "current": {},
         "datasource": {
@@ -3587,6 +2980,6 @@
   "timezone": "",
   "title": "Database",
   "uid": "2FTtdeOnk",
-  "version": 81,
+  "version": 99,
   "weekStart": ""
 }
\ No newline at end of file
diff --git a/additional/grafana/request-statistics.json 
b/additional/grafana/exchange.json
similarity index 54%
copy from additional/grafana/request-statistics.json
copy to additional/grafana/exchange.json
index 4eb95cc..e60c581 100644
--- a/additional/grafana/request-statistics.json
+++ b/additional/grafana/exchange.json
@@ -1,5 +1,13 @@
 {
   "__inputs": [
+    {
+      "name": "DS_PROMETHEUS",
+      "label": "Prometheus",
+      "description": "",
+      "type": "datasource",
+      "pluginId": "prometheus",
+      "pluginName": "Prometheus"
+    },
     {
       "name": "DS_LOKI",
       "label": "Loki",
@@ -11,11 +19,17 @@
   ],
   "__elements": [],
   "__requires": [
+    {
+      "type": "panel",
+      "id": "bargauge",
+      "name": "Bar gauge",
+      "version": ""
+    },
     {
       "type": "grafana",
       "id": "grafana",
       "name": "Grafana",
-      "version": "8.3.2"
+      "version": "8.4.3"
     },
     {
       "type": "datasource",
@@ -23,12 +37,24 @@
       "name": "Loki",
       "version": "1.0.0"
     },
+    {
+      "type": "datasource",
+      "id": "prometheus",
+      "name": "Prometheus",
+      "version": "1.0.0"
+    },
     {
       "type": "panel",
       "id": "stat",
       "name": "Stat",
       "version": ""
     },
+    {
+      "type": "panel",
+      "id": "table",
+      "name": "Table",
+      "version": ""
+    },
     {
       "type": "panel",
       "id": "timeseries",
@@ -55,12 +81,10 @@
       }
     ]
   },
-  "description": "",
   "editable": true,
   "fiscalYearStartMonth": 0,
   "graphTooltip": 1,
   "id": null,
-  "iteration": 1639471729428,
   "links": [],
   "liveNow": false,
   "panels": [
@@ -72,84 +96,45 @@
         "x": 0,
         "y": 0
       },
-      "id": 12,
+      "id": 18,
       "panels": [],
-      "title": "Network",
+      "title": "Cryptographic Operations",
       "type": "row"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
-      "description": "round-trip-time wallet to proxy",
+      "description": "Number of signatures created with the configured cipher 
of the exchange (rsa or cs).",
       "fieldConfig": {
         "defaults": {
           "color": {
-            "mode": "thresholds"
-          },
-          "mappings": [],
-          "thresholds": {
-            "mode": "absolute",
-            "steps": [
-              {
-                "color": "green",
-                "value": null
-              },
-              {
-                "color": "red",
-                "value": 80
-              }
-            ]
+            "mode": "palette-classic"
           },
-          "unit": "s"
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 4,
-        "w": 3,
-        "x": 7,
-        "y": 1
-      },
-      "id": 162,
-      "options": {
-        "colorMode": "value",
-        "graphMode": "area",
-        "justifyMode": "auto",
-        "orientation": "auto",
-        "reduceOptions": {
-          "calcs": [
-            "lastNotNull"
-          ],
-          "fields": "",
-          "values": false
-        },
-        "text": {},
-        "textMode": "auto"
-      },
-      "pluginVersion": "8.3.2",
-      "targets": [
-        {
-          "expr": "avg_over_time({app=\"taler-network\"} | logfmt | 
src=\"wallet\" | unwrap duration(time) [$__range])",
-          "instant": true,
-          "range": false,
-          "refId": "A"
-        }
-      ],
-      "title": "RTT Wallet-Proxy",
-      "type": "stat"
-    },
-    {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
-      "description": "round-trip-time proxy to exchange",
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "mode": "thresholds"
+          "custom": {
+            "axisLabel": "Signatures per Second",
+            "axisPlacement": "auto",
+            "barAlignment": 0,
+            "drawStyle": "line",
+            "fillOpacity": 0,
+            "gradientMode": "none",
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            },
+            "lineInterpolation": "linear",
+            "lineWidth": 1,
+            "pointSize": 5,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "showPoints": "auto",
+            "spanNulls": false,
+            "stacking": {
+              "group": "A",
+              "mode": "none"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
           },
           "mappings": [],
           "thresholds": {
@@ -158,61 +143,81 @@
               {
                 "color": "green",
                 "value": null
-              },
-              {
-                "color": "red",
-                "value": 80
               }
             ]
           },
-          "unit": "s"
+          "unit": "none"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 4,
-        "w": 3,
-        "x": 10,
+        "h": 8,
+        "w": 12,
+        "x": 0,
         "y": 1
       },
-      "id": 176,
+      "id": 22,
       "options": {
-        "colorMode": "value",
-        "graphMode": "area",
-        "justifyMode": "auto",
-        "orientation": "auto",
-        "reduceOptions": {
-          "calcs": [
-            "lastNotNull"
-          ],
-          "fields": "",
-          "values": false
+        "legend": {
+          "calcs": [],
+          "displayMode": "list",
+          "placement": "bottom"
         },
-        "text": {},
-        "textMode": "auto"
+        "tooltip": {
+          "mode": "single",
+          "sort": "none"
+        }
       },
-      "pluginVersion": "8.3.2",
       "targets": [
         {
-          "expr": "avg_over_time({app=\"taler-network\"} | logfmt | 
src=\"proxy\" | unwrap duration(time) [$__range])",
-          "instant": true,
-          "range": false,
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "sum by(type) (rate(taler_exchange_num_signatures{}[1m]))",
+          "interval": "",
+          "legendFormat": "{{ type }}",
           "refId": "A"
         }
       ],
-      "title": "RTT Proxy-Exchange",
-      "type": "stat"
+      "title": "Signatures",
+      "type": "timeseries"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
-      "description": "round-trip-time exchange to database",
+      "description": "Number of signature verifications with the configured 
cipher of the exchange (rsa or cs).",
       "fieldConfig": {
         "defaults": {
           "color": {
-            "mode": "thresholds"
+            "mode": "palette-classic"
+          },
+          "custom": {
+            "axisLabel": "Verifications per Second",
+            "axisPlacement": "auto",
+            "barAlignment": 0,
+            "drawStyle": "line",
+            "fillOpacity": 0,
+            "gradientMode": "none",
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            },
+            "lineInterpolation": "linear",
+            "lineWidth": 1,
+            "pointSize": 5,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "showPoints": "auto",
+            "spanNulls": false,
+            "stacking": {
+              "group": "A",
+              "mode": "none"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
           },
           "mappings": [],
           "thresholds": {
@@ -221,73 +226,56 @@
               {
                 "color": "green",
                 "value": null
-              },
-              {
-                "color": "red",
-                "value": 80
               }
             ]
           },
-          "unit": "s"
+          "unit": "none"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 4,
-        "w": 3,
-        "x": 13,
+        "h": 8,
+        "w": 12,
+        "x": 12,
         "y": 1
       },
-      "id": 178,
+      "id": 20,
       "options": {
-        "colorMode": "value",
-        "graphMode": "area",
-        "justifyMode": "auto",
-        "orientation": "auto",
-        "reduceOptions": {
-          "calcs": [
-            "lastNotNull"
-          ],
-          "fields": "",
-          "values": false
+        "legend": {
+          "calcs": [],
+          "displayMode": "list",
+          "placement": "bottom"
         },
-        "text": {},
-        "textMode": "auto"
+        "tooltip": {
+          "mode": "single",
+          "sort": "none"
+        }
       },
-      "pluginVersion": "8.3.2",
       "targets": [
         {
-          "expr": "avg_over_time({app=\"taler-network\"} | logfmt | 
src=\"exchange\" | unwrap duration(time) [$__range])",
-          "instant": true,
-          "range": false,
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "sum by (type) 
(rate(taler_exchange_num_signature_verifications{}[1m]))",
+          "interval": "",
+          "legendFormat": "{{ type }}",
           "refId": "A"
         }
       ],
-      "title": "RTT Exchange-Database",
-      "type": "stat"
-    },
-    {
-      "collapsed": false,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 5
-      },
-      "id": 230,
-      "panels": [],
-      "title": "Related Panels",
-      "type": "row"
+      "title": "Signature Verifications",
+      "type": "timeseries"
     },
     {
-      "description": "Serialization Errors per Second and Request-Type",
+      "description": "Number of key exchanges",
       "fieldConfig": {
         "defaults": {
           "color": {
             "mode": "palette-classic"
           },
           "custom": {
-            "axisLabel": "Serialization Errors / Second",
+            "axisLabel": "Signatures per Second",
             "axisPlacement": "auto",
             "barAlignment": 0,
             "drawStyle": "line",
@@ -329,12 +317,12 @@
         "overrides": []
       },
       "gridPos": {
-        "h": 7,
+        "h": 8,
         "w": 12,
         "x": 0,
-        "y": 6
+        "y": 9
       },
-      "id": 280,
+      "id": 23,
       "options": {
         "legend": {
           "calcs": [],
@@ -342,28 +330,43 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
-      "pluginVersion": "8.2.5",
       "targets": [
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "exemplar": true,
-          "expr": "sum by (type) 
(rate(taler_exchange_serialization_failures{}[1m]))",
-          "instant": false,
+          "expr": "sum by (type) (rate(taler_exchange_num_keyexchanges{} 
[2m]))",
           "interval": "",
-          "legendFormat": "{{type}}",
+          "legendFormat": "{{ type }}",
           "refId": "A"
         }
       ],
-      "title": "Serialization Errors",
-      "transformations": [],
+      "title": "Key Exchanges",
       "type": "timeseries"
     },
+    {
+      "collapsed": false,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 17
+      },
+      "id": 16,
+      "panels": [],
+      "title": "Database",
+      "type": "row"
+    },
     {
       "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
+        "type": "datasource",
+        "uid": "-- Mixed --"
       },
       "description": "",
       "fieldConfig": {
@@ -383,7 +386,7 @@
               "tooltip": false,
               "viz": false
             },
-            "lineInterpolation": "smooth",
+            "lineInterpolation": "linear",
             "lineWidth": 1,
             "pointSize": 5,
             "scaleDistribution": {
@@ -422,12 +425,12 @@
         "overrides": []
       },
       "gridPos": {
-        "h": 7,
+        "h": 9,
         "w": 12,
-        "x": 12,
-        "y": 6
+        "x": 0,
+        "y": 18
       },
-      "id": 228,
+      "id": 4,
       "options": {
         "legend": {
           "calcs": [],
@@ -435,12 +438,18 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
         {
-          "expr": "rate({app=\"taler-database\"} |~ \"duration:\" [1m])",
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "rate({app=\"taler-database\", type=\"slow-query\"} [1m])",
+          "hide": false,
           "refId": "A"
         }
       ],
@@ -448,29 +457,39 @@
       "type": "timeseries"
     },
     {
-      "collapsed": false,
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 13
-      },
-      "id": 20,
-      "panels": [],
-      "repeat": "endpoint",
-      "title": "Request Times ($endpoint)",
-      "type": "row"
-    },
-    {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
-      "description": "Minimal response time for successful (200) requests to 
$endpoint",
+      "description": "Serialization Errors per Second and Request-Type",
       "fieldConfig": {
         "defaults": {
           "color": {
-            "mode": "thresholds"
+            "mode": "palette-classic"
+          },
+          "custom": {
+            "axisLabel": "Serialization Errors / Second",
+            "axisPlacement": "auto",
+            "barAlignment": 0,
+            "drawStyle": "line",
+            "fillOpacity": 0,
+            "gradientMode": "none",
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            },
+            "lineInterpolation": "linear",
+            "lineWidth": 1,
+            "pointSize": 5,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "showPoints": "auto",
+            "spanNulls": false,
+            "stacking": {
+              "group": "A",
+              "mode": "none"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
           },
           "mappings": [],
           "thresholds": {
@@ -479,100 +498,84 @@
               {
                 "color": "green",
                 "value": null
-              },
-              {
-                "color": "red",
-                "value": 80
               }
             ]
           },
-          "unit": "s"
+          "unit": "none"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 6,
-        "w": 3,
-        "x": 0,
-        "y": 14
+        "h": 9,
+        "w": 12,
+        "x": 12,
+        "y": 18
       },
-      "id": 25,
+      "id": 2,
       "options": {
-        "colorMode": "value",
-        "graphMode": "none",
-        "justifyMode": "center",
-        "orientation": "auto",
-        "reduceOptions": {
-          "calcs": [
-            "lastNotNull"
-          ],
-          "fields": "",
-          "values": false
+        "legend": {
+          "calcs": [],
+          "displayMode": "list",
+          "placement": "bottom"
         },
-        "text": {},
-        "textMode": "auto"
+        "tooltip": {
+          "mode": "single",
+          "sort": "none"
+        }
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.2.5",
       "targets": [
         {
-          "expr": "min_over_time(({app=\"taler_proxy\"} |~ \"s=200\" | logfmt 
|~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by (app)",
-          "instant": true,
-          "legendFormat": "",
-          "range": false,
-          "refId": "A",
-          "resolution": 2
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "sum by (type) 
(rate(taler_exchange_serialization_failures{}[1m]))",
+          "instant": false,
+          "interval": "",
+          "legendFormat": "{{type}}",
+          "refId": "A"
         }
       ],
-      "title": "Minimal  [$interval]",
-      "type": "stat"
+      "title": "Serialization Errors",
+      "transformations": [],
+      "type": "timeseries"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
-      "description": "Average request time of successful (200) requests to 
$endpoint",
+      "description": "Number of serialization errors by request endpoint 
(type) since the last exchange restarts",
       "fieldConfig": {
         "defaults": {
           "color": {
-            "mode": "continuous-GrYlRd"
+            "mode": "thresholds"
           },
           "mappings": [],
-          "max": 5,
-          "min": 0,
           "thresholds": {
-            "mode": "percentage",
+            "mode": "absolute",
             "steps": [
               {
-                "color": "green",
+                "color": "text",
                 "value": null
               },
-              {
-                "color": "#EAB839",
-                "value": 60
-              },
               {
                 "color": "red",
-                "value": 80
+                "value": 100
               }
             ]
-          },
-          "unit": "s"
+          }
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 6,
-        "w": 3,
-        "x": 3,
-        "y": 14
+        "h": 8,
+        "w": 10,
+        "x": 0,
+        "y": 27
       },
-      "id": 18,
+      "id": 6,
       "options": {
-        "colorMode": "value",
-        "graphMode": "area",
-        "justifyMode": "auto",
-        "orientation": "auto",
+        "displayMode": "basic",
+        "orientation": "horizontal",
         "reduceOptions": {
           "calcs": [
             "lastNotNull"
@@ -580,63 +583,70 @@
           "fields": "",
           "values": false
         },
-        "text": {},
-        "textMode": "auto"
+        "showUnfilled": true,
+        "text": {}
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "avg_over_time(({app=\"taler_proxy\"} |~ \"s=200\" | logfmt 
|~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by (app)",
+          "exemplar": true,
+          "expr": "sort_desc (sum by(type) 
(taler_exchange_serialization_failures{}))",
           "instant": true,
-          "range": false,
-          "refId": "A",
-          "resolution": 2
+          "interval": "",
+          "legendFormat": "{{type}}",
+          "refId": "A"
         }
       ],
-      "title": "Average [$interval]",
-      "type": "stat"
+      "title": "Serialization Errors by Request Type",
+      "transformations": [],
+      "type": "bargauge"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
-      "description": "Maximal response time for successful (200) requests to 
$endpoint",
+      "description": "Number of serialization errors per request since the 
last exchange restarts",
       "fieldConfig": {
         "defaults": {
           "color": {
             "mode": "thresholds"
           },
-          "mappings": [],
+          "mappings": [
+            {
+              "options": {
+                "match": "nan",
+                "result": {
+                  "index": 0,
+                  "text": "-"
+                }
+              },
+              "type": "special"
+            }
+          ],
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "green",
+                "color": "text",
                 "value": null
               },
               {
                 "color": "red",
-                "value": 80
+                "value": 2
               }
             ]
           },
-          "unit": "s"
+          "unit": "percentunit"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 6,
-        "w": 3,
-        "x": 6,
-        "y": 14
+        "h": 8,
+        "w": 10,
+        "x": 10,
+        "y": 27
       },
-      "id": 37,
+      "id": 12,
       "options": {
-        "colorMode": "value",
-        "graphMode": "none",
-        "justifyMode": "center",
-        "orientation": "auto",
+        "displayMode": "basic",
+        "orientation": "horizontal",
         "reduceOptions": {
           "calcs": [
             "lastNotNull"
@@ -644,35 +654,30 @@
           "fields": "",
           "values": false
         },
-        "text": {},
-        "textMode": "auto"
+        "showUnfilled": true,
+        "text": {}
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "max_over_time({app=\"taler_proxy\"} |~ \"s=200\" | logfmt 
|~ \"${endpoint:dublequote} \" | unwrap rt [$interval]) by (app)",
-          "hide": false,
+          "exemplar": true,
+          "expr": "sort_desc(sum by(type) 
(rate(taler_exchange_serialization_failures{}[10m]))\n/\nsum by(type) 
(rate(taler_exchange_received_requests{}[10m])))",
           "instant": true,
-          "legendFormat": "",
-          "range": false,
-          "refId": "B",
-          "resolution": 2
+          "interval": "",
+          "legendFormat": "{{type}}",
+          "refId": "A"
         }
       ],
-      "title": "Maximal [$interval]",
-      "type": "stat"
+      "title": "Serialization Errors / Request",
+      "type": "bargauge"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
-      "description": "Number of successful requests (=200) to $endpoint",
+      "description": "Total number of serialization errors that happened since 
last exchange restarts",
       "fieldConfig": {
         "defaults": {
           "color": {
-            "fixedColor": "semi-dark-orange",
-            "mode": "thresholds"
+            "fixedColor": "text",
+            "mode": "fixed"
           },
           "mappings": [],
           "noValue": "0",
@@ -689,16 +694,16 @@
         "overrides": []
       },
       "gridPos": {
-        "h": 3,
-        "w": 3,
-        "x": 9,
-        "y": 14
+        "h": 4,
+        "w": 4,
+        "x": 20,
+        "y": 27
       },
-      "id": 148,
+      "id": 8,
       "options": {
         "colorMode": "value",
         "graphMode": "none",
-        "justifyMode": "center",
+        "justifyMode": "auto",
         "orientation": "auto",
         "reduceOptions": {
           "calcs": [
@@ -710,54 +715,38 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "sum by (app) (count_over_time({app=\"taler_proxy\"} |~ 
\"s=200\" |~ \"${endpoint:dublequote} \"[$interval]))",
+          "exemplar": true,
+          "expr": "sum(taler_exchange_serialization_failures{})",
+          "interval": "",
+          "legendFormat": "",
           "refId": "A"
         }
       ],
-      "title": "Successful Requests [$interval]",
+      "title": "Total Serialization Errors",
       "type": "stat"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
+      "collapsed": false,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 35
       },
-      "description": "Average response time for requests to $endpoint",
+      "id": 32,
+      "panels": [],
+      "title": "Slow Queries",
+      "type": "row"
+    },
+    {
+      "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
-            "mode": "palette-classic"
-          },
-          "custom": {
-            "axisLabel": "",
-            "axisPlacement": "auto",
-            "barAlignment": 0,
-            "drawStyle": "line",
-            "fillOpacity": 86,
-            "gradientMode": "opacity",
-            "hideFrom": {
-              "legend": false,
-              "tooltip": false,
-              "viz": false
-            },
-            "lineInterpolation": "smooth",
-            "lineWidth": 1,
-            "pointSize": 5,
-            "scaleDistribution": {
-              "type": "linear"
-            },
-            "showPoints": "never",
-            "spanNulls": false,
-            "stacking": {
-              "group": "A",
-              "mode": "none"
-            },
-            "thresholdsStyle": {
-              "mode": "off"
-            }
+            "mode": "thresholds"
           },
           "mappings": [],
           "thresholds": {
@@ -772,82 +761,103 @@
                 "value": 80
               }
             ]
-          },
-          "unit": "s"
+          }
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 6,
+        "h": 8,
         "w": 12,
-        "x": 12,
-        "y": 14
+        "x": 0,
+        "y": 36
       },
-      "id": 14,
+      "id": 30,
       "options": {
-        "legend": {
-          "calcs": [],
-          "displayMode": "list",
-          "placement": "bottom"
+        "displayMode": "gradient",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
         },
-        "tooltip": {
-          "mode": "single"
-        }
+        "showUnfilled": true
       },
-      "pluginVersion": "8.2.1",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "avg_over_time(({app=\"taler_proxy\"} | logfmt | s=200 |~ 
\"${endpoint:dublequote} \" | unwrap rt) [$interval]) by (app)",
-          "instant": false,
-          "legendFormat": "200",
-          "range": true,
-          "refId": "A",
-          "resolution": 10
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "taler_database_slow_query_duration_hist_bucket{}",
+          "format": "heatmap",
+          "interval": "",
+          "legendFormat": "{{ le }}",
+          "refId": "A"
         }
       ],
-      "title": "Request Time AVG [$interval]",
-      "type": "timeseries"
+      "title": "Slow Query Distribution",
+      "transformations": [
+        {
+          "id": "renameByRegex",
+          "options": {
+            "regex": "(.*)",
+            "renamePattern": "$1 ms"
+          }
+        }
+      ],
+      "type": "bargauge"
     },
     {
       "datasource": {
         "type": "loki",
         "uid": "${DS_LOKI}"
       },
-      "description": "Number of failed requests (!=200) to $endpoint",
+      "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
             "mode": "thresholds"
           },
-          "mappings": [],
-          "noValue": "0",
+          "mappings": [
+            {
+              "options": {
+                "match": "null+nan",
+                "result": {
+                  "index": 0,
+                  "text": "0"
+                }
+              },
+              "type": "special"
+            }
+          ],
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
                 "color": "green",
                 "value": null
-              },
-              {
-                "color": "orange",
-                "value": 1
               }
             ]
-          }
+          },
+          "unit": "ms"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 3,
+        "h": 4,
         "w": 3,
-        "x": 9,
-        "y": 17
+        "x": 12,
+        "y": 36
       },
-      "id": 31,
+      "id": 33,
       "options": {
-        "colorMode": "value",
+        "colorMode": "none",
         "graphMode": "none",
-        "justifyMode": "center",
+        "justifyMode": "auto",
         "orientation": "auto",
         "reduceOptions": {
           "calcs": [
@@ -856,59 +866,66 @@
           "fields": "",
           "values": false
         },
-        "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "sum by (app) (count_over_time({app=\"taler_proxy\"} !~ 
\"s=200\" |~ \"${endpoint:dublequote} \" [$interval]))",
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "min_over_time(({app=\"taler-database\"} |~ \"duration:\" | 
regexp \"duration: (?P<time>\\\\d*.*\\\\d*) ms\" | unwrap time) [5m])",
+          "queryType": "instant",
           "refId": "A"
         }
       ],
-      "title": "Failed Requests [$interval]",
+      "title": "Min [5m]",
       "type": "stat"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
-      "description": "Median response time for successful (200) requests to 
$endpoint",
+      "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
             "mode": "thresholds"
           },
-          "mappings": [],
+          "mappings": [
+            {
+              "options": {
+                "match": "null+nan",
+                "result": {
+                  "index": 0,
+                  "text": "0"
+                }
+              },
+              "type": "special"
+            }
+          ],
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
                 "color": "green",
                 "value": null
-              },
-              {
-                "color": "red",
-                "value": 80
               }
             ]
           },
-          "unit": "s"
+          "unit": "ms"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 6,
+        "h": 4,
         "w": 3,
-        "x": 0,
-        "y": 20
+        "x": 15,
+        "y": 36
       },
-      "id": 41,
+      "id": 25,
       "options": {
-        "colorMode": "value",
+        "colorMode": "none",
         "graphMode": "none",
-        "justifyMode": "center",
+        "justifyMode": "auto",
         "orientation": "auto",
         "reduceOptions": {
           "calcs": [
@@ -917,22 +934,24 @@
           "fields": "",
           "values": false
         },
-        "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "quantile_over_time(0.50, ({app=\"taler_proxy\"} |~ 
\"s=200\" | logfmt |~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by 
(app)",
-          "hide": false,
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": "rate(taler_database_slow_query_duration_hist_sum{}[5m]) / 
rate(taler_database_slow_query_duration_hist_count{} [5m])",
           "instant": true,
+          "interval": "",
           "legendFormat": "",
-          "range": false,
-          "refId": "F",
-          "resolution": 2
+          "refId": "A"
         }
       ],
-      "title": "Median [$interval]",
+      "title": "Average [5m]",
       "type": "stat"
     },
     {
@@ -940,41 +959,48 @@
         "type": "loki",
         "uid": "${DS_LOKI}"
       },
-      "description": "90% of requests to $endpoint complete successfully (200) 
below this time",
+      "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
             "mode": "thresholds"
           },
-          "mappings": [],
+          "mappings": [
+            {
+              "options": {
+                "match": "null+nan",
+                "result": {
+                  "index": 0,
+                  "text": "0"
+                }
+              },
+              "type": "special"
+            }
+          ],
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
                 "color": "green",
                 "value": null
-              },
-              {
-                "color": "red",
-                "value": 80
               }
             ]
           },
-          "unit": "s"
+          "unit": "ms"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 6,
+        "h": 4,
         "w": 3,
-        "x": 3,
-        "y": 20
+        "x": 18,
+        "y": 36
       },
-      "id": 40,
+      "id": 34,
       "options": {
-        "colorMode": "value",
+        "colorMode": "none",
         "graphMode": "none",
-        "justifyMode": "center",
+        "justifyMode": "auto",
         "orientation": "auto",
         "reduceOptions": {
           "calcs": [
@@ -983,64 +1009,130 @@
           "fields": "",
           "values": false
         },
-        "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "quantile_over_time(0.90, ({app=\"taler_proxy\"} |~ 
\"s=200\" | logfmt |~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by 
(app)",
-          "hide": false,
-          "instant": true,
-          "legendFormat": "90% Quantile   ",
-          "range": false,
-          "refId": "E",
-          "resolution": 2
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "max_over_time(({app=\"taler-database\"} |~ \"duration:\" | 
regexp \"duration: (?P<time>\\\\d*.*\\\\d*) ms\" | unwrap time) [5m])",
+          "queryType": "instant",
+          "refId": "A"
         }
       ],
-      "title": "90th Percentile [$interval]",
+      "title": "Max [5m]",
       "type": "stat"
     },
     {
       "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
+        "type": "datasource",
+        "uid": "-- Mixed --"
       },
-      "description": "99% of requests to $endpoint complete successfully (200) 
below this time",
+      "description": "Number of queries which took longer than the configured 
duration in the last 5 minutes",
       "fieldConfig": {
         "defaults": {
           "color": {
-            "mode": "thresholds"
+            "fixedColor": "text",
+            "mode": "fixed"
           },
           "mappings": [],
+          "noValue": "0",
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
                 "color": "green",
                 "value": null
+              }
+            ]
+          }
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 4,
+        "w": 3,
+        "x": 21,
+        "y": 36
+      },
+      "id": 10,
+      "options": {
+        "colorMode": "none",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "sum(count_over_time({app=\"taler-database\", 
type=\"slow-query\"} [5m]))",
+          "instant": true,
+          "range": false,
+          "refId": "A"
+        }
+      ],
+      "title": "Total Slow Queries [5m]",
+      "type": "stat"
+    },
+    {
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [
+            {
+              "options": {
+                "match": "null+nan",
+                "result": {
+                  "index": 0,
+                  "text": "0"
+                }
               },
+              "type": "special"
+            }
+          ],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
               {
-                "color": "red",
-                "value": 80
+                "color": "green",
+                "value": null
               }
             ]
           },
-          "unit": "s"
+          "unit": "ms"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 6,
+        "h": 4,
         "w": 3,
-        "x": 6,
-        "y": 20
+        "x": 12,
+        "y": 40
       },
-      "id": 39,
+      "id": 26,
       "options": {
-        "colorMode": "value",
+        "colorMode": "none",
         "graphMode": "none",
-        "justifyMode": "center",
+        "justifyMode": "auto",
         "orientation": "auto",
         "reduceOptions": {
           "calcs": [
@@ -1049,22 +1141,24 @@
           "fields": "",
           "values": false
         },
-        "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "quantile_over_time(0.99, ({app=\"taler_proxy\"} |~ 
\"s=200\" | logfmt |~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by 
(app)",
-          "hide": false,
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": "histogram_quantile(0.5, 
rate(taler_database_slow_query_duration_hist_bucket{}[5m]))",
           "instant": true,
+          "interval": "",
           "legendFormat": "",
-          "range": false,
-          "refId": "D",
-          "resolution": 2
+          "refId": "A"
         }
       ],
-      "title": "99th Percentile [$interval]",
+      "title": "Median [5m]",
       "type": "stat"
     },
     {
@@ -1072,41 +1166,116 @@
         "type": "loki",
         "uid": "${DS_LOKI}"
       },
-      "description": "Standard deviation of response times for successful 
(200) requests to $endpoint",
+      "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
             "mode": "thresholds"
           },
-          "mappings": [],
+          "mappings": [
+            {
+              "options": {
+                "match": "null+nan",
+                "result": {
+                  "index": 0,
+                  "text": "0"
+                }
+              },
+              "type": "special"
+            }
+          ],
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
                 "color": "green",
                 "value": null
+              }
+            ]
+          },
+          "unit": "ms"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 4,
+        "w": 3,
+        "x": 15,
+        "y": 40
+      },
+      "id": 35,
+      "options": {
+        "colorMode": "none",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "stddev_over_time(({app=\"taler-database\"} |~ \"duration:\" 
| regexp \"duration: (?P<time>\\\\d*.*\\\\d*) ms\" | unwrap time) [5m])",
+          "queryType": "instant",
+          "refId": "A"
+        }
+      ],
+      "title": "Stddev [5m]",
+      "type": "stat"
+    },
+    {
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [
+            {
+              "options": {
+                "match": "null+nan",
+                "result": {
+                  "index": 0,
+                  "text": "0"
+                }
               },
+              "type": "special"
+            }
+          ],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
               {
-                "color": "red",
-                "value": 80
+                "color": "green",
+                "value": null
               }
             ]
           },
-          "unit": "s"
+          "unit": "ms"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 6,
+        "h": 4,
         "w": 3,
-        "x": 9,
-        "y": 20
+        "x": 18,
+        "y": 40
       },
-      "id": 38,
+      "id": 27,
       "options": {
-        "colorMode": "value",
+        "colorMode": "none",
         "graphMode": "none",
-        "justifyMode": "center",
+        "justifyMode": "auto",
         "orientation": "auto",
         "reduceOptions": {
           "calcs": [
@@ -1115,22 +1284,95 @@
           "fields": "",
           "values": false
         },
-        "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "stddev_over_time(({app=\"taler_proxy\"} |~ \"s=200\" | 
logfmt |~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by (app)",
-          "hide": false,
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": "histogram_quantile(0.9, 
rate(taler_database_slow_query_duration_hist_bucket{}[5m]))",
           "instant": true,
+          "interval": "",
           "legendFormat": "",
-          "range": false,
-          "refId": "C",
-          "resolution": 2
+          "refId": "A"
+        }
+      ],
+      "title": "90th Percentile [5m]",
+      "type": "stat"
+    },
+    {
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [
+            {
+              "options": {
+                "match": "null+nan",
+                "result": {
+                  "index": 0,
+                  "text": "0"
+                }
+              },
+              "type": "special"
+            }
+          ],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          },
+          "unit": "ms"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 4,
+        "w": 3,
+        "x": 21,
+        "y": 40
+      },
+      "id": 28,
+      "options": {
+        "colorMode": "none",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": "histogram_quantile(0.99, 
rate(taler_database_slow_query_duration_hist_bucket{}[5m]))",
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
         }
       ],
-      "title": "Standard Deviation [$interval]",
+      "title": "99th Percentile [5m]",
       "type": "stat"
     },
     {
@@ -1142,35 +1384,12 @@
       "fieldConfig": {
         "defaults": {
           "color": {
-            "mode": "palette-classic"
+            "mode": "thresholds"
           },
           "custom": {
-            "axisLabel": "",
-            "axisPlacement": "auto",
-            "barAlignment": 0,
-            "drawStyle": "line",
-            "fillOpacity": 0,
-            "gradientMode": "none",
-            "hideFrom": {
-              "legend": false,
-              "tooltip": false,
-              "viz": false
-            },
-            "lineInterpolation": "linear",
-            "lineWidth": 1,
-            "pointSize": 5,
-            "scaleDistribution": {
-              "type": "linear"
-            },
-            "showPoints": "never",
-            "spanNulls": false,
-            "stacking": {
-              "group": "A",
-              "mode": "none"
-            },
-            "thresholdsStyle": {
-              "mode": "off"
-            }
+            "align": "auto",
+            "displayMode": "json-view",
+            "filterable": false
           },
           "mappings": [],
           "thresholds": {
@@ -1179,208 +1398,141 @@
               {
                 "color": "green",
                 "value": null
-              },
-              {
-                "color": "red",
-                "value": 80
               }
             ]
           }
         },
-        "overrides": []
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Count"
+            },
+            "properties": [
+              {
+                "id": "custom.width",
+                "value": 100
+              }
+            ]
+          }
+        ]
       },
       "gridPos": {
-        "h": 6,
-        "w": 12,
-        "x": 12,
-        "y": 20
+        "h": 8,
+        "w": 24,
+        "x": 0,
+        "y": 44
       },
-      "id": 107,
+      "id": 14,
       "options": {
-        "legend": {
-          "calcs": [],
-          "displayMode": "list",
-          "placement": "bottom"
+        "footer": {
+          "fields": "",
+          "reducer": [
+            "sum"
+          ],
+          "show": false
         },
-        "tooltip": {
-          "mode": "single"
-        }
+        "frameIndex": 1,
+        "showHeader": true,
+        "sortBy": []
       },
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "sum by (s) (count_over_time(({app=\"taler_proxy\"} | logfmt 
|~ \"${endpoint:dublequote} \") [$interval]))",
-          "legendFormat": "{{s}}",
-          "refId": "A",
-          "resolution": 10
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "sum by (query) (count_over_time({app=\"taler-database\", 
type=\"slow-query\"} | regexp \"(?P<query>.*)\" [$__range]))",
+          "instant": true,
+          "range": false,
+          "refId": "A"
         }
       ],
-      "title": "Number of Requests  [$interval]",
-      "type": "timeseries"
+      "title": "Slow Query Occurences",
+      "transformations": [
+        {
+          "id": "groupBy",
+          "options": {
+            "fields": {
+              "Query": {
+                "aggregations": [
+                  "count"
+                ],
+                "operation": "groupby"
+              },
+              "Value": {
+                "aggregations": [
+                  "lastNotNull"
+                ],
+                "operation": "aggregate"
+              },
+              "Value #A": {
+                "aggregations": [
+                  "lastNotNull"
+                ],
+                "operation": "aggregate"
+              },
+              "app": {
+                "aggregations": [
+                  "count"
+                ],
+                "operation": "aggregate"
+              },
+              "query": {
+                "aggregations": [],
+                "operation": "groupby"
+              }
+            }
+          }
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {},
+            "indexByName": {},
+            "renameByName": {
+              "Value #A (lastNotNull)": "Count",
+              "Value (lastNotNull)": "Count",
+              "app (count)": "Count",
+              "query": "Query"
+            }
+          }
+        },
+        {
+          "id": "sortBy",
+          "options": {
+            "fields": {},
+            "sort": [
+              {
+                "desc": true,
+                "field": "Count"
+              }
+            ]
+          }
+        }
+      ],
+      "type": "table"
     }
   ],
-  "refresh": "1m",
-  "schemaVersion": 33,
+  "refresh": "10s",
+  "schemaVersion": 35,
   "style": "dark",
   "tags": [
     "performance",
     "taler"
   ],
   "templating": {
-    "list": [
-      {
-        "auto": false,
-        "auto_count": 30,
-        "auto_min": "10s",
-        "current": {
-          "selected": true,
-          "text": "1m",
-          "value": "1m"
-        },
-        "hide": 0,
-        "label": "interval",
-        "name": "interval",
-        "options": [
-          {
-            "selected": false,
-            "text": "30s",
-            "value": "30s"
-          },
-          {
-            "selected": true,
-            "text": "1m",
-            "value": "1m"
-          },
-          {
-            "selected": false,
-            "text": "2m",
-            "value": "2m"
-          },
-          {
-            "selected": false,
-            "text": "3m",
-            "value": "3m"
-          },
-          {
-            "selected": false,
-            "text": "5m",
-            "value": "5m"
-          },
-          {
-            "selected": false,
-            "text": "10m",
-            "value": "10m"
-          },
-          {
-            "selected": false,
-            "text": "15m",
-            "value": "15m"
-          },
-          {
-            "selected": false,
-            "text": "20m",
-            "value": "20m"
-          },
-          {
-            "selected": false,
-            "text": "30m",
-            "value": "30m"
-          },
-          {
-            "selected": false,
-            "text": "1h",
-            "value": "1h"
-          }
-        ],
-        "query": "30s,1m,2m,3m,5m,10m,15m,20m,30m,1h",
-        "queryValue": "",
-        "refresh": 2,
-        "skipUrlSync": false,
-        "type": "interval"
-      },
-      {
-        "current": {
-          "selected": false,
-          "text": "All",
-          "value": "$__all"
-        },
-        "hide": 0,
-        "includeAll": true,
-        "label": "endpoint",
-        "multi": false,
-        "name": "endpoint",
-        "options": [
-          {
-            "selected": true,
-            "text": "All",
-            "value": "$__all"
-          },
-          {
-            "selected": false,
-            "text": "/withdraw",
-            "value": "/withdraw"
-          },
-          {
-            "selected": false,
-            "text": "/reveal",
-            "value": "/reveal"
-          },
-          {
-            "selected": false,
-            "text": "/melt",
-            "value": "/melt"
-          },
-          {
-            "selected": false,
-            "text": "/deposit",
-            "value": "/deposit"
-          },
-          {
-            "selected": false,
-            "text": "/reserves/[A-Z0-9]+",
-            "value": "/reserves/[A-Z0-9]+"
-          }
-        ],
-        "query": "/withdraw,/reveal,/melt,/deposit,/reserves/[A-Z0-9]+",
-        "queryValue": "",
-        "skipUrlSync": false,
-        "type": "custom"
-      }
-    ]
+    "list": []
   },
   "time": {
     "from": "now-1h",
     "to": "now"
   },
-  "timepicker": {
-    "hidden": false,
-    "refresh_intervals": [
-      "5s",
-      "10s",
-      "30s",
-      "1m",
-      "5m",
-      "15m",
-      "30m",
-      "1h",
-      "2h",
-      "1d"
-    ],
-    "time_options": [
-      "5m",
-      "15m",
-      "1h",
-      "6h",
-      "12h",
-      "24h",
-      "2d",
-      "7d",
-      "30d"
-    ],
-    "type": "timepicker"
-  },
-  "timezone": "browser",
-  "title": "Request Statistics",
-  "uid": "WcfSXqDnk",
-  "version": 131,
+  "timepicker": {},
+  "timezone": "",
+  "title": "Exchange",
+  "uid": "NYO0EIE7k",
+  "version": 38,
   "weekStart": ""
 }
\ No newline at end of file
diff --git a/additional/grafana/load-statistics.json 
b/additional/grafana/load-statistics.json
index c335d36..6fef09f 100644
--- a/additional/grafana/load-statistics.json
+++ b/additional/grafana/load-statistics.json
@@ -23,7 +23,7 @@
       "type": "grafana",
       "id": "grafana",
       "name": "Grafana",
-      "version": "8.3.2"
+      "version": "8.4.6"
     },
     {
       "type": "datasource",
@@ -132,7 +132,7 @@
           {
             "matcher": {
               "id": "byRegexp",
-              "options": "CPU Busy .*"
+              "options": "CPU Busy"
             },
             "properties": [
               {
@@ -174,11 +174,16 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "exemplar": true,
           "expr": "sum(rate(nginx_http_requests_total{} [$__rate_interval]))",
           "instant": false,
@@ -188,16 +193,20 @@
           "refId": "A"
         },
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "exemplar": true,
-          "expr": "avg by (mode) (sum by (mode, instance) 
(rate(node_cpu_seconds_total{mode=~\"system|user\", 
component=\"exchange\"}[$__rate_interval])))",
+          "expr": "100 - (avg(rate(node_cpu_seconds_total{mode=\"idle\", 
component=\"exchange\"}[$__rate_interval]))*100)",
           "hide": false,
           "interval": "",
           "intervalFactor": 1,
-          "legendFormat": "CPU Busy {{mode}}",
+          "legendFormat": "CPU Busy",
           "refId": "B"
         }
       ],
-      "title": " [Exchange] Requests vs CPU",
+      "title": " [Exchange] Requests vs Average CPU",
       "type": "timeseries"
     },
     {
@@ -292,7 +301,8 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
@@ -379,7 +389,7 @@
           {
             "matcher": {
               "id": "byRegexp",
-              "options": "CPU Busy .*"
+              "options": "CPU Busy"
             },
             "properties": [
               {
@@ -421,11 +431,16 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "exemplar": true,
           "expr": "sum(rate(nginx_http_requests_total{} [$__rate_interval]))",
           "interval": "",
@@ -433,11 +448,15 @@
           "refId": "A"
         },
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "exemplar": true,
-          "expr": "avg by (mode) (sum by (mode, 
instance)(rate(node_cpu_seconds_total{mode=~\"system|user|iowait\", 
component=\"database\"}[$__rate_interval])) )",
+          "expr": "100 - (avg by (instance) 
(rate(node_cpu_seconds_total{mode=\"idle\", 
component=\"database\"}[$__rate_interval]))*100)",
           "hide": false,
           "interval": "",
-          "legendFormat": "CPU Busy {{mode}}",
+          "legendFormat": "CPU Busy",
           "refId": "B"
         }
       ],
@@ -536,7 +555,8 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
@@ -653,19 +673,28 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "exemplar": true,
-          "expr": "nginx_http_requests_total{}",
+          "expr": "sum(rate(nginx_http_requests_total{} [$__rate_interval]))",
           "interval": "",
           "intervalFactor": 1,
           "legendFormat": "Requests",
           "refId": "A"
         },
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "exemplar": true,
           "expr": "sum(pg_database_size_bytes{instance=\"127.0.0.1:9187\"})",
           "hide": false,
@@ -674,7 +703,7 @@
           "refId": "C"
         }
       ],
-      "title": "Total Requests vs Disk Space used",
+      "title": "[Database] Total Requests vs Disk Space used",
       "type": "timeseries"
     },
     {
@@ -727,28 +756,28 @@
           {
             "matcher": {
               "id": "byName",
-              "options": "I/O Utilization"
+              "options": "Requests"
             },
             "properties": [
               {
-                "id": "custom.axisPlacement",
-                "value": "right"
-              },
-              {
-                "id": "unit",
-                "value": "percentunit"
+                "id": "custom.axisLabel",
+                "value": "Requests / Second"
               }
             ]
           },
           {
             "matcher": {
-              "id": "byName",
-              "options": "Requests"
+              "id": "byRegexp",
+              "options": "I/O Utilization(.*)"
             },
             "properties": [
               {
-                "id": "custom.axisLabel",
-                "value": "Requests / Second"
+                "id": "custom.axisPlacement",
+                "value": "right"
+              },
+              {
+                "id": "unit",
+                "value": "percentunit"
               }
             ]
           }
@@ -769,11 +798,16 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "exemplar": true,
           "expr": "sum(rate(nginx_http_requests_total{} [$__rate_interval]))",
           "interval": "",
@@ -782,15 +816,19 @@
           "refId": "A"
         },
         {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
           "exemplar": true,
-          "expr": 
"sum(rate(node_disk_io_time_seconds_total{component=\"database\"} 
[$__rate_interval]))",
+          "expr": "sum by (device) 
(rate(node_disk_io_time_seconds_total{component=\"database\"} 
[$__rate_interval]))",
           "hide": false,
           "interval": "",
-          "legendFormat": "I/O Utilization",
+          "legendFormat": "I/O Utilization ({{device}})",
           "refId": "C"
         }
       ],
-      "title": "Requests vs I/O Utilization",
+      "title": "[Database] Requests vs I/O Utilization",
       "type": "timeseries"
     },
     {
@@ -885,7 +923,8 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
@@ -906,7 +945,7 @@
           "refId": "C"
         }
       ],
-      "title": "Requests vs Cache Hit Rate",
+      "title": "[Database] Requests vs Cache Hit Rate",
       "type": "timeseries"
     },
     {
@@ -1019,7 +1058,8 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
@@ -1040,13 +1080,13 @@
             "type": "loki",
             "uid": "${DS_LOKI}"
           },
-          "expr": "rate({app=\"taler-database\"} |~ \"duration:\" [1m])",
+          "expr": "rate({app=\"taler-database\", type=\"slow-query\"} [1m])",
           "hide": false,
           "legendFormat": "Slow Queries",
           "refId": "C"
         }
       ],
-      "title": "Requests vs Slow Queries",
+      "title": "[Database] Requests vs Slow Queries",
       "type": "timeseries"
     },
     {
@@ -1133,7 +1173,7 @@
       "gridPos": {
         "h": 9,
         "w": 12,
-        "x": 0,
+        "x": 6,
         "y": 38
       },
       "id": 18,
@@ -1144,7 +1184,8 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "pluginVersion": "8.2.5",
@@ -1166,14 +1207,281 @@
           "refId": "A"
         }
       ],
-      "title": "Requests vs Serialization Errors",
+      "title": "[Database] Requests vs Serialization Errors",
       "transformations": [],
       "type": "timeseries"
     },
+    {
+      "collapsed": false,
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 47
+      },
+      "id": 21,
+      "panels": [],
+      "title": "Others",
+      "type": "row"
+    },
+    {
+      "description": "Number of requests versus average wallet node CPU usage",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "palette-classic"
+          },
+          "custom": {
+            "axisLabel": "",
+            "axisPlacement": "auto",
+            "barAlignment": 0,
+            "drawStyle": "line",
+            "fillOpacity": 0,
+            "gradientMode": "none",
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            },
+            "lineInterpolation": "linear",
+            "lineWidth": 2,
+            "pointSize": 5,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "showPoints": "auto",
+            "spanNulls": false,
+            "stacking": {
+              "group": "A",
+              "mode": "none"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          }
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byRegexp",
+              "options": "CPU Busy"
+            },
+            "properties": [
+              {
+                "id": "custom.axisPlacement",
+                "value": "right"
+              },
+              {
+                "id": "unit",
+                "value": "percent"
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Requests"
+            },
+            "properties": [
+              {
+                "id": "custom.axisLabel",
+                "value": "Requests / Second"
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 9,
+        "w": 12,
+        "x": 0,
+        "y": 48
+      },
+      "id": 19,
+      "maxDataPoints": 500,
+      "options": {
+        "legend": {
+          "calcs": [],
+          "displayMode": "list",
+          "placement": "bottom"
+        },
+        "tooltip": {
+          "mode": "single",
+          "sort": "none"
+        }
+      },
+      "targets": [
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "sum(rate(nginx_http_requests_total{} [$__rate_interval]))",
+          "instant": false,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "Requests",
+          "refId": "A"
+        },
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "100 - (avg(rate(node_cpu_seconds_total{mode=\"idle\", 
component=\"wallet\"}[$__rate_interval]))*100)",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "CPU Busy",
+          "refId": "B"
+        }
+      ],
+      "title": " [Wallet] Requests vs Average CPU",
+      "type": "timeseries"
+    },
+    {
+      "description": "Number of requests versus average exchange proxy node 
CPU usage",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "palette-classic"
+          },
+          "custom": {
+            "axisLabel": "",
+            "axisPlacement": "auto",
+            "barAlignment": 0,
+            "drawStyle": "line",
+            "fillOpacity": 0,
+            "gradientMode": "none",
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            },
+            "lineInterpolation": "linear",
+            "lineWidth": 2,
+            "pointSize": 5,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "showPoints": "auto",
+            "spanNulls": false,
+            "stacking": {
+              "group": "A",
+              "mode": "none"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          }
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byRegexp",
+              "options": "CPU Busy"
+            },
+            "properties": [
+              {
+                "id": "custom.axisPlacement",
+                "value": "right"
+              },
+              {
+                "id": "unit",
+                "value": "percent"
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Requests"
+            },
+            "properties": [
+              {
+                "id": "custom.axisLabel",
+                "value": "Requests / Second"
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 9,
+        "w": 12,
+        "x": 12,
+        "y": 48
+      },
+      "id": 22,
+      "maxDataPoints": 500,
+      "options": {
+        "legend": {
+          "calcs": [],
+          "displayMode": "list",
+          "placement": "bottom"
+        },
+        "tooltip": {
+          "mode": "single",
+          "sort": "none"
+        }
+      },
+      "targets": [
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "sum(rate(nginx_http_requests_total{} [$__rate_interval]))",
+          "instant": false,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "Requests",
+          "refId": "A"
+        },
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "100 - (avg(rate(node_cpu_seconds_total{mode=\"idle\", 
component=\"proxy\"}[$__rate_interval]))*100)",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "CPU Busy",
+          "refId": "B"
+        }
+      ],
+      "title": " [Exch Proxy] Requests vs Average CPU",
+      "type": "timeseries"
+    },
     {
       "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
+        "type": "datasource",
+        "uid": "-- Mixed --"
       },
       "description": "",
       "fieldConfig": {
@@ -1258,8 +1566,8 @@
       "gridPos": {
         "h": 9,
         "w": 12,
-        "x": 12,
-        "y": 38
+        "x": 6,
+        "y": 57
       },
       "id": 16,
       "options": {
@@ -1269,30 +1577,41 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
         {
-          "expr": "avg_over_time(({app=\"taler_proxy\"} | logfmt | 
__error__!=\"LogfmtParserErr\" | unwrap rt ) [1m]) by (app)",
-          "legendFormat": "Average Response time ",
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "rate({app=\"taler-database\", type=\"slow-query\"} [1m])",
+          "hide": false,
+          "legendFormat": "Slow Queries",
           "refId": "A",
-          "resolution": 5
+          "resolution": 1
         },
         {
-          "expr": "rate({app=\"taler-database\"} |~ \"duration:\" [1m])",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "avg 
((rate(taler_requests_response_time_hist_sum{endpoint!~\"keys|terms\", 
status=\"200\"} [2m]) ) / 
(rate(taler_requests_response_time_hist_count{endpoint!~\"keys|terms\", 
status=\"200\"} [2m])))",
           "hide": false,
-          "legendFormat": "Slow Queries",
-          "refId": "C",
-          "resolution": 1
+          "interval": "",
+          "legendFormat": "Average Response Time",
+          "refId": "B"
         }
       ],
       "title": "Proxy Response Time vs Slow Queries",
       "type": "timeseries"
     }
   ],
-  "refresh": "1m",
-  "schemaVersion": 33,
+  "refresh": "10s",
+  "schemaVersion": 35,
   "style": "dark",
   "tags": [
     "taler",
@@ -1309,6 +1628,6 @@
   "timezone": "",
   "title": "Load Statistics",
   "uid": "rkyhDAt7z",
-  "version": 48,
+  "version": 72,
   "weekStart": ""
 }
\ No newline at end of file
diff --git a/additional/grafana/nodes.json b/additional/grafana/nodes.json
new file mode 100644
index 0000000..b911c03
--- /dev/null
+++ b/additional/grafana/nodes.json
@@ -0,0 +1,13820 @@
+{
+  "__inputs": [
+    {
+      "name": "DS_PROMETHEUS",
+      "label": "Prometheus",
+      "description": "",
+      "type": "datasource",
+      "pluginId": "prometheus",
+      "pluginName": "Prometheus"
+    }
+  ],
+  "__elements": [],
+  "__requires": [
+    {
+      "type": "panel",
+      "id": "gauge",
+      "name": "Gauge",
+      "version": ""
+    },
+    {
+      "type": "grafana",
+      "id": "grafana",
+      "name": "Grafana",
+      "version": "8.4.3"
+    },
+    {
+      "type": "panel",
+      "id": "graph",
+      "name": "Graph (old)",
+      "version": ""
+    },
+    {
+      "type": "datasource",
+      "id": "prometheus",
+      "name": "Prometheus",
+      "version": "1.0.0"
+    },
+    {
+      "type": "panel",
+      "id": "stat",
+      "name": "Stat",
+      "version": ""
+    }
+  ],
+  "annotations": {
+    "list": [
+      {
+        "$$hashKey": "object:1058",
+        "builtIn": 1,
+        "datasource": "-- Grafana --",
+        "enable": true,
+        "hide": true,
+        "iconColor": "rgba(0, 211, 255, 1)",
+        "name": "Annotations & Alerts",
+        "target": {
+          "limit": 100,
+          "matchAny": false,
+          "tags": [],
+          "type": "dashboard"
+        },
+        "type": "dashboard"
+      }
+    ]
+  },
+  "editable": true,
+  "fiscalYearStartMonth": 0,
+  "gnetId": 1860,
+  "graphTooltip": 0,
+  "id": null,
+  "iteration": 1649441854879,
+  "links": [
+    {
+      "icon": "external link",
+      "tags": [],
+      "title": "Github",
+      "type": "link",
+      "url": "https://github.com/rfrail3/grafana-dashboards";
+    },
+    {
+      "icon": "external link",
+      "tags": [],
+      "title": "Grafana",
+      "type": "link",
+      "url": "https://grafana.com/grafana/dashboards/1860";
+    }
+  ],
+  "liveNow": false,
+  "panels": [
+    {
+      "collapsed": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 0
+      },
+      "id": 261,
+      "panels": [],
+      "title": "Quick CPU / Mem / Disk",
+      "type": "row"
+    },
+    {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "Busy state of all CPU cores together",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [
+            {
+              "options": {
+                "match": "null",
+                "result": {
+                  "text": "N/A"
+                }
+              },
+              "type": "special"
+            }
+          ],
+          "max": 100,
+          "min": 0,
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "rgba(50, 172, 45, 0.97)",
+                "value": null
+              },
+              {
+                "color": "rgba(237, 129, 40, 0.89)",
+                "value": 85
+              },
+              {
+                "color": "rgba(245, 54, 54, 0.9)",
+                "value": 95
+              }
+            ]
+          },
+          "unit": "percent"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 4,
+        "w": 3,
+        "x": 0,
+        "y": 1
+      },
+      "id": 20,
+      "links": [],
+      "options": {
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "showThresholdLabels": false,
+        "showThresholdMarkers": true,
+        "text": {}
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "expr": 
"(((count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by 
(cpu))) - avg(sum by 
(mode)(rate(node_cpu_seconds_total{mode='idle',instance=\"$node\",job=\"$job\"}[$__rate_interval]))))
 * 100) / count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) 
by (cpu))",
+          "hide": false,
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "title": "CPU Busy",
+      "type": "gauge"
+    },
+    {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "Busy state of all CPU cores together (5 min average)",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [
+            {
+              "options": {
+                "match": "null",
+                "result": {
+                  "text": "N/A"
+                }
+              },
+              "type": "special"
+            }
+          ],
+          "max": 100,
+          "min": 0,
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "rgba(50, 172, 45, 0.97)",
+                "value": null
+              },
+              {
+                "color": "rgba(237, 129, 40, 0.89)",
+                "value": 85
+              },
+              {
+                "color": "rgba(245, 54, 54, 0.9)",
+                "value": 95
+              }
+            ]
+          },
+          "unit": "percent"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 4,
+        "w": 3,
+        "x": 3,
+        "y": 1
+      },
+      "id": 155,
+      "links": [],
+      "options": {
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "showThresholdLabels": false,
+        "showThresholdMarkers": true,
+        "text": {}
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "expr": "avg(node_load5{instance=\"$node\",job=\"$job\"}) /  
count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)) 
* 100",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 1,
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "title": "Sys Load (5m avg)",
+      "type": "gauge"
+    },
+    {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "Busy state of all CPU cores together (15 min average)",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [
+            {
+              "options": {
+                "match": "null",
+                "result": {
+                  "text": "N/A"
+                }
+              },
+              "type": "special"
+            }
+          ],
+          "max": 100,
+          "min": 0,
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "rgba(50, 172, 45, 0.97)",
+                "value": null
+              },
+              {
+                "color": "rgba(237, 129, 40, 0.89)",
+                "value": 85
+              },
+              {
+                "color": "rgba(245, 54, 54, 0.9)",
+                "value": 95
+              }
+            ]
+          },
+          "unit": "percent"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 4,
+        "w": 3,
+        "x": 6,
+        "y": 1
+      },
+      "id": 19,
+      "links": [],
+      "options": {
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "showThresholdLabels": false,
+        "showThresholdMarkers": true,
+        "text": {}
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "expr": "avg(node_load15{instance=\"$node\",job=\"$job\"}) /  
count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)) 
* 100",
+          "hide": false,
+          "intervalFactor": 1,
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "title": "Sys Load (15m avg)",
+      "type": "gauge"
+    },
+    {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "Non available RAM memory",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "decimals": 0,
+          "mappings": [],
+          "max": 100,
+          "min": 0,
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "rgba(50, 172, 45, 0.97)",
+                "value": null
+              },
+              {
+                "color": "rgba(237, 129, 40, 0.89)",
+                "value": 80
+              },
+              {
+                "color": "rgba(245, 54, 54, 0.9)",
+                "value": 90
+              }
+            ]
+          },
+          "unit": "percent"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 4,
+        "w": 3,
+        "x": 9,
+        "y": 1
+      },
+      "hideTimeOverride": false,
+      "id": 16,
+      "links": [],
+      "options": {
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "showThresholdLabels": false,
+        "showThresholdMarkers": true,
+        "text": {}
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "expr": 
"((node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"} - 
node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"}) / 
(node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"} )) * 100",
+          "format": "time_series",
+          "hide": true,
+          "intervalFactor": 1,
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "100 - 
((node_memory_MemAvailable_bytes{instance=\"$node\",job=\"$job\"} * 100) / 
node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"})",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 1,
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "title": "RAM Used",
+      "type": "gauge"
+    },
+    {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "Used Swap",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [
+            {
+              "options": {
+                "match": "null",
+                "result": {
+                  "text": "N/A"
+                }
+              },
+              "type": "special"
+            }
+          ],
+          "max": 100,
+          "min": 0,
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "rgba(50, 172, 45, 0.97)",
+                "value": null
+              },
+              {
+                "color": "rgba(237, 129, 40, 0.89)",
+                "value": 10
+              },
+              {
+                "color": "rgba(245, 54, 54, 0.9)",
+                "value": 25
+              }
+            ]
+          },
+          "unit": "percent"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 4,
+        "w": 3,
+        "x": 12,
+        "y": 1
+      },
+      "id": 21,
+      "links": [],
+      "options": {
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "showThresholdLabels": false,
+        "showThresholdMarkers": true,
+        "text": {}
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "expr": 
"((node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} - 
node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"}) / 
(node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} )) * 100",
+          "intervalFactor": 1,
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "title": "SWAP Used",
+      "type": "gauge"
+    },
+    {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "Used Root FS",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [
+            {
+              "options": {
+                "match": "null",
+                "result": {
+                  "text": "N/A"
+                }
+              },
+              "type": "special"
+            }
+          ],
+          "max": 100,
+          "min": 0,
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "rgba(50, 172, 45, 0.97)",
+                "value": null
+              },
+              {
+                "color": "rgba(237, 129, 40, 0.89)",
+                "value": 80
+              },
+              {
+                "color": "rgba(245, 54, 54, 0.9)",
+                "value": 90
+              }
+            ]
+          },
+          "unit": "percent"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 4,
+        "w": 3,
+        "x": 15,
+        "y": 1
+      },
+      "id": 154,
+      "links": [],
+      "options": {
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "showThresholdLabels": false,
+        "showThresholdMarkers": true,
+        "text": {}
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "expr": "100 - 
((node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"}
 * 100) / 
node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"})",
+          "format": "time_series",
+          "intervalFactor": 1,
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "title": "Root FS Used",
+      "type": "gauge"
+    },
+    {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "Total number of CPU cores",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [
+            {
+              "options": {
+                "match": "null",
+                "result": {
+                  "text": "N/A"
+                }
+              },
+              "type": "special"
+            }
+          ],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "red",
+                "value": 80
+              }
+            ]
+          },
+          "unit": "short"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 2,
+        "w": 2,
+        "x": 18,
+        "y": 1
+      },
+      "id": 14,
+      "links": [],
+      "maxDataPoints": 100,
+      "options": {
+        "colorMode": "none",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "expr": 
"count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by 
(cpu))",
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "title": "CPU Cores",
+      "type": "stat"
+    },
+    {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "System uptime",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "decimals": 1,
+          "mappings": [
+            {
+              "options": {
+                "match": "null",
+                "result": {
+                  "text": "N/A"
+                }
+              },
+              "type": "special"
+            }
+          ],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "red",
+                "value": 80
+              }
+            ]
+          },
+          "unit": "s"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 2,
+        "w": 4,
+        "x": 20,
+        "y": 1
+      },
+      "hideTimeOverride": true,
+      "id": 15,
+      "links": [],
+      "maxDataPoints": 100,
+      "options": {
+        "colorMode": "none",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "expr": "node_time_seconds{instance=\"$node\",job=\"$job\"} - 
node_boot_time_seconds{instance=\"$node\",job=\"$job\"}",
+          "intervalFactor": 2,
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "title": "Uptime",
+      "type": "stat"
+    },
+    {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "Total RootFS",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "decimals": 0,
+          "mappings": [
+            {
+              "options": {
+                "match": "null",
+                "result": {
+                  "text": "N/A"
+                }
+              },
+              "type": "special"
+            }
+          ],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "rgba(50, 172, 45, 0.97)",
+                "value": null
+              },
+              {
+                "color": "rgba(237, 129, 40, 0.89)",
+                "value": 70
+              },
+              {
+                "color": "rgba(245, 54, 54, 0.9)",
+                "value": 90
+              }
+            ]
+          },
+          "unit": "bytes"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 2,
+        "w": 2,
+        "x": 18,
+        "y": 3
+      },
+      "id": 23,
+      "links": [],
+      "maxDataPoints": 100,
+      "options": {
+        "colorMode": "none",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "expr": 
"node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 1,
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "title": "RootFS Total",
+      "type": "stat"
+    },
+    {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "Total RAM",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "decimals": 0,
+          "mappings": [
+            {
+              "options": {
+                "match": "null",
+                "result": {
+                  "text": "N/A"
+                }
+              },
+              "type": "special"
+            }
+          ],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "red",
+                "value": 80
+              }
+            ]
+          },
+          "unit": "bytes"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 2,
+        "w": 2,
+        "x": 20,
+        "y": 3
+      },
+      "id": 75,
+      "links": [],
+      "maxDataPoints": 100,
+      "options": {
+        "colorMode": "none",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "expr": 
"node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"}",
+          "intervalFactor": 1,
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "title": "RAM Total",
+      "type": "stat"
+    },
+    {
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "Total SWAP",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "decimals": 0,
+          "mappings": [
+            {
+              "options": {
+                "match": "null",
+                "result": {
+                  "text": "N/A"
+                }
+              },
+              "type": "special"
+            }
+          ],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "red",
+                "value": 80
+              }
+            ]
+          },
+          "unit": "bytes"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 2,
+        "w": 2,
+        "x": 22,
+        "y": 3
+      },
+      "id": 18,
+      "links": [],
+      "maxDataPoints": 100,
+      "options": {
+        "colorMode": "none",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "expr": 
"node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"}",
+          "intervalFactor": 1,
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "title": "SWAP Total",
+      "type": "stat"
+    },
+    {
+      "collapsed": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 5
+      },
+      "id": 263,
+      "panels": [],
+      "title": "Basic CPU / Mem / Net / Disk",
+      "type": "row"
+    },
+    {
+      "aliasColors": {
+        "Busy": "#EAB839",
+        "Busy Iowait": "#890F02",
+        "Busy other": "#1F78C1",
+        "Idle": "#052B51",
+        "Idle - Waiting for something to happen": "#052B51",
+        "guest": "#9AC48A",
+        "idle": "#052B51",
+        "iowait": "#EAB839",
+        "irq": "#BF1B00",
+        "nice": "#C15C17",
+        "softirq": "#E24D42",
+        "steal": "#FCE2DE",
+        "system": "#508642",
+        "user": "#5195CE"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "description": "Basic CPU info",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 4,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 7,
+        "w": 12,
+        "x": 0,
+        "y": 6
+      },
+      "hiddenSeries": false,
+      "id": 77,
+      "legend": {
+        "alignAsTable": false,
+        "avg": false,
+        "current": false,
+        "max": false,
+        "min": false,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 250,
+        "total": false,
+        "values": false
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": true,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "Busy Iowait",
+          "color": "#890F02"
+        },
+        {
+          "alias": "Idle",
+          "color": "#7EB26D"
+        },
+        {
+          "alias": "Busy System",
+          "color": "#EAB839"
+        },
+        {
+          "alias": "Busy User",
+          "color": "#0A437C"
+        },
+        {
+          "alias": "Busy Other",
+          "color": "#6D1F62"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": true,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "sum by 
(instance)(rate(node_cpu_seconds_total{mode=\"system\",instance=\"$node\",job=\"$job\"}[$__rate_interval]))
 * 100",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "Busy System",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "sum by 
(instance)(rate(node_cpu_seconds_total{mode='user',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
 * 100",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "Busy User",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": "sum by 
(instance)(rate(node_cpu_seconds_total{mode='iowait',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
 * 100",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Busy Iowait",
+          "refId": "C",
+          "step": 240
+        },
+        {
+          "expr": "sum by 
(instance)(rate(node_cpu_seconds_total{mode=~\".*irq\",instance=\"$node\",job=\"$job\"}[$__rate_interval]))
 * 100",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Busy IRQs",
+          "refId": "D",
+          "step": 240
+        },
+        {
+          "expr": "sum 
(rate(node_cpu_seconds_total{mode!='idle',mode!='user',mode!='system',mode!='iowait',mode!='irq',mode!='softirq',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
 * 100",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Busy Other",
+          "refId": "E",
+          "step": 240
+        },
+        {
+          "expr": "sum by 
(mode)(rate(node_cpu_seconds_total{mode='idle',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
 * 100",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Idle",
+          "refId": "F",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "CPU Basic",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:123",
+          "format": "short",
+          "label": "",
+          "logBase": 1,
+          "max": "100",
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:124",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Apps": "#629E51",
+        "Buffers": "#614D93",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Free": "#0A437C",
+        "Hardware Corrupted - Amount of RAM that the kernel identified as 
corrupted / not working": "#CFFAFF",
+        "Inactive": "#584477",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "RAM_Free": "#E0F9D7",
+        "SWAP Used": "#BF1B00",
+        "Slab": "#806EB7",
+        "Slab_Cache": "#E0752D",
+        "Swap": "#BF1B00",
+        "Swap Used": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Swap_Free": "#2F575E",
+        "Unused": "#EAB839"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "description": "Basic memory usage",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 4,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 7,
+        "w": 12,
+        "x": 12,
+        "y": 6
+      },
+      "hiddenSeries": false,
+      "id": 78,
+      "legend": {
+        "alignAsTable": false,
+        "avg": false,
+        "current": false,
+        "max": false,
+        "min": false,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 350,
+        "total": false,
+        "values": false
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "RAM Total",
+          "color": "#E0F9D7",
+          "fill": 0,
+          "stack": false
+        },
+        {
+          "alias": "RAM Cache + Buffer",
+          "color": "#052B51"
+        },
+        {
+          "alias": "RAM Free",
+          "color": "#7EB26D"
+        },
+        {
+          "alias": "Avaliable",
+          "color": "#DEDAF7",
+          "fill": 0,
+          "stack": false
+        }
+      ],
+      "spaceLength": 10,
+      "stack": true,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "RAM Total",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"} 
- node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"} - 
(node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} + 
node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"})",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "RAM Used",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": "node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} + 
node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "RAM Cache + Buffer",
+          "refId": "C",
+          "step": 240
+        },
+        {
+          "expr": "node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "RAM Free",
+          "refId": "D",
+          "step": 240
+        },
+        {
+          "expr": 
"(node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} - 
node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"})",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "SWAP Used",
+          "refId": "E",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory Basic",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Recv_bytes_eth2": "#7EB26D",
+        "Recv_bytes_lo": "#0A50A1",
+        "Recv_drop_eth2": "#6ED0E0",
+        "Recv_drop_lo": "#E0F9D7",
+        "Recv_errs_eth2": "#BF1B00",
+        "Recv_errs_lo": "#CCA300",
+        "Trans_bytes_eth2": "#7EB26D",
+        "Trans_bytes_lo": "#0A50A1",
+        "Trans_drop_eth2": "#6ED0E0",
+        "Trans_drop_lo": "#E0F9D7",
+        "Trans_errs_eth2": "#BF1B00",
+        "Trans_errs_lo": "#CCA300",
+        "recv_bytes_lo": "#0A50A1",
+        "recv_drop_eth0": "#99440A",
+        "recv_drop_lo": "#967302",
+        "recv_errs_eth0": "#BF1B00",
+        "recv_errs_lo": "#890F02",
+        "trans_bytes_eth0": "#7EB26D",
+        "trans_bytes_lo": "#0A50A1",
+        "trans_drop_eth0": "#99440A",
+        "trans_drop_lo": "#967302",
+        "trans_errs_eth0": "#BF1B00",
+        "trans_errs_lo": "#890F02"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "Basic network info per interface",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 4,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 7,
+        "w": 12,
+        "x": 0,
+        "y": 13
+      },
+      "hiddenSeries": false,
+      "id": 74,
+      "legend": {
+        "alignAsTable": false,
+        "avg": false,
+        "current": false,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": false,
+        "min": false,
+        "rightSide": false,
+        "show": true,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": false
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*trans.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_network_receive_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "recv {{device}}",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_network_transmit_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "trans {{device}} ",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Network Traffic Basic",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bps",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "pps",
+          "label": "",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 3,
+      "description": "Disk space used of all filesystems mounted",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 4,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 7,
+        "w": 12,
+        "x": 12,
+        "y": 13
+      },
+      "height": "",
+      "hiddenSeries": false,
+      "id": 152,
+      "legend": {
+        "alignAsTable": false,
+        "avg": false,
+        "current": false,
+        "max": false,
+        "min": false,
+        "rightSide": false,
+        "show": true,
+        "sort": "current",
+        "sortDesc": false,
+        "total": false,
+        "values": false
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "100 - 
((node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'} 
* 100) / 
node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'})",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{mountpoint}}",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Disk Space Used Basic",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "percent",
+          "logBase": 1,
+          "max": "100",
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": true
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "collapsed": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 20
+      },
+      "id": 265,
+      "panels": [],
+      "title": "CPU / Memory / Net / Disk",
+      "type": "row"
+    },
+    {
+      "aliasColors": {
+        "Idle - Waiting for something to happen": "#052B51",
+        "guest": "#9AC48A",
+        "idle": "#052B51",
+        "iowait": "#EAB839",
+        "irq": "#BF1B00",
+        "nice": "#C15C17",
+        "softirq": "#E24D42",
+        "steal": "#FCE2DE",
+        "system": "#508642",
+        "user": "#5195CE"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 4,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 12,
+        "w": 12,
+        "x": 0,
+        "y": 21
+      },
+      "hiddenSeries": false,
+      "id": 3,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 250,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": true,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": true,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "sum by 
(mode)(rate(node_cpu_seconds_total{mode=\"system\",instance=\"$node\",job=\"$job\"}[$__rate_interval]))
 * 100",
+          "format": "time_series",
+          "interval": "10s",
+          "intervalFactor": 2,
+          "legendFormat": "System - Processes executing in kernel mode",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "sum by 
(mode)(rate(node_cpu_seconds_total{mode='user',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
 * 100",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "User - Normal processes executing in user mode",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": "sum by 
(mode)(rate(node_cpu_seconds_total{mode='nice',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
 * 100",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Nice - Niced processes executing in user mode",
+          "refId": "C",
+          "step": 240
+        },
+        {
+          "expr": "sum by 
(mode)(rate(node_cpu_seconds_total{mode='idle',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
 * 100",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Idle - Waiting for something to happen",
+          "refId": "D",
+          "step": 240
+        },
+        {
+          "expr": "sum by 
(mode)(rate(node_cpu_seconds_total{mode='iowait',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
 * 100",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Iowait - Waiting for I/O to complete",
+          "refId": "E",
+          "step": 240
+        },
+        {
+          "expr": "sum by 
(mode)(rate(node_cpu_seconds_total{mode='irq',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
 * 100",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Irq - Servicing interrupts",
+          "refId": "F",
+          "step": 240
+        },
+        {
+          "expr": "sum by 
(mode)(rate(node_cpu_seconds_total{mode='softirq',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
 * 100",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Softirq - Servicing softirqs",
+          "refId": "G",
+          "step": 240
+        },
+        {
+          "expr": "sum by 
(mode)(rate(node_cpu_seconds_total{mode='steal',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
 * 100",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Steal - Time spent in other operating systems when 
running in a virtualized environment",
+          "refId": "H",
+          "step": 240
+        },
+        {
+          "expr": "sum by 
(mode)(rate(node_cpu_seconds_total{mode='guest',instance=\"$node\",job=\"$job\"}[$__rate_interval]))
 * 100",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Guest - Time spent running a virtual CPU for a 
guest operating system",
+          "refId": "I",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "CPU",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "percentage",
+          "logBase": 1,
+          "max": "100",
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Apps": "#629E51",
+        "Buffers": "#614D93",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Free": "#0A437C",
+        "Hardware Corrupted - Amount of RAM that the kernel identified as 
corrupted / not working": "#CFFAFF",
+        "Inactive": "#584477",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "RAM_Free": "#E0F9D7",
+        "Slab": "#806EB7",
+        "Slab_Cache": "#E0752D",
+        "Swap": "#BF1B00",
+        "Swap - Swap memory usage": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Swap_Free": "#2F575E",
+        "Unused": "#EAB839",
+        "Unused - Free memory unassigned": "#052B51"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 4,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 12,
+        "w": 12,
+        "x": 12,
+        "y": 21
+      },
+      "hiddenSeries": false,
+      "id": 24,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 350,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Hardware Corrupted - *./",
+          "stack": false
+        }
+      ],
+      "spaceLength": 10,
+      "stack": true,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"} 
- node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"} - 
node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"} - 
node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} - 
node_memory_Slab_bytes{instance=\"$node\",job=\"$job\"} - 
node_memory_PageTables_bytes{instance=\"$node\",job=\"$job\"} - 
node_memory_SwapCached_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "Apps - Memory used by user-space applications",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_PageTables_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "PageTables - Memory used to map between virtual and 
physical memory addresses",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_SwapCached_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "SwapCache - Memory that keeps track of pages that 
have been fetched from swap but not yet been modified",
+          "refId": "C",
+          "step": 240
+        },
+        {
+          "expr": "node_memory_Slab_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "Slab - Memory used by the kernel to cache data 
structures for its own use (caches like inode, dentry, etc)",
+          "refId": "D",
+          "step": 240
+        },
+        {
+          "expr": "node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "Cache - Parked file data (file content) cache",
+          "refId": "E",
+          "step": 240
+        },
+        {
+          "expr": "node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "Buffers - Block device (e.g. harddisk) cache",
+          "refId": "F",
+          "step": 240
+        },
+        {
+          "expr": "node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "Unused - Free memory unassigned",
+          "refId": "G",
+          "step": 240
+        },
+        {
+          "expr": 
"(node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} - 
node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"})",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "Swap - Swap space used",
+          "refId": "H",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_HardwareCorrupted_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "Hardware Corrupted - Amount of RAM that the kernel 
identified as corrupted / not working",
+          "refId": "I",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory Stack",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "receive_packets_eth0": "#7EB26D",
+        "receive_packets_lo": "#E24D42",
+        "transmit_packets_eth0": "#7EB26D",
+        "transmit_packets_lo": "#E24D42"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 4,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 12,
+        "w": 12,
+        "x": 0,
+        "y": 33
+      },
+      "hiddenSeries": false,
+      "id": 84,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "$$hashKey": "object:5871",
+          "alias": "/.*Trans.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_network_receive_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Receive",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_network_transmit_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Transmit",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Network Traffic",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:5884",
+          "format": "bps",
+          "label": "bits out (-) / in (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:5885",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 3,
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 4,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 12,
+        "w": 12,
+        "x": 12,
+        "y": 33
+      },
+      "height": "",
+      "hiddenSeries": false,
+      "id": 156,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sort": "current",
+        "sortDesc": false,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'} - 
node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{mountpoint}}",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Disk Space Used",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 12,
+        "w": 12,
+        "x": 0,
+        "y": 45
+      },
+      "hiddenSeries": false,
+      "id": 229,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Read.*/",
+          "transform": "negative-Y"
+        },
+        {
+          "alias": "/.*sda_.*/",
+          "color": "#7EB26D"
+        },
+        {
+          "alias": "/.*sdb_.*/",
+          "color": "#EAB839"
+        },
+        {
+          "alias": "/.*sdc_.*/",
+          "color": "#6ED0E0"
+        },
+        {
+          "alias": "/.*sdd_.*/",
+          "color": "#EF843C"
+        },
+        {
+          "alias": "/.*sde_.*/",
+          "color": "#E24D42"
+        },
+        {
+          "alias": "/.*sda1.*/",
+          "color": "#584477"
+        },
+        {
+          "alias": "/.*sda2_.*/",
+          "color": "#BA43A9"
+        },
+        {
+          "alias": "/.*sda3_.*/",
+          "color": "#F4D598"
+        },
+        {
+          "alias": "/.*sdb1.*/",
+          "color": "#0A50A1"
+        },
+        {
+          "alias": "/.*sdb2.*/",
+          "color": "#BF1B00"
+        },
+        {
+          "alias": "/.*sdb2.*/",
+          "color": "#BF1B00"
+        },
+        {
+          "alias": "/.*sdb3.*/",
+          "color": "#E0752D"
+        },
+        {
+          "alias": "/.*sdc1.*/",
+          "color": "#962D82"
+        },
+        {
+          "alias": "/.*sdc2.*/",
+          "color": "#614D93"
+        },
+        {
+          "alias": "/.*sdc3.*/",
+          "color": "#9AC48A"
+        },
+        {
+          "alias": "/.*sdd1.*/",
+          "color": "#65C5DB"
+        },
+        {
+          "alias": "/.*sdd2.*/",
+          "color": "#F9934E"
+        },
+        {
+          "alias": "/.*sdd3.*/",
+          "color": "#EA6460"
+        },
+        {
+          "alias": "/.*sde1.*/",
+          "color": "#E0F9D7"
+        },
+        {
+          "alias": "/.*sdd2.*/",
+          "color": "#FCEACA"
+        },
+        {
+          "alias": "/.*sde3.*/",
+          "color": "#F9E2D2"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])",
+          "intervalFactor": 4,
+          "legendFormat": "{{device}} - Reads completed",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Writes completed",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Disk IOps",
+      "tooltip": {
+        "shared": false,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "iops",
+          "label": "IO read (-) / write (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "io time": "#890F02"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 3,
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 4,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 12,
+        "w": 12,
+        "x": 12,
+        "y": 45
+      },
+      "hiddenSeries": false,
+      "id": 42,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*read*./",
+          "transform": "negative-Y"
+        },
+        {
+          "alias": "/.*sda.*/",
+          "color": "#7EB26D"
+        },
+        {
+          "alias": "/.*sdb.*/",
+          "color": "#EAB839"
+        },
+        {
+          "alias": "/.*sdc.*/",
+          "color": "#6ED0E0"
+        },
+        {
+          "alias": "/.*sdd.*/",
+          "color": "#EF843C"
+        },
+        {
+          "alias": "/.*sde.*/",
+          "color": "#E24D42"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_disk_read_bytes_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Successfully read bytes",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_disk_written_bytes_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Successfully written bytes",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "I/O Usage Read / Write",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": false,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:965",
+          "format": "Bps",
+          "label": "bytes read (-) / write (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:966",
+          "format": "ms",
+          "label": "",
+          "logBase": 1,
+          "show": true
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "io time": "#890F02"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 3,
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 4,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 12,
+        "w": 12,
+        "x": 0,
+        "y": 57
+      },
+      "hiddenSeries": false,
+      "id": 127,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_disk_io_time_seconds_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}
 [$__rate_interval])",
+          "format": "time_series",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}}",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "I/O Utilization",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": false,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:1041",
+          "format": "percentunit",
+          "label": "%util",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:1042",
+          "format": "s",
+          "label": "",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "collapsed": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 69
+      },
+      "id": 266,
+      "panels": [],
+      "title": "Memory Meminfo",
+      "type": "row"
+    },
+    {
+      "aliasColors": {
+        "Apps": "#629E51",
+        "Buffers": "#614D93",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Free": "#0A437C",
+        "Hardware Corrupted - Amount of RAM that the kernel identified as 
corrupted / not working": "#CFFAFF",
+        "Inactive": "#584477",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "RAM_Free": "#E0F9D7",
+        "Slab": "#806EB7",
+        "Slab_Cache": "#E0752D",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Swap_Free": "#2F575E",
+        "Unused": "#EAB839"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 70
+      },
+      "hiddenSeries": false,
+      "id": 136,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 350,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 2,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": true,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_memory_Inactive_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Inactive - Memory which has been less recently 
used.  It is more eligible to be reclaimed for other purposes",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "node_memory_Active_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Active - Memory that has been used more recently 
and usually not reclaimed unless absolutely necessary",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory Active / Inactive",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "cumulative"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Apps": "#629E51",
+        "Buffers": "#614D93",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Free": "#0A437C",
+        "Hardware Corrupted - Amount of RAM that the kernel identified as 
corrupted / not working": "#CFFAFF",
+        "Inactive": "#584477",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "RAM_Free": "#E0F9D7",
+        "Slab": "#806EB7",
+        "Slab_Cache": "#E0752D",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Swap_Free": "#2F575E",
+        "Unused": "#EAB839"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 70
+      },
+      "hiddenSeries": false,
+      "id": 135,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 350,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Committed_AS - *./"
+        },
+        {
+          "alias": "/.*CommitLimit - *./",
+          "color": "#BF1B00",
+          "fill": 0
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_memory_Committed_AS_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Committed_AS - Amount of memory presently allocated 
on the system",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_CommitLimit_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "CommitLimit - Amount of  memory currently available 
to be allocated on the system",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory Commited",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "cumulative"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Apps": "#629E51",
+        "Buffers": "#614D93",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Free": "#0A437C",
+        "Hardware Corrupted - Amount of RAM that the kernel identified as 
corrupted / not working": "#CFFAFF",
+        "Inactive": "#584477",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "RAM_Free": "#E0F9D7",
+        "Slab": "#806EB7",
+        "Slab_Cache": "#E0752D",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Swap_Free": "#2F575E",
+        "Unused": "#EAB839"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 80
+      },
+      "hiddenSeries": false,
+      "id": 191,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 350,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": true,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_memory_Inactive_file_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "Inactive_file - File-backed memory on inactive LRU 
list",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_Inactive_anon_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "Inactive_anon - Anonymous and swap cache on 
inactive LRU list, including tmpfs (shmem)",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_Active_file_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "Active_file - File-backed memory on active LRU 
list",
+          "refId": "C",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_Active_anon_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "Active_anon - Anonymous and swap cache on active 
least-recently-used (LRU) list, including tmpfs",
+          "refId": "D",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory Active / Inactive Detail",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "cumulative"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "bytes",
+          "logBase": 1,
+          "show": true
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Active": "#99440A",
+        "Buffers": "#58140C",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Dirty": "#6ED0E0",
+        "Free": "#B7DBAB",
+        "Inactive": "#EA6460",
+        "Mapped": "#052B51",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "Slab_Cache": "#EAB839",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Total": "#511749",
+        "Total RAM": "#052B51",
+        "Total RAM + Swap": "#052B51",
+        "Total Swap": "#614D93",
+        "VmallocUsed": "#EA6460"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 80
+      },
+      "hiddenSeries": false,
+      "id": 130,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 2,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_memory_Writeback_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Writeback - Memory which is actively being written 
back to disk",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_WritebackTmp_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "WritebackTmp - Memory used by FUSE for temporary 
writeback buffers",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": "node_memory_Dirty_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Dirty - Memory which is waiting to get written back 
to the disk",
+          "refId": "C",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory Writeback and Dirty",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Apps": "#629E51",
+        "Buffers": "#614D93",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Free": "#0A437C",
+        "Hardware Corrupted - Amount of RAM that the kernel identified as 
corrupted / not working": "#CFFAFF",
+        "Inactive": "#584477",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "RAM_Free": "#E0F9D7",
+        "Slab": "#806EB7",
+        "Slab_Cache": "#E0752D",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Swap_Free": "#2F575E",
+        "Unused": "#EAB839"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 90
+      },
+      "hiddenSeries": false,
+      "id": 138,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 350,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "$$hashKey": "object:4131",
+          "alias": "ShmemHugePages - Memory used by shared memory (shmem) and 
tmpfs allocated  with huge pages",
+          "fill": 0
+        },
+        {
+          "$$hashKey": "object:4138",
+          "alias": "ShmemHugePages - Memory used by shared memory (shmem) and 
tmpfs allocated  with huge pages",
+          "fill": 0
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_memory_Mapped_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Mapped - Used memory in mapped pages files which 
have been mmaped, such as libraries",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "node_memory_Shmem_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Shmem - Used shared memory (shared between several 
processes, thus including RAM disks)",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_ShmemHugePages_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "ShmemHugePages - Memory used by shared memory 
(shmem) and tmpfs allocated  with huge pages",
+          "refId": "C",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_ShmemPmdMapped_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "ShmemPmdMapped - Ammount of shared (shmem/tmpfs) 
memory backed by huge pages",
+          "refId": "D",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory Shared and Mapped",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "cumulative"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:4106",
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:4107",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Active": "#99440A",
+        "Buffers": "#58140C",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Dirty": "#6ED0E0",
+        "Free": "#B7DBAB",
+        "Inactive": "#EA6460",
+        "Mapped": "#052B51",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "Slab_Cache": "#EAB839",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Total": "#511749",
+        "Total RAM": "#052B51",
+        "Total RAM + Swap": "#052B51",
+        "Total Swap": "#614D93",
+        "VmallocUsed": "#EA6460"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 90
+      },
+      "hiddenSeries": false,
+      "id": 131,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 2,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": true,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_memory_SUnreclaim_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "SUnreclaim - Part of Slab, that cannot be reclaimed 
on memory pressure",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_SReclaimable_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "SReclaimable - Part of Slab, that might be 
reclaimed, such as caches",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory Slab",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Active": "#99440A",
+        "Buffers": "#58140C",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Dirty": "#6ED0E0",
+        "Free": "#B7DBAB",
+        "Inactive": "#EA6460",
+        "Mapped": "#052B51",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "Slab_Cache": "#EAB839",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Total": "#511749",
+        "Total RAM": "#052B51",
+        "Total RAM + Swap": "#052B51",
+        "VmallocUsed": "#EA6460"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 100
+      },
+      "hiddenSeries": false,
+      "id": 70,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_memory_VmallocChunk_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "VmallocChunk - Largest contigious block of vmalloc 
area which is free",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_VmallocTotal_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "VmallocTotal - Total size of vmalloc memory area",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_VmallocUsed_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "VmallocUsed - Amount of vmalloc area which is used",
+          "refId": "C",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory Vmalloc",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Apps": "#629E51",
+        "Buffers": "#614D93",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Free": "#0A437C",
+        "Hardware Corrupted - Amount of RAM that the kernel identified as 
corrupted / not working": "#CFFAFF",
+        "Inactive": "#584477",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "RAM_Free": "#E0F9D7",
+        "Slab": "#806EB7",
+        "Slab_Cache": "#E0752D",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Swap_Free": "#2F575E",
+        "Unused": "#EAB839"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 100
+      },
+      "hiddenSeries": false,
+      "id": 159,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 350,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_memory_Bounce_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Bounce - Memory used for block device bounce 
buffers",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory Bounce",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "cumulative"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Active": "#99440A",
+        "Buffers": "#58140C",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Dirty": "#6ED0E0",
+        "Free": "#B7DBAB",
+        "Inactive": "#EA6460",
+        "Mapped": "#052B51",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "Slab_Cache": "#EAB839",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Total": "#511749",
+        "Total RAM": "#052B51",
+        "Total RAM + Swap": "#052B51",
+        "VmallocUsed": "#EA6460"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 110
+      },
+      "hiddenSeries": false,
+      "id": 129,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Inactive *./",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_memory_AnonHugePages_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "AnonHugePages - Memory in anonymous huge pages",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_AnonPages_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "AnonPages - Memory in user pages not backed by 
files",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory Anonymous",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Apps": "#629E51",
+        "Buffers": "#614D93",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Free": "#0A437C",
+        "Hardware Corrupted - Amount of RAM that the kernel identified as 
corrupted / not working": "#CFFAFF",
+        "Inactive": "#584477",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "RAM_Free": "#E0F9D7",
+        "Slab": "#806EB7",
+        "Slab_Cache": "#E0752D",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Swap_Free": "#2F575E",
+        "Unused": "#EAB839"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 110
+      },
+      "hiddenSeries": false,
+      "id": 160,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 350,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 2,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_memory_KernelStack_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "KernelStack - Kernel memory stack. This is not 
reclaimable",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "node_memory_Percpu_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "PerCPU - Per CPU memory allocated dynamically by 
loadable modules",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory Kernel / CPU",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "cumulative"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Active": "#99440A",
+        "Buffers": "#58140C",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Dirty": "#6ED0E0",
+        "Free": "#B7DBAB",
+        "Inactive": "#EA6460",
+        "Mapped": "#052B51",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "Slab_Cache": "#EAB839",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Total": "#511749",
+        "Total RAM": "#806EB7",
+        "Total RAM + Swap": "#806EB7",
+        "VmallocUsed": "#EA6460"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 120
+      },
+      "hiddenSeries": false,
+      "id": 140,
+      "legend": {
+        "alignAsTable": true,
+        "avg": false,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_memory_HugePages_Free{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "HugePages_Free - Huge pages in the pool that are 
not yet allocated",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_HugePages_Rsvd{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "HugePages_Rsvd - Huge pages for which a commitment 
to allocate from the pool has been made, but no allocation has yet been made",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_HugePages_Surp{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "HugePages_Surp - Huge pages in the pool above the 
value in /proc/sys/vm/nr_hugepages",
+          "refId": "C",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory HugePages Counter",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "pages",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "label": "",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Active": "#99440A",
+        "Buffers": "#58140C",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Dirty": "#6ED0E0",
+        "Free": "#B7DBAB",
+        "Inactive": "#EA6460",
+        "Mapped": "#052B51",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "Slab_Cache": "#EAB839",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Total": "#511749",
+        "Total RAM": "#806EB7",
+        "Total RAM + Swap": "#806EB7",
+        "VmallocUsed": "#EA6460"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 120
+      },
+      "hiddenSeries": false,
+      "id": 71,
+      "legend": {
+        "alignAsTable": true,
+        "avg": false,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 2,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_memory_HugePages_Total{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "HugePages - Total size of the pool of huge pages",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_Hugepagesize_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Hugepagesize - Huge Page size",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory HugePages Size",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "label": "",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Active": "#99440A",
+        "Buffers": "#58140C",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Dirty": "#6ED0E0",
+        "Free": "#B7DBAB",
+        "Inactive": "#EA6460",
+        "Mapped": "#052B51",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "Slab_Cache": "#EAB839",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Total": "#511749",
+        "Total RAM": "#052B51",
+        "Total RAM + Swap": "#052B51",
+        "VmallocUsed": "#EA6460"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 130
+      },
+      "hiddenSeries": false,
+      "id": 128,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": false,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_memory_DirectMap1G_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "DirectMap1G - Amount of pages mapped as this size",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_DirectMap2M_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "DirectMap2M - Amount of pages mapped as this size",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": 
"node_memory_DirectMap4k_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "DirectMap4K - Amount of pages mapped as this size",
+          "refId": "C",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory DirectMap",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Apps": "#629E51",
+        "Buffers": "#614D93",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Free": "#0A437C",
+        "Hardware Corrupted - Amount of RAM that the kernel identified as 
corrupted / not working": "#CFFAFF",
+        "Inactive": "#584477",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "RAM_Free": "#E0F9D7",
+        "Slab": "#806EB7",
+        "Slab_Cache": "#E0752D",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Swap_Free": "#2F575E",
+        "Unused": "#EAB839"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 130
+      },
+      "hiddenSeries": false,
+      "id": 137,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 350,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_memory_Unevictable_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Unevictable - Amount of unevictable memory that 
can't be swapped out for a variety of reasons",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "node_memory_Mlocked_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "MLocked - Size of pages locked to memory using the 
mlock() system call",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory Unevictable and MLocked",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "cumulative"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Active": "#99440A",
+        "Buffers": "#58140C",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Dirty": "#6ED0E0",
+        "Free": "#B7DBAB",
+        "Inactive": "#EA6460",
+        "Mapped": "#052B51",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "Slab_Cache": "#EAB839",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Total": "#511749",
+        "Total RAM": "#052B51",
+        "Total RAM + Swap": "#052B51",
+        "Total Swap": "#614D93",
+        "VmallocUsed": "#EA6460"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 140
+      },
+      "hiddenSeries": false,
+      "id": 132,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_memory_NFS_Unstable_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "NFS Unstable - Memory in NFS pages sent to the 
server, but not yet commited to the storage",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory NFS",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "collapsed": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 150
+      },
+      "id": 267,
+      "panels": [],
+      "title": "Memory Vmstat",
+      "type": "row"
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 151
+      },
+      "hiddenSeries": false,
+      "id": 176,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*out/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_vmstat_pgpgin{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Pagesin - Page in operations",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_vmstat_pgpgout{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Pagesout - Page out operations",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory Pages In / Out",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "pages out (-) / in (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 151
+      },
+      "hiddenSeries": false,
+      "id": 22,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*out/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_vmstat_pswpin{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Pswpin - Pages swapped in",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_vmstat_pswpout{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Pswpout - Pages swapped out",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory Pages Swap In / Out",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "pages out (-) / in (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Apps": "#629E51",
+        "Buffers": "#614D93",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Free": "#0A437C",
+        "Hardware Corrupted - Amount of RAM that the kernel identified as 
corrupted / not working": "#CFFAFF",
+        "Inactive": "#584477",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "RAM_Free": "#E0F9D7",
+        "Slab": "#806EB7",
+        "Slab_Cache": "#E0752D",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Swap_Free": "#2F575E",
+        "Unused": "#EAB839"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 161
+      },
+      "hiddenSeries": false,
+      "id": 175,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 350,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "$$hashKey": "object:6118",
+          "alias": "Pgfault - Page major and minor fault operations",
+          "fill": 0,
+          "stack": false
+        }
+      ],
+      "spaceLength": 10,
+      "stack": true,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_vmstat_pgfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Pgfault - Page major and minor fault operations",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_vmstat_pgmajfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Pgmajfault - Major page fault operations",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_vmstat_pgfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])  
- 
rate(node_vmstat_pgmajfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Pgminfault - Minor page fault operations",
+          "refId": "C",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Memory Page Faults",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "cumulative"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:6133",
+          "format": "short",
+          "label": "faults",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:6134",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "Active": "#99440A",
+        "Buffers": "#58140C",
+        "Cache": "#6D1F62",
+        "Cached": "#511749",
+        "Committed": "#508642",
+        "Dirty": "#6ED0E0",
+        "Free": "#B7DBAB",
+        "Inactive": "#EA6460",
+        "Mapped": "#052B51",
+        "PageTables": "#0A50A1",
+        "Page_Tables": "#0A50A1",
+        "Slab_Cache": "#EAB839",
+        "Swap": "#BF1B00",
+        "Swap_Cache": "#C15C17",
+        "Total": "#511749",
+        "Total RAM": "#052B51",
+        "Total RAM + Swap": "#052B51",
+        "Total Swap": "#614D93",
+        "VmallocUsed": "#EA6460"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 2,
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 161
+      },
+      "hiddenSeries": false,
+      "id": 307,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_vmstat_oom_kill{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "oom killer invocations ",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "OOM Killer",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:5373",
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:5374",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "collapsed": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 171
+      },
+      "id": 293,
+      "panels": [],
+      "title": "System Timesync",
+      "type": "row"
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 172
+      },
+      "hiddenSeries": false,
+      "id": 260,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Variation*./",
+          "color": "#890F02"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_timex_estimated_error_seconds{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Estimated error in seconds",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "node_timex_offset_seconds{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Time offset in between local system and reference 
clock",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": 
"node_timex_maxerror_seconds{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Maximum error in seconds",
+          "refId": "C",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Time Syncronized Drift",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "s",
+          "label": "seconds",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 172
+      },
+      "hiddenSeries": false,
+      "id": 291,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_timex_loop_time_constant{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Phase-locked loop time adjust",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Time PLL Adjust",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 182
+      },
+      "hiddenSeries": false,
+      "id": 168,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Variation*./",
+          "color": "#890F02"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_timex_sync_status{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Is clock synchronized to a reliable server (1 = 
yes, 0 = no)",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_timex_frequency_adjustment_ratio{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Local clock frequency adjustment",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Time Syncronized Status",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 182
+      },
+      "hiddenSeries": false,
+      "id": 294,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_timex_tick_seconds{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Seconds between clock ticks",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_timex_tai_offset_seconds{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "International Atomic Time (TAI) offset",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Time Misc",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "s",
+          "label": "seconds",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "collapsed": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 192
+      },
+      "id": 312,
+      "panels": [],
+      "title": "System Processes",
+      "type": "row"
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 193
+      },
+      "hiddenSeries": false,
+      "id": 62,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_procs_blocked{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Processes blocked waiting for I/O to complete",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "node_procs_running{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Processes in runnable state",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Processes Status",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:6500",
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:6501",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 193
+      },
+      "hiddenSeries": false,
+      "id": 315,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": true,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_processes_state{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "{{ state }}",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Processes State",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:6500",
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:6501",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 203
+      },
+      "hiddenSeries": false,
+      "id": 148,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_forks_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "Processes forks second",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Processes  Forks",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:6640",
+          "format": "short",
+          "label": "forks / sec",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:6641",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 203
+      },
+      "hiddenSeries": false,
+      "id": 149,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Max.*/",
+          "fill": 0
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(process_virtual_memory_bytes{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Processes virtual memory size in bytes",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"process_resident_memory_max_bytes{instance=\"$node\",job=\"$job\"}",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Maximum amount of virtual memory available in 
bytes",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(process_virtual_memory_bytes{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Processes virtual memory size in bytes",
+          "refId": "C",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(process_virtual_memory_max_bytes{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Maximum amount of virtual memory available in 
bytes",
+          "refId": "D",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Processes Memory",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "decbytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 213
+      },
+      "hiddenSeries": false,
+      "id": 313,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "$$hashKey": "object:709",
+          "alias": "PIDs limit",
+          "color": "#F2495C",
+          "fill": 0
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_processes_pids{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Number of PIDs",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_processes_max_processes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "PIDs limit",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "PIDs Number and Limit",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:6500",
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:6501",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 213
+      },
+      "hiddenSeries": false,
+      "id": 305,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "$$hashKey": "object:4963",
+          "alias": "/.*waiting.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_schedstat_running_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "CPU {{ cpu }} - seconds spent running a process",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_schedstat_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "CPU {{ cpu }} - seconds spent by processing waiting 
for this CPU",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Process schedule stats Running / Waiting",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:4860",
+          "format": "s",
+          "label": "seconds",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:4861",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 223
+      },
+      "hiddenSeries": false,
+      "id": 314,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "$$hashKey": "object:709",
+          "alias": "Threads limit",
+          "color": "#F2495C",
+          "fill": 0
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_processes_threads{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Allocated threads",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_processes_max_threads{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Threads limit",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Threads Number and Limit",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:6500",
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:6501",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "collapsed": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 233
+      },
+      "id": 269,
+      "panels": [],
+      "title": "System Misc",
+      "type": "row"
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 234
+      },
+      "hiddenSeries": false,
+      "id": 8,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_context_switches_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Context switches",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_intr_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "Interrupts",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Context Switches / Interrupts",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 234
+      },
+      "hiddenSeries": false,
+      "id": 7,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_load1{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 4,
+          "legendFormat": "Load 1m",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "node_load5{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 4,
+          "legendFormat": "Load 5m",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": "node_load15{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 4,
+          "legendFormat": "Load 15m",
+          "refId": "C",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "System Load",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:6261",
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:6262",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 244
+      },
+      "hiddenSeries": false,
+      "id": 259,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Critical*./",
+          "color": "#E24D42",
+          "fill": 0
+        },
+        {
+          "alias": "/.*Max*./",
+          "color": "#EF843C",
+          "fill": 0
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_interrupts_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "{{ type }} - {{ info }}",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Interrupts Detail",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 244
+      },
+      "hiddenSeries": false,
+      "id": 306,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_schedstat_timeslices_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "CPU {{ cpu }}",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Schedule timeslices executed by each cpu",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:4860",
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:4861",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 254
+      },
+      "hiddenSeries": false,
+      "id": 151,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_entropy_available_bits{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Entropy available to random number generators",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Entropy",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:6568",
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:6569",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 254
+      },
+      "hiddenSeries": false,
+      "id": 308,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(process_cpu_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Time spent",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "CPU time spent in user and system contexts",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:4860",
+          "format": "s",
+          "label": "seconds",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:4861",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 264
+      },
+      "hiddenSeries": false,
+      "id": 64,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "$$hashKey": "object:6323",
+          "alias": "/.*Max*./",
+          "color": "#890F02",
+          "fill": 0
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "process_max_fds{instance=\"$node\",job=\"$job\"}",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Maximum open file descriptors",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "process_open_fds{instance=\"$node\",job=\"$job\"}",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Open file descriptors",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "File Descriptors",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:6338",
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:6339",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "collapsed": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 274
+      },
+      "id": 304,
+      "panels": [],
+      "title": "Hardware Misc",
+      "type": "row"
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 275
+      },
+      "hiddenSeries": false,
+      "id": 158,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "$$hashKey": "object:6726",
+          "alias": "/.*Critical*./",
+          "color": "#E24D42",
+          "fill": 0
+        },
+        {
+          "$$hashKey": "object:6727",
+          "alias": "/.*Max*./",
+          "color": "#EF843C",
+          "fill": 0
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_hwmon_temp_celsius{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "{{ chip }} {{ sensor }} temp",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_hwmon_temp_crit_alarm_celsius{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": true,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "{{ chip }} {{ sensor }} Critical Alarm",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": 
"node_hwmon_temp_crit_celsius{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "{{ chip }} {{ sensor }} Critical",
+          "refId": "C",
+          "step": 240
+        },
+        {
+          "expr": 
"node_hwmon_temp_crit_hyst_celsius{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": true,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "{{ chip }} {{ sensor }} Critical Historical",
+          "refId": "D",
+          "step": 240
+        },
+        {
+          "expr": 
"node_hwmon_temp_max_celsius{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": true,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "{{ chip }} {{ sensor }} Max",
+          "refId": "E",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Hardware temperature monitor",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:6750",
+          "format": "celsius",
+          "label": "temperature",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:6751",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 275
+      },
+      "hiddenSeries": false,
+      "id": 300,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "$$hashKey": "object:1655",
+          "alias": "/.*Max*./",
+          "color": "#EF843C",
+          "fill": 0
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_cooling_device_cur_state{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Current {{ name }} in {{ type }}",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_cooling_device_max_state{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Max {{ name }} in {{ type }}",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Throttle cooling device",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:1678",
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:1679",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 285
+      },
+      "hiddenSeries": false,
+      "id": 302,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_power_supply_online{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "{{ power_supply }} online",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Power supply",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:1678",
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:1679",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "collapsed": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 295
+      },
+      "id": 296,
+      "panels": [],
+      "title": "Systemd",
+      "type": "row"
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 296
+      },
+      "hiddenSeries": false,
+      "id": 297,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_systemd_socket_accepted_connections_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "{{ name }} Connections",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Systemd Sockets",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 296
+      },
+      "hiddenSeries": false,
+      "id": 298,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "Failed",
+          "color": "#F2495C"
+        },
+        {
+          "alias": "Inactive",
+          "color": "#FF9830"
+        },
+        {
+          "alias": "Active",
+          "color": "#73BF69"
+        },
+        {
+          "alias": "Deactivating",
+          "color": "#FFCB7D"
+        },
+        {
+          "alias": "Activating",
+          "color": "#C8F2C2"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": true,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"activating\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Activating",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"active\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Active",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": 
"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"deactivating\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Deactivating",
+          "refId": "C",
+          "step": 240
+        },
+        {
+          "expr": 
"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"failed\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Failed",
+          "refId": "D",
+          "step": 240
+        },
+        {
+          "expr": 
"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"inactive\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Inactive",
+          "refId": "E",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Systemd Units State",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "collapsed": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 306
+      },
+      "id": 270,
+      "panels": [],
+      "title": "Storage Disk",
+      "type": "row"
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "The number (after merges) of I/O requests completed per 
second for the device",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 307
+      },
+      "hiddenSeries": false,
+      "id": 9,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "$$hashKey": "object:2033",
+          "alias": "/.*Read.*/",
+          "transform": "negative-Y"
+        },
+        {
+          "$$hashKey": "object:2034",
+          "alias": "/.*sda_.*/",
+          "color": "#7EB26D"
+        },
+        {
+          "$$hashKey": "object:2035",
+          "alias": "/.*sdb_.*/",
+          "color": "#EAB839"
+        },
+        {
+          "$$hashKey": "object:2036",
+          "alias": "/.*sdc_.*/",
+          "color": "#6ED0E0"
+        },
+        {
+          "$$hashKey": "object:2037",
+          "alias": "/.*sdd_.*/",
+          "color": "#EF843C"
+        },
+        {
+          "$$hashKey": "object:2038",
+          "alias": "/.*sde_.*/",
+          "color": "#E24D42"
+        },
+        {
+          "$$hashKey": "object:2039",
+          "alias": "/.*sda1.*/",
+          "color": "#584477"
+        },
+        {
+          "$$hashKey": "object:2040",
+          "alias": "/.*sda2_.*/",
+          "color": "#BA43A9"
+        },
+        {
+          "$$hashKey": "object:2041",
+          "alias": "/.*sda3_.*/",
+          "color": "#F4D598"
+        },
+        {
+          "$$hashKey": "object:2042",
+          "alias": "/.*sdb1.*/",
+          "color": "#0A50A1"
+        },
+        {
+          "$$hashKey": "object:2043",
+          "alias": "/.*sdb2.*/",
+          "color": "#BF1B00"
+        },
+        {
+          "$$hashKey": "object:2044",
+          "alias": "/.*sdb3.*/",
+          "color": "#E0752D"
+        },
+        {
+          "$$hashKey": "object:2045",
+          "alias": "/.*sdc1.*/",
+          "color": "#962D82"
+        },
+        {
+          "$$hashKey": "object:2046",
+          "alias": "/.*sdc2.*/",
+          "color": "#614D93"
+        },
+        {
+          "$$hashKey": "object:2047",
+          "alias": "/.*sdc3.*/",
+          "color": "#9AC48A"
+        },
+        {
+          "$$hashKey": "object:2048",
+          "alias": "/.*sdd1.*/",
+          "color": "#65C5DB"
+        },
+        {
+          "$$hashKey": "object:2049",
+          "alias": "/.*sdd2.*/",
+          "color": "#F9934E"
+        },
+        {
+          "$$hashKey": "object:2050",
+          "alias": "/.*sdd3.*/",
+          "color": "#EA6460"
+        },
+        {
+          "$$hashKey": "object:2051",
+          "alias": "/.*sde1.*/",
+          "color": "#E0F9D7"
+        },
+        {
+          "$$hashKey": "object:2052",
+          "alias": "/.*sdd2.*/",
+          "color": "#FCEACA"
+        },
+        {
+          "$$hashKey": "object:2053",
+          "alias": "/.*sde3.*/",
+          "color": "#F9E2D2"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "intervalFactor": 4,
+          "legendFormat": "{{device}} - Reads completed",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Writes completed",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Disk IOps Completed",
+      "tooltip": {
+        "shared": false,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:2186",
+          "format": "iops",
+          "label": "IO read (-) / write (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:2187",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "The number of bytes read from or written to the device 
per second",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 307
+      },
+      "hiddenSeries": false,
+      "id": 33,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Read.*/",
+          "transform": "negative-Y"
+        },
+        {
+          "alias": "/.*sda_.*/",
+          "color": "#7EB26D"
+        },
+        {
+          "alias": "/.*sdb_.*/",
+          "color": "#EAB839"
+        },
+        {
+          "alias": "/.*sdc_.*/",
+          "color": "#6ED0E0"
+        },
+        {
+          "alias": "/.*sdd_.*/",
+          "color": "#EF843C"
+        },
+        {
+          "alias": "/.*sde_.*/",
+          "color": "#E24D42"
+        },
+        {
+          "alias": "/.*sda1.*/",
+          "color": "#584477"
+        },
+        {
+          "alias": "/.*sda2_.*/",
+          "color": "#BA43A9"
+        },
+        {
+          "alias": "/.*sda3_.*/",
+          "color": "#F4D598"
+        },
+        {
+          "alias": "/.*sdb1.*/",
+          "color": "#0A50A1"
+        },
+        {
+          "alias": "/.*sdb2.*/",
+          "color": "#BF1B00"
+        },
+        {
+          "alias": "/.*sdb3.*/",
+          "color": "#E0752D"
+        },
+        {
+          "alias": "/.*sdc1.*/",
+          "color": "#962D82"
+        },
+        {
+          "alias": "/.*sdc2.*/",
+          "color": "#614D93"
+        },
+        {
+          "alias": "/.*sdc3.*/",
+          "color": "#9AC48A"
+        },
+        {
+          "alias": "/.*sdd1.*/",
+          "color": "#65C5DB"
+        },
+        {
+          "alias": "/.*sdd2.*/",
+          "color": "#F9934E"
+        },
+        {
+          "alias": "/.*sdd3.*/",
+          "color": "#EA6460"
+        },
+        {
+          "alias": "/.*sde1.*/",
+          "color": "#E0F9D7"
+        },
+        {
+          "alias": "/.*sdd2.*/",
+          "color": "#FCEACA"
+        },
+        {
+          "alias": "/.*sde3.*/",
+          "color": "#F9E2D2"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_disk_read_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 4,
+          "legendFormat": "{{device}} - Read bytes",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_disk_written_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Written bytes",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Disk R/W Data",
+      "tooltip": {
+        "shared": false,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:369",
+          "format": "Bps",
+          "label": "bytes read (-) / write (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:370",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "The average time for requests issued to the device to be 
served. This includes the time spent by the requests in queue and the time 
spent servicing them.",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 3,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 317
+      },
+      "hiddenSeries": false,
+      "id": 37,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Read.*/",
+          "transform": "negative-Y"
+        },
+        {
+          "alias": "/.*sda_.*/",
+          "color": "#7EB26D"
+        },
+        {
+          "alias": "/.*sdb_.*/",
+          "color": "#EAB839"
+        },
+        {
+          "alias": "/.*sdc_.*/",
+          "color": "#6ED0E0"
+        },
+        {
+          "alias": "/.*sdd_.*/",
+          "color": "#EF843C"
+        },
+        {
+          "alias": "/.*sde_.*/",
+          "color": "#E24D42"
+        },
+        {
+          "alias": "/.*sda1.*/",
+          "color": "#584477"
+        },
+        {
+          "alias": "/.*sda2_.*/",
+          "color": "#BA43A9"
+        },
+        {
+          "alias": "/.*sda3_.*/",
+          "color": "#F4D598"
+        },
+        {
+          "alias": "/.*sdb1.*/",
+          "color": "#0A50A1"
+        },
+        {
+          "alias": "/.*sdb2.*/",
+          "color": "#BF1B00"
+        },
+        {
+          "alias": "/.*sdb3.*/",
+          "color": "#E0752D"
+        },
+        {
+          "alias": "/.*sdc1.*/",
+          "color": "#962D82"
+        },
+        {
+          "alias": "/.*sdc2.*/",
+          "color": "#614D93"
+        },
+        {
+          "alias": "/.*sdc3.*/",
+          "color": "#9AC48A"
+        },
+        {
+          "alias": "/.*sdd1.*/",
+          "color": "#65C5DB"
+        },
+        {
+          "alias": "/.*sdd2.*/",
+          "color": "#F9934E"
+        },
+        {
+          "alias": "/.*sdd3.*/",
+          "color": "#EA6460"
+        },
+        {
+          "alias": "/.*sde1.*/",
+          "color": "#E0F9D7"
+        },
+        {
+          "alias": "/.*sdd2.*/",
+          "color": "#FCEACA"
+        },
+        {
+          "alias": "/.*sde3.*/",
+          "color": "#F9E2D2"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_disk_read_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])
 / 
rate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 4,
+          "legendFormat": "{{device}} - r_await",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_disk_write_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])
 / 
rate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - w_await",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Disk Average Wait Time",
+      "tooltip": {
+        "shared": false,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:441",
+          "format": "s",
+          "label": "time. read (-) / write (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:442",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "The average queue length of the requests that were 
issued to the device",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 317
+      },
+      "hiddenSeries": false,
+      "id": 35,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*sda_.*/",
+          "color": "#7EB26D"
+        },
+        {
+          "alias": "/.*sdb_.*/",
+          "color": "#EAB839"
+        },
+        {
+          "alias": "/.*sdc_.*/",
+          "color": "#6ED0E0"
+        },
+        {
+          "alias": "/.*sdd_.*/",
+          "color": "#EF843C"
+        },
+        {
+          "alias": "/.*sde_.*/",
+          "color": "#E24D42"
+        },
+        {
+          "alias": "/.*sda1.*/",
+          "color": "#584477"
+        },
+        {
+          "alias": "/.*sda2_.*/",
+          "color": "#BA43A9"
+        },
+        {
+          "alias": "/.*sda3_.*/",
+          "color": "#F4D598"
+        },
+        {
+          "alias": "/.*sdb1.*/",
+          "color": "#0A50A1"
+        },
+        {
+          "alias": "/.*sdb2.*/",
+          "color": "#BF1B00"
+        },
+        {
+          "alias": "/.*sdb3.*/",
+          "color": "#E0752D"
+        },
+        {
+          "alias": "/.*sdc1.*/",
+          "color": "#962D82"
+        },
+        {
+          "alias": "/.*sdc2.*/",
+          "color": "#614D93"
+        },
+        {
+          "alias": "/.*sdc3.*/",
+          "color": "#9AC48A"
+        },
+        {
+          "alias": "/.*sdd1.*/",
+          "color": "#65C5DB"
+        },
+        {
+          "alias": "/.*sdd2.*/",
+          "color": "#F9934E"
+        },
+        {
+          "alias": "/.*sdd3.*/",
+          "color": "#EA6460"
+        },
+        {
+          "alias": "/.*sde1.*/",
+          "color": "#E0F9D7"
+        },
+        {
+          "alias": "/.*sdd2.*/",
+          "color": "#FCEACA"
+        },
+        {
+          "alias": "/.*sde3.*/",
+          "color": "#F9E2D2"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_disk_io_time_weighted_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "interval": "",
+          "intervalFactor": 4,
+          "legendFormat": "{{device}}",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Average Queue Size",
+      "tooltip": {
+        "shared": false,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:513",
+          "format": "none",
+          "label": "aqu-sz",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:514",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "The number of read and write requests merged per second 
that were queued to the device",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 327
+      },
+      "hiddenSeries": false,
+      "id": 133,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Read.*/",
+          "transform": "negative-Y"
+        },
+        {
+          "alias": "/.*sda_.*/",
+          "color": "#7EB26D"
+        },
+        {
+          "alias": "/.*sdb_.*/",
+          "color": "#EAB839"
+        },
+        {
+          "alias": "/.*sdc_.*/",
+          "color": "#6ED0E0"
+        },
+        {
+          "alias": "/.*sdd_.*/",
+          "color": "#EF843C"
+        },
+        {
+          "alias": "/.*sde_.*/",
+          "color": "#E24D42"
+        },
+        {
+          "alias": "/.*sda1.*/",
+          "color": "#584477"
+        },
+        {
+          "alias": "/.*sda2_.*/",
+          "color": "#BA43A9"
+        },
+        {
+          "alias": "/.*sda3_.*/",
+          "color": "#F4D598"
+        },
+        {
+          "alias": "/.*sdb1.*/",
+          "color": "#0A50A1"
+        },
+        {
+          "alias": "/.*sdb2.*/",
+          "color": "#BF1B00"
+        },
+        {
+          "alias": "/.*sdb3.*/",
+          "color": "#E0752D"
+        },
+        {
+          "alias": "/.*sdc1.*/",
+          "color": "#962D82"
+        },
+        {
+          "alias": "/.*sdc2.*/",
+          "color": "#614D93"
+        },
+        {
+          "alias": "/.*sdc3.*/",
+          "color": "#9AC48A"
+        },
+        {
+          "alias": "/.*sdd1.*/",
+          "color": "#65C5DB"
+        },
+        {
+          "alias": "/.*sdd2.*/",
+          "color": "#F9934E"
+        },
+        {
+          "alias": "/.*sdd3.*/",
+          "color": "#EA6460"
+        },
+        {
+          "alias": "/.*sde1.*/",
+          "color": "#E0F9D7"
+        },
+        {
+          "alias": "/.*sdd2.*/",
+          "color": "#FCEACA"
+        },
+        {
+          "alias": "/.*sde3.*/",
+          "color": "#F9E2D2"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_disk_reads_merged_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Read merged",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_disk_writes_merged_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Write merged",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Disk R/W Merged",
+      "tooltip": {
+        "shared": false,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:585",
+          "format": "iops",
+          "label": "I/Os",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:586",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "Percentage of elapsed time during which I/O requests 
were issued to the device (bandwidth utilization for the device). Device 
saturation occurs when this value is close to 100% for devices serving requests 
serially.  But for devices  serving requests in parallel, such as RAID arrays 
and modern SSDs, this number does not reflect their performance limits.",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 3,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 327
+      },
+      "hiddenSeries": false,
+      "id": 36,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*sda_.*/",
+          "color": "#7EB26D"
+        },
+        {
+          "alias": "/.*sdb_.*/",
+          "color": "#EAB839"
+        },
+        {
+          "alias": "/.*sdc_.*/",
+          "color": "#6ED0E0"
+        },
+        {
+          "alias": "/.*sdd_.*/",
+          "color": "#EF843C"
+        },
+        {
+          "alias": "/.*sde_.*/",
+          "color": "#E24D42"
+        },
+        {
+          "alias": "/.*sda1.*/",
+          "color": "#584477"
+        },
+        {
+          "alias": "/.*sda2_.*/",
+          "color": "#BA43A9"
+        },
+        {
+          "alias": "/.*sda3_.*/",
+          "color": "#F4D598"
+        },
+        {
+          "alias": "/.*sdb1.*/",
+          "color": "#0A50A1"
+        },
+        {
+          "alias": "/.*sdb2.*/",
+          "color": "#BF1B00"
+        },
+        {
+          "alias": "/.*sdb3.*/",
+          "color": "#E0752D"
+        },
+        {
+          "alias": "/.*sdc1.*/",
+          "color": "#962D82"
+        },
+        {
+          "alias": "/.*sdc2.*/",
+          "color": "#614D93"
+        },
+        {
+          "alias": "/.*sdc3.*/",
+          "color": "#9AC48A"
+        },
+        {
+          "alias": "/.*sdd1.*/",
+          "color": "#65C5DB"
+        },
+        {
+          "alias": "/.*sdd2.*/",
+          "color": "#F9934E"
+        },
+        {
+          "alias": "/.*sdd3.*/",
+          "color": "#EA6460"
+        },
+        {
+          "alias": "/.*sde1.*/",
+          "color": "#E0F9D7"
+        },
+        {
+          "alias": "/.*sdd2.*/",
+          "color": "#FCEACA"
+        },
+        {
+          "alias": "/.*sde3.*/",
+          "color": "#F9E2D2"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_disk_io_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "interval": "",
+          "intervalFactor": 4,
+          "legendFormat": "{{device}} - IO",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_disk_discard_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "interval": "",
+          "intervalFactor": 4,
+          "legendFormat": "{{device}} - discard",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Time Spent Doing I/Os",
+      "tooltip": {
+        "shared": false,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:657",
+          "format": "percentunit",
+          "label": "%util",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:658",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "The number of outstanding requests at the instant the 
sample was taken. Incremented as requests are given to appropriate struct 
request_queue and decremented as they finish.",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 337
+      },
+      "hiddenSeries": false,
+      "id": 34,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*sda_.*/",
+          "color": "#7EB26D"
+        },
+        {
+          "alias": "/.*sdb_.*/",
+          "color": "#EAB839"
+        },
+        {
+          "alias": "/.*sdc_.*/",
+          "color": "#6ED0E0"
+        },
+        {
+          "alias": "/.*sdd_.*/",
+          "color": "#EF843C"
+        },
+        {
+          "alias": "/.*sde_.*/",
+          "color": "#E24D42"
+        },
+        {
+          "alias": "/.*sda1.*/",
+          "color": "#584477"
+        },
+        {
+          "alias": "/.*sda2_.*/",
+          "color": "#BA43A9"
+        },
+        {
+          "alias": "/.*sda3_.*/",
+          "color": "#F4D598"
+        },
+        {
+          "alias": "/.*sdb1.*/",
+          "color": "#0A50A1"
+        },
+        {
+          "alias": "/.*sdb2.*/",
+          "color": "#BF1B00"
+        },
+        {
+          "alias": "/.*sdb3.*/",
+          "color": "#E0752D"
+        },
+        {
+          "alias": "/.*sdc1.*/",
+          "color": "#962D82"
+        },
+        {
+          "alias": "/.*sdc2.*/",
+          "color": "#614D93"
+        },
+        {
+          "alias": "/.*sdc3.*/",
+          "color": "#9AC48A"
+        },
+        {
+          "alias": "/.*sdd1.*/",
+          "color": "#65C5DB"
+        },
+        {
+          "alias": "/.*sdd2.*/",
+          "color": "#F9934E"
+        },
+        {
+          "alias": "/.*sdd3.*/",
+          "color": "#EA6460"
+        },
+        {
+          "alias": "/.*sde1.*/",
+          "color": "#E0F9D7"
+        },
+        {
+          "alias": "/.*sdd2.*/",
+          "color": "#FCEACA"
+        },
+        {
+          "alias": "/.*sde3.*/",
+          "color": "#F9E2D2"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_disk_io_now{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "intervalFactor": 4,
+          "legendFormat": "{{device}} - IO now",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Instantaneous Queue Size",
+      "tooltip": {
+        "shared": false,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:729",
+          "format": "iops",
+          "label": "I/Os",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:730",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 337
+      },
+      "hiddenSeries": false,
+      "id": 301,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null as zero",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "$$hashKey": "object:2034",
+          "alias": "/.*sda_.*/",
+          "color": "#7EB26D"
+        },
+        {
+          "$$hashKey": "object:2035",
+          "alias": "/.*sdb_.*/",
+          "color": "#EAB839"
+        },
+        {
+          "$$hashKey": "object:2036",
+          "alias": "/.*sdc_.*/",
+          "color": "#6ED0E0"
+        },
+        {
+          "$$hashKey": "object:2037",
+          "alias": "/.*sdd_.*/",
+          "color": "#EF843C"
+        },
+        {
+          "$$hashKey": "object:2038",
+          "alias": "/.*sde_.*/",
+          "color": "#E24D42"
+        },
+        {
+          "$$hashKey": "object:2039",
+          "alias": "/.*sda1.*/",
+          "color": "#584477"
+        },
+        {
+          "$$hashKey": "object:2040",
+          "alias": "/.*sda2_.*/",
+          "color": "#BA43A9"
+        },
+        {
+          "$$hashKey": "object:2041",
+          "alias": "/.*sda3_.*/",
+          "color": "#F4D598"
+        },
+        {
+          "$$hashKey": "object:2042",
+          "alias": "/.*sdb1.*/",
+          "color": "#0A50A1"
+        },
+        {
+          "$$hashKey": "object:2043",
+          "alias": "/.*sdb2.*/",
+          "color": "#BF1B00"
+        },
+        {
+          "$$hashKey": "object:2044",
+          "alias": "/.*sdb3.*/",
+          "color": "#E0752D"
+        },
+        {
+          "$$hashKey": "object:2045",
+          "alias": "/.*sdc1.*/",
+          "color": "#962D82"
+        },
+        {
+          "$$hashKey": "object:2046",
+          "alias": "/.*sdc2.*/",
+          "color": "#614D93"
+        },
+        {
+          "$$hashKey": "object:2047",
+          "alias": "/.*sdc3.*/",
+          "color": "#9AC48A"
+        },
+        {
+          "$$hashKey": "object:2048",
+          "alias": "/.*sdd1.*/",
+          "color": "#65C5DB"
+        },
+        {
+          "$$hashKey": "object:2049",
+          "alias": "/.*sdd2.*/",
+          "color": "#F9934E"
+        },
+        {
+          "$$hashKey": "object:2050",
+          "alias": "/.*sdd3.*/",
+          "color": "#EA6460"
+        },
+        {
+          "$$hashKey": "object:2051",
+          "alias": "/.*sde1.*/",
+          "color": "#E0F9D7"
+        },
+        {
+          "$$hashKey": "object:2052",
+          "alias": "/.*sdd2.*/",
+          "color": "#FCEACA"
+        },
+        {
+          "$$hashKey": "object:2053",
+          "alias": "/.*sde3.*/",
+          "color": "#F9E2D2"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_disk_discards_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "interval": "",
+          "intervalFactor": 4,
+          "legendFormat": "{{device}} - Discards completed",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_disk_discards_merged_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Discards merged",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Disk IOps Discards completed / merged",
+      "tooltip": {
+        "shared": false,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:2186",
+          "format": "iops",
+          "label": "IOs",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:2187",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "collapsed": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 347
+      },
+      "id": 271,
+      "panels": [],
+      "title": "Storage Filesystem",
+      "type": "row"
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 3,
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 348
+      },
+      "hiddenSeries": false,
+      "id": 43,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "{{mountpoint}} - Available",
+          "metric": "",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_filesystem_free_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}",
+          "format": "time_series",
+          "hide": true,
+          "intervalFactor": 2,
+          "legendFormat": "{{mountpoint}} - Free",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": 
"node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}",
+          "format": "time_series",
+          "hide": true,
+          "intervalFactor": 2,
+          "legendFormat": "{{mountpoint}} - Size",
+          "refId": "C",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Filesystem space available",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:3826",
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:3827",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 348
+      },
+      "hiddenSeries": false,
+      "id": 41,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_filesystem_files_free{instance=\"$node\",job=\"$job\",device!~'rootfs'}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "{{mountpoint}} - Free file nodes",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "File Nodes Free",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:3894",
+          "format": "short",
+          "label": "file nodes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:3895",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 358
+      },
+      "hiddenSeries": false,
+      "id": 28,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_filefd_maximum{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 4,
+          "legendFormat": "Max open files",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "node_filefd_allocated{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "Open files",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "File Descriptor",
+      "tooltip": {
+        "shared": false,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "files",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 358
+      },
+      "hiddenSeries": false,
+      "id": 219,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_filesystem_files{instance=\"$node\",job=\"$job\",device!~'rootfs'}",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "{{mountpoint}} - File nodes total",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "File Nodes Size",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "file Nodes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {
+        "/ ReadOnly": "#890F02"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 368
+      },
+      "hiddenSeries": false,
+      "id": 44,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": true,
+        "hideZero": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 6,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": true,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_filesystem_readonly{instance=\"$node\",job=\"$job\",device!~'rootfs'}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{mountpoint}} - ReadOnly",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_filesystem_device_error{instance=\"$node\",job=\"$job\",device!~'rootfs',fstype!~'tmpfs'}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "{{mountpoint}} - Device error",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Filesystem in ReadOnly / Error",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:3670",
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "max": "1",
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:3671",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "collapsed": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 378
+      },
+      "id": 272,
+      "panels": [],
+      "title": "Network Traffic",
+      "type": "row"
+    },
+    {
+      "aliasColors": {
+        "receive_packets_eth0": "#7EB26D",
+        "receive_packets_lo": "#E24D42",
+        "transmit_packets_eth0": "#7EB26D",
+        "transmit_packets_lo": "#E24D42"
+      },
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 379
+      },
+      "hiddenSeries": false,
+      "id": 60,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Trans.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_network_receive_packets_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Receive",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_network_transmit_packets_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Transmit",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Network Traffic by Packets",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "pps",
+          "label": "packets out (-) / in (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 379
+      },
+      "hiddenSeries": false,
+      "id": 142,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Trans.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_network_receive_errs_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Receive errors",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_network_transmit_errs_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Rransmit errors",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Network Traffic Errors",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "pps",
+          "label": "packets out (-) / in (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 389
+      },
+      "hiddenSeries": false,
+      "id": 143,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Trans.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_network_receive_drop_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Receive drop",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_network_transmit_drop_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Transmit drop",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Network Traffic Drop",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "pps",
+          "label": "packets out (-) / in (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 389
+      },
+      "hiddenSeries": false,
+      "id": 141,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Trans.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_network_receive_compressed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Receive compressed",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_network_transmit_compressed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Transmit compressed",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Network Traffic Compressed",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "pps",
+          "label": "packets out (-) / in (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 399
+      },
+      "hiddenSeries": false,
+      "id": 146,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Trans.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_network_receive_multicast_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Receive multicast",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Network Traffic Multicast",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "pps",
+          "label": "packets out (-) / in (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 399
+      },
+      "hiddenSeries": false,
+      "id": 144,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Trans.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_network_receive_fifo_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Receive fifo",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_network_transmit_fifo_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Transmit fifo",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Network Traffic Fifo",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "pps",
+          "label": "packets out (-) / in (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 409
+      },
+      "hiddenSeries": false,
+      "id": 145,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "$$hashKey": "object:576",
+          "alias": "/.*Trans.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_network_receive_frame_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "hide": false,
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Receive frame",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Network Traffic Frame",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:589",
+          "format": "pps",
+          "label": "packets out (-) / in (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:590",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 409
+      },
+      "hiddenSeries": false,
+      "id": 231,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_network_transmit_carrier_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Statistic transmit_carrier",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Network Traffic Carrier",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 419
+      },
+      "hiddenSeries": false,
+      "id": 232,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Trans.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_network_transmit_colls_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{device}} - Transmit colls",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Network Traffic Colls",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 419
+      },
+      "hiddenSeries": false,
+      "id": 61,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "$$hashKey": "object:663",
+          "alias": "NF conntrack limit",
+          "color": "#890F02",
+          "fill": 0
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_nf_conntrack_entries{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "NF conntrack entries",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_nf_conntrack_entries_limit{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "NF conntrack limit",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "NF Contrack",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:678",
+          "format": "short",
+          "label": "entries",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:679",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 429
+      },
+      "hiddenSeries": false,
+      "id": 230,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_arp_entries{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{ device }} - ARP entries",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "ARP Entries",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "Entries",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 429
+      },
+      "hiddenSeries": false,
+      "id": 288,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 1,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_network_mtu_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{ device }} - Bytes",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "MTU",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "decimals": 0,
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 439
+      },
+      "hiddenSeries": false,
+      "id": 280,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 1,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_network_speed_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{ device }} - Speed",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Speed",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "decimals": 0,
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 439
+      },
+      "hiddenSeries": false,
+      "id": 289,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 1,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_network_transmit_queue_length{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{ device }} -   Interface transmit queue length",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Queue Length",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "decimals": 0,
+          "format": "none",
+          "label": "packets",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 449
+      },
+      "hiddenSeries": false,
+      "id": 290,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "$$hashKey": "object:232",
+          "alias": "/.*Dropped.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_softnet_processed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "CPU {{cpu}} - Processed",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_softnet_dropped_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "CPU {{cpu}} - Dropped",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Softnet Packets",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:207",
+          "format": "short",
+          "label": "packetes drop (-) / process (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:208",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 449
+      },
+      "hiddenSeries": false,
+      "id": 310,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_softnet_times_squeezed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "CPU {{cpu}} - Squeezed",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Softnet Out of Quota",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:207",
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:208",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 459
+      },
+      "hiddenSeries": false,
+      "id": 309,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_network_up{operstate=\"up\",instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "{{interface}} - Operational state UP",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "node_network_carrier{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "instant": false,
+          "legendFormat": "{{device}} - Physical link state",
+          "refId": "B"
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Network Operational Status",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "collapsed": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 469
+      },
+      "id": 273,
+      "panels": [],
+      "title": "Network Sockstat",
+      "type": "row"
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 470
+      },
+      "hiddenSeries": false,
+      "id": 63,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_sockstat_TCP_alloc{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "TCP_alloc - Allocated sockets",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "node_sockstat_TCP_inuse{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "TCP_inuse - Tcp sockets currently in use",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": "node_sockstat_TCP_mem{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": true,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "TCP_mem - Used memory for tcp",
+          "refId": "C",
+          "step": 240
+        },
+        {
+          "expr": "node_sockstat_TCP_orphan{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "TCP_orphan - Orphan sockets",
+          "refId": "D",
+          "step": 240
+        },
+        {
+          "expr": "node_sockstat_TCP_tw{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "TCP_tw - Sockets wating close",
+          "refId": "E",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Sockstat TCP",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 470
+      },
+      "hiddenSeries": false,
+      "id": 124,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_sockstat_UDPLITE_inuse{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "UDPLITE_inuse - Udplite sockets currently in use",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "node_sockstat_UDP_inuse{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "UDP_inuse - Udp sockets currently in use",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": "node_sockstat_UDP_mem{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "UDP_mem - Used memory for udp",
+          "refId": "C",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Sockstat UDP",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 480
+      },
+      "hiddenSeries": false,
+      "id": 126,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_sockstat_sockets_used{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Sockets_used - Sockets currently in use",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Sockstat Used",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "sockets",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 480
+      },
+      "hiddenSeries": false,
+      "id": 220,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_sockstat_TCP_mem_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "mem_bytes - TCP sockets in that state",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"node_sockstat_UDP_mem_bytes{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "mem_bytes - UDP sockets in that state",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Sockstat Memory Size",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "bytes",
+          "label": "bytes",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 490
+      },
+      "hiddenSeries": false,
+      "id": 125,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "node_sockstat_FRAG_inuse{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "FRAG_inuse - Frag sockets currently in use",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "node_sockstat_FRAG_memory{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "FRAG_memory - Used memory for frag",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": "node_sockstat_RAW_inuse{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "RAW_inuse - Raw sockets currently in use",
+          "refId": "C",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Sockstat FRAG / RAW",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:1572",
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:1573",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "collapsed": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 500
+      },
+      "id": 274,
+      "panels": [],
+      "title": "Network Netstat",
+      "type": "row"
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 501
+      },
+      "height": "",
+      "hiddenSeries": false,
+      "id": 221,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 12,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "$$hashKey": "object:1876",
+          "alias": "/.*Out.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_netstat_IpExt_InOctets{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "InOctets - Received octets",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_netstat_IpExt_OutOctets{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "intervalFactor": 2,
+          "legendFormat": "OutOctets - Sent octets",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Netstat IP In / Out Octets",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:1889",
+          "format": "short",
+          "label": "octects out (-) / in (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:1890",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 501
+      },
+      "height": "",
+      "hiddenSeries": false,
+      "id": 81,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sideWidth": 300,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_netstat_Ip_Forwarding{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "Forwarding - IP forwarding",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Netstat IP Forwarding",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:1957",
+          "format": "short",
+          "label": "datagrams",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:1958",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 511
+      },
+      "height": "",
+      "hiddenSeries": false,
+      "id": 115,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 12,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Out.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_netstat_Icmp_InMsgs{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "InMsgs -  Messages which the entity received. Note 
that this counter includes all those counted by icmpInErrors",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_netstat_Icmp_OutMsgs{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "OutMsgs - Messages which this entity attempted to 
send. Note that this counter includes all those counted by icmpOutErrors",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "ICMP In / Out",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "messages out (-) / in (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 511
+      },
+      "height": "",
+      "hiddenSeries": false,
+      "id": 50,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 12,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Out.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_netstat_Icmp_InErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "InErrors - Messages which the entity received but 
determined as having ICMP-specific errors (bad ICMP checksums, bad length, 
etc.)",
+          "refId": "A",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "ICMP Errors",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "messages out (-) / in (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 521
+      },
+      "height": "",
+      "hiddenSeries": false,
+      "id": 55,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 12,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Out.*/",
+          "transform": "negative-Y"
+        },
+        {
+          "alias": "/.*Snd.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_netstat_Udp_InDatagrams{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "InDatagrams - Datagrams received",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_netstat_Udp_OutDatagrams{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "OutDatagrams - Datagrams sent",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "UDP In / Out",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "datagrams out (-) / in (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 521
+      },
+      "height": "",
+      "hiddenSeries": false,
+      "id": 109,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 12,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_netstat_Udp_InErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "InErrors - UDP Datagrams that could not be 
delivered to an application",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_netstat_Udp_NoPorts{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "NoPorts - UDP Datagrams received on a port with no 
listener",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_netstat_UdpLite_InErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "interval": "",
+          "legendFormat": "InErrors Lite - UDPLite Datagrams that could not be 
delivered to an application",
+          "refId": "C"
+        },
+        {
+          "expr": 
"rate(node_netstat_Udp_RcvbufErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "RcvbufErrors - UDP buffer errors received",
+          "refId": "D",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_netstat_Udp_SndbufErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "SndbufErrors - UDP buffer errors send",
+          "refId": "E",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "UDP Errors",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:4232",
+          "format": "short",
+          "label": "datagrams",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "$$hashKey": "object:4233",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 531
+      },
+      "height": "",
+      "hiddenSeries": false,
+      "id": 299,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 12,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Out.*/",
+          "transform": "negative-Y"
+        },
+        {
+          "alias": "/.*Snd.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_netstat_Tcp_InSegs{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "instant": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "InSegs - Segments received, including those 
received in error. This count includes segments received on currently 
established connections",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_netstat_Tcp_OutSegs{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "OutSegs - Segments sent, including those on current 
connections but excluding those containing only retransmitted octets",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "TCP In / Out",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "datagrams out (-) / in (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 531
+      },
+      "height": "",
+      "hiddenSeries": false,
+      "id": 104,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 12,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_netstat_TcpExt_ListenOverflows{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "ListenOverflows - Times the listen queue of a 
socket overflowed",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_netstat_TcpExt_ListenDrops{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "ListenDrops - SYNs to LISTEN sockets ignored",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_netstat_TcpExt_TCPSynRetrans{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "TCPSynRetrans - SYN-SYN/ACK retransmits to break 
down retransmissions in SYN, fast/timeout retransmits",
+          "refId": "C",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_netstat_Tcp_RetransSegs{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "interval": "",
+          "legendFormat": "RetransSegs - Segments retransmitted - that is, the 
number of TCP segments transmitted containing one or more previously 
transmitted octets",
+          "refId": "D"
+        },
+        {
+          "expr": 
"rate(node_netstat_Tcp_InErrs{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "interval": "",
+          "legendFormat": "InErrs - Segments received in error (e.g., bad TCP 
checksums)",
+          "refId": "E"
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "TCP Errors",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "counter",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 541
+      },
+      "height": "",
+      "hiddenSeries": false,
+      "id": 85,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 12,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "$$hashKey": "object:454",
+          "alias": "/.*MaxConn *./",
+          "color": "#890F02",
+          "fill": 0
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"node_netstat_Tcp_CurrEstab{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "CurrEstab - TCP connections for which the current 
state is either ESTABLISHED or CLOSE- WAIT",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": "node_netstat_Tcp_MaxConn{instance=\"$node\",job=\"$job\"}",
+          "format": "time_series",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "MaxConn - Limit on the total number of TCP 
connections the entity can support (Dinamic is \"-1\")",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "TCP Connections",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "$$hashKey": "object:469",
+          "format": "short",
+          "label": "connections",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "$$hashKey": "object:470",
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 541
+      },
+      "height": "",
+      "hiddenSeries": false,
+      "id": 91,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideEmpty": false,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sort": "current",
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 12,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [
+        {
+          "alias": "/.*Sent.*/",
+          "transform": "negative-Y"
+        }
+      ],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_netstat_TcpExt_SyncookiesFailed{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "SyncookiesFailed - Invalid SYN cookies received",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_netstat_TcpExt_SyncookiesRecv{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "SyncookiesRecv - SYN cookies received",
+          "refId": "B",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_netstat_TcpExt_SyncookiesSent{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "hide": false,
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "SyncookiesSent - SYN cookies sent",
+          "refId": "C",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "TCP SynCookie",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "counter out (-) / in (+)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fieldConfig": {
+        "defaults": {
+          "links": []
+        },
+        "overrides": []
+      },
+      "fill": 2,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 551
+      },
+      "height": "",
+      "hiddenSeries": false,
+      "id": 82,
+      "legend": {
+        "alignAsTable": true,
+        "avg": true,
+        "current": true,
+        "hideZero": false,
+        "max": true,
+        "min": true,
+        "rightSide": false,
+        "show": true,
+        "sortDesc": true,
+        "total": false,
+        "values": true
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "maxPerRow": 12,
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 5,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"rate(node_netstat_Tcp_ActiveOpens{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "ActiveOpens - TCP connections that have made a 
direct transition to the SYN-SENT state from the CLOSED state",
+          "refId": "A",
+          "step": 240
+        },
+        {
+          "expr": 
"rate(node_netstat_Tcp_PassiveOpens{instance=\"$node\",job=\"$job\"}[$__rate_interval])",
+          "format": "time_series",
+          "interval": "",
+          "intervalFactor": 2,
+          "legendFormat": "PassiveOpens - TCP connections that have made a 
direct transition to the SYN-RCVD state from the LISTEN state",
+          "refId": "B",
+          "step": 240
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "TCP Direct Transition",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "label": "connections",
+          "logBase": 1,
+          "min": "0",
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": false
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "collapsed": true,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 561
+      },
+      "id": 279,
+      "panels": [
+        {
+          "aliasColors": {},
+          "bars": false,
+          "dashLength": 10,
+          "dashes": false,
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "description": "",
+          "fieldConfig": {
+            "defaults": {
+              "links": []
+            },
+            "overrides": []
+          },
+          "fill": 2,
+          "fillGradient": 0,
+          "gridPos": {
+            "h": 10,
+            "w": 12,
+            "x": 0,
+            "y": 292
+          },
+          "hiddenSeries": false,
+          "id": 40,
+          "legend": {
+            "alignAsTable": true,
+            "avg": true,
+            "current": true,
+            "max": true,
+            "min": true,
+            "show": true,
+            "sort": "current",
+            "sortDesc": true,
+            "total": false,
+            "values": true
+          },
+          "lines": true,
+          "linewidth": 1,
+          "links": [],
+          "nullPointMode": "null",
+          "options": {
+            "alertThreshold": true
+          },
+          "percentage": false,
+          "pluginVersion": "8.2.1",
+          "pointradius": 5,
+          "points": false,
+          "renderer": "flot",
+          "seriesOverrides": [],
+          "spaceLength": 10,
+          "stack": true,
+          "steppedLine": false,
+          "targets": [
+            {
+              "expr": 
"node_scrape_collector_duration_seconds{instance=\"$node\",job=\"$job\"}",
+              "format": "time_series",
+              "hide": false,
+              "interval": "",
+              "intervalFactor": 2,
+              "legendFormat": "{{collector}} - Scrape duration",
+              "refId": "A",
+              "step": 240
+            }
+          ],
+          "thresholds": [],
+          "timeRegions": [],
+          "title": "Node Exporter Scrape Time",
+          "tooltip": {
+            "shared": true,
+            "sort": 0,
+            "value_type": "individual"
+          },
+          "type": "graph",
+          "xaxis": {
+            "mode": "time",
+            "show": true,
+            "values": []
+          },
+          "yaxes": [
+            {
+              "format": "s",
+              "label": "seconds",
+              "logBase": 1,
+              "show": true
+            },
+            {
+              "format": "short",
+              "logBase": 1,
+              "show": false
+            }
+          ],
+          "yaxis": {
+            "align": false
+          }
+        },
+        {
+          "aliasColors": {},
+          "bars": false,
+          "dashLength": 10,
+          "dashes": false,
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "description": "",
+          "fieldConfig": {
+            "defaults": {
+              "links": []
+            },
+            "overrides": []
+          },
+          "fill": 2,
+          "fillGradient": 0,
+          "gridPos": {
+            "h": 10,
+            "w": 12,
+            "x": 12,
+            "y": 292
+          },
+          "hiddenSeries": false,
+          "id": 157,
+          "legend": {
+            "alignAsTable": true,
+            "avg": true,
+            "current": true,
+            "max": true,
+            "min": true,
+            "show": true,
+            "total": false,
+            "values": true
+          },
+          "lines": true,
+          "linewidth": 1,
+          "links": [],
+          "nullPointMode": "null",
+          "options": {
+            "alertThreshold": true
+          },
+          "percentage": false,
+          "pluginVersion": "8.2.1",
+          "pointradius": 5,
+          "points": false,
+          "renderer": "flot",
+          "seriesOverrides": [
+            {
+              "$$hashKey": "object:1969",
+              "alias": "/.*error.*/",
+              "color": "#F2495C",
+              "transform": "negative-Y"
+            }
+          ],
+          "spaceLength": 10,
+          "stack": true,
+          "steppedLine": false,
+          "targets": [
+            {
+              "expr": 
"node_scrape_collector_success{instance=\"$node\",job=\"$job\"}",
+              "format": "time_series",
+              "hide": false,
+              "interval": "",
+              "intervalFactor": 2,
+              "legendFormat": "{{collector}} - Scrape success",
+              "refId": "A",
+              "step": 240
+            },
+            {
+              "expr": 
"node_textfile_scrape_error{instance=\"$node\",job=\"$job\"}",
+              "format": "time_series",
+              "hide": false,
+              "interval": "",
+              "intervalFactor": 2,
+              "legendFormat": "{{collector}} - Scrape textfile error (1 = 
true)",
+              "refId": "B",
+              "step": 240
+            }
+          ],
+          "thresholds": [],
+          "timeRegions": [],
+          "title": "Node Exporter Scrape",
+          "tooltip": {
+            "shared": true,
+            "sort": 0,
+            "value_type": "individual"
+          },
+          "type": "graph",
+          "xaxis": {
+            "mode": "time",
+            "show": true,
+            "values": []
+          },
+          "yaxes": [
+            {
+              "$$hashKey": "object:1484",
+              "format": "short",
+              "label": "counter",
+              "logBase": 1,
+              "show": true
+            },
+            {
+              "$$hashKey": "object:1485",
+              "format": "short",
+              "logBase": 1,
+              "show": false
+            }
+          ],
+          "yaxis": {
+            "align": false
+          }
+        }
+      ],
+      "title": "Node Exporter",
+      "type": "row"
+    }
+  ],
+  "refresh": "1m",
+  "schemaVersion": 35,
+  "style": "dark",
+  "tags": [
+    "linux",
+    "performance"
+  ],
+  "templating": {
+    "list": [
+      {
+        "current": {
+          "selected": false,
+          "text": "default",
+          "value": "default"
+        },
+        "hide": 0,
+        "includeAll": false,
+        "label": "datasource",
+        "multi": false,
+        "name": "DS_PROMETHEUS",
+        "options": [],
+        "query": "prometheus",
+        "queryValue": "",
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "type": "datasource"
+      },
+      {
+        "current": {},
+        "datasource": {
+          "type": "prometheus",
+          "uid": "${DS_PROMETHEUS}"
+        },
+        "definition": "",
+        "hide": 0,
+        "includeAll": false,
+        "label": "Job",
+        "multi": false,
+        "name": "job",
+        "options": [],
+        "query": {
+          "query": "label_values(node_uname_info, job)",
+          "refId": "Prometheus-job-Variable-Query"
+        },
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "sort": 1,
+        "tagValuesQuery": "",
+        "tagsQuery": "",
+        "type": "query",
+        "useTags": false
+      },
+      {
+        "current": {},
+        "datasource": {
+          "type": "prometheus",
+          "uid": "${DS_PROMETHEUS}"
+        },
+        "definition": "label_values(node_uname_info{job=\"$job\"}, instance)",
+        "hide": 0,
+        "includeAll": false,
+        "label": "Host:",
+        "multi": false,
+        "name": "node",
+        "options": [],
+        "query": {
+          "query": "label_values(node_uname_info{job=\"$job\"}, instance)",
+          "refId": "Prometheus-node-Variable-Query"
+        },
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "sort": 1,
+        "tagValuesQuery": "",
+        "tagsQuery": "",
+        "type": "query",
+        "useTags": false
+      },
+      {
+        "current": {
+          "selected": false,
+          "text": "[a-z]+|nvme[0-9]+n[0-9]+",
+          "value": "[a-z]+|nvme[0-9]+n[0-9]+"
+        },
+        "hide": 2,
+        "includeAll": false,
+        "multi": false,
+        "name": "diskdevices",
+        "options": [
+          {
+            "selected": true,
+            "text": "[a-z]+|nvme[0-9]+n[0-9]+",
+            "value": "[a-z]+|nvme[0-9]+n[0-9]+"
+          }
+        ],
+        "query": "[a-z]+|nvme[0-9]+n[0-9]+",
+        "skipUrlSync": false,
+        "type": "custom"
+      }
+    ]
+  },
+  "time": {
+    "from": "now-1h",
+    "to": "now"
+  },
+  "timepicker": {
+    "refresh_intervals": [
+      "5s",
+      "10s",
+      "30s",
+      "1m",
+      "5m",
+      "15m",
+      "30m",
+      "1h",
+      "2h",
+      "1d"
+    ],
+    "time_options": [
+      "5m",
+      "15m",
+      "1h",
+      "6h",
+      "12h",
+      "24h",
+      "2d",
+      "7d",
+      "30d"
+    ]
+  },
+  "timezone": "browser",
+  "title": "Nodes",
+  "uid": "rYdddlPWk",
+  "version": 8,
+  "weekStart": ""
+}
\ No newline at end of file
diff --git a/additional/grafana/proxy.json b/additional/grafana/proxy.json
new file mode 100644
index 0000000..ee2949a
--- /dev/null
+++ b/additional/grafana/proxy.json
@@ -0,0 +1,640 @@
+{
+  "__inputs": [
+    {
+      "name": "DS_PROMETHEUS",
+      "label": "Prometheus",
+      "description": "",
+      "type": "datasource",
+      "pluginId": "prometheus",
+      "pluginName": "Prometheus"
+    }
+  ],
+  "__elements": [],
+  "__requires": [
+    {
+      "type": "grafana",
+      "id": "grafana",
+      "name": "Grafana",
+      "version": "8.4.3"
+    },
+    {
+      "type": "panel",
+      "id": "graph",
+      "name": "Graph (old)",
+      "version": ""
+    },
+    {
+      "type": "datasource",
+      "id": "prometheus",
+      "name": "Prometheus",
+      "version": "1.0.0"
+    },
+    {
+      "type": "panel",
+      "id": "timeseries",
+      "name": "Time series",
+      "version": ""
+    }
+  ],
+  "annotations": {
+    "list": [
+      {
+        "builtIn": 1,
+        "datasource": "-- Grafana --",
+        "enable": true,
+        "hide": true,
+        "iconColor": "rgba(0, 211, 255, 1)",
+        "name": "Annotations & Alerts",
+        "target": {
+          "limit": 100,
+          "matchAny": false,
+          "tags": [],
+          "type": "dashboard"
+        },
+        "type": "dashboard"
+      }
+    ]
+  },
+  "description": "Official dashboard for NGINX Prometheus exporter for 
https://github.com/nginxinc/nginx-prometheus-exporter";,
+  "editable": true,
+  "fiscalYearStartMonth": 0,
+  "gnetId": 12708,
+  "graphTooltip": 0,
+  "id": null,
+  "iteration": 1649441826256,
+  "links": [],
+  "liveNow": false,
+  "panels": [
+    {
+      "collapsed": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 0
+      },
+      "id": 6,
+      "panels": [],
+      "title": "Metrics",
+      "type": "row"
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "description": "",
+      "fill": 1,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 0,
+        "y": 1
+      },
+      "hiddenSeries": false,
+      "id": 10,
+      "legend": {
+        "alignAsTable": false,
+        "avg": false,
+        "current": false,
+        "hideEmpty": false,
+        "max": false,
+        "min": false,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": false
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 2,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"irate(nginx_connections_accepted{instance=~\"$instance\"}[5m])",
+          "format": "time_series",
+          "instant": false,
+          "intervalFactor": 1,
+          "legendFormat": "{{instance}} accepted",
+          "refId": "A"
+        },
+        {
+          "expr": 
"irate(nginx_connections_handled{instance=~\"$instance\"}[5m])",
+          "format": "time_series",
+          "instant": false,
+          "intervalFactor": 1,
+          "legendFormat": "{{instance}} handled",
+          "refId": "B"
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Processed connections",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "decimals": 1,
+          "format": "short",
+          "label": "Connections (rate)",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "label": "",
+          "logBase": 1,
+          "show": true
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "decimals": 0,
+      "fill": 1,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 10,
+        "w": 12,
+        "x": 12,
+        "y": 1
+      },
+      "hiddenSeries": false,
+      "id": 12,
+      "legend": {
+        "alignAsTable": false,
+        "avg": false,
+        "current": false,
+        "max": false,
+        "min": false,
+        "rightSide": false,
+        "show": true,
+        "total": false,
+        "values": false
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 2,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": "nginx_connections_active{instance=~\"$instance\"}",
+          "format": "time_series",
+          "intervalFactor": 1,
+          "legendFormat": "{{instance}} active",
+          "refId": "A"
+        },
+        {
+          "expr": "nginx_connections_reading{instance=~\"$instance\"}",
+          "format": "time_series",
+          "intervalFactor": 1,
+          "legendFormat": "{{instance}} reading",
+          "refId": "B"
+        },
+        {
+          "expr": "nginx_connections_waiting{instance=~\"$instance\"}",
+          "format": "time_series",
+          "intervalFactor": 1,
+          "legendFormat": "{{instance}} waiting",
+          "refId": "C"
+        },
+        {
+          "expr": "nginx_connections_writing{instance=~\"$instance\"}",
+          "format": "time_series",
+          "intervalFactor": 1,
+          "legendFormat": "{{instance}} writing",
+          "refId": "D"
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Active Connections",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "decimals": 0,
+          "format": "short",
+          "label": "Connections",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": true
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "aliasColors": {},
+      "bars": false,
+      "dashLength": 10,
+      "dashes": false,
+      "datasource": {
+        "type": "prometheus",
+        "uid": "${DS_PROMETHEUS}"
+      },
+      "fill": 1,
+      "fillGradient": 0,
+      "gridPos": {
+        "h": 8,
+        "w": 24,
+        "x": 0,
+        "y": 11
+      },
+      "hiddenSeries": false,
+      "id": 15,
+      "legend": {
+        "avg": false,
+        "current": false,
+        "max": false,
+        "min": false,
+        "show": true,
+        "total": false,
+        "values": false
+      },
+      "lines": true,
+      "linewidth": 1,
+      "links": [],
+      "nullPointMode": "null",
+      "options": {
+        "alertThreshold": true
+      },
+      "percentage": false,
+      "pluginVersion": "8.4.3",
+      "pointradius": 2,
+      "points": false,
+      "renderer": "flot",
+      "seriesOverrides": [],
+      "spaceLength": 10,
+      "stack": false,
+      "steppedLine": false,
+      "targets": [
+        {
+          "expr": 
"irate(nginx_http_requests_total{instance=~\"$instance\"}[5m])",
+          "format": "time_series",
+          "intervalFactor": 1,
+          "legendFormat": "{{instance}} total requests",
+          "refId": "A"
+        }
+      ],
+      "thresholds": [],
+      "timeRegions": [],
+      "title": "Total requests",
+      "tooltip": {
+        "shared": true,
+        "sort": 0,
+        "value_type": "individual"
+      },
+      "type": "graph",
+      "xaxis": {
+        "mode": "time",
+        "show": true,
+        "values": []
+      },
+      "yaxes": [
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": true
+        },
+        {
+          "format": "short",
+          "logBase": 1,
+          "show": true
+        }
+      ],
+      "yaxis": {
+        "align": false
+      }
+    },
+    {
+      "description": "Average time taken for Nginx to respond to client 
requests. This includes upstream connect / response times.",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "palette-classic"
+          },
+          "custom": {
+            "axisLabel": "",
+            "axisPlacement": "auto",
+            "barAlignment": 0,
+            "drawStyle": "line",
+            "fillOpacity": 0,
+            "gradientMode": "none",
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            },
+            "lineInterpolation": "linear",
+            "lineWidth": 1,
+            "pointSize": 5,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "showPoints": "auto",
+            "spanNulls": false,
+            "stacking": {
+              "group": "A",
+              "mode": "none"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "red",
+                "value": 80
+              }
+            ]
+          },
+          "unit": "s"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 8,
+        "w": 12,
+        "x": 0,
+        "y": 19
+      },
+      "id": 17,
+      "options": {
+        "legend": {
+          "calcs": [],
+          "displayMode": "list",
+          "placement": "bottom"
+        },
+        "tooltip": {
+          "mode": "single",
+          "sort": "none"
+        }
+      },
+      "targets": [
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "avg 
((rate(taler_requests_response_time_hist_sum{endpoint!~\"keys|terms\", 
status=\"200\"} [2m]) ) / 
(rate(taler_requests_response_time_hist_count{endpoint!~\"keys|terms\", 
status=\"200\"} [2m])))",
+          "interval": "",
+          "legendFormat": "Response Time",
+          "refId": "A"
+        }
+      ],
+      "title": "Average Response Time",
+      "type": "timeseries"
+    },
+    {
+      "description": "Average time taken for the exchange to answer a request 
to the Nginx proxy",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "palette-classic"
+          },
+          "custom": {
+            "axisLabel": "",
+            "axisPlacement": "auto",
+            "barAlignment": 0,
+            "drawStyle": "line",
+            "fillOpacity": 0,
+            "gradientMode": "none",
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            },
+            "lineInterpolation": "linear",
+            "lineWidth": 1,
+            "pointSize": 5,
+            "scaleDistribution": {
+              "type": "linear"
+            },
+            "showPoints": "auto",
+            "spanNulls": false,
+            "stacking": {
+              "group": "A",
+              "mode": "none"
+            },
+            "thresholdsStyle": {
+              "mode": "off"
+            }
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "red",
+                "value": 80
+              }
+            ]
+          },
+          "unit": "s"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 8,
+        "w": 12,
+        "x": 12,
+        "y": 19
+      },
+      "id": 18,
+      "options": {
+        "legend": {
+          "calcs": [],
+          "displayMode": "list",
+          "placement": "bottom"
+        },
+        "tooltip": {
+          "mode": "single",
+          "sort": "none"
+        }
+      },
+      "targets": [
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "avg 
((rate(taler_requests_upstream_response_time_hist_sum{endpoint!~\"keys|terms\", 
status=\"200\"} [2m]) ) / 
(rate(taler_requests_upstream_response_time_hist_count{endpoint!~\"keys|terms\",
 status=\"200\"} [2m])))",
+          "interval": "",
+          "legendFormat": "Upstream Response Time",
+          "refId": "A"
+        }
+      ],
+      "title": "Average Upstream Response Time",
+      "type": "timeseries"
+    }
+  ],
+  "refresh": "10s",
+  "schemaVersion": 35,
+  "style": "dark",
+  "tags": [
+    "nginx",
+    "performance"
+  ],
+  "templating": {
+    "list": [
+      {
+        "current": {
+          "selected": false,
+          "text": "default",
+          "value": "default"
+        },
+        "hide": 0,
+        "includeAll": false,
+        "label": "datasource",
+        "multi": false,
+        "name": "DS_PROMETHEUS",
+        "options": [],
+        "query": "prometheus",
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "type": "datasource"
+      },
+      {
+        "current": {},
+        "datasource": {
+          "type": "prometheus",
+          "uid": "${DS_PROMETHEUS}"
+        },
+        "definition": "label_values(nginx_up, instance)",
+        "hide": 0,
+        "includeAll": true,
+        "label": "",
+        "multi": false,
+        "name": "instance",
+        "options": [],
+        "query": {
+          "query": "label_values(nginx_up, instance)",
+          "refId": "Prometheus-instance-Variable-Query"
+        },
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "sort": 0,
+        "tagValuesQuery": "",
+        "tagsQuery": "",
+        "type": "query",
+        "useTags": false
+      }
+    ]
+  },
+  "time": {
+    "from": "now-1h",
+    "to": "now"
+  },
+  "timepicker": {
+    "refresh_intervals": [
+      "5s",
+      "10s",
+      "30s",
+      "1m",
+      "5m",
+      "15m",
+      "30m",
+      "1h",
+      "2h",
+      "1d"
+    ],
+    "time_options": [
+      "5m",
+      "15m",
+      "1h",
+      "6h",
+      "12h",
+      "24h",
+      "2d",
+      "7d",
+      "30d"
+    ]
+  },
+  "timezone": "",
+  "title": "Proxy",
+  "uid": "MsjffzSZz",
+  "version": 16,
+  "weekStart": ""
+}
\ No newline at end of file
diff --git a/additional/grafana/request-statistics.json 
b/additional/grafana/request-statistics.json
index 4eb95cc..41cbe40 100644
--- a/additional/grafana/request-statistics.json
+++ b/additional/grafana/request-statistics.json
@@ -7,6 +7,14 @@
       "type": "datasource",
       "pluginId": "loki",
       "pluginName": "Loki"
+    },
+    {
+      "name": "DS_PROMETHEUS",
+      "label": "Prometheus",
+      "description": "",
+      "type": "datasource",
+      "pluginId": "prometheus",
+      "pluginName": "Prometheus"
     }
   ],
   "__elements": [],
@@ -15,7 +23,7 @@
       "type": "grafana",
       "id": "grafana",
       "name": "Grafana",
-      "version": "8.3.2"
+      "version": "8.4.3"
     },
     {
       "type": "datasource",
@@ -23,6 +31,12 @@
       "name": "Loki",
       "version": "1.0.0"
     },
+    {
+      "type": "datasource",
+      "id": "prometheus",
+      "name": "Prometheus",
+      "version": "1.0.0"
+    },
     {
       "type": "panel",
       "id": "stat",
@@ -60,7 +74,7 @@
   "fiscalYearStartMonth": 0,
   "graphTooltip": 1,
   "id": null,
-  "iteration": 1639471729428,
+  "iteration": 1649441773439,
   "links": [],
   "liveNow": false,
   "panels": [
@@ -109,7 +123,7 @@
       "gridPos": {
         "h": 4,
         "w": 3,
-        "x": 7,
+        "x": 5,
         "y": 1
       },
       "id": 162,
@@ -128,10 +142,14 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "avg_over_time({app=\"taler-network\"} | logfmt | 
src=\"wallet\" | unwrap duration(time) [$__range])",
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "avg_over_time({app=\"taler-network\"} | logfmt | 
src=~\"wallet(.*)\" | unwrap duration(time) [$__range])",
           "instant": true,
           "range": false,
           "refId": "A"
@@ -172,7 +190,7 @@
       "gridPos": {
         "h": 4,
         "w": 3,
-        "x": 10,
+        "x": 8,
         "y": 1
       },
       "id": 176,
@@ -191,10 +209,14 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "avg_over_time({app=\"taler-network\"} | logfmt | 
src=\"proxy\" | unwrap duration(time) [$__range])",
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "avg_over_time({app=\"taler-network\"} | logfmt | 
src=~\"eproxy(.*)\" | unwrap duration(time) [$__range])",
           "instant": true,
           "range": false,
           "refId": "A"
@@ -235,7 +257,7 @@
       "gridPos": {
         "h": 4,
         "w": 3,
-        "x": 13,
+        "x": 11,
         "y": 1
       },
       "id": 178,
@@ -254,10 +276,14 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "avg_over_time({app=\"taler-network\"} | logfmt | 
src=\"exchange\" | unwrap duration(time) [$__range])",
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "avg_over_time({app=\"taler-network\", job=\"taler\"} | 
logfmt | src=~\"exchange(.*)\" | unwrap duration(time) [$__range])",
           "instant": true,
           "range": false,
           "refId": "A"
@@ -266,6 +292,274 @@
       "title": "RTT Exchange-Database",
       "type": "stat"
     },
+    {
+      "datasource": {
+        "type": "loki",
+        "uid": "${DS_LOKI}"
+      },
+      "description": "round-trip-time exchange-aggregator to database",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "red",
+                "value": 80
+              }
+            ]
+          },
+          "unit": "s"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 2,
+        "w": 3,
+        "x": 14,
+        "y": 1
+      },
+      "id": 414,
+      "options": {
+        "colorMode": "value",
+        "graphMode": "area",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "avg_over_time({app=\"taler-network\"} | logfmt | 
src=\"aggregator\" | unwrap duration(time) [$__range]) or 
avg_over_time({app=\"taler-network\", job=\"taler\"} | logfmt | 
src=~\"exchange(.*)\" | unwrap duration(time) [$__range])",
+          "instant": true,
+          "range": false,
+          "refId": "A"
+        }
+      ],
+      "title": "RTT Aggregator-Database",
+      "type": "stat"
+    },
+    {
+      "datasource": {
+        "type": "loki",
+        "uid": "${DS_LOKI}"
+      },
+      "description": "round-trip-time exchange-closer to database",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "red",
+                "value": 80
+              }
+            ]
+          },
+          "unit": "s"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 2,
+        "w": 3,
+        "x": 17,
+        "y": 1
+      },
+      "id": 415,
+      "options": {
+        "colorMode": "value",
+        "graphMode": "area",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "avg_over_time({app=\"taler-network\"} | logfmt | 
src=\"closer\" | unwrap duration(time) [$__range]) or 
avg_over_time({app=\"taler-network\", job=\"taler\"} | logfmt | 
src=~\"exchange(.*)\" | unwrap duration(time) [$__range])",
+          "instant": true,
+          "range": false,
+          "refId": "A"
+        }
+      ],
+      "title": "RTT Closer-Database",
+      "type": "stat"
+    },
+    {
+      "datasource": {
+        "type": "loki",
+        "uid": "${DS_LOKI}"
+      },
+      "description": "round-trip-time exchange-transfer to database",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "red",
+                "value": 80
+              }
+            ]
+          },
+          "unit": "s"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 2,
+        "w": 3,
+        "x": 14,
+        "y": 3
+      },
+      "id": 416,
+      "options": {
+        "colorMode": "value",
+        "graphMode": "area",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "avg_over_time({app=\"taler-network\"} | logfmt | 
src=\"transfer\" | unwrap duration(time) [$__range]) or 
avg_over_time({app=\"taler-network\", job=\"taler\"} | logfmt | 
src=~\"exchange(.*)\" | unwrap duration(time) [$__range])",
+          "instant": true,
+          "range": false,
+          "refId": "A"
+        }
+      ],
+      "title": "RTT Transfer-Database",
+      "type": "stat"
+    },
+    {
+      "datasource": {
+        "type": "loki",
+        "uid": "${DS_LOKI}"
+      },
+      "description": "round-trip-time exchange-wirewatch to database",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "red",
+                "value": 80
+              }
+            ]
+          },
+          "unit": "s"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 2,
+        "w": 3,
+        "x": 17,
+        "y": 3
+      },
+      "id": 417,
+      "options": {
+        "colorMode": "value",
+        "graphMode": "area",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "avg_over_time({app=\"taler-network\"} | logfmt | 
src=\"wirewatch\" | unwrap duration(time) [$__range]) or 
avg_over_time({app=\"taler-network\", job=\"taler\"} | logfmt | 
src=~\"exchange(.*)\" | unwrap duration(time) [$__range])",
+          "instant": true,
+          "range": false,
+          "refId": "A"
+        }
+      ],
+      "title": "RTT Wirewatch-Database",
+      "type": "stat"
+    },
     {
       "collapsed": false,
       "gridPos": {
@@ -342,7 +636,8 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "pluginVersion": "8.2.5",
@@ -362,8 +657,8 @@
     },
     {
       "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
+        "type": "datasource",
+        "uid": "-- Mixed --"
       },
       "description": "",
       "fieldConfig": {
@@ -435,12 +730,18 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
         {
-          "expr": "rate({app=\"taler-database\"} |~ \"duration:\" [1m])",
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "rate({app=\"taler-database\", type=\"slow-query\"} [1m])",
+          "hide": false,
           "refId": "A"
         }
       ],
@@ -463,8 +764,8 @@
     },
     {
       "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
+        "type": "datasource",
+        "uid": "-- Mixed --"
       },
       "description": "Minimal response time for successful (200) requests to 
$endpoint",
       "fieldConfig": {
@@ -512,25 +813,23 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "min_over_time(({app=\"taler_proxy\"} |~ \"s=200\" | logfmt 
|~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by (app)",
-          "instant": true,
-          "legendFormat": "",
-          "range": false,
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "min_over_time(({job=\"proxy\", endpoint=\"$endpoint\", 
status=\"200\"} | logfmt | unwrap rt) [$interval]) by (app)",
+          "queryType": "instant",
           "refId": "A",
-          "resolution": 2
+          "resolution": 10
         }
       ],
       "title": "Minimal  [$interval]",
       "type": "stat"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
       "description": "Average request time of successful (200) requests to 
$endpoint",
       "fieldConfig": {
         "defaults": {
@@ -570,7 +869,7 @@
       "id": 18,
       "options": {
         "colorMode": "value",
-        "graphMode": "area",
+        "graphMode": "none",
         "justifyMode": "auto",
         "orientation": "auto",
         "reduceOptions": {
@@ -583,14 +882,19 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "avg_over_time(({app=\"taler_proxy\"} |~ \"s=200\" | logfmt 
|~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by (app)",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": 
"sum(rate(taler_requests_response_time_hist_sum{endpoint=\"$endpoint\", 
status=\"200\"}[$interval])) / 
sum(rate(taler_requests_response_time_hist_count{endpoint=\"$endpoint\", 
status=\"200\"}[$interval]))",
           "instant": true,
-          "range": false,
-          "refId": "A",
-          "resolution": 2
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
         }
       ],
       "title": "Average [$interval]",
@@ -598,8 +902,8 @@
     },
     {
       "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
+        "type": "datasource",
+        "uid": "-- Mixed --"
       },
       "description": "Maximal response time for successful (200) requests to 
$endpoint",
       "fieldConfig": {
@@ -647,26 +951,23 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "max_over_time({app=\"taler_proxy\"} |~ \"s=200\" | logfmt 
|~ \"${endpoint:dublequote} \" | unwrap rt [$interval]) by (app)",
-          "hide": false,
-          "instant": true,
-          "legendFormat": "",
-          "range": false,
-          "refId": "B",
-          "resolution": 2
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "max_over_time({job=\"proxy\", endpoint=\"$endpoint\", 
status=\"200\"} | logfmt | unwrap rt [$interval]) by (app)",
+          "queryType": "instant",
+          "refId": "A",
+          "resolution": 10
         }
       ],
       "title": "Maximal [$interval]",
       "type": "stat"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
       "description": "Number of successful requests (=200) to $endpoint",
       "fieldConfig": {
         "defaults": {
@@ -674,6 +975,7 @@
             "fixedColor": "semi-dark-orange",
             "mode": "thresholds"
           },
+          "decimals": 0,
           "mappings": [],
           "noValue": "0",
           "thresholds": {
@@ -710,10 +1012,18 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "sum by (app) (count_over_time({app=\"taler_proxy\"} |~ 
\"s=200\" |~ \"${endpoint:dublequote} \"[$interval]))",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": 
"increase(taler_requests_total_requests{endpoint=\"$endpoint\", 
status=\"200\"}[$interval])",
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
           "refId": "A"
         }
       ],
@@ -721,10 +1031,6 @@
       "type": "stat"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
       "description": "Average response time for requests to $endpoint",
       "fieldConfig": {
         "defaults": {
@@ -784,6 +1090,7 @@
         "y": 14
       },
       "id": 14,
+      "maxDataPoints": 400,
       "options": {
         "legend": {
           "calcs": [],
@@ -791,34 +1098,36 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "pluginVersion": "8.2.1",
       "targets": [
         {
-          "expr": "avg_over_time(({app=\"taler_proxy\"} | logfmt | s=200 |~ 
\"${endpoint:dublequote} \" | unwrap rt) [$interval]) by (app)",
-          "instant": false,
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": 
"rate(taler_requests_response_time_hist_sum{endpoint=\"$endpoint\", 
status=\"200\"}[$interval]) / 
rate(taler_requests_response_time_hist_count{endpoint=\"$endpoint\", 
status=\"200\"}[$interval])",
+          "interval": "",
+          "intervalFactor": 3,
           "legendFormat": "200",
-          "range": true,
-          "refId": "A",
-          "resolution": 10
+          "refId": "A"
         }
       ],
       "title": "Request Time AVG [$interval]",
       "type": "timeseries"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
       "description": "Number of failed requests (!=200) to $endpoint",
       "fieldConfig": {
         "defaults": {
           "color": {
             "mode": "thresholds"
           },
+          "decimals": 0,
           "mappings": [],
           "noValue": "0",
           "thresholds": {
@@ -859,10 +1168,19 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "sum by (app) (count_over_time({app=\"taler_proxy\"} !~ 
\"s=200\" |~ \"${endpoint:dublequote} \" [$interval]))",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": 
"sum(increase(taler_requests_total_requests{endpoint=\"$endpoint\", 
status!=\"200\"}[$interval]))",
+          "instant": true,
+          "interval": "",
+          "intervalFactor": 10,
+          "legendFormat": "",
           "refId": "A"
         }
       ],
@@ -871,8 +1189,8 @@
     },
     {
       "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
+        "type": "datasource",
+        "uid": "-- Mixed --"
       },
       "description": "Median response time for successful (200) requests to 
$endpoint",
       "fieldConfig": {
@@ -920,16 +1238,17 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "quantile_over_time(0.50, ({app=\"taler_proxy\"} |~ 
\"s=200\" | logfmt |~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by 
(app)",
-          "hide": false,
-          "instant": true,
-          "legendFormat": "",
-          "range": false,
-          "refId": "F",
-          "resolution": 2
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "quantile_over_time(0.50, ({job=\"proxy\", 
endpoint=\"$endpoint\", status=\"200\"} | logfmt | unwrap rt) [$interval]) by 
(app)",
+          "queryType": "instant",
+          "refId": "A",
+          "resolution": 10
         }
       ],
       "title": "Median [$interval]",
@@ -937,10 +1256,10 @@
     },
     {
       "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
+        "type": "datasource",
+        "uid": "-- Mixed --"
       },
-      "description": "90% of requests to $endpoint complete successfully (200) 
below this time",
+      "description": "Standard deviation of response times for successful 
(200) requests to $endpoint",
       "fieldConfig": {
         "defaults": {
           "color": {
@@ -970,7 +1289,7 @@
         "x": 3,
         "y": 20
       },
-      "id": 40,
+      "id": 38,
       "options": {
         "colorMode": "value",
         "graphMode": "none",
@@ -986,27 +1305,28 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "quantile_over_time(0.90, ({app=\"taler_proxy\"} |~ 
\"s=200\" | logfmt |~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by 
(app)",
-          "hide": false,
-          "instant": true,
-          "legendFormat": "90% Quantile   ",
-          "range": false,
-          "refId": "E",
-          "resolution": 2
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "stddev_over_time(({job=\"proxy\", endpoint=\"$endpoint\", 
status=\"200\"} | logfmt | s=\"200\" | unwrap rt) [$interval]) by (app)",
+          "queryType": "instant",
+          "refId": "A",
+          "resolution": 10
         }
       ],
-      "title": "90th Percentile [$interval]",
+      "title": "Standard Deviation [$interval]",
       "type": "stat"
     },
     {
       "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
+        "type": "datasource",
+        "uid": "-- Mixed --"
       },
-      "description": "99% of requests to $endpoint complete successfully (200) 
below this time",
+      "description": "90% of requests to $endpoint complete successfully (200) 
below this time",
       "fieldConfig": {
         "defaults": {
           "color": {
@@ -1031,12 +1351,12 @@
         "overrides": []
       },
       "gridPos": {
-        "h": 6,
+        "h": 3,
         "w": 3,
         "x": 6,
         "y": 20
       },
-      "id": 39,
+      "id": 40,
       "options": {
         "colorMode": "value",
         "graphMode": "none",
@@ -1052,31 +1372,29 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "quantile_over_time(0.99, ({app=\"taler_proxy\"} |~ 
\"s=200\" | logfmt |~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by 
(app)",
-          "hide": false,
-          "instant": true,
-          "legendFormat": "",
-          "range": false,
-          "refId": "D",
-          "resolution": 2
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "quantile_over_time(0.90, ({job=\"proxy\", 
endpoint=\"$endpoint\", status=\"200\"} | logfmt | unwrap rt) [$interval]) by 
(app)",
+          "queryType": "instant",
+          "refId": "A",
+          "resolution": 10
         }
       ],
-      "title": "99th Percentile [$interval]",
+      "title": "90th Percentile [$interval]",
       "type": "stat"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
-      "description": "Standard deviation of response times for successful 
(200) requests to $endpoint",
+      "description": "Average request size extracted from the request_length 
parameter of the ngnix access log.",
       "fieldConfig": {
         "defaults": {
           "color": {
-            "mode": "thresholds"
+            "fixedColor": "text",
+            "mode": "fixed"
           },
           "mappings": [],
           "thresholds": {
@@ -1085,28 +1403,24 @@
               {
                 "color": "green",
                 "value": null
-              },
-              {
-                "color": "red",
-                "value": 80
               }
             ]
           },
-          "unit": "s"
+          "unit": "decbytes"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 6,
+        "h": 3,
         "w": 3,
         "x": 9,
         "y": 20
       },
-      "id": 38,
+      "id": 342,
       "options": {
-        "colorMode": "value",
+        "colorMode": "none",
         "graphMode": "none",
-        "justifyMode": "center",
+        "justifyMode": "auto",
         "orientation": "auto",
         "reduceOptions": {
           "calcs": [
@@ -1115,29 +1429,28 @@
           "fields": "",
           "values": false
         },
-        "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "stddev_over_time(({app=\"taler_proxy\"} |~ \"s=200\" | 
logfmt |~ \"${endpoint:dublequote} \" | unwrap rt) [$interval]) by (app)",
-          "hide": false,
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": 
"rate(taler_requests_request_length_hist_sum{endpoint=\"$endpoint\", 
status=\"200\"}[2m]) / 
rate(taler_requests_request_length_hist_count{endpoint=\"$endpoint\", 
status=\"200\"}[2m])",
           "instant": true,
+          "interval": "",
+          "intervalFactor": 10,
           "legendFormat": "",
-          "range": false,
-          "refId": "C",
-          "resolution": 2
+          "refId": "A"
         }
       ],
-      "title": "Standard Deviation [$interval]",
+      "title": "Request Size",
       "type": "stat"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
       "description": "",
       "fieldConfig": {
         "defaults": {
@@ -1196,6 +1509,7 @@
         "y": 20
       },
       "id": 107,
+      "maxDataPoints": 400,
       "options": {
         "legend": {
           "calcs": [],
@@ -1203,23 +1517,158 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
         {
-          "expr": "sum by (s) (count_over_time(({app=\"taler_proxy\"} | logfmt 
|~ \"${endpoint:dublequote} \") [$interval]))",
-          "legendFormat": "{{s}}",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "sum by (status) 
(rate(taler_requests_total_requests{endpoint=\"$endpoint\"} [$interval]))",
+          "interval": "",
+          "legendFormat": "{{status}}",
+          "refId": "A"
+        }
+      ],
+      "title": "Requests per Second",
+      "type": "timeseries"
+    },
+    {
+      "datasource": {
+        "type": "datasource",
+        "uid": "-- Mixed --"
+      },
+      "description": "99% of requests to $endpoint complete successfully (200) 
below this time",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "red",
+                "value": 80
+              }
+            ]
+          },
+          "unit": "s"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 3,
+        "x": 6,
+        "y": 23
+      },
+      "id": 39,
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "center",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "quantile_over_time(0.99, ({job=\"proxy\", 
endpoint=\"$endpoint\", status=\"200\"} | logfmt | unwrap rt) [$interval]) by 
(app)",
+          "queryType": "instant",
           "refId": "A",
           "resolution": 10
         }
       ],
-      "title": "Number of Requests  [$interval]",
-      "type": "timeseries"
+      "title": "99th Percentile [$interval]",
+      "type": "stat"
+    },
+    {
+      "description": "Average response size extracted from the bytes_sent 
parameter of the ngnix access log.",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "fixedColor": "text",
+            "mode": "fixed"
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          },
+          "unit": "decbytes"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 3,
+        "x": 9,
+        "y": 23
+      },
+      "id": 343,
+      "options": {
+        "colorMode": "none",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": 
"rate(taler_requests_bytes_sent_hist_sum{endpoint=\"$endpoint\", 
status=\"200\"}[2m]) / 
rate(taler_requests_bytes_sent_hist_count{endpoint=\"$endpoint\", 
status=\"200\"}[2m])",
+          "instant": true,
+          "interval": "",
+          "intervalFactor": 10,
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "title": "Response Size",
+      "type": "stat"
     }
   ],
   "refresh": "1m",
-  "schemaVersion": 33,
+  "schemaVersion": 35,
   "style": "dark",
   "tags": [
     "performance",
@@ -1232,9 +1681,9 @@
         "auto_count": 30,
         "auto_min": "10s",
         "current": {
-          "selected": true,
-          "text": "1m",
-          "value": "1m"
+          "selected": false,
+          "text": "3m",
+          "value": "3m"
         },
         "hide": 0,
         "label": "interval",
@@ -1246,7 +1695,7 @@
             "value": "30s"
           },
           {
-            "selected": true,
+            "selected": false,
             "text": "1m",
             "value": "1m"
           },
@@ -1256,7 +1705,7 @@
             "value": "2m"
           },
           {
-            "selected": false,
+            "selected": true,
             "text": "3m",
             "value": "3m"
           },
@@ -1298,52 +1747,27 @@
         "type": "interval"
       },
       {
-        "current": {
-          "selected": false,
-          "text": "All",
-          "value": "$__all"
+        "current": {},
+        "datasource": {
+          "type": "prometheus",
+          "uid": "${DS_PROMETHEUS}"
         },
+        "definition": "label_values(taler_requests_total_requests{}, 
endpoint)",
         "hide": 0,
         "includeAll": true,
         "label": "endpoint",
         "multi": false,
         "name": "endpoint",
-        "options": [
-          {
-            "selected": true,
-            "text": "All",
-            "value": "$__all"
-          },
-          {
-            "selected": false,
-            "text": "/withdraw",
-            "value": "/withdraw"
-          },
-          {
-            "selected": false,
-            "text": "/reveal",
-            "value": "/reveal"
-          },
-          {
-            "selected": false,
-            "text": "/melt",
-            "value": "/melt"
-          },
-          {
-            "selected": false,
-            "text": "/deposit",
-            "value": "/deposit"
-          },
-          {
-            "selected": false,
-            "text": "/reserves/[A-Z0-9]+",
-            "value": "/reserves/[A-Z0-9]+"
-          }
-        ],
-        "query": "/withdraw,/reveal,/melt,/deposit,/reserves/[A-Z0-9]+",
-        "queryValue": "",
+        "options": [],
+        "query": {
+          "query": "label_values(taler_requests_total_requests{}, endpoint)",
+          "refId": "Promethes-EndpointVariableQuery"
+        },
+        "refresh": 1,
+        "regex": "[a-z\\-0-9A-Z]*",
         "skipUrlSync": false,
-        "type": "custom"
+        "sort": 1,
+        "type": "query"
       }
     ]
   },
@@ -1381,6 +1805,6 @@
   "timezone": "browser",
   "title": "Request Statistics",
   "uid": "WcfSXqDnk",
-  "version": 131,
+  "version": 194,
   "weekStart": ""
 }
\ No newline at end of file
diff --git a/additional/grafana/transactions.json 
b/additional/grafana/transactions.json
index 7fdaeea..eaea241 100644
--- a/additional/grafana/transactions.json
+++ b/additional/grafana/transactions.json
@@ -29,7 +29,7 @@
       "type": "grafana",
       "id": "grafana",
       "name": "Grafana",
-      "version": "8.3.2"
+      "version": "8.4.3"
     },
     {
       "type": "datasource",
@@ -129,7 +129,7 @@
       },
       "id": 10,
       "options": {
-        "colorMode": "value",
+        "colorMode": "none",
         "graphMode": "area",
         "justifyMode": "auto",
         "orientation": "auto",
@@ -143,10 +143,14 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "exemplar": true,
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
           "expr": 
"sum(node_systemd_unit_state{name=~\"taler-wallet@(.*).service\", 
state=\"active\"})",
           "instant": true,
           "interval": "",
@@ -158,12 +162,15 @@
       "type": "stat"
     },
     {
+      "description": "The load of all wallet hosts together",
       "fieldConfig": {
         "defaults": {
           "color": {
             "mode": "thresholds"
           },
           "mappings": [],
+          "max": 100,
+          "min": 0,
           "thresholds": {
             "mode": "absolute",
             "steps": [
@@ -176,7 +183,8 @@
                 "value": 80
               }
             ]
-          }
+          },
+          "unit": "percent"
         },
         "overrides": []
       },
@@ -186,6 +194,66 @@
         "x": 3,
         "y": 1
       },
+      "id": 57,
+      "options": {
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "showThresholdLabels": false,
+        "showThresholdMarkers": true,
+        "text": {}
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": "((count(go_info{instance=~\"wallet(.*)\"}) * 100) - 
sum((avg by(instance) (irate(node_cpu_seconds_total{mode=\"idle\", 
instance=~\"wallet(.*)\"}[5m])) * 100))) / 
count(go_info{instance=~\"wallet(.*)\"})",
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "title": "Wallet Load [Experimental]",
+      "type": "gauge"
+    },
+    {
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              },
+              {
+                "color": "red",
+                "value": 80
+              }
+            ]
+          }
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 2,
+        "w": 2,
+        "x": 7,
+        "y": 1
+      },
       "id": 59,
       "options": {
         "colorMode": "none",
@@ -201,7 +269,7 @@
         },
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "datasource": {
@@ -220,15 +288,12 @@
       "type": "stat"
     },
     {
-      "description": "The load of all wallet hosts together",
       "fieldConfig": {
         "defaults": {
           "color": {
             "mode": "thresholds"
           },
           "mappings": [],
-          "max": 100,
-          "min": 0,
           "thresholds": {
             "mode": "absolute",
             "steps": [
@@ -241,19 +306,21 @@
                 "value": 80
               }
             ]
-          },
-          "unit": "percent"
+          }
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 4,
-        "w": 3,
-        "x": 6,
+        "h": 2,
+        "w": 2,
+        "x": 9,
         "y": 1
       },
-      "id": 57,
+      "id": 63,
       "options": {
+        "colorMode": "none",
+        "graphMode": "area",
+        "justifyMode": "center",
         "orientation": "auto",
         "reduceOptions": {
           "calcs": [
@@ -262,11 +329,9 @@
           "fields": "",
           "values": false
         },
-        "showThresholdLabels": false,
-        "showThresholdMarkers": true,
-        "text": {}
+        "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "datasource": {
@@ -274,14 +339,15 @@
             "uid": "${DS_PROMETHEUS}"
           },
           "exemplar": false,
-          "expr": "((count(go_info{instance=~\"wallet(.*)\"}) * 100) - 
sum((avg by(instance) (irate(node_cpu_seconds_total{mode=\"idle\", 
instance=~\"wallet(.*)\"}[5m])) * 100))) / 
count(go_info{instance=~\"wallet(.*)\"})",
+          "expr": "count(go_info{instance=~\"exchange(.*)\"})",
+          "instant": true,
           "interval": "",
           "legendFormat": "",
           "refId": "A"
         }
       ],
-      "title": "Wallet Load [Experimental]",
-      "type": "gauge"
+      "title": "# Exchange Nodes",
+      "type": "stat"
     },
     {
       "description": "Number of exchange processes running",
@@ -306,7 +372,7 @@
       "gridPos": {
         "h": 4,
         "w": 3,
-        "x": 12,
+        "x": 11,
         "y": 1
       },
       "id": 8,
@@ -325,10 +391,14 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "exemplar": true,
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
           "expr": 
"sum(node_systemd_unit_state{name=~\"taler-exchange-http(.*).service\", 
state=\"active\"})",
           "instant": true,
           "interval": "",
@@ -350,13 +420,8 @@
               "options": {
                 "0": {
                   "color": "red",
-                  "index": 1,
-                  "text": "DOWN"
-                },
-                "1": {
-                  "color": "green",
                   "index": 0,
-                  "text": "OK"
+                  "text": "DOWN"
                 }
               },
               "type": "value"
@@ -377,7 +442,7 @@
       "gridPos": {
         "h": 2,
         "w": 2,
-        "x": 16,
+        "x": 14,
         "y": 1
       },
       "id": 46,
@@ -396,11 +461,15 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "exemplar": true,
-          "expr": 
"node_systemd_unit_state{name=\"taler-exchange-aggregator.service\", 
state=\"active\"}",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": 
"sum(node_systemd_unit_state{name=~\"taler-exchange-aggregator(.*).service\", 
state=\"active\"})",
           "instant": true,
           "interval": "",
           "legendFormat": "",
@@ -410,6 +479,78 @@
       "title": "# Aggregator",
       "type": "stat"
     },
+    {
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "fixedColor": "text",
+            "mode": "thresholds"
+          },
+          "mappings": [
+            {
+              "options": {
+                "0": {
+                  "color": "red",
+                  "index": 0,
+                  "text": "DOWN"
+                }
+              },
+              "type": "value"
+            }
+          ],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          }
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 2,
+        "w": 2,
+        "x": 16,
+        "y": 1
+      },
+      "id": 49,
+      "options": {
+        "colorMode": "value",
+        "graphMode": "area",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": 
"sum(node_systemd_unit_state{name=~\"taler-exchange-closer(.*).service\", 
state=\"active\"})",
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "title": "# Closer",
+      "type": "stat"
+    },
     {
       "fieldConfig": {
         "defaults": {
@@ -451,7 +592,7 @@
         "x": 18,
         "y": 1
       },
-      "id": 50,
+      "id": 51,
       "options": {
         "colorMode": "value",
         "graphMode": "area",
@@ -467,18 +608,22 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "exemplar": true,
-          "expr": 
"node_systemd_unit_state{name=\"taler-exchange-transfer.service\", 
state=\"active\"}",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": 
"node_systemd_unit_state{name=\"taler-exchange-secmod-eddsa.service\", 
state=\"active\"}",
           "instant": true,
           "interval": "",
           "legendFormat": "",
           "refId": "A"
         }
       ],
-      "title": "Transfer",
+      "title": "EdDSA",
       "type": "stat"
     },
     {
@@ -523,7 +668,7 @@
         "x": 20,
         "y": 1
       },
-      "id": 49,
+      "id": 60,
       "options": {
         "colorMode": "value",
         "graphMode": "area",
@@ -539,18 +684,22 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "exemplar": true,
-          "expr": 
"node_systemd_unit_state{name=\"taler-exchange-closer.service\", 
state=\"active\"}",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": 
"node_systemd_unit_state{name=\"taler-exchange-secmod-cs.service\", 
state=\"active\"}",
           "instant": true,
           "interval": "",
           "legendFormat": "",
           "refId": "A"
         }
       ],
-      "title": "Closer",
+      "title": "CS",
       "type": "stat"
     },
     {
@@ -611,7 +760,7 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
@@ -626,7 +775,7 @@
       "type": "stat"
     },
     {
-      "description": "Number of wirewatch processes running",
+      "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
@@ -639,6 +788,10 @@
               {
                 "color": "green",
                 "value": null
+              },
+              {
+                "color": "red",
+                "value": 80
               }
             ]
           }
@@ -648,7 +801,77 @@
       "gridPos": {
         "h": 2,
         "w": 2,
-        "x": 16,
+        "x": 9,
+        "y": 3
+      },
+      "id": 64,
+      "options": {
+        "colorMode": "none",
+        "graphMode": "area",
+        "justifyMode": "center",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.4.3",
+      "targets": [
+        {
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": "count(go_info{instance=~\"(.*).proxy.*\"})",
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "title": "# Proxy Nodes",
+      "type": "stat"
+    },
+    {
+      "description": "Number of wirewatch processes running",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [
+            {
+              "options": {
+                "0": {
+                  "color": "red",
+                  "index": 0,
+                  "text": "DOWN"
+                }
+              },
+              "type": "value"
+            }
+          ],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          }
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 2,
+        "w": 2,
+        "x": 14,
         "y": 3
       },
       "id": 41,
@@ -667,10 +890,14 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "exemplar": true,
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
           "expr": 
"sum(node_systemd_unit_state{name=~\"taler-exchange-wirewatch(.*).service\", 
state=\"active\"})",
           "instant": true,
           "interval": "",
@@ -692,13 +919,8 @@
               "options": {
                 "0": {
                   "color": "red",
-                  "index": 1,
-                  "text": "DOWN"
-                },
-                "1": {
-                  "color": "green",
                   "index": 0,
-                  "text": "OK"
+                  "text": "DOWN"
                 }
               },
               "type": "value"
@@ -719,10 +941,10 @@
       "gridPos": {
         "h": 2,
         "w": 2,
-        "x": 18,
+        "x": 16,
         "y": 3
       },
-      "id": 52,
+      "id": 50,
       "options": {
         "colorMode": "value",
         "graphMode": "area",
@@ -738,18 +960,22 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "exemplar": true,
-          "expr": 
"node_systemd_unit_state{name=\"taler-exchange-secmod-rsa.service\", 
state=\"active\"}",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": 
"sum(node_systemd_unit_state{name=~\"taler-exchange-transfer(.*).service\", 
state=\"active\"})",
           "instant": true,
           "interval": "",
           "legendFormat": "",
           "refId": "A"
         }
       ],
-      "title": "RSA",
+      "title": "# Transfer",
       "type": "stat"
     },
     {
@@ -790,10 +1016,10 @@
       "gridPos": {
         "h": 2,
         "w": 2,
-        "x": 20,
+        "x": 18,
         "y": 3
       },
-      "id": 51,
+      "id": 52,
       "options": {
         "colorMode": "value",
         "graphMode": "area",
@@ -809,18 +1035,18 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
-          "expr": 
"node_systemd_unit_state{name=\"taler-exchange-secmod-eddsa.service\", 
state=\"active\"}",
+          "expr": 
"node_systemd_unit_state{name=\"taler-exchange-secmod-rsa.service\", 
state=\"active\"}",
           "instant": true,
           "interval": "",
           "legendFormat": "",
           "refId": "A"
         }
       ],
-      "title": "EdDSA",
+      "title": "RSA",
       "type": "stat"
     },
     {
@@ -881,7 +1107,7 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
           "exemplar": true,
@@ -909,11 +1135,7 @@
       "type": "row"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
-      "description": "Total successful (200) requests to /deposit and 
/withdraw per second, measured at the nginx proxy and over the whole displayed 
time range.",
+      "description": "Total successful (200) requests to /deposit and 
/withdraw per second, measured at the nginx proxy in a 2 minute interval.",
       "fieldConfig": {
         "defaults": {
           "color": {
@@ -955,12 +1177,17 @@
         "showThresholdMarkers": true,
         "text": {}
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "sum by (app) (rate({app=\"taler_proxy\"} |~ 
\"(/deposit|/withdraw)\" |~ \"s=200\" [2m] ))",
-          "instant": true,
-          "range": false,
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": "sum 
(rate(taler_requests_total_requests{endpoint=~\"reserves-withdraw|coins-deposit\",
 status=\"200\"} [2m]))",
+          "interval": "",
+          "legendFormat": "",
           "refId": "A"
         }
       ],
@@ -969,11 +1196,7 @@
       "type": "gauge"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
-      "description": "Total successful (200) requests per second to /withdraw 
per second, measured at the nginx proxy and over the whole displayed time 
range.",
+      "description": "Total successful (200) requests per second to /withdraw 
per second, measured at the nginx proxy in a 5 minute interval.",
       "fieldConfig": {
         "defaults": {
           "color": {
@@ -1002,7 +1225,7 @@
       },
       "id": 4,
       "options": {
-        "colorMode": "value",
+        "colorMode": "none",
         "graphMode": "none",
         "justifyMode": "center",
         "orientation": "auto",
@@ -1016,12 +1239,18 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "sum by (app) (rate({app=\"taler_proxy\"} |~ \"/withdraw\" 
|~ \"s=200\" [1h] ))",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": "sum 
(rate(taler_requests_total_requests{endpoint=\"reserves-withdraw\", 
status=\"200\"} [5m] ))",
           "instant": true,
-          "range": false,
+          "interval": "",
+          "legendFormat": "",
           "refId": "A"
         }
       ],
@@ -1030,11 +1259,7 @@
       "type": "stat"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
-      "description": "Total number of successful requests to /deposit and 
/withdraw per second, measured at the nginx proxy and over a 5 minute 
interval.",
+      "description": "Total number of successful requests to /deposit and 
/withdraw per second, measured at the nginx proxy and over a 2 minute 
interval.",
       "fieldConfig": {
         "defaults": {
           "color": {
@@ -1099,26 +1324,29 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
         {
-          "expr": "sum by (app) (count_over_time({app=\"taler_proxy\"}  |~ 
\"s=200\" |~ \"(/withdraw|/deposit)\" | logfmt [2m])) / (2*60)",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": true,
+          "expr": 
"sum(rate(taler_requests_total_requests{endpoint=~\"reserves-withdraw|coins-deposit\",
 status=\"200\"}[2m]))",
+          "interval": "",
+          "intervalFactor": 2,
           "legendFormat": "TPS",
-          "refId": "A",
-          "resolution": 10
+          "refId": "A"
         }
       ],
       "title": "TPS History",
       "type": "timeseries"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
-      "description": "Total successful (200) requests to /deposit per second, 
measured at the nginx proxy and over the whole displayed time range.",
+      "description": "Total successful (200) requests to /deposit per second, 
measured at the nginx proxy in a 5 minute interval.",
       "fieldConfig": {
         "defaults": {
           "color": {
@@ -1147,7 +1375,7 @@
       },
       "id": 30,
       "options": {
-        "colorMode": "value",
+        "colorMode": "none",
         "graphMode": "none",
         "justifyMode": "center",
         "orientation": "auto",
@@ -1161,12 +1389,18 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "sum by (app) (rate({app=\"taler_proxy\"} |~ \"/deposit\" |~ 
\"s=200\" [1h] ))",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": "sum 
(rate(taler_requests_total_requests{endpoint=\"coins-deposit\", status=\"200\"} 
[5m] ))",
           "instant": true,
-          "range": false,
+          "interval": "",
+          "legendFormat": "",
           "refId": "A"
         }
       ],
@@ -1175,10 +1409,6 @@
       "type": "stat"
     },
     {
-      "datasource": {
-        "type": "loki",
-        "uid": "${DS_LOKI}"
-      },
       "description": "",
       "fieldConfig": {
         "defaults": {
@@ -1210,8 +1440,8 @@
       },
       "id": 54,
       "options": {
-        "colorMode": "value",
-        "graphMode": "area",
+        "colorMode": "none",
+        "graphMode": "none",
         "justifyMode": "auto",
         "orientation": "auto",
         "reduceOptions": {
@@ -1224,12 +1454,18 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.3.2",
+      "pluginVersion": "8.4.3",
       "targets": [
         {
-          "expr": "(sum(count_over_time({app=\"taler_proxy\"} |~ \"/deposit\" 
|~ \"s=200\" [1h]))) / (sum (count_over_time({app=\"taler_proxy\"} |~ 
\"/withdraw\" |~ \"s=200\" [1h])))",
+          "datasource": {
+            "type": "prometheus",
+            "uid": "${DS_PROMETHEUS}"
+          },
+          "exemplar": false,
+          "expr": 
"(sum(rate(taler_requests_total_requests{endpoint=\"coins-deposit\", 
status=\"200\"} [5m]))) / (sum 
(rate(taler_requests_total_requests{endpoint=\"reserves-withdraw\", 
status=\"200\"} [5m])))",
           "instant": true,
-          "range": false,
+          "interval": "",
+          "legendFormat": "",
           "refId": "A"
         }
       ],
@@ -1292,10 +1528,14 @@
             "showThresholdMarkers": true,
             "text": {}
           },
-          "pluginVersion": "8.3.2",
+          "pluginVersion": "8.4.3",
           "targets": [
             {
-              "expr": "count without(uri) (sum by(uri) 
(count_over_time({app=\"taler_proxy\"} |~ \"s=200\" |~ \"(/withdraw|/deposit)\" 
| logfmt [2m]))) / 120",
+              "datasource": {
+                "type": "loki",
+                "uid": "${DS_LOKI}"
+              },
+              "expr": "count without(uri) (sum by(uri) 
(count_over_time({job=\"proxy\", endpoint=~\"coins-deposit|reserves-withdraw\", 
status=\"200\"} | logfmt [2m]))) / 120",
               "instant": true,
               "range": false,
               "refId": "A"
@@ -1309,7 +1549,7 @@
             "type": "loki",
             "uid": "${DS_LOKI}"
           },
-          "description": "Total successful requests to withdraw all coins of a 
reserve per second, measured at the nginx proxy and over the whole displayed 
time range. (Requests to /withdraw are grouped into reserves they belong to 
before they get counted.)",
+          "description": "Total successful requests to withdraw all coins of a 
reserve per second, measured at the nginx proxy in a 10 minute interval. 
(Requests to /withdraw are grouped into reserves they belong to before they get 
counted.)",
           "fieldConfig": {
             "defaults": {
               "color": {
@@ -1337,7 +1577,7 @@
           },
           "id": 16,
           "options": {
-            "colorMode": "value",
+            "colorMode": "none",
             "graphMode": "none",
             "justifyMode": "center",
             "orientation": "auto",
@@ -1351,10 +1591,14 @@
             "text": {},
             "textMode": "auto"
           },
-          "pluginVersion": "8.3.2",
+          "pluginVersion": "8.4.3",
           "targets": [
             {
-              "expr": "(count without(uri) (sum by(uri) 
(count_over_time({app=\"taler_proxy\"} |~ \"/withdraw\" |~ \"s=200\" | logfmt 
[1h]))))  / 3600",
+              "datasource": {
+                "type": "loki",
+                "uid": "${DS_LOKI}"
+              },
+              "expr": "(count without(uri) (sum by(uri) 
(count_over_time({job=\"proxy\", endpoint=\"reserves-withdraw\", 
status=\"200\"} | logfmt [10m])))) / 600",
               "instant": true,
               "range": false,
               "refId": "A"
@@ -1433,12 +1677,17 @@
               "placement": "bottom"
             },
             "tooltip": {
-              "mode": "single"
+              "mode": "single",
+              "sort": "none"
             }
           },
           "targets": [
             {
-              "expr": "count without(uri) (sum by(uri) 
(count_over_time({app=\"taler_proxy\"}  |~ \"s=200\" |~ 
\"(/withdraw|/deposit)\" | logfmt [2m]))) / (2*60)",
+              "datasource": {
+                "type": "loki",
+                "uid": "${DS_LOKI}"
+              },
+              "expr": "count without(uri) (sum by(uri) 
(count_over_time({job=\"proxy\", endpoint=~\"reserves-withdraw|coins-deposit\", 
status=\"200\"} | logfmt [2m]))) / (2*60)",
               "legendFormat": "TPS",
               "refId": "A",
               "resolution": 10
@@ -1448,10 +1697,6 @@
           "type": "timeseries"
         },
         {
-          "datasource": {
-            "type": "loki",
-            "uid": "${DS_LOKI}"
-          },
           "description": "",
           "fieldConfig": {
             "defaults": {
@@ -1480,7 +1725,7 @@
           },
           "id": 6,
           "options": {
-            "colorMode": "value",
+            "colorMode": "none",
             "graphMode": "none",
             "justifyMode": "center",
             "orientation": "auto",
@@ -1494,12 +1739,17 @@
             "text": {},
             "textMode": "auto"
           },
-          "pluginVersion": "8.3.2",
+          "pluginVersion": "8.4.3",
           "targets": [
             {
-              "expr": "sum by (app) (rate({app=\"taler_proxy\"} |~ 
\"/deposit\" |~ \"s=200\" [1h] ))",
-              "instant": true,
-              "range": false,
+              "datasource": {
+                "type": "prometheus",
+                "uid": "${DS_PROMETHEUS}"
+              },
+              "exemplar": true,
+              "expr": "sum 
(rate(taler_requests_total_requests{endpoint=\"coins-deposit\", status=\"200\"} 
[5m] ))",
+              "interval": "",
+              "legendFormat": "",
               "refId": "A"
             }
           ],
@@ -1542,8 +1792,8 @@
           },
           "id": 12,
           "options": {
-            "colorMode": "value",
-            "graphMode": "area",
+            "colorMode": "none",
+            "graphMode": "none",
             "justifyMode": "auto",
             "orientation": "auto",
             "reduceOptions": {
@@ -1556,10 +1806,14 @@
             "text": {},
             "textMode": "auto"
           },
-          "pluginVersion": "8.3.2",
+          "pluginVersion": "8.4.3",
           "targets": [
             {
-              "expr": "(sum(count_over_time({app=\"taler_proxy\"} |~ 
\"/deposit\" |~ \"s=200\" [1h]))) / (count without(uri) (sum by(uri) 
(count_over_time({app=\"taler_proxy\"} |~ \"/withdraw\" |~ \"s=200\" | logfmt 
[1h]))))",
+              "datasource": {
+                "type": "loki",
+                "uid": "${DS_LOKI}"
+              },
+              "expr": "(sum(count_over_time({job=\"proxy\", 
endpoint=\"coins-deposit\", status=\"200\"} [10m]))) / (count without(uri) (sum 
by(uri) (count_over_time({job=\"proxy\", endpoint=\"reserves-withdraw\", 
status=\"200\"} | logfmt [10m]))))",
               "instant": true,
               "range": false,
               "refId": "A"
@@ -1657,12 +1911,17 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
         {
-          "expr": "avg_over_time({app=\"taler-wallet-cli\"} |~ \"time=\" |~ 
\"withdraw\" | logfmt | unwrap time [10m]) by (app)",
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "avg_over_time({app=\"taler-wallet-cli\", job=\"wallet\", 
script=\"benchmark\"} |~ \"withdraw\" | logfmt | unwrap time [2m]) by (app)",
           "instant": false,
           "legendFormat": "withdraw",
           "range": true,
@@ -1739,7 +1998,8 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
@@ -1826,13 +2086,19 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
         {
-          "expr": "avg_over_time({app=\"taler-wallet-cli\"} |~ \"time=\" |~ 
\"deposit\" | logfmt | unwrap time [10m]) by (app)",
+          "datasource": {
+            "type": "loki",
+            "uid": "${DS_LOKI}"
+          },
+          "expr": "avg_over_time({app=\"taler-wallet-cli\", job=\"wallet\", 
script=\"benchmark\"} |~ \"deposit \" | logfmt | unwrap time [2m]) by (app)",
           "legendFormat": "deposit",
+          "queryType": "range",
           "refId": "A",
           "resolution": 5
         }
@@ -1906,7 +2172,8 @@
           "placement": "bottom"
         },
         "tooltip": {
-          "mode": "single"
+          "mode": "single",
+          "sort": "none"
         }
       },
       "targets": [
@@ -1922,8 +2189,8 @@
       "type": "timeseries"
     }
   ],
-  "refresh": "1m",
-  "schemaVersion": 33,
+  "refresh": "10s",
+  "schemaVersion": 35,
   "style": "dark",
   "tags": [
     "performance",
@@ -1933,13 +2200,13 @@
     "list": []
   },
   "time": {
-    "from": "now-90m",
+    "from": "now-1h",
     "to": "now"
   },
   "timepicker": {},
   "timezone": "",
   "title": "Transactions",
   "uid": "83vvgKKnk",
-  "version": 87,
+  "version": 134,
   "weekStart": ""
 }
\ No newline at end of file
diff --git a/additional/persist.sh b/additional/persist.sh
new file mode 100755
index 0000000..83448b9
--- /dev/null
+++ b/additional/persist.sh
@@ -0,0 +1,126 @@
+#!/bin/bash
+
+# Script to automatically fetch and clean data on the Grid'5000 shares
+# Params: 
+# 1: Name for the experiment
+# 2: Additional plot tar to include (see ./plots)
+
+set -e
+
+function work_in_progress() {
+  echo -ne '\r\033[K'
+  sleep 1
+  echo -ne '.\r'
+  sleep 1
+  echo -ne '..\r'
+  sleep 1
+  echo -ne '...\r'
+  sleep 1
+}
+
+function backup() {
+  if [ -z ${1} ]; then
+    echo "Missing experiment name"
+    exit 1
+  fi
+  if [ -z ${2} ]; then
+    echo "No plots will be included"
+  else
+    echo "The file '${2}' will be deleted when this script finishes, do you 
want to contiue? [y/n]" 
+    while true; do
+      read -n 1 -s yn
+      case $yn in
+        [Yy]*) break 2;;
+        [Nn]*) exit ;;
+        *) echo "Please enter 'y' or 'n'" ;;
+      esac
+    done
+  fi
+
+  # Slugify the name
+  NAME=$(\
+    echo "$1" | \
+    sed -r s/[~\^]+//g | \
+    sed -r s/[^a-zA-Z0-9]+/-/g | \
+    sed -r s/^-+\|-+$//g | \
+    tr A-Z a-z \
+  )
+  BACKUP_NAME="${NAME}-$(date +%d-%m-%y).tar"
+  BACKUP_DIR="archives"
+  
+  G5K_BACKUP="g5k-$(date +%s).tar.gz"
+  
+  echo "Creating archive, this can take some time"
+  ssh g5k 'rm -rf grenoble/g5k.tar* && find . -type l -maxdepth 1 -exec tar 
--ignore-failed-read -rf grenoble/g5k.tar -C {} exp-logs exp-data espec-times 
2>&1 \; | grep -vi "no such file"' &
+  
+  PID=$!
+  while kill -0 $PID > /dev/null 2>&1; do
+    work_in_progress
+  done
+  
+  echo "Compressing archive, this may take some time"
+  ssh g5k 'gzip grenoble/g5k.tar' &
+  
+  PID=$!
+  while kill -0 $PID > /dev/null 2>&1; do
+    work_in_progress
+  done
+  
+  echo "Copying archive to local machine"
+  scp g5k:~/grenoble/g5k.tar.gz ${G5K_BACKUP}
+  
+  test -d ${BACKUP_DIR} || mkdir ${BACKUP_DIR}
+  
+  echo "Creating Backup Tar ${BACKUP_DIR}/${BACKUP_NAME}"
+  tar -cvf ${BACKUP_DIR}/${BACKUP_NAME} ${G5K_BACKUP} ${2} &
+  
+  PID=$!
+  while kill -0 $PID > /dev/null 2>&1; do
+    work_in_progress
+  done
+  
+  rm ${G5K_BACKUP} ${2}
+}
+
+function delete() {
+  echo "Cleaning up g5k storage"
+  ssh g5k 'rm grenoble/g5k.tar.gz || true && $(find . -type l -exec rm -rf 
{}/exp-logs/ {}/exp-data {}/espec-times \;)' &
+  
+  PID=$!
+  while kill -0 $PID > /dev/null 2>&1; do
+    work_in_progress
+  done
+}
+
+echo "
+Make sure that:
+
+- Your ssh key to access the grid is added to the ssh-agent with 'ssh-add 
<KEY>'
+- The config to access the grid is setup as described in:
+  
https://www.grid5000.fr/w/SSH#Using_SSH_ProxyCommand_feature_to_ease_the_access_to_hosts_inside_Grid.275000
+"
+
+if [[ $(ssh-add -L) =~ "The agent has no" ]]; then
+  echo "No ssh key added, aborting"
+  exit 1
+fi
+  
+  
+case $1 in
+  -b|--backup)
+    backup $2 $3
+    ;;
+  -d|--delete)
+    delete
+    ;;
+  *)
+    echo "Usage: ./persist.sh <OPTIONS>"
+    echo ""
+    echo "OPTIONS:"
+    echo " -b | --backup <experiment-name> <addtitional-plot-archive>"
+    echo "    backup exp-data, exp-logs and espec-times from g5k NFS"
+    echo " -d | --delete"
+    echo "    delete exp-data, exp-logs and espec-times from g5k NFS"
+    ;;
+esac
+
diff --git a/additional/plots/config.yaml b/additional/plots/config.yaml
index ca3094b..3740e67 100644
--- a/additional/plots/config.yaml
+++ b/additional/plots/config.yaml
@@ -33,15 +33,18 @@ dashboards:
       height: 400
   - uid: rYdddlPWk # Nodes
     variables: ['node']
-    ignore: 'wallet*|monitor*|bank*|merch*|ns*|proxy*'
+    ignore: 
'monitor*|bank*|merch*|ns*|wallet*|*aggregator|*closer|*wirewatch|*closer'
     graph:
       width: 1200
-      height: 800
+      height: 600
   - uid: rkyhDAt7z # Load Statistics
     graph:
       width: 1200
       height: 400
+  - uid: NYO0EIE7k # Exchange
+    graph:
+      width: 1200
+      heigth: 400
 
 prometheus:
   node_exporter_job_name: nodes
-
diff --git a/additional/recover/.gitignore b/additional/recover/.gitignore
new file mode 100644
index 0000000..22a7683
--- /dev/null
+++ b/additional/recover/.gitignore
@@ -0,0 +1,4 @@
+!assets
+!*.yaml
+!.gitignore
+*
diff --git 
a/additional/recover/assets/grafana/provisioning/dashboards/taler-perf.yaml 
b/additional/recover/assets/grafana/provisioning/dashboards/taler-perf.yaml
new file mode 100644
index 0000000..63f8ab0
--- /dev/null
+++ b/additional/recover/assets/grafana/provisioning/dashboards/taler-perf.yaml
@@ -0,0 +1,9 @@
+apiVersion: 1
+
+providers:
+  - name: Taler
+    orgId: 1
+    type: file
+    options:
+      path: /etc/taler/dashboards
+      foldersFromFilesStructure: false
diff --git 
a/additional/recover/assets/grafana/provisioning/datasources/prometheus.yaml 
b/additional/recover/assets/grafana/provisioning/datasources/prometheus.yaml
new file mode 100644
index 0000000..0900450
--- /dev/null
+++ b/additional/recover/assets/grafana/provisioning/datasources/prometheus.yaml
@@ -0,0 +1,12 @@
+apiVersion: 1
+
+datasources:
+  - name: Prometheus
+    type: prometheus
+    access: proxy
+    orgId: 1
+    uid: default-prometheus
+    url: http://prometheus:9090
+    isDefault: true
+    editable: false
+    version: 1
diff --git a/experiment/TODO 
b/additional/recover/assets/prometheus/prometheus.yaml
similarity index 100%
rename from experiment/TODO
rename to additional/recover/assets/prometheus/prometheus.yaml
diff --git a/additional/recover/docker-compose.yaml 
b/additional/recover/docker-compose.yaml
new file mode 100644
index 0000000..5375828
--- /dev/null
+++ b/additional/recover/docker-compose.yaml
@@ -0,0 +1,66 @@
+version: "3.7"
+
+services:
+
+  prometheus:
+    hostname: prometheus
+    image: prom/prometheus:v2.35.0
+    restart: 'no'
+    container_name: prometheus
+    user: "${U_ID}:${G_ID}"
+    ports:
+      - "9090:9090"
+    command: 
+      - '--storage.tsdb.retention.size=1TB'
+    volumes:
+      - ${PWD}/assets/prometheus/prometheus.yaml:/prometheus/prometheus.yml
+      - ${PROMETHEUS_DATA}:/prometheus/data
+
+  grafana:
+    hostname: grafana
+    image: grafana/grafana-oss:8.4.6
+    restart: 'no'
+    container_name: grafana
+    user: "${U_ID}:${G_ID}"
+    environment:
+      GF_SECURITY_ADMIN_USER: taler
+      GF_SECURITY_ADMIN_PASSWORD: taler
+      GF_AUTH_ANONYMOUS_ENABLED: 'true'
+      GF_AUTH_ANONYMOUS_ORG_ROLE: Admin
+      GF_SESSION_COOKIE_SECURE: 'false'
+      GF_AUTH_BASIC_ENABLED: 'false'
+      GF_SERVER_DOMAIN: 'localhost'
+      GF_ANALYTICS_REPORTING_ENABLED: 'false'
+      GF_ALERTING_ENABLED: 'false'
+      GF_SECRET_KEY: super-safe-secret-key
+      GF_USERS_ALLOW_SIGNUPS: 'false'
+      GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH: 
/etc/taler/dashboards/taler-performance.json
+      GF_RENDERING_SERVER_URL: 'http://grafana-renderer:8081/render'
+      GF_RENDERING_CALLBACK_URL: 'http://grafana:3000/'
+      GF_LIVE_ALLOWED_ORIGINS: 'http://grafana:3000'
+    ports:
+      - "8080:3000"
+    volumes:
+      - ${PWD}/assets/grafana/provisioning:/etc/grafana/provisioning
+      - ${DASHBOARDS_DIR}:/etc/taler/dashboards
+
+  renderer:
+    image: grafana/grafana-image-renderer:3.4.2
+    restart: 'no'
+    hostname: grafana-renderer
+    container_name: grafana-renderer
+
+  loki:
+    hostname: loki
+    image: grafana/loki:2.5.0
+    restart: 'no'
+    container_name: loki
+    user: "${U_ID}:${G_ID}"
+    ports:
+      - "3100:3100"
+    command:
+      - '-config.file=/etc/loki/loki.yml'
+    volumes:
+      - ${PWD}/assets/loki/loki.yaml:/etc/loki/loki.yml
+      - ${LOKI_DATA}:/tmp/loki
+
diff --git a/additional/recover/run.sh b/additional/recover/run.sh
new file mode 100755
index 0000000..2af439f
--- /dev/null
+++ b/additional/recover/run.sh
@@ -0,0 +1,80 @@
+#!/bin/bash
+
+# Script to run a local instance of grafana, loki and prometheus
+# with a data (prometheus and loki) snapshot of an experiment
+
+if [[ -z ${1} ]]; then
+  echo "Usage: run.sh EXPERIMENT_ARCHIVE || EXPERIMENT_DATA_FOLDER"
+  exit 1
+fi
+
+TMP_BASEDIR=/tmp/taler-perf
+rm -rf ${TMP_BASEDIR} || true
+
+export LOKI_DATA="${TMP_BASEDIR}/loki"
+export PROMETHEUS_DATA="${TMP_BASEDIR}/prometheus"
+export DASHBOARDS_DIR="${TMP_BASEDIR}/dashboards"
+
+EXP_DATA=${1}
+
+if file ${EXP_DATA} | grep -q 'tar archive'; then
+  # Extract the exp-data dir from the persist archive
+  G5K_ARCHIVE=$(tar -t -f ${EXP_DATA} | grep 'g5k')
+  tar -xvf ${EXP_DATA} -C /tmp ${G5K_ARCHIVE} 
+  tar -xvf /tmp/${G5K_ARCHIVE} -C /tmp exp-data 
+  rm -rf /tmp/${G5K_ARCHIVE}
+  EXP_DATA=/tmp/exp-data
+  mv ${EXP_DATA} ${TMP_BASEDIR}
+else
+  cp -r ${EXP_DATA} ${TMP_BASEDIR}
+fi
+
+mkdir ${DASHBOARDS_DIR} || true
+
+# load the times to adjust the grafana dashboards
+source "${TMP_BASEDIR}/times.env"
+
+START=$(date --date=@${EXPERIMENT_START} +"%F %T")
+END=$(date --date=@${SNAPSHOT_TIME} +"%F %T")
+
+# to get the right permissions on the Prometheus data
+export U_ID=$(id -u)
+export G_ID=$(id -g)
+
+function startup() {
+
+  # prepare the dashboards for grafana
+  # need to replace the DS_PROMETHEUS/DS_LOKI placeholders which are created 
when
+  # exporting and set the timestamps that it works out of the box without
+  # having to search for the experiment time in the browser
+  for FILE in $(find ../grafana -iname "*json") 
+  do
+    OUTPUT="${DASHBOARDS_DIR}/$(basename $FILE)"
+    sed -e 's/${DS_PROMETHEUS}/default-prometheus/g' \
+       -e 's/${DS_LOKI}/default-loki/g' $FILE | \
+    jq --arg f "${START}" --arg t "${END}" '.time.from=$f | .time.to=$t' > 
$OUTPUT
+  done
+
+  docker-compose down
+  docker-compose up &
+}
+
+function cleanup() {
+  docker-compose down -v
+  rm -rf ${TMP_BASEDIR}
+}
+
+function ctrl_c() {
+  echo "Shutting down"
+  cleanup
+}
+
+trap ctrl_c INT
+
+startup
+while ! wget -q http://localhost:8080; do
+  sleep 2
+done
+echo "Instances running, please head to http://localhost:8080";
+xdg-open http://localhost:8080 || true
+wait
diff --git a/experiment/taler.rspec b/additional/rspecs/taler.any.rspec
similarity index 83%
copy from experiment/taler.rspec
copy to additional/rspecs/taler.any.rspec
index 462f39a..c4c855e 100644
--- a/experiment/taler.rspec
+++ b/additional/rspecs/taler.any.rspec
@@ -1,51 +1,46 @@
 <?xml version='1.0'?>
-<rspec xmlns="http://www.geni.net/resources/rspec/3"; type="request" 
generated_by="jFed RSpec Editor" generated="2021-11-25T12:41:28.205+01:00" 
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"; 
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"; 
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"; 
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"; 
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1"; xmlns: 
[...]
+<rspec xmlns="http://www.geni.net/resources/rspec/3"; type="request" 
generated_by="jFed RSpec Editor" generated="2022-04-02T11:15:20.062+02:00" 
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"; 
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"; 
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"; 
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"; 
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1"; xmlns: 
[...]
   <node client_id="DB" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <hardware_type name="dahu-grenoble"/>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="156.0" 
y="70.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="163.0" 
y="140.5"/>
   </node>
-  <node client_id="Exchange" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Exchange-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <hardware_type name="dahu-grenoble"/>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="283.0" 
y="127.5"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="275.0" 
y="195.5"/>
   </node>
   <node client_id="Bank" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <hardware_type name="dahu-grenoble"/>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="422.0" 
y="70.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="409.0" 
y="138.5"/>
   </node>
-  <node client_id="Proxy" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="EProxy-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <hardware_type name="dahu-grenoble"/>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="284.5" 
y="184.5"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="278.5" 
y="242.5"/>
   </node>
   <node client_id="Monitor" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="732.5" 
y="156.5"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="566.5" 
y="138.5"/>
   </node>
-  <node client_id="Merchant" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Merchant-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="554.5" 
y="156.5"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="574.5" 
y="183.5"/>
   </node>
   <node client_id="DNS" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <hardware_type name="dahu-grenoble"/>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="638.0" 
y="70.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="558.0" 
y="94.5"/>
   </node>
   <node client_id="Wallet-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
@@ -167,4 +162,28 @@
     </sliver_type>
     <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="700.0" 
y="420.0"/>
   </node>
-</rspec>
\ No newline at end of file
+  <node client_id="Shard-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="86.5" 
y="59.5"/>
+  </node>
+  <node client_id="Shard-2" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="246.5" 
y="59.5"/>
+  </node>
+  <node client_id="Shard-3" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="88.5" 
y="98.5"/>
+  </node>
+  <node client_id="Shard-4" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="248.5" 
y="100.5"/>
+  </node>
+</rspec>
diff --git a/additional/rspecs/taler.minial.rspec 
b/additional/rspecs/taler.minial.rspec
new file mode 100644
index 0000000..f18357b
--- /dev/null
+++ b/additional/rspecs/taler.minial.rspec
@@ -0,0 +1,45 @@
+<?xml version='1.0'?>
+<rspec xmlns="http://www.geni.net/resources/rspec/3"; type="request" 
generated_by="jFed RSpec Editor" generated="2022-04-02T11:14:04.525+02:00" 
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"; 
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"; 
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"; 
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"; 
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1"; xmlns: 
[...]
+  <node client_id="DB" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="166.0" 
y="102.5"/>
+  </node>
+  <node client_id="Exchange-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="220.0" 
y="159.5"/>
+  </node>
+  <node client_id="Bank" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="280.0" 
y="102.5"/>
+  </node>
+  <node client_id="EProxy-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="218.5" 
y="217.5"/>
+  </node>
+  <node client_id="Monitor" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="467.5" 
y="155.5"/>
+  </node>
+  <node client_id="DNS" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="458.0" 
y="109.5"/>
+  </node>
+</rspec>
diff --git a/experiment/taler.rspec 
b/additional/rspecs/taler.sharded.minimal-with-wallets.rspec
similarity index 72%
copy from experiment/taler.rspec
copy to additional/rspecs/taler.sharded.minimal-with-wallets.rspec
index 462f39a..e9292f9 100644
--- a/experiment/taler.rspec
+++ b/additional/rspecs/taler.sharded.minimal-with-wallets.rspec
@@ -1,170 +1,153 @@
 <?xml version='1.0'?>
-<rspec xmlns="http://www.geni.net/resources/rspec/3"; type="request" 
generated_by="jFed RSpec Editor" generated="2021-11-25T12:41:28.205+01:00" 
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"; 
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"; 
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"; 
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"; 
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1"; xmlns: 
[...]
+<rspec xmlns="http://www.geni.net/resources/rspec/3"; type="request" 
generated_by="jFed RSpec Editor" generated="2022-04-07T08:29:19.023+02:00" 
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"; 
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"; 
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"; 
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"; 
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1"; xmlns: 
[...]
   <node client_id="DB" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
     <hardware_type name="dahu-grenoble"/>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="156.0" 
y="70.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="129.96073503955864" y="91.04814004376368"/>
   </node>
-  <node client_id="Exchange" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Exchange-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
     <hardware_type name="dahu-grenoble"/>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="283.0" 
y="127.5"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="203.55041363274475" y="126.77796370189213"/>
   </node>
   <node client_id="Bank" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
     <hardware_type name="dahu-grenoble"/>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="422.0" 
y="70.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="413.801756818745" y="79.01011581202081"/>
   </node>
-  <node client_id="Proxy" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="EProxy-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
     <hardware_type name="dahu-grenoble"/>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="284.5" 
y="184.5"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="218.97646326867414" y="162.8475631289378"/>
   </node>
   <node client_id="Monitor" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="732.5" 
y="156.5"/>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="873.7265700381206" y="77.06040773488321"/>
   </node>
-  <node client_id="Merchant" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Merchant-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="554.5" 
y="156.5"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="594.9150062479899" y="77.06040773488321"/>
   </node>
   <node client_id="DNS" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
     <hardware_type name="dahu-grenoble"/>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="638.0" 
y="70.0"/>
-  </node>
-  <node client_id="Wallet-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
-    <sliver_type name="raw-pc">
-      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
-    </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="140.0" 
y="300.0"/>
-  </node>
-  <node client_id="Wallet-2" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
-    <sliver_type name="raw-pc">
-      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
-    </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="280.0" 
y="300.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="738.320134344963" y="77.06040773488321"/>
   </node>
-  <node client_id="Wallet-3" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
-    <sliver_type name="raw-pc">
-      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
-    </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="420.0" 
y="300.0"/>
-  </node>
-  <node client_id="Wallet-4" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
-    <sliver_type name="raw-pc">
-      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
-    </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="560.0" 
y="300.0"/>
-  </node>
-  <node client_id="Wallet-5" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Exchange-2" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="700.0" 
y="300.0"/>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="372.6656244562667" y="125.80310966332334"/>
   </node>
-  <node client_id="Wallet-6" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Shard-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="140.0" 
y="340.0"/>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="75.0" 
y="25.393143690736686"/>
   </node>
-  <node client_id="Wallet-7" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Shard-2" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="280.0" 
y="340.0"/>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="187.06837379160004" y="25.0"/>
   </node>
-  <node client_id="Wallet-8" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Shard-3" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="420.0" 
y="340.0"/>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="80.58194965245518" y="53.30634573304157"/>
   </node>
-  <node client_id="Wallet-9" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Shard-4" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="560.0" 
y="340.0"/>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="188.78589676158623" y="54.09263311451495"/>
   </node>
-  <node client_id="Wallet-10" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Wallet-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="700.0" 
y="340.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="91.56871997933155" y="214.32690197775239"/>
   </node>
-  <node client_id="Wallet-11" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Wallet-2" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="140.0" 
y="380.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="288.4789299949497" y="214.32690197775239"/>
   </node>
-  <node client_id="Wallet-12" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Wallet-3" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="280.0" 
y="380.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="485.3891400105678" y="214.32690197775239"/>
   </node>
-  <node client_id="Wallet-13" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Wallet-4" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="420.0" 
y="380.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="672.4350024517428" y="211.5902650573779"/>
   </node>
-  <node client_id="Wallet-14" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Wallet-5" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="560.0" 
y="380.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="879.2095600418041" y="214.32690197775239"/>
   </node>
-  <node client_id="Wallet-15" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Wallet-6" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="700.0" 
y="380.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="91.56871997933155" y="244.89615915450665"/>
   </node>
-  <node client_id="Wallet-16" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Wallet-7" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="140.0" 
y="420.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="288.4789299949497" y="244.89615915450665"/>
   </node>
-  <node client_id="Wallet-17" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Wallet-8" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="280.0" 
y="420.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="485.3891400105678" y="244.89615915450665"/>
   </node>
-  <node client_id="Wallet-18" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Wallet-9" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="420.0" 
y="420.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="682.2993500261857" y="244.89615915450665"/>
   </node>
-  <node client_id="Wallet-19" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Wallet-10" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="560.0" 
y="420.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="879.2095600418041" y="244.89615915450665"/>
   </node>
-  <node client_id="Wallet-20" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="EProxy-2" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="700.0" 
y="420.0"/>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="350.95488793162536" y="162.8475631289378"/>
   </node>
 </rspec>
\ No newline at end of file
diff --git a/additional/rspecs/taler.sharded.minimal.rspec 
b/additional/rspecs/taler.sharded.minimal.rspec
new file mode 100644
index 0000000..564fe55
--- /dev/null
+++ b/additional/rspecs/taler.sharded.minimal.rspec
@@ -0,0 +1,73 @@
+<?xml version='1.0'?>
+<rspec xmlns="http://www.geni.net/resources/rspec/3"; type="request" 
generated_by="jFed RSpec Editor" generated="2022-04-02T11:13:13.451+02:00" 
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"; 
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"; 
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"; 
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"; 
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1"; xmlns: 
[...]
+  <node client_id="DB" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="184.0" 
y="122.5"/>
+  </node>
+  <node client_id="Exchange-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="248.0" 
y="177.5"/>
+  </node>
+  <node client_id="Bank" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="328.0" 
y="121.5"/>
+  </node>
+  <node client_id="EProxy-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="249.5" 
y="231.5"/>
+  </node>
+  <node client_id="Monitor" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="474.5" 
y="123.5"/>
+  </node>
+  <node client_id="DNS" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="466.0" 
y="77.5"/>
+  </node>
+  <node client_id="Shard-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="77.5" 
y="29.5"/>
+  </node>
+  <node client_id="Shard-2" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="224.5" 
y="27.5"/>
+  </node>
+  <node client_id="Shard-3" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="75.5" 
y="71.5"/>
+  </node>
+  <node client_id="Shard-4" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="226.5" 
y="72.5"/>
+  </node>
+</rspec>
diff --git a/configs/etc/default/prometheus b/configs/etc/default/prometheus
index b9b82ca..e4d6362 100644
--- a/configs/etc/default/prometheus
+++ b/configs/etc/default/prometheus
@@ -1,4 +1,4 @@
-ARGS="--config.file=/etc/monitor/prometheus.yaml 
--web.listen-address=0.0.0.0:8080"
+ARGS="--config.file=/etc/monitor/prometheus.yaml 
--web.listen-address=0.0.0.0:8080 --web.enable-admin-api"
 
 # Prometheus supports the following options:
 #  --config.file="/etc/prometheus/prometheus.yml"
diff --git a/configs/etc/default/prometheus-nginx-exporter 
b/configs/etc/default/prometheus-nginx-exporter
index 57da070..7cf9221 100644
--- a/configs/etc/default/prometheus-nginx-exporter
+++ b/configs/etc/default/prometheus-nginx-exporter
@@ -1,4 +1,4 @@
-ARGS="-nginx.scrape-uri <PROXY_URL_HERE>"
+ARGS="-nginx.scrape-uri http://localhost:80/stub_status";
 
 # Prometheus-nginx-exporter supports the following options:
 #  -nginx.plus
diff --git a/configs/etc/default/prometheus-node-exporter 
b/configs/etc/default/prometheus-node-exporter
new file mode 100644
index 0000000..a0d0520
--- /dev/null
+++ b/configs/etc/default/prometheus-node-exporter
@@ -0,0 +1,217 @@
+# Set the command-line arguments to pass to the server.
+# Due to shell scaping, to pass backslashes for regexes, you need to double
+# them (\\d for \d). If running under systemd, you need to double them again
+# (\\\\d to mean \d), and escape newlines too.
+ARGS=""
+
+# prometheus-node-exporter supports the following options:
+#
+#  --collector.arp
+#    Enable the arp collector (default: enabled).
+#  --collector.bcache
+#    Enable the bcache collector (default: enabled).
+#  --collector.bcache.priorityStats
+#    Expose expensive priority stats.
+#  --collector.bonding
+#    Enable the bonding collector (default: enabled).
+#  --collector.btrfs
+#    Enable the btrfs collector (default: enabled).
+#  --collector.buddyinfo
+#    Enable the buddyinfo collector (default: disabled).
+#  --collector.conntrack
+#    Enable the conntrack collector (default: enabled).
+#  --collector.cpu
+#    Enable the cpu collector (default: enabled).
+#  --collector.cpu.info
+#    Enables metric cpu_info.
+#  --collector.cpu.info.bugs-include=COLLECTOR.CPU.INFO.BUGS-INCLUDE
+#    Filter the `bugs` field in cpuInfo with a value that must be a regular
+#    expression.
+#  --collector.cpu.info.flags-include=COLLECTOR.CPU.INFO.FLAGS-INCLUDE
+#    Filter the `flags` field in cpuInfo with a value that must be a regular
+#    expression.
+#  --collector.cpufreq
+#    Enable the cpufreq collector (default: enabled).
+#  --collector.disable-defaults
+#    Set all collectors to disabled by default.
+#  --collector.diskstats
+#    Enable the diskstats collector (default: enabled).
+#  
--collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\\d+n\\d+p)\\d+$"
+#    Regexp of devices to ignore for diskstats.
+#  --collector.drbd
+#    Enable the drbd collector (default: disabled).
+#  --collector.edac
+#    Enable the edac collector (default: enabled).
+#  --collector.entropy
+#    Enable the entropy collector (default: enabled).
+#  --collector.fibrechannel
+#    Enable the fibrechannel collector (default: enabled).
+#  --collector.filefd
+#    Enable the filefd collector (default: enabled).
+#  --collector.filesystem
+#    Enable the filesystem collector (default: enabled).
+#  
--collector.filesystem.ignored-fs-types="^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$"
+#    Regexp of filesystem types to ignore for filesystem collector.
+#  
--collector.filesystem.ignored-mount-points="^/(dev|proc|run|sys|mnt|media|var/lib/docker/.+)($|/)"
+#    Regexp of mount points to ignore for filesystem collector.
+#  --collector.hwmon
+#    Enable the hwmon collector (default: enabled).
+#  --collector.infiniband
+#    Enable the infiniband collector (default: enabled).
+#  --collector.interrupts
+#    Enable the interrupts collector (default: disabled).
+#  --collector.ipvs
+#    Enable the ipvs collector (default: enabled).
+#  
--collector.ipvs.backend-labels="local_address,local_port,remote_address,remote_port,proto,local_mark"
+#    Comma separated list for IPVS backend stats labels.
+#  --collector.ksmd
+#    Enable the ksmd collector (default: disabled).
+#  --collector.loadavg
+#    Enable the loadavg collector (default: enabled).
+#  --collector.logind
+#    Enable the logind collector (default: disabled).
+#  --collector.mdadm
+#    Enable the mdadm collector (default: enabled).
+#  --collector.meminfo
+#    Enable the meminfo collector (default: enabled).
+#  --collector.meminfo_numa
+#    Enable the meminfo_numa collector (default: disabled).
+#  --collector.mountstats
+#    Enable the mountstats collector (default: disabled).
+#  --collector.netclass
+#    Enable the netclass collector (default: enabled).
+#  --collector.netclass.ignored-devices="^$"
+#    Regexp of net devices to ignore for netclass collector.
+#  --collector.netdev
+#    Enable the netdev collector (default: enabled).
+#  --collector.netdev.device-exclude="^lo$"
+#    Regexp of net devices to exclude (mutually exclusive to device-include).
+#  --collector.netdev.device-include=COLLECTOR.NETDEV.DEVICE-INCLUDE
+#    Regexp of net devices to include (mutually exclusive to device-exclude).
+#  --collector.netstat
+#    Enable the netstat collector (default: enabled).
+#  
--collector.netstat.fields="^(.*_(InErrors|InErrs)|Ip_Forwarding|Ip(6|Ext)_(InOctets|OutOctets)|Icmp6?_(InMsgs|OutMsgs)|TcpExt_(Listen.*|Syncookies.*|TCPSynRetrans)|Tcp_(ActiveOpens|InSegs|OutSegs|OutRsts|PassiveOpens|RetransSegs|CurrEstab)|Udp6?_(InDatagrams|OutDatagrams|NoPorts|RcvbufErrors|SndbufErrors))$"
+#    Regexp of fields to return for netstat collector.
+#  --collector.network_route
+#    Enable the network_route collector (default: disabled).
+#  --collector.nfs
+#    Enable the nfs collector (default: enabled).
+#  --collector.nfsd
+#    Enable the nfsd collector (default: enabled).
+#  --collector.ntp
+#    Enable the ntp collector (default: disabled).
+#  --collector.ntp.ip-ttl=1
+#    IP TTL to use while sending NTP query.
+#  --collector.ntp.local-offset-tolerance=1ms
+#    Offset between local clock and local ntpd time to tolerate.
+#  --collector.ntp.max-distance=3.46608s
+#    Max accumulated distance to the root.
+#  --collector.ntp.protocol-version=4
+#    NTP protocol version.
+#  --collector.ntp.server-is-local
+#    Certify that collector.ntp.server address is not a public ntp server.
+#  --collector.ntp.server="127.0.0.1"
+#    NTP server to use for ntp collector.
+#  --collector.perf
+#    Enable the perf collector (default: disabled).
+#  --collector.perf.cpus=""
+#    List of CPUs from which perf metrics should be collected.
+#  --collector.perf.tracepoint=COLLECTOR.PERF.TRACEPOINT...
+#    Perf tracepoint that should be collected.
+#  --collector.powersupply.ignored-supplies="^$"
+#    Regexp of power supplies to ignore for powersupplyclass collector.
+#  --collector.powersupplyclass
+#    Enable the powersupplyclass collector (default: enabled).
+#  --collector.pressure
+#    Enable the pressure collector (default: enabled).
+#  --collector.processes
+#    Enable the processes collector (default: disabled).
+#  --collector.qdisc
+#    Enable the qdisc collector (default: disabled).
+#  --collector.qdisc.fixtures=""
+#    Test fixtures to use for qdisc collector end-to-end testing.
+#  --collector.rapl
+#    Enable the rapl collector (default: enabled).
+#  --collector.runit
+#    Enable the runit collector (default: disabled).
+#  --collector.runit.servicedir="/etc/service"
+#    Path to runit service directory.
+#  --collector.schedstat
+#    Enable the schedstat collector (default: enabled).
+#  --collector.sockstat
+#    Enable the sockstat collector (default: enabled).
+#  --collector.softnet
+#    Enable the softnet collector (default: enabled).
+#  --collector.stat
+#    Enable the stat collector (default: enabled).
+#  --collector.supervisord
+#    Enable the supervisord collector (default: disabled).
+#  --collector.supervisord.url="http://localhost:9001/RPC2";
+#    XML RPC endpoint.
+#  --collector.systemd
+#    Enable the systemd collector (default: enabled).
+#  --collector.systemd.enable-restarts-metrics
+#    Enables service unit metric service_restart_total.
+#  --collector.systemd.enable-start-time-metrics
+#    Enables service unit metric unit_start_time_seconds.
+#  --collector.systemd.enable-task-metrics
+#    Enables service unit tasks metrics unit_tasks_current and unit_tasks_max.
+#  
--collector.systemd.unit-exclude=".+\\.(automount|device|mount|scope|slice|target)"
+#    Regexp of systemd units to exclude. Units must both match include and not
+#    match exclude to be included.
+#  --collector.systemd.unit-include=".+"
+#    Regexp of systemd units to include. Units must both match include and not
+#    match exclude to be included.
+#  --collector.tcpstat
+#    Enable the tcpstat collector (default: disabled).
+#  --collector.textfile
+#    Enable the textfile collector (default: enabled).
+#  --collector.textfile.directory="/var/lib/prometheus/node-exporter"
+#    Directory to read text files with metrics from.
+#  --collector.thermal_zone
+#    Enable the thermal_zone collector (default: enabled).
+#  --collector.time
+#    Enable the time collector (default: enabled).
+#  --collector.timex
+#    Enable the timex collector (default: enabled).
+#  --collector.udp_queues
+#    Enable the udp_queues collector (default: enabled).
+#  --collector.uname
+#    Enable the uname collector (default: enabled).
+#  --collector.vmstat
+#    Enable the vmstat collector (default: enabled).
+#  --collector.vmstat.fields="^(oom_kill|pgpg|pswp|pg.*fault).*"
+#    Regexp of fields to return for vmstat collector.
+#  --collector.wifi
+#    Enable the wifi collector (default: disabled).
+#  --collector.wifi.fixtures=""
+#    Test fixtures to use for wifi collector metrics.
+#  --collector.xfs
+#    Enable the xfs collector (default: enabled).
+#  --collector.zfs
+#    Enable the zfs collector (default: enabled).
+#  --collector.zoneinfo
+#    Enable the zoneinfo collector (default: disabled).
+#  --log.format=logfmt
+#    Output format of log messages. One of: [logfmt, json].
+#  --log.level=info
+#    Only log messages with the given severity or above. One of: [debug, info,
+#    warn, error].
+#  --path.procfs="/proc"
+#    Procfs mountpoint.
+#  --path.rootfs="/"
+#    Rootfs mountpoint.
+#  --path.sysfs="/sys"
+#    Sysfs mountpoint.
+#  --web.config=""
+#    [EXPERIMENTAL] Path to config yaml file that can enable TLS or
+#    authentication.
+#  --web.disable-exporter-metrics
+#    Exclude metrics about the exporter itself (promhttp_*, process_*, go_*).
+#  --web.listen-address=":9100"
+#    Address on which to expose metrics and web interface.
+#  --web.max-requests=40
+#    Maximum number of parallel scrape requests. Use 0 to disable.
+#  --web.telemetry-path="/metrics"
+#    Path under which to expose metrics.
+
diff --git a/configs/etc/default/prometheus-postgres-exporter 
b/configs/etc/default/prometheus-postgres-exporter
index fe82513..39d2d18 100644
--- a/configs/etc/default/prometheus-postgres-exporter
+++ b/configs/etc/default/prometheus-postgres-exporter
@@ -4,7 +4,8 @@
 
 # DATA_SOURCE_NAME='postgresql://login:password@hostname:port/'
 # DATA_SOURCE_NAME='user=prometheus host=/run/postgresql dbname=postgres'
-DATA_SOURCE_NAME='<EXCHANGE_DB_URL_HERE>,<MERCHANT_DB_URL_HERE>'
+# IMPORTANT - place no comma between placeholders, it will be handled by the 
scripts
+DATA_SOURCE_NAME='<EXCHANGE_DB_URL_HERE><MERCHANT_DB_URL_HERE><SHARD_DB_URLS_HERE>'
 
 # Set the command-line arguments to pass to the server.
 ARGS='--extend.query-path=/etc/monitor/postgres-exporter.yaml'
diff --git a/configs/etc/monitor/exchange-exporters.yaml.tpl 
b/configs/etc/monitor/exchange-exporters.yaml.tpl
deleted file mode 100644
index 74a4992..0000000
--- a/configs/etc/monitor/exchange-exporters.yaml.tpl
+++ /dev/null
@@ -1,6 +0,0 @@
-  - job_name: 'taler'
-    static_configs:
-    - labels:
-        component: 'exchange'
-      targets:
-      # <EXCHANGES_HERE>
diff --git a/configs/etc/monitor/loki.yaml b/configs/etc/monitor/loki.yaml
index e00581b..fe8e0db 100644
--- a/configs/etc/monitor/loki.yaml
+++ b/configs/etc/monitor/loki.yaml
@@ -10,7 +10,7 @@ querier:
 ingester:
   wal:
     enabled: true
-    dir: /tmp/wal
+    dir: <EXPERIMENT_DATA_PATH_HERE>/loki/wal
   lifecycler:
     address: 127.0.0.1
     ring:
@@ -36,15 +36,15 @@ schema_config:
           
 storage_config:
   boltdb_shipper:
-    active_index_directory: /tmp/loki/boltdb-shipper-active
-    cache_location: /tmp/loki/boltdb-shipper-cache
+    active_index_directory: 
<EXPERIMENT_DATA_PATH_HERE>/loki/boltdb-shipper-active
+    cache_location: <EXPERIMENT_DATA_PATH_HERE>/loki/boltdb-shipper-cache
     cache_ttl: 24h         
     shared_store: filesystem
   filesystem:
-    directory: /tmp/loki/chunks
+    directory: <EXPERIMENT_DATA_PATH_HERE>/loki/chunks
 
 compactor:
-  working_directory: /tmp/loki/boltdb-shipper-compactor
+  working_directory: <EXPERIMENT_DATA_PATH_HERE>/loki/boltdb-shipper-compactor
   shared_store: filesystem
 
 limits_config:
diff --git a/configs/etc/monitor/node-exporters.yaml.tpl 
b/configs/etc/monitor/node-exporters.yaml.tpl
index d8b69ac..4a0815d 100644
--- a/configs/etc/monitor/node-exporters.yaml.tpl
+++ b/configs/etc/monitor/node-exporters.yaml.tpl
@@ -7,28 +7,48 @@
     - labels:
         component: 'database'
       targets: 
-      - '${DATABASE_DOMAIN}:9100'
+      - 'db.${DNS_ZONE}:9100'
     - labels:
         component: 'bank'
       targets:
-      - '${BANK_DOMAIN}:9100'
+      - 'bank.${DNS_ZONE}:9100'
     - labels:
         component: 'exchange'
       targets:
-      - '${EXCHANGE_DOMAIN}:9100'
+      # <EXCHANGE_NODES_HERE>
+    - labels:
+        component: 'exchange-aggregator'
+      targets:
+      - 'aggregator.${DNS_ZONE}:9100'
+    - labels:
+        component: 'exchange-closer'
+      targets:
+      - 'closer.${DNS_ZONE}:9100'
+    - labels:
+        component: 'exchange-transfer'
+      targets:
+      - 'transfer.${DNS_ZONE}:9100'
+    - labels:
+        component: 'exchange-wirewatch'
+      targets:
+      - 'wirewatch.${DNS_ZONE}:9100'
     - labels:
         component: 'proxy'
       targets:
-      - '${PROXY_DOMAIN}:9100'
+      # <PROXY_NODES_HERE>
     - labels:
         component: 'wallet'
       targets:
-      # <WALLETS_HERE>
+      # <WALLET_NODES_HERE>
     - labels:
         component: 'monitor'
       targets:
-      - '${MONITOR_DOMAIN}:9100'
+      - 'monitor.${DNS_ZONE}:9100'
     - labels:
         component: 'merchant'
       targets:
-      - '${MERCHANT_DOMAIN}:9100'
+      # <MERCHANT_NODES_HERE>
+    - labels:
+        component: 'shard'
+      targets:
+      # <SHARD_NODES_HERE>
diff --git a/configs/etc/monitor/postgres-exporter.yaml 
b/configs/etc/monitor/postgres-exporter.yaml
index e473b6a..1f4eb37 100644
--- a/configs/etc/monitor/postgres-exporter.yaml
+++ b/configs/etc/monitor/postgres-exporter.yaml
@@ -158,118 +158,118 @@ pg_database:
         usage: "GAUGE"
         description: "Disk space used by the database"
 
-pg_stat_statements:
-  query: "SELECT t2.rolname, t3.datname, queryid, calls, total_exec_time / 
1000 as total_time_seconds, min_exec_time / 1000 as min_time_seconds, 
max_exec_time / 1000 as max_time_seconds, mean_exec_time / 1000 as 
mean_time_seconds, stddev_exec_time / 1000 as stddev_time_seconds, rows, 
shared_blks_hit, shared_blks_read, shared_blks_dirtied, shared_blks_written, 
local_blks_hit, local_blks_read, local_blks_dirtied, local_blks_written, 
temp_blks_read, temp_blks_written, blk_read_time / 1000 a [...]
-  master: true
-  metrics:
-    - rolname:
-        usage: "LABEL"
-        description: "Name of user"
-    - datname:
-        usage: "LABEL"
-        description: "Name of database"
-    - queryid:
-        usage: "LABEL"
-        description: "Query ID"
-    - calls:
-        usage: "COUNTER"
-        description: "Number of times executed"
-    - total_time_seconds:
-        usage: "COUNTER"
-        description: "Total time spent in the statement, in milliseconds"
-    - min_time_seconds:
-        usage: "GAUGE"
-        description: "Minimum time spent in the statement, in milliseconds"
-    - max_time_seconds:
-        usage: "GAUGE"
-        description: "Maximum time spent in the statement, in milliseconds"
-    - mean_time_seconds:
-        usage: "GAUGE"
-        description: "Mean time spent in the statement, in milliseconds"
-    - stddev_time_seconds:
-        usage: "GAUGE"
-        description: "Population standard deviation of time spent in the 
statement, in milliseconds"
-    - rows:
-        usage: "COUNTER"
-        description: "Total number of rows retrieved or affected by the 
statement"
-    - shared_blks_hit:
-        usage: "COUNTER"
-        description: "Total number of shared block cache hits by the statement"
-    - shared_blks_read:
-        usage: "COUNTER"
-        description: "Total number of shared blocks read by the statement"
-    - shared_blks_dirtied:
-        usage: "COUNTER"
-        description: "Total number of shared blocks dirtied by the statement"
-    - shared_blks_written:
-        usage: "COUNTER"
-        description: "Total number of shared blocks written by the statement"
-    - local_blks_hit:
-        usage: "COUNTER"
-        description: "Total number of local block cache hits by the statement"
-    - local_blks_read:
-        usage: "COUNTER"
-        description: "Total number of local blocks read by the statement"
-    - local_blks_dirtied:
-        usage: "COUNTER"
-        description: "Total number of local blocks dirtied by the statement"
-    - local_blks_written:
-        usage: "COUNTER"
-        description: "Total number of local blocks written by the statement"
-    - temp_blks_read:
-        usage: "COUNTER"
-        description: "Total number of temp blocks read by the statement"
-    - temp_blks_written:
-        usage: "COUNTER"
-        description: "Total number of temp blocks written by the statement"
-    - blk_read_time_seconds:
-        usage: "COUNTER"
-        description: "Total time the statement spent reading blocks, in 
milliseconds (if track_io_timing is enabled, otherwise zero)"
-    - blk_write_time_seconds:
-        usage: "COUNTER"
-        description: "Total time the statement spent writing blocks, in 
milliseconds (if track_io_timing is enabled, otherwise zero)"
-
-pg_process_idle:
-  query: |
-    WITH
-      metrics AS (
-        SELECT
-          application_name,
-          SUM(EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - 
state_change))::bigint)::float AS process_idle_seconds_sum,
-          COUNT(*) AS process_idle_seconds_count
-        FROM pg_stat_activity
-        WHERE state = 'idle'
-        GROUP BY application_name
-      ),
-      buckets AS (
-        SELECT
-          application_name,
-          le,
-          SUM(
-            CASE WHEN EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - state_change)) 
<= le
-              THEN 1
-              ELSE 0
-            END
-          )::bigint AS bucket
-        FROM
-          pg_stat_activity,
-          UNNEST(ARRAY[1, 2, 5, 15, 30, 60, 90, 120, 300]) AS le
-        GROUP BY application_name, le
-        ORDER BY application_name, le
-      )
-    SELECT
-      application_name,
-      process_idle_seconds_sum as seconds_sum,
-      process_idle_seconds_count as seconds_count,
-      ARRAY_AGG(le) AS seconds,
-      ARRAY_AGG(bucket) AS seconds_bucket
-    FROM metrics JOIN buckets USING (application_name)
-    GROUP BY 1, 2, 3
-  metrics:
-    - application_name:
-        usage: "LABEL"
-        description: "Application Name"
-    - seconds:
-        usage: "HISTOGRAM"
-        description: "Idle time of server processes"
-
+#pg_stat_statements:
+#  query: "SELECT t2.rolname, t3.datname, queryid, calls, total_exec_time / 
1000 as total_time_seconds, min_exec_time / 1000 as min_time_seconds, 
max_exec_time / 1000 as max_time_seconds, mean_exec_time / 1000 as 
mean_time_seconds, stddev_exec_time / 1000 as stddev_time_seconds, rows, 
shared_blks_hit, shared_blks_read, shared_blks_dirtied, shared_blks_written, 
local_blks_hit, local_blks_read, local_blks_dirtied, local_blks_written, 
temp_blks_read, temp_blks_written, blk_read_time / 1000  [...]
+#  master: true
+#  metrics:
+#    - rolname:
+#        usage: "LABEL"
+#        description: "Name of user"
+#    - datname:
+#        usage: "LABEL"
+#        description: "Name of database"
+#    - queryid:
+#        usage: "LABEL"
+#        description: "Query"
+#    - calls:
+#        usage: "COUNTER"
+#        description: "Number of times executed"
+#    - total_time_seconds:
+#        usage: "COUNTER"
+#        description: "Total time spent in the statement, in seconds"
+#    - min_time_seconds:
+#        usage: "GAUGE"
+#        description: "Minimum time spent in the statement, in seconds"
+#    - max_time_seconds:
+#        usage: "GAUGE"
+#        description: "Maximum time spent in the statement, in seconds"
+#    - mean_time_seconds:
+#        usage: "GAUGE"
+#        description: "Mean time spent in the statement, in seconds"
+#    - stddev_time_seconds:
+#        usage: "GAUGE"
+#        description: "Population standard deviation of time spent in the 
statement, in seconds"
+#    - rows:
+#        usage: "COUNTER"
+#        description: "Total number of rows retrieved or affected by the 
statement"
+#    - shared_blks_hit:
+#        usage: "COUNTER"
+#        description: "Total number of shared block cache hits by the 
statement"
+#    - shared_blks_read:
+#        usage: "COUNTER"
+#        description: "Total number of shared blocks read by the statement"
+#    - shared_blks_dirtied:
+#        usage: "COUNTER"
+#        description: "Total number of shared blocks dirtied by the statement"
+#    - shared_blks_written:
+#        usage: "COUNTER"
+#        description: "Total number of shared blocks written by the statement"
+#    - local_blks_hit:
+#        usage: "COUNTER"
+#        description: "Total number of local block cache hits by the statement"
+#    - local_blks_read:
+#        usage: "COUNTER"
+#        description: "Total number of local blocks read by the statement"
+#    - local_blks_dirtied:
+#        usage: "COUNTER"
+#        description: "Total number of local blocks dirtied by the statement"
+#    - local_blks_written:
+#        usage: "COUNTER"
+#        description: "Total number of local blocks written by the statement"
+#    - temp_blks_read:
+#        usage: "COUNTER"
+#        description: "Total number of temp blocks read by the statement"
+#    - temp_blks_written:
+#        usage: "COUNTER"
+#        description: "Total number of temp blocks written by the statement"
+#    - blk_read_time_seconds:
+#        usage: "COUNTER"
+#        description: "Total time the statement spent reading blocks, in 
seconds (if track_io_timing is enabled, otherwise zero)"
+#    - blk_write_time_seconds:
+#        usage: "COUNTER"
+#        description: "Total time the statement spent writing blocks, in 
seconds (if track_io_timing is enabled, otherwise zero)"
+#
+#pg_process_idle:
+#  query: |
+#    WITH
+#      metrics AS (
+#        SELECT
+#          application_name,
+#          SUM(EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - 
state_change))::bigint)::float AS process_idle_seconds_sum,
+#          COUNT(*) AS process_idle_seconds_count
+#        FROM pg_stat_activity
+#        WHERE state = 'idle'
+#        GROUP BY application_name
+#      ),
+#      buckets AS (
+#        SELECT
+#          application_name,
+#          le,
+#          SUM(
+#            CASE WHEN EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - state_change)) 
<= le
+#              THEN 1
+#              ELSE 0
+#            END
+#          )::bigint AS bucket
+#        FROM
+#          pg_stat_activity,
+#          UNNEST(ARRAY[1, 2, 5, 15, 30, 60, 90, 120, 300]) AS le
+#        GROUP BY application_name, le
+#        ORDER BY application_name, le
+#      )
+#    SELECT
+#      application_name,
+#      process_idle_seconds_sum as seconds_sum,
+#      process_idle_seconds_count as seconds_count,
+#      ARRAY_AGG(le) AS seconds,
+#      ARRAY_AGG(bucket) AS seconds_bucket
+#    FROM metrics JOIN buckets USING (application_name)
+#    GROUP BY 1, 2, 3
+#  metrics:
+#    - application_name:
+#        usage: "LABEL"
+#        description: "Application Name"
+#    - seconds:
+#        usage: "HISTOGRAM"
+#        description: "Idle time of server processes"
+#
diff --git a/configs/etc/monitor/prometheus.yaml 
b/configs/etc/monitor/prometheus.yaml
index 37f9773..87924c0 100644
--- a/configs/etc/monitor/prometheus.yaml
+++ b/configs/etc/monitor/prometheus.yaml
@@ -14,10 +14,25 @@ scrape_configs:
   # DB Exporter
   - job_name: 'database'
     static_configs:
-    - targets: ['127.0.0.1:9187'] #, '<MERCHANT_HOST_HERE>:9187']
+    - targets: ['127.0.0.1:9187']
 
   # Exchange Proxy Exporter 
   - job_name: 'exchange-proxy'
     static_configs:
-    - targets: ['127.0.0.1:9113']
+    - labels:
+        component: 'nginx'
+      targets: 
+      # <NGINX_EXPORTERS_HERE>
+
+  # Promtail with custom metrics
+  - job_name: 'promtail'
+    scrape_interval: 2s
+    static_configs:
+    - targets: ['127.0.0.1:9080']
   
+  - job_name: 'taler'
+    static_configs:
+    - labels:
+        component: 'exchange'
+      targets:
+      # <EXCHANGES_HERE>
diff --git a/configs/etc/monitor/promtail.yaml 
b/configs/etc/monitor/promtail.yaml
index 2cd2a75..a5f9260 100644
--- a/configs/etc/monitor/promtail.yaml
+++ b/configs/etc/monitor/promtail.yaml
@@ -9,13 +9,146 @@ clients:
   - url: http://127.0.0.1/loki/api/v1/push
 
 scrape_configs:
+
 - job_name: taler
   syslog:
     listen_address: 0.0.0.0:1514
     labels:
       job: taler
+    max_message_length: 65536
   relabel_configs:
     - source_labels: [__syslog_message_app_name]
       target_label: app
     - source_labels: [__syslog_message_hostname]
       target_label: host
+
+- job_name: database
+  syslog:
+    listen_address: 0.0.0.0:1515
+    labels:
+      job: database
+    max_message_length: 65536
+  relabel_configs:
+    - source_labels: [__syslog_message_app_name]
+      target_label: app
+  pipeline_stages:
+    - match:
+        selector: '{job="database"} |~ "duration:" !~ "plan:"'
+        stages:
+        - regex:
+            expression: 'duration: (?P<time>\d+\.*\d*) ms'
+        - metrics:
+            slow_query_duration_hist:
+              prefix: 'taler_database_'
+              type: Histogram
+              description: "Slow query duration extracted from logs"
+              source: time
+              max_idle_duration: 24h
+              config:
+                buckets: [20,40,60,80,100,200,500,1000,5000,10000]
+    - match:
+        # '{job="database"} |~ "(011Query Text:)|(duration:.*execute)"'
+        selector: '{job="database"} |~ "duration:.*(execute|statement)"'  
+        stages:
+        - regex:
+            # '(011Query Text: (?P<txt>.*))|(duration:.*execute [a-zA-Z_]+: 
(?P<plan>.*))'
+            expression:  'duration:.*(execute [a-zA-Z_]+|statement): 
(?P<plan>.*)' 
+        - template:
+            source: lbl
+            template: '{{ printf "slow-query" }}'
+        - template:
+            source: query
+            template: '{{ coalesce .txt .plan }}'
+        - labels:
+            type: lbl
+        - output:
+            source: query
+
+- job_name: nginx
+  syslog:
+    listen_address: 0.0.0.0:1516
+    labels:
+      job: proxy
+  relabel_configs:
+    - source_labels: [__syslog_message_app_name]
+      target_label: app
+  pipeline_stages:
+    - match:
+        selector: '{job="proxy"}'
+        stages:
+        - regex:
+            expression: 
'uri=/(?P<ep>[a-zA-Z]+)(?:/\w+)?(?:/(?P<act>[a-zA-Z]+))? 
s=(?P<status>\d{3}).*urt=(?P<upstream_response_time>\d+\.\d+) 
rt=(?P<response_time>\d+\.\d+) rl=(?P<request_length>\d+) 
bs=(?P<bytes_sent>\d+)'
+        - template:
+            source: endpoint
+            template: '{{ printf "%s-%s" .ep .act | trimSuffix "-" }}'
+        - labels:
+            endpoint:
+            status:
+        - metrics:
+            total_requests:
+              prefix: 'taler_requests_'
+              type: Counter
+              description: "Total Requests"
+              config:
+                match_all: true
+                action: inc
+            # Used to calculate 'over_time' statistics
+            response_time:
+              prefix: 'taler_requests_'
+              type: Gauge
+              description: "Time taken for Nginx to respond"
+              source: response_time
+              max_idle_duration: 24h
+              config:
+                action: set
+            # 
https://www.robustperception.io/how-does-a-prometheus-histogram-work
+            request_length_hist:
+              prefix: 'taler_requests_'
+              type: Histogram
+              description: "Request Length reported from Nginx"
+              source: request_length
+              max_idle_duration: 24h
+              config:
+                buckets: [1,10,50,100,200,500,1000,2000,5000] 
+            bytes_sent_hist:
+              prefix: 'taler_requests_'
+              type: Histogram
+              description: "Number of bytes sent, reported from Nginx"
+              source: bytes_sent
+              max_idle_duration: 24h
+              config:
+                buckets: [1,10,50,100,200,500,1000,2000,5000] 
+            response_time_hist:
+              prefix: 'taler_requests_'
+              type: Histogram
+              description: "Time taken for Nginx to respond"
+              source: response_time
+              max_idle_duration: 24h
+              config:
+                buckets: 
[0.001,0.0025,0.005,0.010,0.025,0.050,0.1,0.25,0.5,1,2,5]
+            upstream_response_time_hist:
+              prefix: 'taler_requests_'
+              type: Histogram
+              description: "Time taken for the Exchange to respond to Nginx"
+              source: upstream_response_time
+              max_idle_duration: 24h
+              config:
+                buckets: 
[0.001,0.0025,0.005,0.010,0.025,0.050,0.1,0.25,0.5,1,2,5]
+
+- job_name: wallet
+  syslog:
+    listen_address: 0.0.0.0:1517
+    labels:
+      job: wallet
+  relabel_configs:
+    - source_labels: [__syslog_message_app_name]
+      target_label: app
+  pipeline_stages:
+    - match:
+        selector: '{job="wallet"} |~ "Bench1"'
+        stages:
+        - template:
+            source: script
+            template: 'benchmark'
+        - labels:
+            script:
diff --git a/configs/etc/nginx/sites-available/exchange 
b/configs/etc/nginx/sites-available/exchange
new file mode 100644
index 0000000..c532895
--- /dev/null
+++ b/configs/etc/nginx/sites-available/exchange
@@ -0,0 +1,66 @@
+upstream exchange {
+  least_conn;
+  keepalive 20;
+  # EXCHANGE_PROCESSES e.g.
+  # server exch.perf.taler:8080;
+  # server exch.perf.taler:80;
+  # <SERVERS_HERE>
+}
+
+# This format is expected by promtail (configs/etc/monitor/promtail.yaml)
+log_format taler 'm=$request_method uri=$uri s=$status '
+                 'uct=$upstream_connect_time '
+                 'urt=$upstream_response_time '
+                 'rt=$request_time '
+                 'rl=$request_length '
+                 'bs=$bytes_sent';
+
+# Disable logging of HEAD requests
+map $request_method $log_line {
+  'HEAD' 0;
+  default 1;
+}
+
+# Setup a cache with 1GB storage for our exchange
+# https://www.nginx.com/blog/nginx-caching-guide/
+proxy_cache_path /var/cache/proxy levels=1:2 keys_zone=exchange:1m inactive=1m 
max_size=1g;
+
+server {
+  listen 80;
+  listen 443 ssl;
+
+  ssl_certificate /etc/ssl/proxy.cert.pem;
+  ssl_certificate_key /etc/ssl/proxy.key.pem;
+
+  server_name <PROXY_DOMAIN_HERE>;
+
+  access_log 
syslog:server=localhost,facility=user,tag=taler_exchange_proxy,severity=info 
taler if=$log_line;
+
+  allow 172.16.0.0/12;
+  deny all;
+
+  keepalive_timeout 10;
+  keepalive_requests 100000;
+
+  location / {
+
+     proxy_cache exchange;
+     # Dont cache requests too early
+     proxy_cache_min_uses 16;
+
+     proxy_pass http://exchange;
+     proxy_redirect off;
+
+  }
+}
+
+server {
+  listen 80;
+  server_name localhost;
+
+  location /stub_status {
+     stub_status;
+     access_log off;
+  }
+}
+
diff --git a/configs/etc/nginx/sites-available/fakebank 
b/configs/etc/nginx/sites-available/fakebank
new file mode 100644
index 0000000..6545770
--- /dev/null
+++ b/configs/etc/nginx/sites-available/fakebank
@@ -0,0 +1,29 @@
+log_format taler 'm=$request_method uri=$uri s=$status '
+                 'uct=$upstream_connect_time '
+                 'urt=$upstream_response_time '
+                 'rt=$request_time '
+                 'rl=$request_length '
+                 'bs=$bytes_sent';
+
+server {
+  listen 80;
+  listen 443 ssl;
+
+  ssl_certificate /etc/ssl/bank.cert.pem;
+  ssl_certificate_key /etc/ssl/bank.key.pem;
+
+  server_name 0.0.0.0;
+
+  allow 172.16.0.0/12;
+  deny all;
+
+  access_log 
syslog:server=localhost,facility=user,tag=taler_fakebank_proxy,severity=info 
taler;
+
+  location / {
+     proxy_pass http://localhost:8082;
+     proxy_redirect off;
+     proxy_set_header Host $host;
+     proxy_set_header X-Forwarded-Host $remote_addr;
+     proxy_set_header X-Forwarded-Proto $scheme;
+  }
+}
diff --git a/configs/etc/nginx/sites-available/merchant 
b/configs/etc/nginx/sites-available/merchant
new file mode 100644
index 0000000..655cbb7
--- /dev/null
+++ b/configs/etc/nginx/sites-available/merchant
@@ -0,0 +1,29 @@
+log_format taler 'm=$request_method uri=$uri s=$status '
+                 'uct=$upstream_connect_time '
+                 'urt=$upstream_response_time '
+                 'rt=$request_time '
+                 'rl=$request_length '
+                 'bs=$bytes_sent';
+
+server {
+  listen 80;
+  listen 443 ssl;
+
+  ssl_certificate /etc/ssl/merchant.cert.pem;
+  ssl_certificate_key /etc/ssl/merchant.key.pem;
+
+  server_name 0.0.0.0;
+
+  allow 172.16.0.0/12;
+  deny all;
+
+  access_log 
syslog:server=localhost,facility=user,tag=taler_merchant_proxy,severity=info 
taler;
+
+  location / {
+     proxy_pass http://unix:/var/run/taler/merchant-httpd/merchant.sock;
+     proxy_redirect off;
+     proxy_set_header Host $host;
+     proxy_set_header X-Forwarded-Host $remote_addr;
+     proxy_set_header X-Forwarded-Proto $scheme;
+  }
+}
diff --git a/configs/etc/nginx/sites-enabled/proxy 
b/configs/etc/nginx/sites-enabled/proxy
deleted file mode 100644
index 4366d21..0000000
--- a/configs/etc/nginx/sites-enabled/proxy
+++ /dev/null
@@ -1,40 +0,0 @@
-upstream exchange {
-  least_conn;
-  # EXCHANGE_PROCESSES e.g.
-  # server exch.perf.taler:8080;
-  # server exch.perf.taler:80;
-  # <SERVERS_HERE>
-}
-
-log_format taler 'm=$request_method uri=$request_uri s=$status '
-                 'uct=$upstream_connect_time '
-                 'urt=$upstream_response_time '
-                 'rt=$request_time';
-
-map $request_method $log_line {
-  'HEAD' 0;
-  default 1;
-}
-
-server {
-  listen 80;
-  listen [::]:80;
-
-  server_name localhost;
-
-  access_log 
syslog:server=localhost,facility=user,tag=taler_proxy,severity=info taler 
if=$log_line;
-
-  allow 172.16.0.0/12;
-  deny all;
-
-  location / {
-     proxy_pass http://exchange;
-     proxy_redirect off;
-  }
-
-  location /stub_status {
-     stub_status;
-     access_log off;
-  }
-}
-
diff --git a/configs/etc/rsyslog.d/taler.conf b/configs/etc/rsyslog.d/taler.conf
index 848afe4..df90ce6 100644
--- a/configs/etc/rsyslog.d/taler.conf
+++ b/configs/etc/rsyslog.d/taler.conf
@@ -11,11 +11,11 @@ if ($programname startswith 'taler' or $syslogtag 
startswith 'taler') then {
   action(type="omfwd"
          protocol="tcp"
          target="<MONITOR_DOMAIN_HERE>"
-         port="1514"
+         port="<PROMTAIL_LOG_PORT_HERE>"
          Template="RSYSLOG_SyslogProtocol23Format"
          TCP_Framing="octet-counted"
          KeepAlive="on")
-  # Write all logs also to the file - will periodcally be rotaded by 
taler-logbackup.service
+  # Write all logs also to the file - will periodcally be rotated by 
taler-logbackup.service
   *.* ?FileName
   # Do not do any further steps with logs which matched this rule
   & stop
diff --git a/configs/etc/taler/conf.d/exchange-business.conf 
b/configs/etc/taler/conf.d/exchange-business.conf
index c5e6e17..ee3458a 100644
--- a/configs/etc/taler/conf.d/exchange-business.conf
+++ b/configs/etc/taler/conf.d/exchange-business.conf
@@ -1,38 +1,18 @@
-# Configuration for business-level aspects of the exchange.
-
 [exchange]
 
-# Here you MUST add the master public key of the offline system
-# which you can get using `taler-exchange-offline setup`.
-# This is just an example, your key will be different!
-# MASTER_PUBLIC_KEY = YE6Q6TR1EDB7FD0S68TGDZGF1P0GHJD2S0XVV8R2S62MYJ6HJ4ZG
 MASTER_PUBLIC_KEY = <MASTER_KEY_HERE>
 
-# Publicly visible base URL of the exchange.
-# BASE_URL = https://example.com/
 BASE_URL = <BASE_URL_HERE>
 
 MAX_REQUESTS = <MAX_REQUESTS_HERE>
 
-# For your terms of service and privacy policy, you should specify
-# an Etag that must be updated whenever there are significant
-# changes to either document.  The format is up to you, what matters
-# is that the value is updated and never re-used. See the HTTP
-# specification on Etags.
-# TERMS_ETAG =
-# PRIVACY_ETAG =
+AGGREGATOR_SHARD_SIZE = <AGGREGATOR_SHARD_SIZE_HERE>
 
-# Bank accounts used by the exchange should be specified here:
 [exchange-account-1]
 
 enable_credit = yes
 enable_debit = yes
 
-# Account identifier in the form of an RFC-8905 payto:// URI.
-# For SEPA, looks like payto://sepa/$IBAN?receiver-name=$NAME
-# Make sure to URL-encode spaces in $NAME!
 payto_uri = payto://x-taler-bank/<BANK_HOST_HERE>/Exchange
 
-# Credentials to access the account are in a separate
-# config file with restricted permissions.
 @inline-secret@ exchange-accountcredentials-1 
../secrets/exchange-accountcredentials.secret.conf
diff --git a/configs/etc/taler/conf.d/exchange-coins.conf 
b/configs/etc/taler/conf.d/exchange-coins.conf
index f1c6f5c..5c12389 100644
--- a/configs/etc/taler/conf.d/exchange-coins.conf
+++ b/configs/etc/taler/conf.d/exchange-coins.conf
@@ -1,158 +1,38 @@
 # Coin configuration for the exchange.
 # Should be placed in "/etc/taler/conf.d/exchange-coins.conf".
 
-[COIN-KUDOS-n1-t1633183611]
-VALUE = KUDOS:0.01
+[COIN-KUDOS-n1-t1647437582]
+VALUE = KUDOS:1
 DURATION_WITHDRAW = 7 days
 DURATION_SPEND = 2 years
 DURATION_LEGAL = 6 years
 FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
+FEE_DEPOSIT = KUDOS:1
 FEE_REFRESH = KUDOS:0
 FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
+RSA_KEYSIZE = <RSA_KEY_SIZE_HERE>
+CIPHER = <EXCHANGE_CIPHER_HERE>
 
-[COIN-KUDOS-n2-t1633183611]
-VALUE = KUDOS:0.02
+[COIN-KUDOS-n2-t1647437582]
+VALUE = KUDOS:4
 DURATION_WITHDRAW = 7 days
 DURATION_SPEND = 2 years
 DURATION_LEGAL = 6 years
 FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
+FEE_DEPOSIT = KUDOS:1
 FEE_REFRESH = KUDOS:0
 FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
+RSA_KEYSIZE = <RSA_KEY_SIZE_HERE>
+CIPHER = <EXCHANGE_CIPHER_HERE>
 
-[COIN-KUDOS-n3-t1633183611]
-VALUE = KUDOS:0.04
+[COIN-KUDOS-n3-t1647437582]
+VALUE = KUDOS:8
 DURATION_WITHDRAW = 7 days
 DURATION_SPEND = 2 years
 DURATION_LEGAL = 6 years
 FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
+FEE_DEPOSIT = KUDOS:1
 FEE_REFRESH = KUDOS:0
 FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n4-t1633183611]
-VALUE = KUDOS:0.08
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n5-t1633183611]
-VALUE = KUDOS:0.16
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n6-t1633183611]
-VALUE = KUDOS:0.32
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n7-t1633183611]
-VALUE = KUDOS:0.64
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n8-t1633183611]
-VALUE = KUDOS:1.28
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n9-t1633183611]
-VALUE = KUDOS:2.56
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n10-t1633183611]
-VALUE = KUDOS:5.12
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n11-t1633183611]
-VALUE = KUDOS:10.24
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n12-t1633183611]
-VALUE = KUDOS:20.48
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n13-t1633183611]
-VALUE = KUDOS:40.96
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-[COIN-KUDOS-n14-t1633183611]
-VALUE = KUDOS:81.92
-DURATION_WITHDRAW = 7 days
-DURATION_SPEND = 2 years
-DURATION_LEGAL = 6 years
-FEE_WITHDRAW = KUDOS:0
-FEE_DEPOSIT = KUDOS:0.01
-FEE_REFRESH = KUDOS:0
-FEE_REFUND = KUDOS:0
-RSA_KEYSIZE = 2048
-
-
+RSA_KEYSIZE = <RSA_KEY_SIZE_HERE>
+CIPHER = <EXCHANGE_CIPHER_HERE>
diff --git a/configs/etc/taler/conf.d/exchange-secmod.conf 
b/configs/etc/taler/conf.d/exchange-secmod.conf
new file mode 100644
index 0000000..55fa5a2
--- /dev/null
+++ b/configs/etc/taler/conf.d/exchange-secmod.conf
@@ -0,0 +1,17 @@
+[taler-exchange-secmod-rsa]
+
+LOOKAHEAD_SIGN = <LOOKAHEAD_SIGN_HERE>
+SM_PRIV_KEY = <SM_KEY_DIR_HERE>/exchange-secmod-rsa/secmod-private-key
+KEY_DIR = <SM_KEY_DIR_HERE>/exchange-secmod-rsa/keys
+
+[taler-exchange-secmod-eddsa]
+
+LOOKAHEAD_SIGN = <LOOKAHEAD_SIGN_HERE>
+SM_PRIV_KEY = <SM_KEY_DIR_HERE>/exchange-secmod-eddsa/secmod-private-key
+KEY_DIR = <SM_KEY_DIR_HERE>/exchange-secmod-eddsa/keys
+
+[taler-exchange-secmod-cs]
+
+LOOKAHEAD_SIGN = <LOOKAHEAD_SIGN_HERE>
+SM_PRIV_KEY = <SM_KEY_DIR_HERE>/exchange-secmod-cs/secmod-private-key
+KEY_DIR = <SM_KEY_DIR_HERE>/exchange-secmod-cs/keys
diff --git a/configs/etc/taler/conf.d/exchange-system.conf 
b/configs/etc/taler/conf.d/exchange-system.conf
index 75c670f..a72e368 100644
--- a/configs/etc/taler/conf.d/exchange-system.conf
+++ b/configs/etc/taler/conf.d/exchange-system.conf
@@ -1,10 +1,5 @@
-# Configuration settings for system parameters of the exchange.
-
-# Read secret sections into configuration, but only
-# if we have permission to do so.
 @inline-secret@ exchangedb-postgres ../secrets/exchange-db.secret.conf
 
 [exchange]
 
-# Only supported database is Postgres right now.
 DATABASE = postgres
diff --git a/configs/etc/taler/conf.d/fake-bank.conf 
b/configs/etc/taler/conf.d/fake-bank.conf
index 3b8634a..223a389 100644
--- a/configs/etc/taler/conf.d/fake-bank.conf
+++ b/configs/etc/taler/conf.d/fake-bank.conf
@@ -1,5 +1,5 @@
 [bank]
-HTTP_PORT = 80
 SERVE = http
+PORT = 8082
 MAX_DEBT = KUDOS:100000000000.0
 MAX_DEBT_BANK = KUDOS:1000000000000000.0
diff --git a/configs/etc/taler/conf.d/merchant.conf 
b/configs/etc/taler/conf.d/merchant.conf
index 0f7bd93..6d58c2d 100644
--- a/configs/etc/taler/conf.d/merchant.conf
+++ b/configs/etc/taler/conf.d/merchant.conf
@@ -3,8 +3,12 @@
 [merchant]
 
 DATABASE = postgres
-SERVE = TCP
-PORT = 8080
+SERVE = UNIX
+UNIXPATH = /var/run/taler/merchant-httpd/merchant.sock
+
+[taler]
+
+CURRENCY = KUDOS
 
 [merchant-exchange-perf]
 
diff --git a/configs/usr/lib/systemd/system/prometheus-node-exporter.service 
b/configs/usr/lib/systemd/system/prometheus-node-exporter.service
new file mode 100644
index 0000000..98c3317
--- /dev/null
+++ b/configs/usr/lib/systemd/system/prometheus-node-exporter.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Prometheus exporter for machine metrics
+Documentation=https://github.com/prometheus/node_exporter
+
+[Service]
+Restart=on-failure
+User=prometheus
+EnvironmentFile=/etc/default/prometheus-node-exporter
+ExecStart=/usr/bin/prometheus-node-exporter $ARGS
+ExecReload=/bin/kill -HUP $MAINPID
+TimeoutStopSec=20s
+SendSIGKILL=no
+
+[Install]
+WantedBy=multi-user.target
diff --git a/configs/usr/lib/systemd/system/taler-exchange-aggregator.service 
b/configs/usr/lib/systemd/system/taler-exchange-aggregator@.service
similarity index 92%
rename from configs/usr/lib/systemd/system/taler-exchange-aggregator.service
rename to configs/usr/lib/systemd/system/taler-exchange-aggregator@.service
index 9aba5a4..1f35b0f 100644
--- a/configs/usr/lib/systemd/system/taler-exchange-aggregator.service
+++ b/configs/usr/lib/systemd/system/taler-exchange-aggregator@.service
@@ -1,6 +1,5 @@
 [Unit]
-Description=GNU Taler payment system exchange aggregator service
-PartOf=taler-exchange.target
+Description=GNU Taler payment system exchange aggregator service %I
 
 [Service]
 User=taler-exchange-aggregator
diff --git a/configs/usr/lib/systemd/system/taler-exchange-closer.service 
b/configs/usr/lib/systemd/system/taler-exchange-closer@.service
similarity index 76%
rename from configs/usr/lib/systemd/system/taler-exchange-closer.service
rename to configs/usr/lib/systemd/system/taler-exchange-closer@.service
index 0728ce2..97a48a5 100644
--- a/configs/usr/lib/systemd/system/taler-exchange-closer.service
+++ b/configs/usr/lib/systemd/system/taler-exchange-closer@.service
@@ -1,6 +1,5 @@
 [Unit]
-Description=GNU Taler payment system exchange closer service
-PartOf=taler-exchange.target
+Description=GNU Taler payment system exchange closer service %I
 
 [Service]
 User=taler-exchange-closer
diff --git a/configs/usr/lib/systemd/system/taler-exchange-httpd.service 
b/configs/usr/lib/systemd/system/taler-exchange-httpd.service
deleted file mode 100644
index 8be8049..0000000
--- a/configs/usr/lib/systemd/system/taler-exchange-httpd.service
+++ /dev/null
@@ -1,25 +0,0 @@
-[Unit]
-Description=GNU Taler payment system exchange REST API
-AssertPathExists=/run/taler/exchange-httpd
-Requires=taler-exchange-httpd.socket taler-exchange-secmod-rsa.service 
taler-exchange-secmod-eddsa.service
-After=postgres.service network.target taler-exchange-secmod-rsa.service 
taler-exchange-secmod-eddsa.service
-PartOf=taler-exchange.target
-
-[Service]
-User=taler-exchange-httpd
-Type=simple
-# Depending on the configuration, the service suicides and then
-# needs to be restarted.
-Restart=always
-# Do not dally on restarts.
-RestartSec=1ms
-EnvironmentFile=/etc/environment
-ExecStart=<CMD_PREFIX_HERE>/usr/bin/taler-exchange-httpd -c 
/etc/taler/taler.conf $TALER_ARGS $EXCHANGE_ARGS
-StandardOutput=journal
-StandardError=journal
-PrivateTmp=no
-PrivateDevices=yes
-ProtectSystem=full
-
-[Install]
-WantedBy=multi-user.target
diff --git a/configs/usr/lib/systemd/system/taler-exchange-httpd.socket 
b/configs/usr/lib/systemd/system/taler-exchange-httpd.socket
deleted file mode 100644
index 59aa5be..0000000
--- a/configs/usr/lib/systemd/system/taler-exchange-httpd.socket
+++ /dev/null
@@ -1,14 +0,0 @@
-[Unit]
-Description=Taler Exchange Socket
-PartOf=taler-exchange-httpd.service
-
-[Socket]
-ListenStream=80
-Accept=no
-Service=taler-exchange-httpd.service
-SocketUser=taler-exchange-httpd
-SocketGroup=www-data
-SocketMode=0660
-
-[Install]
-WantedBy=sockets.target
diff --git a/configs/usr/lib/systemd/system/taler-exchange-httpd@.service 
b/configs/usr/lib/systemd/system/taler-exchange-httpd@.service
index 03477ad..65b2a93 100644
--- a/configs/usr/lib/systemd/system/taler-exchange-httpd@.service
+++ b/configs/usr/lib/systemd/system/taler-exchange-httpd@.service
@@ -1,12 +1,12 @@
 [Unit]
 Description=GNU Taler payment system exchange REST API at %I
 AssertPathExists=/run/taler/exchange-httpd
-Requires=taler-exchange-httpd@%i.socket taler-exchange-secmod-rsa.service 
taler-exchange-secmod-eddsa.service
-After=postgres.service network.target taler-exchange-secmod-rsa.service 
taler-exchange-secmod-eddsa.service
-PartOf=taler-exchange.target
+Requires=taler-exchange-httpd@%i.socket taler-exchange-secmod-rsa.service 
taler-exchange-secmod-eddsa.service taler-exchange-secmod-cs.service
+After=postgres.service network.target taler-exchange-secmod-rsa.service 
taler-exchange-secmod-eddsa.service taler-exchange-secmod-cs.service
 
 [Service]
-User=taler-exchange-httpd
+#User=taler-exchange-httpd
+User=root
 Type=simple
 # Depending on the configuration, the service suicides and then
 # needs to be restarted.
diff --git a/configs/usr/lib/systemd/system/taler-exchange-secmod-cs.service 
b/configs/usr/lib/systemd/system/taler-exchange-secmod-cs.service
new file mode 100644
index 0000000..4284420
--- /dev/null
+++ b/configs/usr/lib/systemd/system/taler-exchange-secmod-cs.service
@@ -0,0 +1,18 @@
+[Unit]
+Description=GNU Taler payment system exchange Clause Schnorr security module
+AssertPathExists=/run/taler/exchange-secmod-cs
+PartOf=taler-exchange.target
+
+[Service]
+#User=taler-exchange-secmod-cs
+User=root
+Type=simple
+Restart=on-failure
+EnvironmentFile=/etc/environment
+ExecStart=/usr/bin/taler-exchange-secmod-cs -c /etc/taler/taler.conf 
$TALER_ARGS $CS_ARGS
+StandardOutput=journal
+StandardError=journal
+PrivateTmp=no
+PrivateDevices=yes
+ProtectSystem=full
+
diff --git a/configs/usr/lib/systemd/system/taler-exchange-secmod-eddsa.service 
b/configs/usr/lib/systemd/system/taler-exchange-secmod-eddsa.service
index f96bee3..6e98f5e 100644
--- a/configs/usr/lib/systemd/system/taler-exchange-secmod-eddsa.service
+++ b/configs/usr/lib/systemd/system/taler-exchange-secmod-eddsa.service
@@ -4,7 +4,8 @@ AssertPathExists=/run/taler/exchange-secmod-eddsa
 PartOf=taler-exchange.target
 
 [Service]
-User=taler-exchange-secmod-eddsa
+#User=taler-exchange-secmod-eddsa
+User=root
 Type=simple
 Restart=on-failure
 EnvironmentFile=/etc/environment
diff --git a/configs/usr/lib/systemd/system/taler-exchange-secmod-rsa.service 
b/configs/usr/lib/systemd/system/taler-exchange-secmod-rsa.service
index 433fd5a..5f3a2c9 100644
--- a/configs/usr/lib/systemd/system/taler-exchange-secmod-rsa.service
+++ b/configs/usr/lib/systemd/system/taler-exchange-secmod-rsa.service
@@ -4,7 +4,8 @@ AssertPathExists=/run/taler/exchange-secmod-rsa
 PartOf=taler-exchange.target
 
 [Service]
-User=taler-exchange-secmod-rsa
+#User=taler-exchange-secmod-rsa
+User=root
 Type=simple
 Restart=on-failure
 EnvironmentFile=/etc/environment
diff --git a/configs/usr/lib/systemd/system/taler-exchange-transfer.service 
b/configs/usr/lib/systemd/system/taler-exchange-transfer@.service
similarity index 81%
rename from configs/usr/lib/systemd/system/taler-exchange-transfer.service
rename to configs/usr/lib/systemd/system/taler-exchange-transfer@.service
index 325a37a..6377ab6 100644
--- a/configs/usr/lib/systemd/system/taler-exchange-transfer.service
+++ b/configs/usr/lib/systemd/system/taler-exchange-transfer@.service
@@ -1,7 +1,6 @@
 [Unit]
-Description=Taler Exchange Transfer Service
+Description=Taler Exchange Transfer Service %I
 After=network.target
-PartOf=taler-exchange.target
 
 [Service]
 User=taler-exchange-wire
diff --git a/configs/usr/lib/systemd/system/taler-exchange-wirewatch.service 
b/configs/usr/lib/systemd/system/taler-exchange-wirewatch.service
deleted file mode 100644
index 7efe7de..0000000
--- a/configs/usr/lib/systemd/system/taler-exchange-wirewatch.service
+++ /dev/null
@@ -1,16 +0,0 @@
-[Unit]
-Description=GNU Taler payment system exchange wirewatch service
-After=network.target
-PartOf=taler-exchange.target
-
-[Service]
-User=taler-exchange-wire
-Type=simple
-Restart=on-failure
-EnvironmentFile=/etc/environment
-ExecStart=/usr/bin/taler-exchange-wirewatch -c /etc/taler/taler.conf 
$TALER_ARGS $WIREWATCH_ARGS
-StandardOutput=journal
-StandardError=journal
-PrivateTmp=yes
-PrivateDevices=yes
-ProtectSystem=full
diff --git a/configs/usr/lib/systemd/system/taler-exchange.target 
b/configs/usr/lib/systemd/system/taler-exchange.target
deleted file mode 100644
index eea37c8..0000000
--- a/configs/usr/lib/systemd/system/taler-exchange.target
+++ /dev/null
@@ -1,12 +0,0 @@
-[Unit]
-Description=GNU Taler exchange
-After=postgres.service network.target
-
-Wants=taler-exchange-httpd.service
-Wants=taler-exchange-wirewatch.service
-Wants=taler-exchange-aggregator.service
-Wants=taler-exchange-closer.service
-Wants=taler-exchange-transfer.service
-
-[Install]
-WantedBy=multi-user.target
diff --git a/configs/usr/lib/systemd/system/taler-prometheus-backup.service 
b/configs/usr/lib/systemd/system/taler-prometheus-backup.service
new file mode 100644
index 0000000..8418b59
--- /dev/null
+++ b/configs/usr/lib/systemd/system/taler-prometheus-backup.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Create periodic snapshots of the Prometheus data in the experiments
+Wants=taler-prometheus-backup.timer
+
+[Service]
+EnvironmentFile=/etc/environment
+ExecStart=/root/scripts/prometheus-backup.sh
+
+[Install]
+WantedBy=multi-user.target
diff --git a/configs/usr/lib/systemd/system/taler-prometheus-backup.timer 
b/configs/usr/lib/systemd/system/taler-prometheus-backup.timer
new file mode 100644
index 0000000..39607b2
--- /dev/null
+++ b/configs/usr/lib/systemd/system/taler-prometheus-backup.timer
@@ -0,0 +1,10 @@
+[Unit]
+Description=Create periodic snapshots of the Prometheus data in the experiments
+Requires=taler-prometheus-backup.service
+
+[Timer]
+Unit=taler-prometheus-backup.service
+OnCalendar=*:0/2
+
+[Install]
+WantedBy=timers.target
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 738e307..035443b 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -10,11 +10,6 @@ build the binaries directly"
 ENV DEBIAN_FRONTEND=noninteractive
 
 ENV GRID5K_DEST=lyon,lille \
-    GNUNET_COMMIT_SHA=master \
-    EXCHANGE_COMMIT_SHA=master \
-    MERCHANT_COMMIT_SHA=master \
-    WALLET_COMMIT_SHA=master \
-    GRID5K_COMMIT_SHA=master \
     TALER_HOME=/taler
 
 RUN apt update && \
@@ -31,8 +26,8 @@ RUN apt update && \
         libcurl4-gnutls-dev \
         libsodium-dev \
         libidn2-dev \
+        libgnutls28-dev \
         libunistring-dev \
-        libmicrohttpd-dev \
         libextractor-dev \
         libsqlite3-dev \
         libqrencode-dev \
@@ -68,6 +63,7 @@ RUN apt update && \
     gem install --no-document kameleon-builder
 
 RUN mkdir taler && cd taler && \
+    git clone https://git.gnunet.org/libmicrohttpd.git && \
     git clone https://git.gnunet.org/gnunet.git && \
     git clone https://git.taler.net/exchange.git && \
     git clone https://git.taler.net/merchant.git && \
diff --git a/docker/README.md b/docker/README.md
index 270db82..0dc1573 100644
--- a/docker/README.md
+++ b/docker/README.md
@@ -1,6 +1,6 @@
-# Taler Grid5000 Build Image
+# Taler Grid'5000 Build Image
 
-This docker image can be used to build the Grid5000 image for the taler 
performance experiments
+This docker image can be used to build the Grid'5000 environment for the taler 
performance experiments
 
 ## Build
 
@@ -9,9 +9,9 @@ Or alternatively with `docker-compose up --build` **NOTE** this 
will also run th
 
 ## Run the build
 
-Running the image will build GNUnet, Taler and the Grid5000 image from the 
specified commits. 
+Running the image will build GNUnet, Taler and the Grid'5000 environment from 
the specified commits. 
 
-The image will then be uploaded to the specified nodes Grid5000 public 
directory using the certificate provided.
+The environment will then be uploaded to the specified nodes Grid5000 public 
directory using the certificate provided.
 
 ### docker
 
@@ -30,12 +30,12 @@ docker run -it --rm \
            taler:build <ARGUMENTS>
 ```
 
-**NOTE** about the port 5900, this one can be used for vncviewer to see whats 
happening inside the image which 
-will be created. Run `vncviewver :0`.
+**NOTE** About the port 5900: this one can be used for vncviewer to see whats 
happening inside the image while 
+kameleon is running. Run `vncviewver :0`.
 
-#### Manual Build
+#### Manual Build / Debugging
 
-To get an interactive shell into the image override the entrypoint by adding 
the following argument
+To get an interactive shell into the docker container override the entrypoint 
by adding the following argument
 before the last line in the command above:
 
 ```bash
@@ -71,13 +71,16 @@ docker-compose run --entrypoint /bin/bash taler-build
 
 #### Environment Variables
 
+All variables listed below can be passed to the container with either -e or by 
adding them to the docker-compose file.
+
 **GRID5K_USER**: the user which `GRID5K_CERT` belongs to
 **GRID5K_CERT**: the certificate which is used to login to the Grid5000 nodes 
(docker-compose only)
 **GRID5K_CERT_PASSWD**: the password to decrypt `GRID5K_CERT`
 **GRID5K_DEST**: comma separated list of where to copy the image to in the 
grid (default: lille,lyon)
 **ARGUMENTS**: args to pass to entrypoint, one of 
   -r|--rebuild (rebuild the image)
-  -n|--no-copy (do not copy the generated image to Grid5000 - make sure output 
volume is mounted)
+  -n|--no-copy (do not copy the generated image to Grid5000 - make sure output 
volume is mounted - see below)
+  --centos     (build the `centos8` image instead of the default `debian11`)
  As per default, running the docker command again will not clean or rebuild 
the image
 
 ##### Additional
@@ -87,6 +90,10 @@ docker-compose run --entrypoint /bin/bash taler-build
 **MERCHANT_COMMIT_SHA**: Which commit to use of taler-merchant 
 **WALLET_COMMIT_SHA**: Which commit to use of wallet-core 
 **GRID5K_COMMIT_SHA**: Which commit to use of this repo 
+**LIBMICROHTTPD_CFLAGS**: CFLAGS to pass to ./configure when building 
libmicrohttpd
+**GNUNET_CFLAGS**: CFLAGS to pass to ./configure when building gnunet
+**EXCHANGE_CFLAGS**: CFLAGS to pass to ./configure when building taler-exchange
+**MERCHANT_CFLAGS**: CFLAGS to pass to ./configure when building taler-merchant
 
 These are listed explicitely in the docker-compose.yml and not via 
environments.
 All of them default to master if they are not present in the compose or via 
environment.
@@ -104,15 +111,15 @@ apt install -y tigervnc-viewer
 vncviewer :0
 ```
 
-#### Output
+#### Output Volume
 
-The image will be published to the Grid5000's public directory on a specified 
node.
-Additionally the generated image can also be mounted to the host by specifying 
`-v <some_path>:/root/output`
-or 
+The image will be published to Grid'5000's public directory on a specified 
node.
+Additionally the generated image can also be mounted to the host by passing 
`-v <some_path>:/root/output` do `docker run`
+or with docker-compose:
 
 ```yaml
 volumes:
   - <some_path>:/root/output
 ```
 
-respectively
+in `docker-compose.yaml`.
diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh
index b1f3eef..422b433 100644
--- a/docker/entrypoint.sh
+++ b/docker/entrypoint.sh
@@ -5,6 +5,8 @@
 
 set -e
 
+IMAGE=debian11
+
 while [[ $# -gt 0 ]]; do
   case "$1" in 
     -r|--rebuild)
@@ -17,6 +19,10 @@ while [[ $# -gt 0 ]]; do
       echo "INFO will not copy image to Grid5000"
       shift
       ;;
+    --centos)
+      IMAGE="centos8"
+      shift
+      ;;
     *)
       shift
       ;;
@@ -85,33 +91,45 @@ prepare grid5k "${GRID5K_COMMIT_SHA}"
 
 # Test if the image specification is correct
 run_command \
-    "kameleon dryrun -g g5k_user:${G5K_USER} 
${TALER_HOME}/grid5k/image/taler-debian11.yaml" \
+    "kameleon dryrun -g g5k_user:${G5K_USER} 
${TALER_HOME}/grid5k/image/${IMAGE}/taler-${IMAGE}.yaml" \
     "dryrun.log"
 
-cd ${TALER_HOME}/grid5k/image
+cd ${TALER_HOME}/grid5k/image/${IMAGE}
 
-if [ ! -f "build/taler-debian11/taler-debian11.tar.zst" ] || \
+if [ ! -f "build/taler-${IMAGE}/taler-${IMAGE}.tar.zst" ] || \
    [ "$REBUILD" = true ];
 then
-  rm -rf /tmp/taler-debian11 ${TALER_HOME}/taler-debian11 || true
+  rm -rf /tmp/taler-${IMAGE} ${TALER_HOME}/taler-${IMAGE} || true
   echo "INFO building image"
-  yes r | kameleon build \
-          -b /tmp taler-debian11.yaml \
-          -g gnunet_commit_sha:${GNUNET_COMMIT_SHA} \
-             exchange_commit_sha:${EXCHANGE_COMMIT_SHA} \
-             merchant_commit_sha:${MERCHANT_COMMIT_SHA} \
-             wallet_commit_sha:${WALLET_COMMIT_SHA} \
-            grid5k_commit_sha:${GRID5K_COMMIT_SHA} \
-             g5k_user:${GRID5K_USER} \
-       | tee build.log
-  mv /tmp/taler-debian11 ${TALER_HOME}
+  if [[ "$IMAGE" == "debian11" ]]; then
+    yes r | kameleon build \
+            -b /tmp taler-${IMAGE}.yaml \
+            -g gnunet_commit_sha:${GNUNET_COMMIT_SHA:-master} \
+               exchange_commit_sha:${EXCHANGE_COMMIT_SHA:-master} \
+               merchant_commit_sha:${MERCHANT_COMMIT_SHA:-master} \
+               wallet_commit_sha:${WALLET_COMMIT_SHA:-master} \
+               grid5k_commit_sha:${GRID5K_COMMIT_SHA:-master} \
+               libmicrohttpd_cflags:"${LIBMICROHTTPD_CFLAGS:--O2}" \
+               gnunet_cflags:"${GNUNET_CFLAGS:--O2}" \
+               exchange_cflags:"${EXCHANGE_CFLAGS:--O2}" \
+               merchant_cflags:"${MERCHANT_CFLAGS:--O2}" \
+               g5k_user:${GRID5K_USER} \
+          | tee build.log
+  else
+    yes r | kameleon build \
+            -b /tmp taler-${IMAGE}.yaml \
+            -g g5k_user:${GRID5K_USER} \
+               grid5k_commit_sha:${GRID5K_COMMIT_SHA:-master} \
+          | tee build.log
+  fi
+  mv /tmp/taler-${IMAGE} ${TALER_HOME}
 fi
 
-cd ${TALER_HOME}/taler-debian11
+cd ${TALER_HOME}/taler-${IMAGE}
 
 if [ -f "/root/cert.pem" ] && [ "$COPY" != false ]; then
 
-  mv taler-debian11.dsc taler-debian11.dsc.bak
+  mv taler-${IMAGE}.dsc taler-${IMAGE}.dsc.bak
   
   IFS=, read -ra G5K_HOSTS <<< "${GRID5K_DEST}" 
 
@@ -119,9 +137,9 @@ if [ -f "/root/cert.pem" ] && [ "$COPY" != false ]; then
     echo "Copying image to ${G5K_HOST}"
 
     sed "/g5k_tar_path/s/lyon/${G5K_HOST}/g" \
-        taler-debian11.dsc.bak > taler-debian11.dsc
+        taler-${IMAGE}.dsc.bak > taler-${IMAGE}.dsc
 
-    scp -o StrictHostKeyChecking=no taler-debian11.tar.zst taler-debian11.dsc \
+    scp -o StrictHostKeyChecking=no taler-${IMAGE}.tar.zst taler-${IMAGE}.dsc \
         "${GRID5K_USER}@access.grid5000.fr:${G5K_HOST}"/public/
   done 
 
@@ -129,6 +147,6 @@ fi
 
 if [ -d "/root/output" ]; then
   echo "INFO copying image to output (mounted volume)" 
-  mv taler-debian11.dsc.bak taler-debian11.dsc || true
-  cp taler-debian11.tar.zst taler-debian11.dsc /root/output/ 
+  mv taler-${IMAGE}.dsc.bak taler-${IMAGE}.dsc || true
+  cp taler-${IMAGE}.tar.zst taler-${IMAGE}.dsc /root/output/ 
 fi
diff --git a/experiment/README.md b/experiment/README.md
index 0517538..79c5277 100644
--- a/experiment/README.md
+++ b/experiment/README.md
@@ -1,81 +1,143 @@
 # Experiment Setup
 
+## Requirements
+
+### jFed
+
+jFed is needed to run an experiment with the current setup. Please see 
[here](https://jfed.ilabt.imec.be/)..
+
 ## Files
 
 * experiment-specitication.yml: [ESpec](https://jfed.ilabt.imec.be/espec/) for 
jFed 
-* taler.rspec: Complete set of nodes to run an experiment
-* infra.rspec: Contains all nodes for the Taler infrastructure only
-* wallets.rspec: Contains an additional set of nodes for wallets
+* taler.rspec: Complete set of nodes to run an experiment (others contain more 
wallets
+  or shards for example). Find more in `../aditional/rspecs`
 * env: template file to add enviroment variables needed for the experiment
 * scripts: Bash scripts which will be run in the experiment
+* ssh: ssh key material which the nodes use in the ESpec phase to communicate 
with each other.
+  Safe to use here, since nodes can only be reached from inside the grid 
already (currently used
+  for centos8 DB only)
   
 ## Run an Experiment
 
 To successfully run an experiment the following steps must be made:
 
-**NOTE** An external Grafana instance with Taler Performance Dashboards is 
needed
-         Dashboards can be found in `additional` (TBD)
+**NOTE** An external Grafana instance with Taler Performance Dashboards is 
needed (optionally) to see metrics and results.
+         The Dashboards can be found in `additional/grafana`
          Install instructions can be found on 
[grafana.com](https://grafana.com/docs/grafana/latest/installation/)
          Once installed, two datasources must be added - Prometheus and Loki, 
they will be updated from the experiment
 
 * Copy the environment default configuration `env` to `.env`
-* Read through `.env` and define the missing variables
+* Read through `.env` and define the missing variables **NOTE**: Postgres 
configuration is located in `scripts/database[-centos].sh`
 * Start jFed Experimenter GUI 
 * Load taler.rspec and click Run
 * Specify the experiment name and time
 * Wait until taler.rspec is allocated successfully and nodes are ready
 * Click (Re)Run ESpec for the job (use the type Directory and select this 
directory (experiment))
-* If any error ocurr just press (Re)Run Espec again because sometimes there 
are still unindentidfied errors
+* If any error ocurrs just press (Re)Run Espec again because sometimes there 
are still unidentified errors in jFed / G5k
+* Start wallet processes with `taler-perf start wallet N` on any node in the 
experiment
+
+**NOTE** The Grid'5000 environments are copied to a public directory of the 
grid. So it might still be
+         available with 
`http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc`
+         If not you must build your own (see `../image`) and specify this one 
for each node in each rspec.
+         This can be done manually via jFed (double click node, and replace 
`bfhch01` with your Grid'5000 username,
+         Or with sed (which is simpler and faster):
 
-### Add addtional Wallet Hosts
+```bash
+sed -i "s/bfhch01/YOUR_G5K_USERNAME/g" <RSPEC_FILE>
+```
 
-TODO - DOES NOT WORK YET - DNS host needs to be known ..
+### Hints and Bugs
 
-* Load wallets.rspec into jFed and click Run
-* Click (Re)Run ESpec for the wallet job (type directory)
-* Run `talet-perf update prometheus` on any deployed node to make prometheus 
aware of the freshly added wallets
+#### Dependencies
 
-**NOTE** On `taler-perf`, when not using a terminal opened from jFed make sure 
to forward the ssh-agent
-         to make the script work. E.g. `ssh -A graoully-3.nancy.g5k` 
+Nodes may have dependencies in `run.sh`, thus waiting for another node to 
finish before continuing initialization.
+An example of this is the exchange, it will only be started once `DB_USER` has 
remote access enabled (`wait_for_db` in `helpers.sh`).
+
+However, most nodes which log to Promtail/Loki will wait with initialization 
until Promtail is running, so if something is stuck
+execute the following command on the `monitor` node:
+
+```bash
+systemctl status promtail.service
+```
+or
+```bash
+cat /var/log/syslog | grep -i promtail
+```
+
+#### DNS not working
+
+It _should_ work, if not just (RE)run ESpec, it happened sometimes that bind 
was not ready when we are setting the domain names with dyndns.
 
 ## Rebuild Taler Binaries
 
-To quickly test fixes of new commits in gnunet,exchange,merchant and wallet, 
there is a script `scripts/instal.sh`
-which can be run inside a running experiment rather than rebuilding the whole 
image.
+On each experiment start the `setup` script checks if variables like 
`GNUNET_COMMIT_SHA` are set (`.env`),
+if they are, the corresponding binary is rebuilt from source with the 
specified commit.
+For more info please read `scripts/setup.sh` or `scripts/install.sh`
 
-To do so copy the following snippet into the `Multi Command` window in jFed:
-Please adjust commits as needed, the ones which are not defined or empty will 
not be built.
-The ones which are a space only (" ") will build on master.
+If you forgot to set the variables, then `taler-perf rebuild` can do the work 
in a running experiment. But
+processes would have to be restarted afterwards.
 
-```bash
-#!/bin/bash
+## Actions in a running Experiment
 
-export GNUNET_COMMIT_SHA=master
-export EXCHANGE_COMMIT_SHA=master
-export MERCHANT_COMMIT_SHA=master
-export WALLET_COMMIT_SHA=master
+### Start wallets
 
-/bin/bash /root/taler/grid5k/experiment/scripts/install.sh
-# /bin/bash /root/scripts/install.sh
-```
+* Run `talet-perf start wallet N` where N is any number
 
-## Actions in running Experiment
+**NOTE** On `taler-perf`, when not using a terminal opened from jFed make sure 
to forward the ssh-agent
+         to make the script work. E.g. `ssh -A graoully-3.nancy.grid5000.fr` 
(from an access machine).
 
-To add more exchange processes run `taler-perf stop ecxchange <NUM>` on any 
node
+To add more exchange processes run `taler-perf stop exchange <NUM>` on any node
 To add more wallet processes run `taler-perf start wallet <NUM>` on any node
 
 They can also be stopped in the same way: `taler-perf stop <KIND> <NUM>`
-To stop the wallet processes which are logging, specify `taler-perf stop 
wallet logging`, they will not 
-be stopped otherwise.
 
-### Grafana Dashboard Plotting
- 
+### Experiment Persistence
+
+The script `../additional/persist.sh` can be used to backup and clean the data 
in the grid5k NFS.
+This archive created can then be passed to `../additional/recover.sh`, which 
will run a local Grafana setup
+in which the experiment can be inspected again.
+
+For this to work the service `taler-databackup` using `scripts/data-backup.sh` 
is run periodically.
+Loki data is directly written to the NFS. For the best results it is needed to 
stop loki on the `monitor` node
+before an experiment ends - otherwise some of the loki data might become 
corrupt.
+
+#### (Deprecated) Grafana Dashboard Plotting
+
 To persists the dashboards as png plots, there is a script in `../additional` 
which creates png
 plots based on a configuration. Please refer to the README located in the 
specified directory.
 
-### Application Logs
 
-The logs of the taler applications will be moved periodically to 
`/home/<G5K_USER>/taler-logs`. 
-They can then be retrieved using scp to the respective site they where running 
on
-(e.g. nancy/taler-logs for grvingt and others).
-Make sure to back them up before restarting an experiment, since they will be 
deleted in a new one.
+### Developer Notes
+
+#### Experiment Flow
+
+1. `experiment-specification.yml` is run when running ESpec, setting up 
requirements and uploading scripts
+2. `setup.sh` is run on every node, exporting necessary environment variables 
to `~/.env` and /etc/environment
+3. `run.sh` is run on every node, setting domain names and starting the 
correct script according to the role the node has assigned 
+   (given from `NODES` and `HOSTNAME`)
+
+#### Add more nodes
+
+Adding more nodes should be as simple as:
+
+1. Adding it in an rspec file (jFed)
+2. Adding the node name given in jFed to the `NODES` variable in `env` & `env`
+3. Extending `run.sh` - add a section like: 
+   ```bash
+   ...
+   elif [[ "${HOSTNAME}" =~ ${<NODE_NAME_UPPERCASE>_HOSTS} ]]; then
+     ...
+     exec ~/scripts/<node-script>.sh
+   ...
+   ```
+4. Creating the `<node-script>.sh` containing node specific setup steps
+
+#### Environment
+
+That all environment variables are always available in every shell, they are 
exported to `/etc/environment`.
+This file is also used by most of our custom service files in 
`/usr/lib/systemd/system`.
+
+#### Useful functions
+
+The file `scripts/helpers.sh` contains a lot of re-usable functions - please 
read this file for more information.
+
diff --git a/experiment/env b/experiment/env
index e1861e9..d72f84b 100644
--- a/experiment/env
+++ b/experiment/env
@@ -8,7 +8,7 @@
 # (used to determine which script to execute in run.sh)
 # Wallets are not needed explicitely since they can (and will be)
 # exported as a wildcard (*).
-NODES="Bank DB DNS Exchange Merchant Monitor Proxy"
+NODES="Bank DB DNS Exchange Aggregator Closer Transfer Wirewatch Merchant 
Monitor EProxy Shard"
 
 # DNS Zone to setup inside the grid for the experiment
 DNS_ZONE=perf.taler
@@ -20,18 +20,11 @@ G5K_HOME=/root/taler/grid5k
 # configuration files
 G5K_COMMIT_SHA=master
 
-# Domain names for the hosts inside the grid.
-# The most certainly do not need to be adjusted.
-# If you do anyway, make sure the wallets contain a wildcard (*)
-# Otherwise the experiment will not work
-    BANK_DOMAIN=bank.${DNS_ZONE}
-DATABASE_DOMAIN=db.${DNS_ZONE}
-     DNS_DOMAIN=ns1.${DNS_ZONE}
-EXCHANGE_DOMAIN=exchange.${DNS_ZONE}
-MERCHANT_DOMAIN=merchant.${DNS_ZONE}
- MONITOR_DOMAIN=monitor.${DNS_ZONE}
-   PROXY_DOMAIN=proxy.${DNS_ZONE}
-  WALLET_DOMAIN=wallet.*.${DNS_ZONE}
+# The exchange which is responsible to generate key material
+PRIMARY_EXCH=Exchange-1
+
+# The dns loadbalancing domain of the exchange (proxy)
+EXCHANGE_GW_DOMAIN=exchange.${DNS_ZONE}
 
 # Arguments to pass to all taler-exchange-* binaries at startup.
 # E.g. -L INFO
@@ -45,6 +38,7 @@ AGGREGATOR_ARGS="-y"
  WIREWATCH_ARGS=""
      EDDSA_ARGS=""
        RSA_ARGS=""
+        CS_ARGS=""
 # Additional arguments to prepend to taler-exchange-httpd.service
 # files ExecStart command, e.g. /usr/bin/valgrind 
--log-file=/tmp/exchange-%N.log
 EXCHANGE_CMD_PREFIX=""
@@ -53,6 +47,18 @@ EXCHANGE_CMD_PREFIX=""
 # before it kills itself
 EXCHANGE_MAX_REQUESTS=8192
 
+# Which cipher the exchange should use
+EXCHANGE_CIPHER=RSA
+
+# When using the RSA cipher, which key size to use
+RSA_KEY_SIZE=2048
+
+# The lookahead sign duration for the exchange secmods
+LOOKAHEAD_SIGN="2 days"
+
+# Token used in Authorize: Bearer $TOKEN for the merchant
+TALER_MERCHANT_TOKEN=taler-perf
+
 # Datasource names registered in the grafana instance
 PROMETHEUS_DATASOURCE_NAME=Prometheus
 LOKI_DATASOURCE_NAME=Loki
@@ -66,26 +72,49 @@ LOKI_G5K_PROXY_PORT=http
 
 # Which version of postgres is installed in the environment
 POSTGRES_VERSION=13
+# Setup postgres to use RAM instead of disks to store WAL and data
+POSTGRES_IN_MEMORY=false
 # Exchange database configuration
 DB_NAME=taler-exchange
 DB_USER=taler
 # Database password
 DB_PASSWORD=taler
+# The mininmum duration of a sql statement to be logged by 
log_min_duration_statement in ms
+DB_MIN_DURATION_STATEMENT=80
 # If exchanges should connect to pgBouncer rather than to the db directly
 USE_PGBOUNCER=false
+# If the taler-exchange database should be sharded
+SHARD_DB=false
+# If the taler-exchange database should be partitioned
+# NOTE sharding and partitioning are mutually exclusive, if both are true, 
sharding will be tried
+PARTITION_DB=true
+# How many partitions of partitioned tables should be created
+NUM_PARTITIONS=2
 
 # Initial number of wallets to start in parallel per host.
 # This is a bulk size with default = 10
 # Start another bunch with `taler-perf start wallet <N>`
 NUM_WALLET_PROCESSES=10
+# Which benchmark to use of the wallet-cli (bench1, bench2)
+WALLET_BENCHMARK=bench1
+# Request the exchange via https instead of http
+WALLET_USE_HTTPS=true
+# Run a withdraw only experiment
+WALLET_WITHDRAW_ONLY=false
+# Needed for wallets to accept self signed certificates
+NODE_TLS_REJECT_UNAUTHORIZED=0
 
 # Initial number of exchange processes to run.
 # default = 10
 # Start another bunch with `taler-perf start exchange <N>`
 NUM_EXCHANGE_PROCESSES=1
 
-# Number of wirewatch processes to run
+# Number of other exchange-* processes to run
 # This setting is static, default = 1
+# For the aggregator the number will be actually 2^n (so 0 will be 1 process)
+NUM_AGGREGATOR_PROCESSES=0
+    NUM_CLOSER_PROCESSES=1
+   NUM_TRANSER_PROCESSES=1
 NUM_WIREWATTCH_PROCESSES=1
 
 TALER_WALLET_SYNC_CRYPTO=1
@@ -105,3 +134,26 @@ GRAFANA_HOST=https://147.87.255.221:3000
 # Needs admin level since datasources need to be updated.
 # This can be generated by a grafana admin in 'Configuration->API keys->Add 
API key'
 GRAFANA_API_KEY=
+
+# If the data persisted from prometheus and loki from a
+# previous experiment should be removed before starting
+# a new one
+REMOVE_PREVIOUS_EXPERIMENT_DATA=true
+
+# If *_COMMIT_SHA is not empty the corresponding
+# binary is rebuilt from source on the specified commit
+# with *_CFLAGS before starting the experiment.
+# NOTE: if you missed it, you can use `taler-perf rebuild` in a running 
experiment
+LIBMICROHTTPD_COMMIT_SHA=""
+    LIBMICROHTTPD_CFLAGS=""
+       
+GNUNET_COMMIT_SHA=""
+    GNUNET_CFLAGS=""
+
+EXCHANGE_COMMIT_SHA=""
+    EXCHANGE_CFLAGS=""
+
+MERCHANT_COMMIT_SHA=""
+    MERCHANT_CFLAGS=""
+
+WALLET_COMMIT_SHA=""
diff --git a/experiment/experiment-specification.yml 
b/experiment/experiment-specification.yml
index 908a4cf..32ab5be 100644
--- a/experiment/experiment-specification.yml
+++ b/experiment/experiment-specification.yml
@@ -12,6 +12,12 @@ upload:
     permission: "775"
   # Contains information about allocated nodes
   - meta: experiment-info.json
+  # Used that nodes can communicate during espec phase
+  # Done since generated: of espec does not work
+  - bundled: ssh/id_rsa
+    path: ~/.ssh/id_rsa
+  - bundled: ssh/id_rsa.pub
+    path: ~/.ssh/id_rsa.pub
 execute:
   # Clear previous uploads and move new ones to ~/
   # This step is necessary since dir uploads are not overriden
@@ -23,6 +29,11 @@ execute:
       rm -rf ~/'execute[0].sh'
       # Reset possible DNS issues created by our scripts
       mv /etc/resolv.conf.bak /etc/resolv.conf || true
+      # Add the uploaded key as trusted
+      echo "" >> ~/.ssh/authorized_keys
+      cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
+      # Stop all 'run.sh' scripts which are still running
+      kill $(ps -aux | grep run[.sh] | awk '{print $2}') || true
     log: /dev/null
   # Setup DNS and Environment config
   - path: ~/scripts/setup.sh
diff --git a/experiment/scripts/bank.sh b/experiment/scripts/bank.sh
index feabff3..6184bd4 100755
--- a/experiment/scripts/bank.sh
+++ b/experiment/scripts/bank.sh
@@ -13,9 +13,12 @@ source ~/scripts/helpers.sh
 
 # Start the taler-fakebank
 function init_bank() {
+  create_cert "${NODE_NAME}.${DNS_ZONE}" "/etc/ssl/bank"
+  setup_rsyslog_for_nginx
   restart_rsyslog
-
-  systemctl restart taler-fakebank.service
+  ln -sf /etc/nginx/sites-available/fakebank /etc/nginx/sites-enabled/fakebank
+  systemctl restart taler-fakebank.service \
+                    nginx
 }
 
 case $1 in
diff --git a/experiment/scripts/benchmark.sh b/experiment/scripts/benchmark.sh
index f2cb7b2..587e360 100755
--- a/experiment/scripts/benchmark.sh
+++ b/experiment/scripts/benchmark.sh
@@ -1,11 +1,13 @@
 #!/bin/bash
 INFO_MSG="
 Start a wallet benchmark loop with 100'000 iterations
+
+Normally started by taler-wallet@.service
 "
 OPT_MSG="
 <N>: 
   Any number 
-  If it is dividable by 10 then the wallet will log in INFO level
+  If it is dividable by 100 then the wallet will log in INFO level
 "
 
 set -eu
@@ -13,26 +15,36 @@ source ~/scripts/helpers.sh
 
 # Start a wallet benchmark loop
 function start_wallet_bench() {
-  LOG_LEVEL=ERROR
+
+  PROTO=http
+  if [[ ${WALLET_USE_HTTPS} == "true" ]]; then
+    PROTO=https
+  fi
   
-  # Every thenth wallet should log messages
-  if ! (($1 % 10)) || [ $1 == "1" ]; then
+  LOG_LEVEL=ERROR
+  # One wallet in a hundred should log messages
+  if ! (($1 % 100)) || [ $1 == "1" ]; then
     LOG_LEVEL=INFO
   fi
+
+  NUM_DEPOSITS=$((RANDOM %21))
+  if [[ ${WALLET_WITHDRAW_ONLY} == "true" ]]; then
+    NUM_DEPOSITS=0
+  fi
   
   taler-wallet-cli \
       -L ${LOG_LEVEL} \
-      advanced bench1 \
+      advanced ${WALLET_BENCHMARK} \
         --config-json "
   {
-    \"exchange\": \"http://${PROXY_DOMAIN}/\";, 
-    \"bank\": \"http://${BANK_DOMAIN}/\";,
+    \"exchange\": \"${PROTO}://${EXCHANGE_GW_DOMAIN}/\",
+    \"bank\": \"http://bank.${DNS_ZONE}/\";,
     \"currency\": \"KUDOS\",
-    \"payto\": \"payto://x-taler-bank/${BANK_DOMAIN}/foo\",
+    \"payto\": \"payto://x-taler-bank/bank.${DNS_ZONE}/foo\",
     \"iterations\": 100000,
-    \"deposits\": 10,
+    \"deposits\": ${NUM_DEPOSITS},
     \"restartAfter\": 2
-  }" | grep -v getRecords
+  }"
 }
 
 case $1 in
diff --git a/experiment/scripts/createusers.sh 
b/experiment/scripts/createusers.sh
index a5b3705..3f8d8eb 100755
--- a/experiment/scripts/createusers.sh
+++ b/experiment/scripts/createusers.sh
@@ -4,8 +4,9 @@
 # (normaly done automatically when installing from packages)
 #
 # Usage: ./createusers.sh
-set -e
+set -ex
 
+DEBIAN_FRONTEND=noninteractive
 source /usr/share/debconf/confmodule
 
 TALER_HOME="/var/lib/taler"
@@ -19,6 +20,7 @@ OGROUPNAME=taler-exchange-offline
 CLOSERUSERNAME=taler-exchange-closer
 RSECUSERNAME=taler-exchange-secmod-rsa
 ESECUSERNAME=taler-exchange-secmod-eddsa
+CSECUSERNAME=taler-exchange-secmod-cs
 AGGRUSERNAME=taler-exchange-aggregator
 WIREUSERNAME=taler-exchange-wire
 MERCHUSERNAME=taler-merchant-httpd
@@ -55,6 +57,12 @@ if ! getent passwd ${ESECUSERNAME} >/dev/null; then
     --ingroup ${GROUPNAME} \
     --home ${TALER_HOME} ${ESECUSERNAME}
 fi
+if ! getent passwd ${CSECUSERNAME} >/dev/null; then
+  adduser --quiet --system \
+    --no-create-home \
+    --ingroup ${GROUPNAME} \
+    --home ${TALER_HOME} ${CSECUSERNAME}
+fi
 if ! getent passwd ${WIREUSERNAME} >/dev/null; then
   adduser --quiet --system \
     --no-create-home \
@@ -89,10 +97,12 @@ fi
 install -d /var/lib/taler/exchange-offline -m 0700 -o ${OUSERNAME} -g 
${OGROUPNAME}
 install -d /run/taler/exchange-secmod-rsa -m 0755 -o ${RSECUSERNAME} -g 
${GROUPNAME}
 install -d /run/taler/exchange-secmod-eddsa -m 0755 -o ${ESECUSERNAME} -g 
${GROUPNAME}
+install -d /run/taler/exchange-secmod-cs -m 0755 -o ${CSECUSERNAME} -g 
${GROUPNAME}
 install -d /run/taler/exchange-httpd -m 0750 -o ${EUSERNAME} -g ${EGROUPNAME}
 install -d /var/lib/taler/exchange-offline -m 0700 -o ${OUSERNAME} -g 
${OGROUPNAME}
 install -d /var/lib/taler/exchange-secmod-rsa -m 0700 -o ${RSECUSERNAME} -g 
${GROUPNAME}
 install -d /var/lib/taler/exchange-secmod-eddsa -m 0700 -o ${ESECUSERNAME} -g 
${GROUPNAME}
+install -d /var/lib/taler/exchange-secmod-cs -m 0700 -o ${CSECUSERNAME} -g 
${GROUPNAME}
 install -d /run/taler/merchant-httpd -m 0755 -o ${MERCHUSERNAME} -g 
${MERCHGROUPNAME}
 
 if ! dpkg-statoverride --list 
/etc/taler/secrets/exchange-accountcredentials.secret.conf >/dev/null 2>&1; then
@@ -112,5 +122,3 @@ if ! dpkg-statoverride --list 
/etc/taler/secrets/merchant-db.secret.conf >/dev/n
     ${MERCHUSERNAME} root 460 \
     /etc/taler/secrets/merchant-db.secret.conf
 fi
-
-exit 0
diff --git a/experiment/scripts/database-centos.sh 
b/experiment/scripts/database-centos.sh
new file mode 100755
index 0000000..fe50885
--- /dev/null
+++ b/experiment/scripts/database-centos.sh
@@ -0,0 +1,340 @@
+#!/bin/bash
+INFO_MSG="
+Setup the database node (start postgresql) in a centos environment
+"
+OPT_MSG="
+init:
+  Initialize and start the taler database 
+   (calls remote-init on a remote node and thus 
+   needs ssh access to other experiment nodes)
+
+remote-init:
+  Call taler-exchange-dbinit against the database
+  node from a remote node (since centos does not have Taler)
+"
+
+set -eux
+source ~/scripts/helpers.sh
+
+# move to tmp to prevent change directory errors
+cd /tmp 
+
+# Create disk and mount it it if possible
+function setup_disks() {
+  if [ -b /dev/disk1 ]; then
+    echo 'start=2048, type=83' | sfdisk /dev/disk1 || true
+    yes | mkfs.ext4 -m 0 /dev/disk1 || true
+    mkdir /mnt/disk || true
+    mount /dev/disk1 /mnt/disk || true
+  fi
+}
+
+# Setup the postgresql configuration
+function setup_config() {
+
+  mkdir -p /etc/systemd/system/postgresql-13.service.d || true
+  echo "
+[Service]
+Environment=PGDATA=/tmp/postgresql/13/data
+  " > /etc/systemd/system/postgresql-13.service.d/override.conf
+
+  systemctl daemon-reload
+ 
+  PGSETUP_INITDB_OPTIONS="-D /tmp/postgresql/13/data"
+
+  # Only do this if the disk has been configured
+  if [ -d /mnt/disk ]; then
+    mkdir /mnt/disk/pg_wal || true
+    chown -R postgres:postgres /mnt/disk/pg_wal
+    PGSETUP_INITDB_OPTIONS="${PGSETUP_INITDB_OPTIONS} -X /mnt/disk/pg_wal"
+  fi
+
+  if [ ! -d /tmp/postgresql/13/data ]; then
+    mkdir -p /tmp/postgresql/13/data
+    chown -R postgres:postgres /tmp/postgresql/
+  fi
+
+  # does not work for some reason it not exported here, also setting non 
default values makes it fail
+  PGSETUP_INITDB_OPTIONS=${PGSETUP_INITDB_OPTIONS} 
postgresql-${POSTGRES_VERSION}-setup initdb || true
+  
+  # Get hardware info to tune in postgresql.conf
+  SHARED_MEM=$(($(awk '/MemTotal/ {print $2}' /proc/meminfo) / 3 ))
+  CACHE_SIZE=$(($(awk '/MemTotal/ {print $2}' /proc/meminfo) * 3/4))
+  NUM_CPU=$(lscpu | grep "CPU(s)" | head -n 1 | awk '{print $2}')
+
+  # Enable huge pages
+  # Size for huge_pages =~ shared_buffers * 1.25 so that there is enough
+  VM_PEAK=$((${SHARED_MEM} * 10/8))
+
+  HUGE_PAGES_SIZE=$(grep ^Hugepagesize /proc/meminfo | awk '{print $2}')
+  NUM_PAGES=$((${VM_PEAK} / ${HUGE_PAGES_SIZE}))
+
+  if ! grep -q "vm.nr_hugepages'" /etc/sysctl.conf; then
+    echo "vm.nr_hugepages=${NUM_PAGES}" >> /etc/sysctl.conf
+    sysctl -p
+  fi
+
+  # Allow longer lines to be logged by postgres
+  sed -i '1 i\$MaxMessageSize 4k' /etc/rsyslog.conf
+
+  # Configure postgres with an additional file and include this
+  # in the main configuration
+  echo "
+  listen_addresses='*'
+
+  log_destination=syslog
+  syslog_ident='taler-database'
+
+  log_error_verbosity=terse
+  # log_min_messages=PANIC
+  # log_min_error_statement=PANIC
+  # client_min_messages=ERROR
+
+  # For pgbadger
+  # log_checkpoints=on
+  # log_connections=on
+  # log_disconnections=on
+  # log_lock_waits=on
+  # log_temp_files=0
+  # log_autovacuum_min_duration=0
+  # log_error_verbosity=default
+  # log_duration=on
+  # log_statement=all
+
+  # For explain.py
+  # syslog_split_messages=off
+  # log_statement=all
+  # log_error_verbosity=default
+
+  log_min_duration_statement=${DB_MIN_DURATION_STATEMENT}
+
+  auto_explain.log_min_duration='${DB_MIN_DURATION_STATEMENT}ms'
+  auto_explain.log_verbose=true
+  auto_explain.log_nested_statements=true
+  auto_explain.log_analyze=true
+  auto_explain.log_buffers=true
+  auto_explain.log_wal=true
+
+  shared_preload_libraries='pg_stat_statements,auto_explain'
+
+  # Should be set locally
+  join_collapse_limit=1
+
+  # Large tables perform bad with the default settings
+  # However, they could also be set on each table indiviudally
+  # (NOTE: on partitions!)
+  # ALTER TABLE known_coins_default
+  #  SET (autovacuum_vacuum_scale_factor = 0.0, autovacuum_vacuum_threshold = 
1000);
+  log_autovacuum_min_duration=0
+  default_statistics_target=300
+  autovacuum_vacuum_cost_limit=400
+  autovacuum_vacuum_scale_factor=0.1
+  autovacuum_vacuum_threshold=1000
+
+  # Default 50, 0.1
+  autovacuum_analyze_threshold=50
+  autovacuum_analyze_scale_factor=0.1
+
+  # use 25% of the available memory 
+  # (https://www.postgresql.org/docs/13/runtime-config-resource.html)
+ # shared_buffers=${SHARED_MEM}kB
+ # effective_cache_size=${CACHE_SIZE}kB
+  shared_buffers=24551953kB
+  effective_cache_size=75491895kB
+
+  huge_pages=on
+  
+  # 
(https://www.postgresql.org/docs/current/runtime-config-wal.html#GUC-MAX-WAL-SIZE)
+  min_wal_size=20GB
+  max_wal_size=200GB
+  wal_buffers=1GB
+
+  checkpoint_completion_target=0.9
+  checkpoint_timeout = 15min
+  checkpoint_flush_after = 2MB
+  random_page_cost=1.1
+  
+  # Default 2kB
+  bgwriter_flush_after = 2MB
+
+  # Default 0
+  # 
https://www.cybertec-postgresql.com/en/the-mysterious-backend_flush_after-configuration-setting/
+  backend_flush_after = 2MB
+
+  # Too much results in CPU load
+  # 
https://www.postgresql.org/docs/13/runtime-config-resource.html#GUC-EFFECTIVE-IO-CONCURRENCY
+  effective_io_concurrency = 200
+
+  # Bad when turned off - Recovering db may not be possible
+  # https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-FSYNC
+  fsync = on
+
+  # Not so bad as when turning off fsync, but single transactions might get 
lost on crash - but
+  # like they would have aborted cleanly
+  # 
https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT
+  # When having replication, this one can be changed (in local only on and off 
are of use)
+  # 
https://www.postgresql.org/docs/13/runtime-config-replication.html#GUC-SYNCHRONOUS-STANDBY-NAMES
+  # on causes us to get 100% IO load
+  synchronous_commit = off
+
+  # Default off
+  wal_compression = off
+
+  wal_sync_method = fsync
+
+  # Bad to turn off, may lead to inconcistency
+  # 
https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-FULL-PAGE-WRITES
+  # Write full pages to WAL while partial are written to disk, helpful in case 
of crash, then
+  # partially written pages can be recovered.
+  # Can be disabled if FS does not support partial written pages (such as ZFS)
+  full_page_writes = on
+
+  max_worker_processes=${NUM_CPU}
+  max_parallel_workers=${NUM_CPU}
+  max_parallel_workers_per_gather=10
+  max_connections=500
+
+  max_parallel_maintenance_workers=12
+  
+  # out of shared memory
+  max_locks_per_transaction=85
+  
+  # (max used =~ work_mem * max_connections)
+  # NOTE: This formula is not completely correct 
+  work_mem=2GB
+  maintenance_work_mem=4GB
+  # 1 min
+  idle_in_transaction_session_timeout=60000
+
+  # Disable sequential scans
+  # enable_seqscan=off
+
+  " > /tmp/postgresql/${POSTGRES_VERSION}/data/exchange.conf
+
+  cp /tmp/postgresql/${POSTGRES_VERSION}/data/exchange.conf 
${LOG_DIR}/postgresql.conf
+
+  if ! grep -q "include = 'exchange.conf'" \
+         /tmp/postgresql/${POSTGRES_VERSION}/data/postgresql.conf; then
+    echo "include = 'exchange.conf'" >> \
+          /tmp/postgresql/${POSTGRES_VERSION}/data/postgresql.conf
+  fi
+
+  if ! grep -q "host all taler-exchange-httpd 127.16.0.0/12 trust" \
+    /tmp/postgresql/${POSTGRES_VERSION}/data/pg_hba.conf; then
+    echo "
+    # we need this in centos to initialize the db from remote (taler not 
installed)
+    host all taler-exchange-httpd 172.16.0.0/12 trust
+    host all postgres 172.16.0.0/12 trust
+    " >> /tmp/postgresql/${POSTGRES_VERSION}/data/pg_hba.conf
+  fi
+
+  systemctl restart postgresql-${POSTGRES_VERSION}
+}
+
+# Allow DB_USER from remote (Exchange will continue initialization only when 
+# this one was run)
+function enable_remote_access() {
+  # Enable password for taler since this is the case in real world deployments
+  # For the postgres user do not enable authentication (used in metrics)
+  if ! grep -q "host all ${DB_USER} 127.16.0.0/12 md5" \
+    /tmp/postgresql/${POSTGRES_VERSION}/data/pg_hba.conf; then
+    echo "
+    host all ${DB_USER} 172.16.0.0/12 md5
+    host all postgres 172.16.0.0/12 trust
+    " >> /tmp/postgresql/${POSTGRES_VERSION}/data/pg_hba.conf
+  fi
+}
+
+# Create user mappings for DB_USER for each shard
+function configure_shard_access() {
+
+  for i in $(seq $NUM_SHARDS); do
+    su postgres << EOF
+psql -d "${DB_NAME}" -tAc "CREATE USER MAPPING IF NOT EXISTS FOR \"${DB_USER}\"
+                           SERVER \"${i}\"
+                           OPTIONS (user '${DB_USER}', password 
'${DB_PASSWORD}');"
+EOF
+  done
+
+}
+
+# Initialize the database for taler exchange
+# Calls remote-dbinit from a remote system - requires ssh access
+function init_db() {
+
+  # Create the role taler-exchange-httpd and the database
+  su postgres << EOF
+psql postgres -tAc "DROP DATABASE IF EXISTS \"${DB_NAME}\";"
+psql postgres -tAc "SELECT 1 FROM pg_roles WHERE 
rolname='taler-exchange-httpd'" | \
+  grep -q 1 || \
+  createuser taler-exchange-httpd
+psql -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | \
+  grep -q 1 || \
+  createdb -O taler-exchange-httpd "${DB_NAME}"
+psql -tAc "CREATE EXTENSION IF NOT EXISTS pg_stat_statements"
+EOF
+
+  ssh -o StrictHostKeyChecking=no \
+      -i ~/.ssh/id_rsa \
+      monitor.${DNS_ZONE} './scripts/database-centos.sh remote-init'
+
+  if [ "${SHARD_DB}" = "true" ]; then
+    configure_shard_access
+  fi
+ 
+  # Create the remote user "$DB_USER" and load pg_stat_statements for metrics
+  su postgres << EOF
+psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='${DB_USER}'" | \
+  grep -q 1 || \
+  psql << END
+    CREATE USER "${DB_USER}" with encrypted password '${DB_PASSWORD}';
+END
+EOF
+
+  # Grant access to the databse to the remote user
+  su postgres << EOF
+psql -d "${DB_NAME}"
+GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public TO "${DB_USER}";
+GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO "${DB_USER}";
+EOF
+
+  enable_remote_access
+  systemctl restart postgresql-13
+}
+
+# Initialize the database from a system which has GNU Taler installed
+function remote_init_db() {
+
+  sed -i 
"s\<DB_URL_HERE>\postgresql://taler-exchange-httpd@db.${DNS_ZONE}:${DB_PORT}/${DB_NAME}\g"
 \
+       /etc/taler/secrets/exchange-db.secret.conf
+
+  sudo -u taler-exchange-httpd taler-exchange-dbinit -r || true
+  sudo -u taler-exchange-httpd taler-exchange-dbinit -s || true
+
+  if [ "${SHARD_DB}" = "true" ]; then
+    sudo -u postgres taler-exchange-dbinit -F ${NUM_SHARDS}
+  elif [ "${PARTITION_DB}" = "true" ]; then
+    sudo -u taler-exchange-httpd taler-exchange-dbinit -P ${NUM_PARTITIONS}
+  else
+    sudo -u taler-exchange-httpd taler-exchange-dbinit
+  fi
+
+}
+
+
+case ${1} in 
+  init)
+    setup_disks
+    setup_config
+    restart_rsyslog
+    init_db
+    ;;
+  remote-init)
+    remote_init_db
+    ;;
+  *)
+    taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
+    ;;
+esac
+
+exit 0
diff --git a/experiment/scripts/database.sh b/experiment/scripts/database.sh
index b19cabf..736efb9 100755
--- a/experiment/scripts/database.sh
+++ b/experiment/scripts/database.sh
@@ -13,45 +13,55 @@ source ~/scripts/helpers.sh
 # move to tmp to prevent change directory errors
 cd /tmp 
 
+# Setup a disk if present to be used for WAL and move the WAL there
+# Don't use in combination with `setup_ram_storage`
 function setup_disks() {
-  if [[ "$(hostname)" =~ "dahu" ]]; then
-    mkdir /mnt/sdb || true
-    mount /dev/sdb /mnt/sdb || true
-    if [ ! -L /var/lib/postgresql/${POSTGRES_VERSION}/main/pg_wal ]; then
-      rm -rf /mnt/sdb/pg_wal || true
-      mv /var/lib/postgresql/${POSTGRES_VERSION}/main/pg_wal/ /mnt/sdb
-      ln -s /mnt/sdb/pg_wal /var/lib/postgresql/${POSTGRES_VERSION}/main/pg_wal
-      chown -R postgres:postgres 
/var/lib/postgresql/${POSTGRES_VERSION}/main/pg_wal/
-    fi
+  if [ -b /dev/disk1 ]; then
+    # Dahu ssd
+    DISK=/dev/disk1
+  elif [ -b /dev/disk4 ]; then
+    # Yeti nvme
+    DISK=/dev/disk4
+  else
+    return
+  fi
+  echo 'start=2048, type=83' | sfdisk ${DISK} || true
+  yes | mkfs.ext4 -m 0 ${DISK} || true
+  mkdir /mnt/disk || true
+  mount ${DISK} /mnt/disk || true
+  if [ ! -L /tmp/postgresql/${POSTGRES_VERSION}/main/pg_wal ]; then
+    rm -rf /mnt/disk/pg_wal || true
+    mv /tmp/postgresql/${POSTGRES_VERSION}/main/pg_wal/ /mnt/disk
+    ln -s /mnt/disk/pg_wal /tmp/postgresql/${POSTGRES_VERSION}/main/pg_wal
+    chown -R postgres:postgres /tmp/postgresql/${POSTGRES_VERSION}/main/pg_wal
   fi
+  
 }
 
+# Setup Postgres to use RAM instead of disks to store data
 function setup_ram_storage() {
-  SIZE=$(($(awk '/MemTotal/ {print $2}' /proc/meminfo) / 10))
-  if ! df | grep -q /var/lib/postgresql; then
-    mv /var/lib/postgresql /var/lib/postgresql.bak
-    mkdir /var/lib/postgresql
-    chown postgres:postgres /var/lib/postgresql
-    mount -t tmpfs -o size=${SIZE}k pgdata /var/lib/postgresql
-    cp -rp /var/lib/postgresql.bak/* /var/lib/postgresql
+  SIZE=$(($(awk '/MemTotal/ {print $2}' /proc/meminfo) / 4))
+  if ! df | grep -q /tmp/postgresql; then
+    mv /tmp/postgresql /tmp/postgresql.bak
+    mkdir /tmp/postgresql
+    chown postgres:postgres /tmp/postgresql
+    mount -t tmpfs -o size=${SIZE}k pgdata /tmp/postgresql
+    cp -rp /tmp/postgresql.bak/* /tmp/postgresql
   fi
 }
 
 # Setup the postgresql configuration
 function setup_config() {
+
+  # Grid5000 mounts the default disk on /tmp
+  # Move the DB there to get more storage
+  if [ -d /var/lib/postgresql ]; then
+    mv /var/lib/postgresql /tmp/
+  fi
+
   sed -i "s\<DB_URL_HERE>\postgresql:///${DB_NAME}\g" \
        /etc/taler/secrets/exchange-db.secret.conf
   
-  # Enable password for taler since this is the case in real world deployments
-  # For the postgres user do not enable authentication (used in metrics)
-  if ! grep -q "host all ${DB_USER} 127.16.0.0/12 md5" \
-    /etc/postgresql/${POSTGRES_VERSION}/main/pg_hba.conf; then
-    echo "
-    host all ${DB_USER} 172.16.0.0/12 md5
-    host all postgres 172.16.0.0/12 trust
-    " >> /etc/postgresql/${POSTGRES_VERSION}/main/pg_hba.conf
-  fi
-
   # Get hardware info to tune in postgresql.conf
   SHARED_MEM=$(($(awk '/MemTotal/ {print $2}' /proc/meminfo) / 3 ))
   CACHE_SIZE=$(($(awk '/MemTotal/ {print $2}' /proc/meminfo) * 3/4))
@@ -69,53 +79,148 @@ function setup_config() {
     sysctl -p
   fi
 
+  # Allow longer lines to be logged by postgres
+  sed -i '1 i\$MaxMessageSize 4k' /etc/rsyslog.conf
+
   # Configure postgres with an additional file and include this
   # in the main configuration
   echo "
   listen_addresses='*'
+
   log_destination=syslog
   syslog_ident='taler-database'
-  log_min_duration_statement=500
-  shared_preload_libraries='pg_stat_statements,auto_explain'
-  auto_explain.log_min_duration='300ms'
+
+  log_error_verbosity=terse
+  # log_min_messages=PANIC
+  # log_min_error_statement=PANIC
+  # client_min_messages=ERROR
+
+  # For pgbadger
+  # log_checkpoints=on
+  # log_connections=on
+  # log_disconnections=on
+  # log_lock_waits=on
+  # log_temp_files=0
+  # log_autovacuum_min_duration=0
+  # log_error_verbosity=default
+  # log_duration=on
+  # log_statement=all
+
+  # For explain.py
+  # syslog_split_messages=off
+  # log_statement=all
+  # log_error_verbosity=default
+
+  log_min_duration_statement=${DB_MIN_DURATION_STATEMENT}
+
+  auto_explain.log_min_duration='${DB_MIN_DURATION_STATEMENT}ms'
+  auto_explain.log_verbose=true
+  auto_explain.log_nested_statements=true
   auto_explain.log_analyze=true
   auto_explain.log_buffers=true
   auto_explain.log_wal=true
-  
+
+  shared_preload_libraries='pg_stat_statements,auto_explain'
+
+  # Should be set locally
+  join_collapse_limit=1
+
+  # Large tables perform bad with the default settings
+  # However, they could also be set on each table indiviudally
+  # (NOTE: on partitions!)
+  # ALTER TABLE known_coins_default
+  #  SET (autovacuum_vacuum_scale_factor = 0.0, autovacuum_vacuum_threshold = 
1000);
+  log_autovacuum_min_duration=0
+  default_statistics_target=300
+  autovacuum_vacuum_cost_limit=400
+  autovacuum_vacuum_scale_factor=0.1
+  autovacuum_vacuum_threshold=1000
+
+  # Default 50, 0.1
+  autovacuum_analyze_threshold=50
+  autovacuum_analyze_scale_factor=0.1
+
   # use 25% of the available memory 
   # (https://www.postgresql.org/docs/13/runtime-config-resource.html)
-  shared_buffers=${SHARED_MEM}kB
-  effective_cache_size=${CACHE_SIZE}kB
+ # shared_buffers=${SHARED_MEM}kB
+ # effective_cache_size=${CACHE_SIZE}kB
+  shared_buffers=24551953kB
+  effective_cache_size=75491895kB
+
 
   huge_pages=on
   
   # 
(https://www.postgresql.org/docs/current/runtime-config-wal.html#GUC-MAX-WAL-SIZE)
-  min_wal_size=4GB
-  max_wal_size=8GB
-  wal_buffers=16MB
+  min_wal_size=20GB
+  max_wal_size=200GB
+  wal_buffers=1GB
 
-  # Hopefully reduce disk IO 
-  # https://www.postgresql.org/docs/12/wal-configuration.html
   checkpoint_completion_target=0.9
+  checkpoint_timeout = 15min
+  checkpoint_flush_after = 2MB
   random_page_cost=1.1
   
+  # Default 2kB
+  bgwriter_flush_after = 2MB
+
+  # Default 0
+  # 
https://www.cybertec-postgresql.com/en/the-mysterious-backend_flush_after-configuration-setting/
+  backend_flush_after = 2MB
+
+  # Too much results in CPU load
+  # 
https://www.postgresql.org/docs/13/runtime-config-resource.html#GUC-EFFECTIVE-IO-CONCURRENCY
+  effective_io_concurrency = 200
+
+  # Bad when turned off - Recovering db may not be possible
+  # https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-FSYNC
+  fsync = on
+
+  # Not so bad as when turning off fsync, but single transactions might get 
lost on crash - but
+  # like they would have aborted cleanly
+  # 
https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT
+  # When having replication, this one can be changed (in local only on and off 
are of use)
+  # 
https://www.postgresql.org/docs/13/runtime-config-replication.html#GUC-SYNCHRONOUS-STANDBY-NAMES
+  # on causes us to get 100% IO load
+  synchronous_commit = off
+
+  # Default off
+  wal_compression = off
+
+  wal_sync_method = fsync
+
+  # Bad to turn off, may lead to inconcistency
+  # 
https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-FULL-PAGE-WRITES
+  # Write full pages to WAL while partial are written to disk, helpful in case 
of crash, then
+  # partially written pages can be recovered.
+  # Can be disabled if FS does not support partial written pages (such as ZFS)
+  full_page_writes = on
+
   max_worker_processes=${NUM_CPU}
   max_parallel_workers=${NUM_CPU}
+  max_parallel_workers_per_gather=10
   max_connections=500
 
-  max_parallel_maintenance_workers=4
+  max_parallel_maintenance_workers=12
   
   # out of shared memory
   max_locks_per_transaction=85
   
-  # Increase work mem to lower I/O utilization (max used =~ work_mem * 
max_connections)
+  # (max used =~ work_mem * max_connections)
   # NOTE: This formula is not completely correct 
-  work_mem=265MB
-  maintenance_work_mem=2GB
+  work_mem=2GB
+  maintenance_work_mem=4GB
   # 1 min
   idle_in_transaction_session_timeout=60000
+
+  # Disable sequential scans
+  # enable_seqscan=off
+
+  # set our database location to /tmp
+  data_directory='/tmp/postgresql/${POSTGRES_VERSION}/main'
   " > /etc/postgresql/${POSTGRES_VERSION}/main/exchange.conf
 
+  cp /etc/postgresql/${POSTGRES_VERSION}/main/exchange.conf 
${LOG_DIR}/postgresql.conf
+
   if ! grep -q "include = 'exchange.conf'" \
          /etc/postgresql/${POSTGRES_VERSION}/main/postgresql.conf; then
     echo "include = 'exchange.conf'" >> \
@@ -138,47 +243,99 @@ function setup_pgbouncer() {
   fi
 }
 
+# Allow DB_USER from remote (Exchange will continue initialization only when 
+# this one was run)
+function enable_remote_access() {
+  # Enable password for taler since this is the case in real world deployments
+  # For the postgres user do not enable authentication (used in metrics)
+  if ! grep -q "host all ${DB_USER} 127.16.0.0/12 md5" \
+    /etc/postgresql/${POSTGRES_VERSION}/main/pg_hba.conf; then
+    echo "
+    host all ${DB_USER} 172.16.0.0/12 md5
+    host all postgres 172.16.0.0/12 trust
+    " >> /etc/postgresql/${POSTGRES_VERSION}/main/pg_hba.conf
+  fi
+}
+
+# Create user mappings for DB_USER for each shard
+function configure_shard_access() {
+
+  for i in $(seq $NUM_SHARDS); do
+    su postgres << EOF
+psql -d "${DB_NAME}" -tAc "CREATE USER MAPPING IF NOT EXISTS FOR \"${DB_USER}\"
+                           SERVER \"${i}\"
+                           OPTIONS (user '${DB_USER}', password 
'${DB_PASSWORD}');"
+EOF
+# Only in pg 14
+# for in $(seq $NUM_SHARDS); do
+#   psql -d "${DB_NAME}" -tAc "ALTER SERVER ${i} OPTIONS (async_capable 
"true");
+# done
+  done
+
+}
+
 # Initialize the database for taler exchange
 function init_db() {
   systemctl restart postgresql
 
   # Create the role taler-exchange-httpd and the database
   su postgres << EOF
+psql postgres -tAc "DROP DATABASE IF EXISTS \"${DB_NAME}\";"
 psql postgres -tAc "SELECT 1 FROM pg_roles WHERE 
rolname='taler-exchange-httpd'" | \
   grep -q 1 || \
   createuser taler-exchange-httpd
 psql -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | \
   grep -q 1 || \
   createdb -O taler-exchange-httpd "${DB_NAME}"
+psql -tAc "CREATE EXTENSION IF NOT EXISTS pg_stat_statements"
 EOF
-  
-  sudo -u taler-exchange-httpd taler-exchange-dbinit -r || true
-  sudo -u taler-exchange-httpd taler-exchange-dbinit -s || true
-  sudo -u taler-exchange-httpd taler-exchange-dbinit
-  
+ 
   # Create the remote user "$DB_USER" and load pg_stat_statements for metrics
   su postgres << EOF
 psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='${DB_USER}'" | \
   grep -q 1 || \
   psql << END
     CREATE USER "${DB_USER}" with encrypted password '${DB_PASSWORD}';
-    CREATE EXTENSION pg_stat_statements;
 END
 EOF
-  
+
+  sudo -u taler-exchange-httpd taler-exchange-dbinit -r || true
+  sudo -u taler-exchange-httpd taler-exchange-dbinit -s || true
+
+  if [ "${SHARD_DB}" = "true" ]; then
+    sudo -u postgres taler-exchange-dbinit -F ${NUM_SHARDS}
+    configure_shard_access
+  elif [ "${PARTITION_DB}" = "true" ]; then
+    sudo -u taler-exchange-httpd taler-exchange-dbinit -P ${NUM_PARTITIONS}
+  else
+    sudo -u taler-exchange-httpd taler-exchange-dbinit
+  fi
+
   # Grant access to the databse to the remote user
   su taler-exchange-httpd -s /bin/bash << EOF
 psql -d "${DB_NAME}"
 GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public TO "${DB_USER}";
 GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO "${DB_USER}";
 EOF
+
+#  for i in $(seq $NUM_PARTITIONS); do
+#    su postgres << EOF
+#psql -d ${DB_NAME} -tAc "ALTER TABLE known_coins_${i} SET (fillfactor=90)";
+#EOF
+#  done
+
+  enable_remote_access
+  systemctl restart postgresql
 }
 
 case ${1} in 
   init)
     setup_config
-    #setup_disks
-    setup_ram_storage
+    if [[ "${POSTGRES_IN_MEMORY}" == "true" ]]; then
+      setup_ram_storage
+    else
+      setup_disks
+    fi
     init_db
     setup_pgbouncer
     restart_rsyslog
diff --git a/experiment/scripts/dns.sh b/experiment/scripts/dns.sh
new file mode 100755
index 0000000..1754526
--- /dev/null
+++ b/experiment/scripts/dns.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+set -eux
+
+# Backup used nodes for experiment
+cp ~/nodes.json ${LOG_DIR}/nodes.json
+
+if [[ "$REMOVE_PREVIOUS_EXPERIMENT_DATA" == "true" ]]; then
+  rm -rf /home/${G5K_USER}/espec-times || true
+fi
+if ! grep -q "# Times" /home/${G5K_USER}/espec-times; then
+  echo "# Times to use for recovery" > /home/${G5K_USER}/espec-times
+fi
+echo "$(date +%s)" >> /home/${G5K_USER}/espec-times
+
+# Clean the file so it is cleanly updated in each run
+rm ${LOG_DIR}/commits.txt || true
+
+for DIR in $(find ~/taler -type d -maxdepth 1); do
+  cd ${DIR}
+  echo "${DIR}: $(git rev-parse HEAD)" >> ${LOG_DIR}/commits.txt
+  cd -
+done
diff --git a/experiment/scripts/exchange-aggregator.sh 
b/experiment/scripts/exchange-aggregator.sh
new file mode 100755
index 0000000..c8a7a77
--- /dev/null
+++ b/experiment/scripts/exchange-aggregator.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+INFO_MSG="
+Setup the Exchange Aggregator node
+Start taler-exchange-aggregator 
+"
+OPT_MSG="
+init:
+  Initialize the application(s) and start them
+  uses NUM_AGGREGATOR_PROCESSES
+
+init-start:
+  Same as init but do not configure taler.conf,
+  just start the service
+"
+
+set -eux
+source ~/scripts/helpers.sh
+
+# Start N new exchange-aggregator processes
+# $1: N - number of new aggregators to start
+# NOTE: only for init purposes currently
+function start_aggregators() {
+  restart_rsyslog
+  for i in $( seq $(echo "2^${1}" | bc) ); do
+    systemctl restart taler-exchange-aggregator@"${i}".service
+  done
+}
+
+case $1 in
+  init)
+    setup_exchange_config_master_key_from_api
+    start_aggregators "$NUM_AGGREGATOR_PROCESSES"
+    ;;
+  init-start)
+    start_aggregators "$NUM_AGGREGATOR_PROCESSES"
+    ;;
+  *)
+    taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
+    ;;
+esac
diff --git a/experiment/scripts/exchange-closer.sh 
b/experiment/scripts/exchange-closer.sh
new file mode 100755
index 0000000..e91abda
--- /dev/null
+++ b/experiment/scripts/exchange-closer.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+INFO_MSG="
+Setup the Exchange Closer node
+Start taler-exchange-closer
+"
+OPT_MSG="
+init:
+  Initialize the application(s) and start them
+  uses NUM_CLOSER_PROCESSES
+
+init-start:
+  Same as init but do not configure taler.conf,
+  just start the service
+"
+
+set -eux
+source ~/scripts/helpers.sh
+
+# Start N new exchange-aggregator processes
+# $1: N - number of new aggregators to start
+# NOTE: only for init purposes currently
+function start_closers() {
+  restart_rsyslog
+  for i in $(seq ${1}); do
+    systemctl restart taler-exchange-closer@"${i}".service
+  done
+}
+
+case $1 in
+  init)
+    setup_exchange_config_master_key_from_api
+    start_closers "$NUM_CLOSER_PROCESSES"
+    ;;
+  init-start)
+    start_closers "$NUM_CLOSER_PROCESSES"
+    ;;
+  *)
+    taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
+    ;;
+esac
diff --git a/experiment/scripts/exchange-proxy.sh 
b/experiment/scripts/exchange-proxy.sh
new file mode 100755
index 0000000..ed4854c
--- /dev/null
+++ b/experiment/scripts/exchange-proxy.sh
@@ -0,0 +1,116 @@
+#!/bin/bash
+INFO_MSG="
+Confiure and start the nginx proxy server
+"
+OPT_MSG="
+init:
+  Initialize and start the proxy with NUM_EXCHANGE_PROCESSES upstreams
+
+start NUM:
+  Add another NUM exchanges to the list of upstreams
+
+stop NUM:
+  Remove NUM exchanges from the list of upstreams
+"
+
+set -eux
+source ~/scripts/helpers.sh
+
+# Add N exchanges to the upstream servers in the proxy configuration
+# $1: N - Number of currently running exchanges (per exchange host)
+# $2: N - Number of exchanges to add
+function add_exchanges() {
+
+  let "START=$1+10000"
+  let "END=$START+$2-1"
+
+  EXCHANGES=$(get_hosts "exchange-")
+
+  for PORT in $(seq $START $END); do
+    for HOST in ${EXCHANGES}; do
+      sed -i -e "/<SERVERS_HERE>/a \ \ server ${HOST}.${DNS_ZONE}:${PORT};" \
+              /etc/nginx/sites-available/exchange
+    done
+  done
+}
+
+# Setup the node and proxy configuration
+function setup_config() {
+
+  sed -i -e "s/<EXCHANGE_GW_DOMAIN_HERE>/${EXCHANGE_GW_DOMAIN}/g" \
+         /etc/nginx/sites-available/exchange
+
+  
+  add_exchanges "0" ${NUM_EXCHANGE_PROCESSES}
+
+  setup_rsyslog_for_nginx
+  
+  # Allow enough files to be opened by nginx (www-data)
+  echo "
+  fs.file-max=50000
+  " >> /etc/sysctl.conf
+  
+  echo "
+  www-data soft nofile unlimited
+  www-data hard nofile unlimited
+  " >> /etc/security/limits.conf
+  
+  sysctl -p
+}
+
+# Initialize and start the proxy
+function init_proxy() {
+  create_cert "${EXCHANGE_GW_DOMAIN}" "/etc/ssl/proxy"
+  setup_config
+
+  # Setup the directory where Ngxinx will place its cache
+  # configured in <g5k>/configs/etc/nginx/sites-availabled/exchange
+  mkdir -p /var/cache/proxy
+
+  restart_rsyslog
+  ln -sf /etc/nginx/sites-available/exchange /etc/nginx/sites-enabled/exchange
+  
+  # Nginx does not start until the destination server is reachable - wait here
+  # nginx: [emerg] host not found in upstream "exch.perf.taler" ...
+  wait_for_keys "${PRIMARY_EXCHANGE}:10000"
+  
+  systemctl restart nginx \
+                   prometheus-nginx-exporter
+}
+
+# Remove N exchanges from the upstream list
+# $1: N - number of currently running exchanges
+# $2: N - number of exchanges to remove
+function remove_exchanges() {
+
+  # We know we started from port 10000
+  # get the highest port numbers and start removing from there
+  let "START=$1+10000"
+  let "END=$START-$2"
+
+  EXCHANGES=$(get_hosts "exchange-")
+
+  for PORT in $(seq $END $START); do
+    for HOST in ${EXCHANGES}; do
+      sed -i "/${HOST}.${DNS_ZONE}:${PORT};/d" \
+            /etc/nginx/sites-available/exchange
+    done
+  done
+}
+
+case $1 in
+  init)
+    init_proxy
+    ;;
+  start)
+    add_exchanges $2 $3
+    ;;
+  stop)
+    remove_exchanges $2 $3
+    ;;
+  *)
+    taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
+    ;;
+esac
+
+systemctl reload nginx
diff --git a/experiment/scripts/exchange-transfer.sh 
b/experiment/scripts/exchange-transfer.sh
new file mode 100755
index 0000000..cb1700e
--- /dev/null
+++ b/experiment/scripts/exchange-transfer.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+INFO_MSG="
+Setup the Exchange Transfer node
+Start taler-exchange-transfer
+"
+OPT_MSG="
+init:
+  Initialize the application(s) and start them
+  uses NUM_TRANSFER_PROCESSES
+
+init-start:
+  Same as init but do not configure taler.conf,
+  just start the service
+"
+
+set -eux
+source ~/scripts/helpers.sh
+
+# Start N new exchange-aggregator processes
+# $1: N - number of new aggregators to start
+# NOTE: only for init purposes currently
+function start_transfers() {
+  restart_rsyslog
+  for i in $(seq ${1}); do
+    systemctl restart taler-exchange-transfer@"${i}".service
+  done
+}
+
+case $1 in
+  init)
+    setup_exchange_config_master_key_from_api
+    start_transfers "$NUM_TRANSFER_PROCESSES"
+    ;;
+  init-start)
+    start_transfers "$NUM_TRANSFER_PROCESSES"
+    ;;
+  *)
+    taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
+    ;;
+esac
diff --git a/experiment/scripts/exchange-wirewatch.sh 
b/experiment/scripts/exchange-wirewatch.sh
new file mode 100755
index 0000000..3341a35
--- /dev/null
+++ b/experiment/scripts/exchange-wirewatch.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+INFO_MSG="
+Setup the Exchange Wirewatch node
+Start taler-exchange-wirewatch
+"
+OPT_MSG="
+init:
+  Initialize the application(s) and start them
+  uses NUM_WIREWATCH_PROCESSES
+
+init-start:
+  Same as init but do not configure taler.conf,
+  just start the service
+"
+
+set -eux
+source ~/scripts/helpers.sh
+
+# Start N new exchange-aggregator processes
+# $1: N - number of new aggregators to start
+function start_wirewatches() {
+  # count the running wirewatches so that numbers can be increased
+  RUNNING=$(ps -aux | grep "[taler]-exchange-wirewatch" | wc -l)
+
+  for i in $(seq ${1}); do
+    let "i+=${RUNNING}"
+    systemctl restart taler-exchange-wirewatch@"${i}".service
+    sleep 0.5
+  done
+}
+
+function stop_wirewatches() {
+  stop_numbered_services "taler-exchange-wirewatch" $1
+}
+
+case $1 in
+  init)
+    setup_exchange_config_master_key_from_api
+    restart_rsyslog
+    start_wirewatches "$NUM_WIREWATCH_PROCESSES"
+    ;;
+  init-start)
+    restart_rsyslog
+    start_wirewatches "$NUM_WIREWATCH_PROCESSES"
+    ;;
+  start)
+    start_wirewatches "$2"
+    ;;
+  stop)
+    stop_wirewatches "$2"
+    ;;
+  *)
+    taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
+    ;;
+esac
diff --git a/experiment/scripts/exchange.sh b/experiment/scripts/exchange.sh
index 7277211..12a5f8d 100755
--- a/experiment/scripts/exchange.sh
+++ b/experiment/scripts/exchange.sh
@@ -1,18 +1,22 @@
 #!/bin/bash
 INFO_MSG="
 Setup the Exchange node
-Start taler-exchnage-* 
------
-  could change later to single nodes
-  for aggregator, wirewatch etc..
------
-Each exchange-http daemon, will get its own port starting from 10001, 
-unless the first, this one will get port 80
+Start taler-exchange-httpd 
+
+Each exchange-http daemon, will get its own port starting from 10000
+Detects it there are seperate nodes for aggregator and co., if not
+the processes are started too.
 "
 OPT_MSG="
-init:
-  Initialize the applications and start them
-  uses NUM_EXCHANGE_PROCESSES and NUM_WIREWATCH_PROCESSES
+init-primary:
+  Initialize the 'master exchange' and start NUM_EXCHANGE_PROCESSES
+  exchange processes
+  Sets up key material on the NFS to use for the secondary exchanges
+
+init-secondary:
+  Initialize the 'slave exchange' and start the processes
+  Waits until the master is done and then starts
+  NUM_EXCHANGE_PROCESSES exchange processes.
 
 start NUM:
   Start another NUM exchange-http daemons
@@ -25,34 +29,59 @@ set -eux
 source ~/scripts/helpers.sh
 
 # Setup the configuration in /etc/taler
-function setup_config() {
-  sed -i 
"s\<DB_URL_HERE>\postgresql://${DB_USER}:${DB_PASSWORD}@${DATABASE_DOMAIN}:${DB_PORT}/${DB_NAME}\g"
 \
-       /etc/taler/secrets/exchange-db.secret.conf
-  
-  sed -i "s/<BANK_HOST_HERE>/${BANK_DOMAIN}/g" \
-       /etc/taler/secrets/exchange-accountcredentials.secret.conf
-  
+function setup_primary_config() {
+
+  # remove keys from previous run in same experiment
+  rm -rf /var/lib/taler/exchange-offline/*
+
+  # Setup the base configuration (helpers.sh)
+  setup_exchange_config_without_master_key
+
   MASTER_KEY=$(sudo -u taler-exchange-offline taler-exchange-offline setup)
   
-  sed -i -e "s/<BANK_HOST_HERE>/${BANK_DOMAIN}/g" \
-         -e "s\<BASE_URL_HERE>\http://${EXCHANGE_DOMAIN}/\g"; \
-         -e "s/<MASTER_KEY_HERE>/${MASTER_KEY}/g" \
-         -e "s/<MAX_REQUESTS_HERE>/${EXCHANGE_MAX_REQUESTS:-8192}/g" \
+  sed -i -e "s/<MASTER_KEY_HERE>/${MASTER_KEY}/g" \
        /etc/taler/conf.d/exchange-business.conf
+
+}
+
+# Check if there are exchange-* processes configured to be run
+# on external systems, if not start them here.
+function start_other_exchange_binaries() {
+  if [[ "${AGGREGATOR_HOSTS}" == "none" ]]; then
+    source ~/scripts/exchange-aggregator.sh init-start
+  fi
+  if [[ "${CLOSER_HOSTS}" == "none" ]]; then
+    source ~/scripts/exchange-closer.sh init-start
+  fi
+  if [[ "${TRANSFER_HOSTS}" == "none" ]]; then
+    source ~/scripts/exchange-transfer.sh init-start
+  fi
+  if [[ "${WIREWATCH_HOSTS}" == "none" ]]; then
+    source ~/scripts/exchange-wirewatch.sh init-start
+  fi
 }
 
 # Setup the exchange with the taler-exchange-offline signing procedure
-function setup_exchange() {
-  systemctl restart taler-exchange.target
+function setup_primary_exchange() {
+
+  # Setup the shared key directory when we use a secondary node
+  if [[ ${NUM_EXCHANGES} != "1" ]]; then
+    rm -rf /home/${G5K_USER}/taler || true
+    mkdir -p /home/${G5K_USER}/taler/exchange-secmod-{cs,rsa,eddsa}
+  fi
+
+  systemctl restart taler-exchange-httpd@10000.service
 
-  wait_for_keys "${EXCHANGE_DOMAIN}/management"
+  start_other_exchange_binaries
+
+  wait_for_keys "${PRIMARY_EXCHANGE}:10000/management"
 
   sleep 5
   
   taler-exchange-offline download > sig-req.json
   taler-exchange-offline sign < sig-req.json > sig-res.json
-  taler-exchange-offline enable-account 
"payto://x-taler-bank/${BANK_DOMAIN}/Exchange" > acct-res.json
-  taler-exchange-offline wire-fee 2021 x-taler-bank KUDOS:0 KUDOS:0 > 
fee-res.json
+  taler-exchange-offline enable-account 
"payto://x-taler-bank/bank.${DNS_ZONE}/Exchange" > acct-res.json
+  taler-exchange-offline wire-fee $(date +%Y) x-taler-bank KUDOS:0 KUDOS:0 
KUDOS:0 > fee-res.json
   taler-exchange-offline upload < sig-res.json
   taler-exchange-offline upload < acct-res.json
   taler-exchange-offline upload < fee-res.json
@@ -60,47 +89,37 @@ function setup_exchange() {
 
 # Initialize all stuff needed 
 # logs, configs, exchanges
-function init_exchanges() {
+# For the primary node which is responsible for key creation
+function init_primary_exchange() {
   restart_rsyslog
-
-  setup_config
-  
+  setup_primary_config
   wait_for_db
-  # Wait another second to make sure user has permissions
-  sleep 5
+  setup_primary_exchange
+}
 
-  setup_exchange
+# Initialize all stuff needed for secondary exchange nodes
+# They use the key material from the primary exchange
+function init_secondary_exchange() {
+  restart_rsyslog
+  setup_exchange_config_master_key_from_api
 }
 
 # Start N new exchange-http daemons
+# $1: N - number of currently running exchanges
 # $1: N - number of new exchanges to start
 function start_exchanges() {
-  # Get all currently running ones so the next free 
-  # port can be calculated - 10000 + RUNNING
-  RUNNING=$(ps -aux | grep "[taler]-exchange-httpd" | wc -l)
-
-  # We cant do seq 0 n, if n=0 it would yield 0, thus do seq n and decrement
-  # by one, then seq 0 yields nothing
-  for i in $(seq ${1}); do
-    # seq starts at 1 - substract it
-    let "i+=${RUNNING}-1" || true
-    let "i+=10000"
-    systemctl restart taler-exchange-httpd@"${i}".socket \
-                      taler-exchange-httpd@"${i}".service
+
+  let "START=$1+10000"
+  let "END=$START+$2-1"
+
+  for PORT in $(seq $START $END); do
+    systemctl restart taler-exchange-httpd@"${PORT}".socket \
+                      taler-exchange-httpd@"${PORT}".service
     # Wait so they have some small delay in between their routines from the 
start
     sleep 0.05
   done
 }
 
-# Start N new exchange-wirewatch processes
-# $1: N - number of new wirewatchers to start
-# NOTE: only for init purposes currently
-function start_wirewatchers() {
-  for i in $(seq ${1}); do
-    systemctl restart taler-exchange-wirewatch@"${i}".service
-  done
-}
-
 # Stop N exchange daemons 
 # $1: N -- number of exchanges to stop
 function stop_exchanges() {
@@ -108,14 +127,17 @@ function stop_exchanges() {
 }
 
 case $1 in
-  init)
-    init_exchanges
-    # TODO adjust when started manually and not with .target
-    start_exchanges "$((${NUM_EXCHANGE_PROCESSES}-1))"
-    start_wirewatchers "$((${NUM_WIREWATCH_PROCESSES}-1))"
+  init-primary)
+    init_primary_exchange
+    start_exchanges "1" "$((${NUM_EXCHANGE_PROCESSES}-1))"
+    ;;
+  init-secondary)
+    init_secondary_exchange
+    start_exchanges "0" "${NUM_EXCHANGE_PROCESSES}"
     ;;
   start)
-    start_exchanges $2
+    RUNNING=$(ps -aux | grep "[taler]-exchange-httpd" | wc -l)
+    start_exchanges $RUNNING $2
     ;;
   stop)
     stop_exchanges $2
diff --git a/experiment/scripts/helpers.sh b/experiment/scripts/helpers.sh
index 413043e..c972bd9 100755
--- a/experiment/scripts/helpers.sh
+++ b/experiment/scripts/helpers.sh
@@ -15,16 +15,13 @@ set -x
 # is executed on
 # $1: The domain to be added
 function set_ddn() {
-  # There are still issues sometimes
-  # hostname -i ... failure syntax error
-  # Even when looping with while ! hostname -i the next one
-  # possibly may fail. Thus we try to fix it with eval
-  while ! eval $(echo IP=$(hostname -i)) ; do
-    sleep 5;
-    systemctl restart dnsmasq
+  # wait for bind to be ready
+  while ! nc -z ${DNS_IP} 53; do
+    sleep 1
   done
+  IP=$(ip -o route get to 8.8.8.8 | sed -n 's/.*src \([0-9.]\+\).*/\1/p')
   nsupdate -v << EOF
-server ${DNS_HOSTS}
+server ${DNS_IP}
 zone ${DNS_ZONE}
 update add ${1} 3600 A ${IP}
 send
@@ -53,13 +50,15 @@ function enable_netdelay() {
 }
 
 # Setup the log directiories in the Grid5000 shared home directory (NFS)
+# And configure rsyslog to send logs to promtail
 function setup_log() {
   HOST_LOG_DIR=${LOG_DIR}/${TALER_HOST}
   # || true is sill needed when e.g. wallets want to create the same 
   # directory at the same time
   test -d ${HOST_LOG_DIR} || mkdir ${HOST_LOG_DIR} || true 
   # Send all logs about taler to promtail on the monitoring node
-  sed -i -e "s/<MONITOR_DOMAIN_HERE>/${MONITOR_DOMAIN}/g" \
+  sed -i -e "s/<MONITOR_DOMAIN_HERE>/monitor.${DNS_ZONE}/g" \
+        -e "s/<PROMTAIL_LOG_PORT_HERE>/${PROMTAIL_LOG_PORT}/g" \
          -e "s|<LOG_DIR_HERE>|${HOST_LOG_DIR}|g" \
        /etc/rsyslog.d/taler.conf
   # Enable log rotating for all logs in the host log dir on NFS
@@ -75,14 +74,16 @@ function enable_logrotate() {
 # Wait for the database to be acessible by $DB_USER from remote
 function wait_for_db() {
   until PGPASSWORD="${DB_PASSWORD}" psql \
-        -h "${DATABASE_DOMAIN}" \
+        -h "db.${DNS_ZONE}" \
         -U "${DB_USER}" \
         -d "${DB_NAME}" \
        -p "${DB_PORT}" \
         -c '\q';
   do
     echo "Database not ready yet"
-    sleep 2
+    # sometimes dns is not working correctly - try to fix with restart
+    systemctl restart dnsmasq
+    sleep 5
   done
 }
 
@@ -96,15 +97,83 @@ function wait_for_keys() {
         --quiet;
   do
     echo "Exchange not ready yet"
+    # sometimes dns is not working correctly - try to fix with restart
+    systemctl restart dnsmasq
     sleep 5
   done
 } 
 
+# Nginx will log to our rsyslog directly an then from there it will be 
+# redirected to promtail - there was an issue doing it directly that's
+# why it is done this way
+function setup_rsyslog_for_nginx() {
+  sed -i -e '/module(load="imudp")/s/^#//g' \
+         -e '/input(type="imudp" port="514")/s/^#//g' \
+          /etc/rsyslog.conf
+}
+
+
+# Setup taler.conf for aggregator etc. with downloading the 
+# master public key from the exchange API 
+function setup_exchange_config_master_key_from_api() {
+
+  setup_exchange_config_without_master_key
+
+  wait_for_keys "${PRIMARY_EXCHANGE}:10000"
+
+  MASTER_KEY=$(
+    curl -k -f \
+       "${PRIMARY_EXCHANGE}:10000/keys" \
+       | jq -r '.master_public_key'
+  )
+
+  sed -i -e "s/<MASTER_KEY_HERE>/${MASTER_KEY}/g" \
+       /etc/taler/conf.d/exchange-business.conf
+
+}
+
+# Setup taler.conf for any exchange-* process, does not configure
+# the master key
+function setup_exchange_config_without_master_key() {
+
+  AGGREGATOR_SHARD_SIZE=$(echo "2^(30-${NUM_AGGREGATOR_PROCESSES})" | bc)
+
+  sed -i 
"s\<DB_URL_HERE>\postgresql://${DB_USER}:${DB_PASSWORD}@db.${DNS_ZONE}:${DB_PORT}/${DB_NAME}\g"
 \
+       /etc/taler/secrets/exchange-db.secret.conf
+
+  sed -i -e "s/<EXCHANGE_CIPHER_HERE>/${EXCHANGE_CIPHER}/g" \
+         -e "s/<RSA_KEY_SIZE_HERE>/${RSA_KEY_SIZE}/g" \
+        /etc/taler/conf.d/exchange-coins.conf
+
+  sed -i "s/<BANK_HOST_HERE>/bank.${DNS_ZONE}/g" \
+       /etc/taler/secrets/exchange-accountcredentials.secret.conf
+
+  sed -i -e "s/<BANK_HOST_HERE>/bank.${DNS_ZONE}/g" \
+         -e "s\<BASE_URL_HERE>\http://${NODE_NAME}.${DNS_ZONE}:10000/\g"; \
+         -e "s/<MAX_REQUESTS_HERE>/${EXCHANGE_MAX_REQUESTS:-8192}/g" \
+         -e "s/<AGGREGATOR_SHARD_SIZE_HERE>/${AGGREGATOR_SHARD_SIZE}/g" \
+       /etc/taler/conf.d/exchange-business.conf
+
+  sed -i "s/<LOOKAHEAD_SIGN_HERE>/${LOOKAHEAD_SIGN}/g" \
+      /etc/taler/conf.d/exchange-secmod.conf
+
+  if [[ ${NUM_EXCHANGES} != "1" ]]; then
+    # Use a shared NFS key directory when we have multiple exchange-httpd 
servers
+    sed -i "s|<SM_KEY_DIR_HERE>|/home/${G5K_USER}/taler|g" \
+        /etc/taler/conf.d/exchange-secmod.conf
+  else
+    # Use the default path if we have only one exchange-httpd server
+    sed -i 's/<SM_KEY_DIR_HERE>/${TALER_DATA_HOME}/g' \
+        /etc/taler/conf.d/exchange-secmod.conf
+  fi
+
+}
+
 # Restart (enable) the rsyslog to send the logs to the monitoring
 # Node and to the shared log dir (NFS)
 function restart_rsyslog() {
   # rsyslg fails to apply the taler rule if remote is not reachable
-  while ! nc -z ${MONITOR_DOMAIN} 1514;
+  while ! nc -z "monitor.${DNS_ZONE}" 1514;
   do
     echo "Waiting for promtail"
     # There are issues when dnsmasq tries to resolve before the service
@@ -137,26 +206,29 @@ function stop_numbered_services() {
   done
 }
 
-# Get all Grid5000 hosts which host wallets
-# Returns only the Grid5000 node - e.g. graoully-1
-function get_wallet_hosts() {
-  IFS=$'\n' read -r -d '' -a WALLETS < <(\
+# Get all hosts which are registered under $1
+# Returns the host name - <HOST_NAME>.${DNS_ZONE}
+# $1: a regex for a domain/host to search for
+function get_hosts() {
+  IFS=$'\n' read -r -d '' -a HOSTS < <(\
     dig -t AXFR "${DNS_ZONE}" "@${DNS_HOSTS}" \
-    | grep ${WALLET_DOMAIN} | awk '{print $1}' | cut -d '.' -f 2 \
+    | grep ${1} | awk '{print $1}' | cut -d '.' -f 1 \
   )
-  echo ${WALLETS[@]}
+  echo ${HOSTS[@]}
 }
 
-# Get all exchanges which are registered in the nginx proxy config
-# Returns the whole domain - e.g. exchange.perf.taler:80
-function get_exchanges() {
-  IFS=$'\n' read -r -d '' -a EXCHANGES < <(\
-    ssh -o StrictHostKeyChecking=no ${PROXY_DOMAIN} \
-      grep -E "^[[:space:]]*server[[:space:]]exch" 
/etc/nginx/sites-enabled/proxy \
-      | cut -d ";" -f 1 | cut -d " " -f 4 \
-  )
-  echo ${EXCHANGES[@]}
+# Create a TLS certificate for $1
+# $1: domain to create cert for
+# $2: file name x to save x.key.pem and x.cert.pem
+function create_cert() {
+  openssl req -new -x509 \
+              -newkey rsa:4096 \
+             -keyout ${2}.key.pem \
+             -out ${2}.cert.pem \
+             -sha256 -days 10 -nodes \
+             -subj "/C=CH/ST=Bern/L=Biel/O=TI/CN=${1}"
 }
+  
 
 # Display a help message and exit
 # $1: script name to display help for
diff --git a/experiment/scripts/install.sh b/experiment/scripts/install.sh
index 86d8ed6..0f2e38f 100755
--- a/experiment/scripts/install.sh
+++ b/experiment/scripts/install.sh
@@ -1,18 +1,27 @@
 #!/bin/bash
-# Rebuild the taler binaries from source
-# Requires the following optional variables to be set,
-# if not set the corresponding repo will not be rebuilt.
-# <GUNET|EXCHANGE|MERCHANT|WALLET>_COMMIT_SHA
+echo "
+Rebuild the taler binaries from source
+The following optional variables can be set:
 
+<LIBMICROHTTPD|GUNET|EXCHANGE|MERCHANT|WALLET>_COMMIT_SHA
+
+If not set the corresponding repo will not be rebuilt.
+
+Optionally, CFLAGS can be passed with:
+
+<LIBMICROHTTD|GNUNET|EXCHANGE|MERCHANT>_CFLAGS
+"
+
+set -e
 TALER_HOME=~/taler
 
 # Prepare the repository
 # $1: Git repo to clone
 # $2: Commit to checkout to
-function prepare() {
-  DIR="${TALER_HOME}/$(basename ${1%.*})"
-  test -d "${DIR}" || git clone "${1}" "${DIR}"
-  cd "${DIR}"
+function prepare_repo() {
+  SRC_DIR="${TALER_HOME}/$(basename ${1%.*})"
+  test -d "${SRC_DIR}" || git clone "${1}" "${SRC_DIR}"
+  cd "${SRC_DIR}"
   git checkout master > /dev/null && \
     (git pull > /dev/null 2>&1 || true)
   git checkout "$2" > /dev/null && \
@@ -21,22 +30,24 @@ function prepare() {
 
 # Build the binaries in the current directory with make
 # (runs ./bootstrap & ./configure)
+# $1: optional CFLAGS
 function build() {
   echo "INFO running bootstrap and configure"
   ./bootstrap
   if [ -f contrib/gana.sh ]; then
     ./contrib/gana.sh
   fi
-  ./configure --enable-logging=verbose --prefix=/usr || ./configure
-  make
+  CFLAGS="$1" ./configure --enable-logging=verbose --prefix=/usr || 
CFLAGS="$1" ./configure
+  make -j $(nproc)
 }
 
 # Install from a git repo
 # $1: Git repo to clone
 # $2: Commit to checkout to
-function install() {
-  prepare "$1" "$2" 
-  build 
+# $3: Optional CFLAGS for ./configure
+function install_repo() {
+  prepare_repo "$1" "$2" 
+  build "$3"
   echo "INFO installing"
   make install
   ldconfig
@@ -46,29 +57,37 @@ if [ ! -d "${TALER_HOME}" ]; then
   mkdir "${TALER_HOME}"
 fi
 
-# Use ! -z since -n would be false for ""
-if [ ! -z "${GNUNET_COMMIT_SHA}" ]; then
+if [[ -n ${LIBMICROHTTPD_COMMIT_SHA} ]]; then
+  echo "INFO installing libmicrohttpd"
+  install_repo "https://git.gnunet.org/libmicrohttpd.git"; \
+               "${LIBMICROHTTPD_COMMIT_SHA:-master}" \
+               "${LIBMICROHTTPD_CFLAGS}"
+fi
+
+if [[ -n ${GNUNET_COMMIT_SHA} ]]; then
   echo "INFO installing GNUnet"
-  install "https://git.gnunet.org/gnunet.git"; \
-          "${GNUNET_COMMIT_SHA:-master}"
+  install_repo "https://git.gnunet.org/gnunet.git"; \
+               "${GNUNET_COMMIT_SHA:-master}" \
+              "${GNUNET_CFLAGS}"
 fi
 
-if [ ! -z "${EXCHANGE_COMMIT_SHA}" ]; then
+if [[ -n ${EXCHANGE_COMMIT_SHA} ]]; then
   echo "INFO installing Taler Exchange"
-  install "https://git.taler.net/exchange.git"; \
-          "${EXCHANGE_COMMIT_SHA:-master}"
+  install_repo "https://git.taler.net/exchange.git"; \
+               "${EXCHANGE_COMMIT_SHA:-master}" \
+               "${EXCHANGE_CFLAGS}"
 fi
 
-if [ ! -z "${MERCHANT_COMMIT_SHA}" ]; then
+if [[ -n ${MERCHANT_COMMIT_SHA} ]]; then
   echo "INFO installing Taler Merchant"
-  install "https://git.taler.net/merchant.git"; \
-          "${MERCHANT_COMMIT_SHA:-master}"
+  install_repo "https://git.taler.net/merchant.git"; \
+               "${MERCHANT_COMMIT_SHA:-master}" \
+               "${MERCHANT_CFLAGS}"
 fi
 
-if [ ! -z "${WALLET_COMMIT_SHA}" ]; then
+if [[ -n ${WALLET_COMMIT_SHA} ]]; then
   echo "INFO installing Taler Wallet"
-  install "https://git.taler.net/wallet-core.git"; \
-          "${WALLET_COMMIT_SHA:-master}"
+  install_repo "https://git.taler.net/wallet-core.git"; \
+               "${WALLET_COMMIT_SHA:-master}" \
+               ""
 fi
-
-exit 0
diff --git a/experiment/scripts/merchant.sh b/experiment/scripts/merchant.sh
index e35ffbe..80d4c93 100755
--- a/experiment/scripts/merchant.sh
+++ b/experiment/scripts/merchant.sh
@@ -16,15 +16,15 @@ cd /tmp
 
 # Configurre the merchants files in /etc/taler
 function configure_merchant() {
-  wait_for_keys "${PROXY_DOMAIN}"
+  wait_for_keys "${EXCHANGE_GW_DOMAIN}"
   
   MASTER_KEY=$(
     curl -k -f \
-       "${PROXY_DOMAIN}/keys" \
+       "${EXCHANGE_GW_DOMAIN}/keys" \
        | jq -r '.master_public_key'
   )
   
-  sed -i -e "s\<EXCHANGE_URL_HERE>\http://${EXCHANGE_DOMAIN}/\g"; \
+  sed -i -e "s\<EXCHANGE_URL_HERE>\http://${EXCHANGE_GW_DOMAIN}/\g"; \
          -e "s/<EXCHANGE_MASTER_KEY_HERE>/${MASTER_KEY}/g" \
           /etc/taler/conf.d/merchant.conf
 }
@@ -61,13 +61,43 @@ EOF
   sudo -u taler-merchant-httpd taler-merchant-dbinit
 }
 
+# Create a new merchant instance
+# $1: Instance name
+function create_instance() {
+  curl -X POST \
+       -H "Authorization: Bearer secret-token:${TALER_MERCHANT_TOKEN}" \
+       -H "Content-Type: application/json" \
+       -d "{
+             \"payto_uris\": [ \"payto://x-taler-bank/bank.${DNS_ZONE}/${1}\" 
],
+            \"id\": \"${1}\",
+            \"name\": \"${1}\",
+            \"address\": {\"country\": \"CH\"},
+            \"auth\": {\"method\": \"token\", \"token\": 
\"secret-token:${TALER_MERCHANT_TOKEN}\"},
+            \"jurisdiction\": {\"country\": \"CH\"},
+            \"default_max_wire_fee\": \"KUDOS:1\",
+            \"default_wire_fee_amortization\": 10,
+            \"default_max_deposit_fee\": \"KUDOS:1\",
+            \"default_wire_transfer_delay\": {\"d_ms\": 1209600000},
+            \"default_pay_delay\": {\"d_ms\": 1209600000}
+          }" \
+        http://localhost/management/instances
+}
+
 # Initialize the merchant
 function init_merchant() {
+  create_cert "${NODE_NAME}.${DNS_ZONE}" "/etc/ssl/merchant"
+  setup_rsyslog_for_nginx
   restart_rsyslog
   configure_merchant
   configure_db
   init_db
-  systemctl restart taler-merchant-httpd
+  mkdir /var/lib/taler || true
+  ln -sf /etc/nginx/sites-available/merchant /etc/nginx/sites-enabled/merchant
+  systemctl restart taler-merchant-httpd \
+                    nginx
+  sleep 5
+  create_instance "default"
+  create_instance ${NODE_NAME}
 }
 
 case $1 in 
diff --git a/experiment/scripts/monitor.sh b/experiment/scripts/monitor.sh
index 292b4ff..94a21db 100755
--- a/experiment/scripts/monitor.sh
+++ b/experiment/scripts/monitor.sh
@@ -28,11 +28,12 @@ function update_datasource() {
   jq --arg url "https://$(hostname | cut -d "." -f 1,2 
-).$2.proxy.grid5000.fr" \
      --arg name "$1" \
      '.[] | select(.name == $name) | .url = $url' \
-     ds.json | tee /dev/tty | curl -X PUT -k -f -d @- \
+     ds.json | \
+  curl -X PUT -k -f -d @- \
        -H "${AUTH_HEADER}" \
        -H "Content-Type: application/json" \
        -H "Accept: application/json" \
-        "${GRAFANA_API}/datasources/${ID}"
+  "${GRAFANA_API}/datasources/${ID}"
 }
 
 # Update the external grafana instance and tell it
@@ -40,7 +41,7 @@ function update_datasource() {
 # If GRAFANA_HOST or GRAFANA_API_KEY are empty this
 # step is skipped - requires admin level api key to update data sources
 function update_grafana() {
-  if [ -z "${GRAFANA_HOST}" ] || [ -z ${GRAFANA_API_KEY} ]; then
+  if [[ -z ${GRAFANA_HOST} || -z ${GRAFANA_API_KEY} ]]; then
     return
   fi
   AUTH_HEADER="Authorization: Bearer ${GRAFANA_API_KEY}"
@@ -60,68 +61,148 @@ function update_grafana() {
 
 # Configure all exporters which run on this host
 function configure_prometheus_and_exporters() {
-  sed -i "s/<MERCHANT_HOST_HERE>/${MERCHANT_DOMAIN}/g" \
-       /etc/monitor/prometheus.yaml
   
-  sed -i -e 
"s\<EXCHANGE_DB_URL_HERE>\postgresql://postgres@${DATABASE_DOMAIN}:5432\g" \
-         -e 
"s\<MERCHANT_DB_URL_HERE>\postgresql://postgres@${MERCHANT_DOMAIN}:5432\g" \
+  sed -i -e 
"s\<EXCHANGE_DB_URL_HERE>\postgresql://postgres@db.${DNS_ZONE}:5432?sslmode=disable\g"
 \
              /etc/default/prometheus-postgres-exporter
   
-  sed -i "s\<PROXY_URL_HERE>\http://${PROXY_DOMAIN}/stub_status\g"; \
-          /etc/default/prometheus-nginx-exporter
+  CFG=""
+  for MERCH in $(get_hosts "merchant"); do
+    CFG="${CFG},postgresql://postgres@${MERCH}.${DNS_ZONE}:5432"
+    sed -i "s/<MERCHANT_HOST_HERE>/${MERCH}.${DNS_ZONE}/g" \
+           /etc/monitor/prometheus.yaml
+  done
+  sed -i -e "s|<MERCHANT_DB_URL_HERE>|${CFG}|g" \
+            /etc/default/prometheus-postgres-exporter
+
+  CFG=""
+  for SHARD in $(get_hosts "shard"); do
+    CFG="${CFG},postgresql://postgres@${SHARD}.${DNS_ZONE}:5432"
+  done
+  sed -i "s|<SHARD_DB_URLS_HERE>|${CFG}|g" \
+          /etc/default/prometheus-postgres-exporter
+}
+
+# Create the directory which will be used to store recovery data
+# for the experiment (prometheus + loki)
+function setup_data_dir() {
+
+  EXPERIMENT_DATA_DIR="/home/${G5K_USER}/exp-data"
+  if [ ! -d /home/${G5K_USER} ]; then 
+    EXPERIMENT_DATA_DIR=/tmp/exp-data 
+  fi
+
+  if [[ "${REMOVE_PREVIOUS_EXPERIMENT_DATA}" == "true" ]]; then
+    rm -rf ${EXPERIMENT_DATA_DIR} || true
+  fi
+
+  mkdir ${EXPERIMENT_DATA_DIR} || true
+
+  echo "EXPERIMENT_DATA_DIR=${EXPERIMENT_DATA_DIR}" >> ~/.env
+  echo "EXPERIMENT_DATA_DIR=${EXPERIMENT_DATA_DIR}" >> /etc/environment
+
+  sed -i "s|<EXPERIMENT_DATA_PATH_HERE>|${EXPERIMENT_DATA_DIR}|g" \
+         /etc/monitor/loki.yaml
 }
 
 # Add wallet nodes to be monitored
 # Requires no argument since wallet nodes are retrieved from the DNS
 function add_wallet_nodes_to_prometheus() {
-  for WALLET in $(get_wallet_hosts); do
-    if ! grep -q "${WALLET_DOMAIN//\*/${WALLET}}:9100" 
/etc/monitor/prometheus.yaml; 
+  for WALLET in $(get_hosts "wallet"); do
+    if ! grep -q "${WALLET}.${DNS_ZONE}:9100" /etc/monitor/prometheus.yaml; 
     then
-      sed -i "/<WALLETS_HERE>/a \ \ \ \ \ \ - 
'${WALLET_DOMAIN//\*/${WALLET}}:9100'" \
+      sed -i "/<WALLET_NODES_HERE>/a \ \ \ \ \ \ - 
'${WALLET}.${DNS_ZONE}:9100'" \
               /etc/monitor/prometheus.yaml
     fi
   done
 }
 
-# Add new exchanges to be monitored
-# Requires no argument since exchanges are retrieved from the proxy
-function add_exchanges_to_prometheus() {
-  if ! grep -q "${EXCHANGE_DOMAIN}:80" /etc/monitor/prometheus.yaml; then
-    # unfortunately we do not have access to the other hosts when running from 
ESpec
-    # But when initializing there are no hosts listed in the yaml yet, thus
-    # it's sufficient to search for the exchange from the target
-    sed -i "/<EXCHANGES_HERE>/a  \ \ \ \ \ \ - '${EXCHANGE_DOMAIN}:80'" \
-            /etc/monitor/prometheus.yaml
-    for i in $(seq $((${NUM_EXCHANGE_PROCESSES:-10}-1)) ); do
-      let "i+=10000"
-      sed -i "/<EXCHANGES_HERE>/a  \ \ \ \ \ \ - '${EXCHANGE_DOMAIN}:${i}'" \
+# Add shard servers to be monitored
+# Requires no argument, since servers are retrieved from dns
+function add_proxy_nodes_to_prometheus() {
+  for HOST in $(get_hosts "eproxy"); do
+    if ! grep -q "${HOST}.${DNS_ZONE}:9100" /etc/monitor/prometheus.yaml;
+    then
+      sed -i "/<PROXY_NODES_HERE>/a \ \ \ \ \ \ - '${HOST}.${DNS_ZONE}:9100'" \
               /etc/monitor/prometheus.yaml
-    done
-    return
-  fi
-  for EXCH in $(get_exchanges); do 
+    fi
+  done
+}
+
+# Add shard servers to be monitored
+# Requires no argument, since servers are retrieved from dns
+function add_shard_nodes_to_prometheus() {
+  for SHARD in $(get_hosts "shard"); do
+    if ! grep -q "${SHARD}" /etc/monitor/prometheus.yaml;
+    then
+      sed -i "/<SHARD_NODES_HERE>/a \ \ \ \ \ \ - '${SHARD}.${DNS_ZONE}:9100'" 
\
+              /etc/monitor/prometheus.yaml
+    fi
+  done
+}
+
+# Add shard servers to be monitored
+# Requires no argument, since servers are retrieved from dns
+function add_merchant_nodes_to_prometheus() {
+  for SHARD in $(get_hosts "merchant"); do
+    if ! grep -q "${MERCH}" /etc/monitor/prometheus.yaml;
+    then
+      sed -i "/<MERCHANT_NODES_HERE>/a \ \ \ \ \ \ - 
'${MERCH}.${DNS_ZONE}:9100'" \
+              /etc/monitor/prometheus.yaml
+    fi
+  done
+}
+
+# Add exchange servers to be monitored
+# Requires no argument, since servers are retrieved from dns
+function add_exchange_nodes_to_prometheus() {
+  for EXCH in $(get_hosts "exchange-"); do
     if ! grep -q "${EXCH}" /etc/monitor/prometheus.yaml;
     then
-      sed -i "/<EXCHANGES_HERE>/a  \ \ \ \ \ \ - '${EXCH}'" \
+      sed -i "/<EXCHANGE_NODES_HERE>/a \ \ \ \ \ \ - 
'${EXCH}.${DNS_ZONE}:9100'" \
               /etc/monitor/prometheus.yaml
     fi
   done
 }
 
+# Add new exchanges to be monitored
+# $1: N - already running exchange processes
+# $2: N - processes to add
+function add_exchanges_to_prometheus() {
+
+  let "START=$1+10000"
+  let "END=$START+$2-1"
+
+  HOSTS=$(get_hosts "exchange-")
+
+  for PORT in $(seq $START $END); do
+    for HOST in $HOSTS; do 
+      if ! grep -q "${HOST}.${DNS_ZONE}:${PORT}" /etc/monitor/prometheus.yaml;
+      then
+        sed -i "/<EXCHANGES_HERE>/a  \ \ \ \ \ \ - 
'${HOST}.${DNS_ZONE}:${PORT}'" \
+                /etc/monitor/prometheus.yaml
+      fi
+    done
+  done
+}
+
 # Remove N exchanges which have been stopped
 # from the config so they will not be scraped anymore
-# $1: N - number of exchanges to remove
+# $1: N - number of exchanges currently running
+# $2: N - number of exchanges to remove
 function remove_exchanges_from_prometheus() {
-  TO_STOP=$(\
-    get_exchanges | \
-    tr " " "\n" | \
-    sort -t ":" -k 2 -n -r | \
-    head -n ${1}\
-  ) 
-
-  for EXCH in ${TO_STOP}; do
-    sed -i "/${EXCH}/d" \
-            /etc/monitor/prometheus.yaml
+
+  # We know we started from port 10000
+  # get the highest port numbers and start removing from there
+  let "START=$1+10000"
+  let "END=$START-$2"
+
+  HOSTS=$(get_hosts "exchange-")
+
+  for PORT in $(seq $END $START); do
+    for HOST in $HOSTS; do
+      sed -i "/${HOST}.${DNS_ZONE}:${PORT}/d" \
+              /etc/monitor/prometheus.yaml
+    done
   done
 }
 
@@ -130,30 +211,43 @@ function remove_exchanges_from_prometheus() {
 function init_monitor() {
 
   update_grafana
+
+  setup_data_dir
   
   systemctl restart loki \
-                   promtail
+                    promtail
   
-  configure_prometheus_and_exporters
   
-  wait_for_keys "${PROXY_DOMAIN}"
+  wait_for_keys "${EXCHANGE_GW_DOMAIN}"
   
   if [[ "${ENABLE_EXPORTERS}" == "true" ]]; then
     if ! grep -q "job_name: 'nodes'" /etc/monitor/prometheus.yaml; then 
       cat /etc/monitor/node-exporters.yaml.tpl | \
            envsubst >> /etc/monitor/prometheus.yaml
       add_wallet_nodes_to_prometheus
+      add_shard_nodes_to_prometheus
+      add_merchant_nodes_to_prometheus
+      add_proxy_nodes_to_prometheus
+      add_exchange_nodes_to_prometheus
     fi
   fi
 
-  if ! grep -q "job_name: 'taler'" /etc/monitor/prometheus.yaml; then
-    cat /etc/monitor/exchange-exporters.yaml.tpl >> 
/etc/monitor/prometheus.yaml
-    add_exchanges_to_prometheus
-  fi
+  # Add nginx exporters
+  for HOST in $(get_hosts "eproxy"); do
+    if ! grep -q "${HOST}.${DNS_ZONE}:9113" /etc/monitor/prometheus.yaml;
+    then
+      sed -i "/<NGINX_EXPORTERS_HERE>/a \ \ \ \ \ \ - 
'${HOST}.${DNS_ZONE}:9113'" \
+              /etc/monitor/prometheus.yaml
+    fi
+  done
+
+  add_exchanges_to_prometheus "0" ${NUM_EXCHANGE_PROCESSES}
+
+  configure_prometheus_and_exporters
 
-  systemctl restart prometheus-nginx-exporter \
-                    prometheus-postgres-exporter \
-                    prometheus
+  systemctl restart prometheus-postgres-exporter \
+                    prometheus \
+                   taler-prometheus-backup.timer
 
   exit 0
 }
@@ -164,10 +258,10 @@ case $1 in
     ;;
   start)
     add_wallet_nodes_to_prometheus
-    add_exchanges_to_prometheus
+    add_exchanges_to_prometheus $2 $3
     ;;
   stop-exchanges)
-    remove_exchanges_from_prometheus $2
+    remove_exchanges_from_prometheus $2 $3
     ;;
   *)
     taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
diff --git a/experiment/scripts/ping.sh b/experiment/scripts/ping.sh
index a766a7d..eae0d57 100755
--- a/experiment/scripts/ping.sh
+++ b/experiment/scripts/ping.sh
@@ -2,6 +2,8 @@
 INFO_MSG="
 Measure and log round-trip-times between experiment nodes
 Logs to promtail directly
+
+Used by taler-netdelay.service
 "
 OPT_MSG="
 <DEST>:
@@ -10,8 +12,9 @@ OPT_MSG="
 
 source ~/scripts/helpers.sh
 
-if [ -z "${1}" ]; then
+if [[ -z $1 ]]; then
   taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
+  exit 2
 fi
 
 RTT=$(\
@@ -24,7 +27,7 @@ if [[ "${RTT}" == "time="* ]];
 then
   logger -s --tcp \
         --port 1514 \
-        --server ${MONITOR_DOMAIN} \
+        --server "monitor.${DNS_ZONE}" \
          --tag taler-network \
         "src=${TALER_HOST} dst=${1} ${RTT}" \
         || true # Ignore errors (mostly because NXDOMAIN)
diff --git a/experiment/scripts/postgres-cluster/README.md 
b/experiment/scripts/postgres-cluster/README.md
new file mode 100644
index 0000000..fcd2e0d
--- /dev/null
+++ b/experiment/scripts/postgres-cluster/README.md
@@ -0,0 +1,24 @@
+## Postgres Cluster Experiment
+
+**UNMAINTAINED** Used for some experiments hosting multiple instances of 
postgres on the same node. 
+                 They may still work but are not actively maintained.
+
+Run in the following order after espec was run (example for two instances):
+
+**NOTE** Requires as many exchange and proxy nodes as postgres instances are 
created
+         Example for 2 postgres instances: `DB`, `Exchange-1`, `Exchange-2`, 
`Proxy-1`, `Proxy-2`
+
+1. Modify scripts/benchmark.sh to be 'randomly using only one exchange for 
each wallet`. e.g. add this line
+   before taler-wallet-cli is called:
+   ```bash
+   EXCHANGE_GW_DOMAIN="exchange-$(shuf -i 1-3 -n 1).${DNS_ZONE}"
+   ```
+2. Run Espec
+3. Create a second postgres instance on the DB node: `./db-cluser.sh 1`
+4. Initialize one Exchange node as a primary exchange for this db 
(`Exchange-2`): `./exch-cluster 1`
+5. Configure all proxies to be responsible for one exchange only:
+   `Proxy-1`: `./proxy-cluster 2` - deletes all exchange-2 entries from the 
nginx config
+   `Proxy-2`: `./proxy-cluster 1` - ----------  exchange-1 
-----------------------------
+6. Start wallets  
+
+This can be done with as many instances as required.
diff --git a/experiment/scripts/postgres-cluster/db-cluster.sh 
b/experiment/scripts/postgres-cluster/db-cluster.sh
new file mode 100755
index 0000000..d1c655f
--- /dev/null
+++ b/experiment/scripts/postgres-cluster/db-cluster.sh
@@ -0,0 +1,67 @@
+#!/bin/bash
+# Create independent postgres instances (cluster)
+
+if [[ -z ${1} ]]; then
+  echo "Usage: ./db-cluster.sh <N>"
+  echo ""
+  echo "Creates an independent Postgres instance main<N> running on port 
5432+N"
+  echo "Call after espec was run - only works with partitioning"
+  exit 2
+fi
+
+PORT=$((5432 + ${1}))
+
+pg_createcluster 13 main${1} -p $PORT
+
+mv /var/lib/postgresql/13/main${1} /tmp/postgresql/13/
+
+if [ -d /mnt/disk ]; then
+  mv /tmp/postgresql/13/main${1}/pg_wal /mnt/disk/pg_wal${1}
+  ln -sf /mnt/disk/pg_wal${1} /tmp/postgresql/13/main${1}/pg_wal
+  chown postgres:postgres /tmp/postgresql/13/main${1}/pg_wal
+fi
+
+cp /etc/postgresql/13/main/exchange.conf /etc/postgresql/13/main/pg_hba.conf 
/etc/postgresql/13/main${1}
+sed -i "s|/tmp/postgresql/13/main|/tmp/postgresql/13/main${1}|g" 
/etc/postgresql/13/main${1}/exchange.conf
+echo "include = 'exchange.conf'" >> /etc/postgresql/13/main${1}/postgresql.conf
+
+systemctl restart postgresql@13-main${1}.service
+
+echo "
+[exchangedb-postgres]
+CONFIG=postgres://:${PORT}/${DB_NAME}
+" > /etc/taler/secrets/exchange-db.secret.conf
+
+su postgres << EOF
+psql postgres -p ${PORT} -tAc "DROP DATABASE IF EXISTS \"${DB_NAME}\";"
+psql postgres -p ${PORT} -tAc "SELECT 1 FROM pg_roles WHERE 
rolname='taler-exchange-httpd'" | \
+  grep -q 1 || \
+  createuser -p ${PORT} taler-exchange-httpd
+psql -p ${PORT} -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | \
+  grep -q 1 || \
+  createdb -p ${PORT} -O taler-exchange-httpd "${DB_NAME}"
+psql -p ${PORT} -tAc "CREATE EXTENSION IF NOT EXISTS pg_stat_statements"
+EOF
+
+su postgres << EOF
+psql postgres -p ${PORT} -tAc "SELECT 1 FROM pg_roles WHERE 
rolname='${DB_USER}'" | \
+  grep -q 1 || \
+  psql -p ${PORT} << END
+    CREATE USER "${DB_USER}" with encrypted password '${DB_PASSWORD}';
+END
+EOF
+
+sudo -u taler-exchange-httpd taler-exchange-dbinit -r || true
+sudo -u taler-exchange-httpd taler-exchange-dbinit -s || true
+sudo -u taler-exchange-httpd taler-exchange-dbinit -P ${NUM_PARTITIONS}
+
+su taler-exchange-httpd -s /bin/bash << EOF
+psql -p ${PORT} -d "${DB_NAME}"
+GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public TO "${DB_USER}";
+GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO "${DB_USER}";
+EOF
+
+ssh -o StrictHostKeyChecking=no monitor.${DNS_ZONE} \
+       "sed -i \"s/DATA_SOURCE_NAME.*'$//\" 
/etc/default/prometheus-postgres-exporter && 
+        sed -i 
\"s|DATA_SOURCE_NAME.*|&,postgresql://postgres@db.${DNS_ZONE}:${PORT}'|\" 
+       /etc/default/prometheus-postgres-exporter && systemctl restart 
prometheus-postgres-exporter" 
diff --git a/experiment/scripts/postgres-cluster/exch-cluster.sh 
b/experiment/scripts/postgres-cluster/exch-cluster.sh
new file mode 100755
index 0000000..9500dc4
--- /dev/null
+++ b/experiment/scripts/postgres-cluster/exch-cluster.sh
@@ -0,0 +1,67 @@
+#!/bin/bash
+# Run an exchange against an independent db created with db-cluster.sh
+
+if [[ -z ${1} ]]; then
+  echo "Usage: ./exch-cluster.sh <N>"
+  echo ""
+  echo "Creates an independent Exchange instance running against a db on port 
5432+N"
+  echo "Call after espec was run - only works with partitioning"
+  exit 2
+fi
+
+source /root/scripts/helpers.sh
+
+DB_PORT=$((5432 + ${1}))
+
+systemctl stop taler-exchange-*
+
+sed -i -e "s/exchange-secmod-rsa/exchange-secmod-rsa-${1}/g" \
+       -e "s/exchange-secmod-cs/exchange-secmod-cs-${1}/g" \
+       -e "s/exchange-secmod-eddsa/exchange-secmod-eddsa-${1}/g" \
+       /etc/taler/conf.d/exchange-secmod.conf
+
+echo "
+[exchangedb-postgres]
+CONFIG=postgresql://${DB_USER}:${DB_PASSWORD}@db.${DNS_ZONE}:${DB_PORT}/${DB_NAME}
+" > /etc/taler/secrets/exchange-db.secret.conf
+
+rm -rf /var/lib/taler/exchange-offline/*
+
+MASTER_KEY=$(sudo -u taler-exchange-offline taler-exchange-offline setup)
+
+sed -i -e "s/MASTER_PUBLIC_KEY.*/MASTER_PUBLIC_KEY = ${MASTER_KEY}/g" \
+       /etc/taler/conf.d/exchange-business.conf
+
+# Setup the shared key directory when we use a secondary node
+if [[ ${NUM_EXCHANGES} != "1" ]]; then
+  rm -rf /home/${G5K_USER}/taler/exchange-secmod-{cs,rsa,eddsa}-${1} || true
+  mkdir -p /home/${G5K_USER}/taler/exchange-secmod-{cs,rsa,eddsa}-${1}
+fi
+
+systemctl restart taler-exchange-httpd@10000.service
+
+wait_for_keys "${NODE_NAME}.${DNS_ZONE}:10000/management"
+
+sleep 5
+
+taler-exchange-offline download > sig-req.json
+taler-exchange-offline sign < sig-req.json > sig-res.json
+taler-exchange-offline enable-account 
"payto://x-taler-bank/bank.${DNS_ZONE}/Exchange" > acct-res.json
+taler-exchange-offline wire-fee $(date +%Y) x-taler-bank KUDOS:0 KUDOS:0 
KUDOS:0 > fee-res.json
+taler-exchange-offline upload < sig-res.json
+taler-exchange-offline upload < acct-res.json
+taler-exchange-offline upload < fee-res.json
+
+source ~/scripts/exchange-wirewatch.sh init-start
+source ~/scripts/exchange-aggregator.sh init-start
+source ~/scripts/exchange-closer.sh init-start
+source ~/scripts/exchange-transfer.sh init-start
+
+let "START=1+10000"
+let "END=$START+$((${NUM_EXCHANGE_PROCESSES}-1))-1"
+
+for PORT in $(seq $START $END); do
+  systemctl restart taler-exchange-httpd@"${PORT}".socket \
+                    taler-exchange-httpd@"${PORT}".service
+  sleep 0.05
+done
diff --git a/experiment/scripts/postgres-cluster/proxy-cluster.sh 
b/experiment/scripts/postgres-cluster/proxy-cluster.sh
new file mode 100755
index 0000000..a36adf5
--- /dev/null
+++ b/experiment/scripts/postgres-cluster/proxy-cluster.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+# Setup an exchange proxy to serve only a single exchange
+
+if [[ -z ${1} ]]; then
+  echo "Usage: ./proxy-cluster.sh <N1...Nn>"
+  echo ""
+  echo "Setup an exchange proxy to serve only for the specified exchange 
instance"
+  echo "(deletes the ones matching the arguments N1-Nn)"
+  echo "Call after espec was run"
+  echo "Deletes all exchange-N1...Nn entries in 
/etc/nginx/sites-enabled/exchange"
+  exit 2
+fi
+
+for i in $@; do
+  sed -i "/exchange-${i}.${DNS_ZONE}/d" /etc/nginx/sites-enabled/exchange
+done
+
+systemctl reload nginx
diff --git a/experiment/scripts/prometheus-backup.sh 
b/experiment/scripts/prometheus-backup.sh
new file mode 100755
index 0000000..08cd9aa
--- /dev/null
+++ b/experiment/scripts/prometheus-backup.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+# Script which creates a snapshot of a running Prometheus instance
+
+# This will copy the snapshot to the configured LOG_DIR
+# (setup.sh) hopefully persistent on the Grid5000 NFS
+
+# Usage: ./data-backup.sh
+# Used by taler-databackup.service
+
+set -eu
+
+if [[ $(ps -aux | grep "[data]-backup.sh" | wc -l) -eq 1 ]]; then
+  echo "Previous backup still running, skipping"
+  exit 0
+fi
+
+PROMETHEUS_DATA_DIR=/var/lib/prometheus/metrics2/snapshots
+
+SNAPSHOT_COPY_PATH=${EXPERIMENT_DATA_DIR}/prometheus-tmp
+SNAPSHOT_PATH=${EXPERIMENT_DATA_DIR}/prometheus
+
+END_TIME=$(date +%s)
+
+SNAPSHOT="${PROMETHEUS_DATA_DIR}/$(\
+  curl \
+    -X POST \
+    http://localhost:8080/api/v1/admin/tsdb/snapshot \
+  | jq -r '.data.name'
+)"
+
+# copy first because its nfs, when copied remove the previous one
+cp -r "${SNAPSHOT}" "${SNAPSHOT_COPY_PATH}"
+rm -rf "${SNAPSHOT_PATH}"
+mv "${SNAPSHOT_COPY_PATH}" "${SNAPSHOT_PATH}"
+
+# export timestamps for the recover script in g5k-repo/additional
+echo "
+EXPERIMENT_START=${START_TIME}
+SNAPSHOT_TIME=${END_TIME}
+" > "${EXPERIMENT_DATA_DIR}/times.env"
+
diff --git a/experiment/scripts/proxy.sh b/experiment/scripts/proxy.sh
deleted file mode 100755
index 0c13038..0000000
--- a/experiment/scripts/proxy.sh
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/bin/bash
-INFO_MSG="
-Confiure and start the nginx proxy server
-"
-OPT_MSG="
-init:
-  Initialize and start the proxy with NUM_EXCHANGE_PROCESSES upstreams
-
-start NUM:
-  Add another NUM exchanges to the list of upstreams
-
-stop NUM:
-  Remove NUM exchanges from the list of upstreams
-"
-
-set -eux
-source ~/scripts/helpers.sh
-
-# Add N exchanges to the upstream servers in the proxy configuration
-# $1: Number of exchanges to add
-function add_exchanges() {
-  # Determine the number of exchanges which are already added
-  # and calculate new ports based on that info
-  ADDED=$(\
-    grep -r "  server ${EXCHANGE_DOMAIN}:" /etc/nginx/sites-enabled/proxy | \
-    wc -l 
-  )
-  
-  for i in $(seq ${1}); do
-    if [[ "${ADDED}" -eq "0" ]] && [[ "${i}" -eq "1" ]]; then
-      # The first exchange to add is the default one from the target on port 80
-      i="80"
-    else 
-      # seq starts at 1 so remove it again
-      # (0 N cannot be used since seq 0 0 would yield 0 while seq N=0 yields 
nothing)
-      let "i+=${ADDED}-1"
-      let "i+=10000"
-    fi
-    sed -i "/<SERVERS_HERE>/a \ \ server ${EXCHANGE_DOMAIN}:${i};" \
-            /etc/nginx/sites-enabled/proxy
-  done
-}
-  
-# Setup the node and proxy configuration
-function setup_config() {
-  add_exchanges ${NUM_EXCHANGE_PROCESSES}
-  
-  # Nginx will log to our rsyslog directly an then from there it will be 
-  # redirected to promtail - there was an issue doing it directly that's
-  # why it is done this way
-  sed -i -e '/module(load="imudp")/s/^#//g' \
-         -e '/input(type="imudp" port="514")/s/^#//g' \
-          /etc/rsyslog.conf
-  
-  # Allow enough files to be opened by nginx (www-data)
-  echo "
-  fs.file-max=50000
-  " >> /etc/sysctl.conf
-  
-  echo "
-  www-data soft nofile unlimited
-  www-data hard nofile unlimited
-  " >> /etc/security/limits.conf
-  
-  sysctl -p
-}
-
-# Initialize and start the proxy
-function init_proxy() {
-  setup_config
-
-  restart_rsyslog
-  
-  # Nginx does not start until the destination server is reachable - wait here
-  # nginx: [emerg] host not found in upstream "exch.perf.taler" ...
-  wait_for_keys "${EXCHANGE_DOMAIN}"
-  
-  systemctl restart nginx
-}
-
-# Remove N exchanges from the upstream list
-# $1: N - number of exchanges to remove
-function remove_exchanges() {
-  TO_STOP=$(\
-    get_exchanges | \
-    tr " " "\n" | \
-    sort -t ":" -k 2 -n -r | \
-    head -n ${1}\
-  ) 
-
-  for EXCH in ${TO_STOP}; do
-    sed -i "/${EXCH};/d" \
-            /etc/nginx/sites-enabled/proxy
-  done
-}
-
-case $1 in
-  init)
-    init_proxy
-    ;;
-  start)
-    add_exchanges $2
-    ;;
-  stop)
-    remove_exchanges $2
-    ;;
-  *)
-    taler_perf_help $0 "$INFO_MSG" "$OPT_MSG"
-    ;;
-esac
-
-systemctl reload nginx
diff --git a/experiment/scripts/run.sh b/experiment/scripts/run.sh
index 69a451e..8f1dd47 100644
--- a/experiment/scripts/run.sh
+++ b/experiment/scripts/run.sh
@@ -1,7 +1,8 @@
 #!/bin/bash
 # Run the experiment
-# Will determine the role of the node
-# based on its hostname and start role specific scripts
+# Will determine the role of the node based on its hostname,
+# set the DNS A record and start role specific scripts
+
 set -euax
 source ~/scripts/helpers.sh
 
@@ -10,61 +11,87 @@ then
   systemctl restart prometheus-node-exporter
 fi
 
-case "${HOSTNAME}" in 
-  ${BANK_HOSTS}) 
-    set_host bank
-    set_ddn ${BANK_DOMAIN}
+# Set the experiment domain name
+set_ddn ${NODE_NAME}.${DNS_ZONE}
+set_host ${NODE_NAME}
+
+# Some applications log to different promtail ports
+# so that we have less log lines to filter when
+# calculating prometheus metrics or other things with promtail
+# (default for all is 1514) - see 'configs/etc/monitor/promtail.yaml'
+PROMTAIL_LOG_PORT=1514
+
+if [[ "${HOSTNAME}" =~ ${BANK_HOSTS} ]]; then 
     setup_log
     enable_logrotate
     exec ~/scripts/bank.sh init
-    ;;
-  ${DB_HOSTS}) 
-    set_host database
-    set_ddn ${DATABASE_DOMAIN}
+elif [[ "${HOSTNAME}" =~ ${DB_HOSTS} ]]; then 
+    PROMTAIL_LOG_PORT=1515
+    setup_log
+    enable_logrotate
+    if grep -q "Red Hat" /proc/version; then 
+      # Postgres is run differently in centos
+      exec ~/scripts/database-centos.sh init
+    else
+      exec ~/scripts/database.sh init
+    fi
+elif [[ "${HOSTNAME}" =~ ${SHARD_HOSTS} ]]; then 
+    setup_log
+    enable_logrotate
+    exec ~/scripts/shard.sh init
+elif [[ "${HOSTNAME}" =~ ${EXCHANGE_HOSTS} ]]; then 
     setup_log
     enable_logrotate
-    exec ~/scripts/database.sh init
-    ;;
-  ${EXCHANGE_HOSTS}) 
-    set_host exchange
-    set_ddn ${EXCHANGE_DOMAIN}
+    enable_netdelay db.${DNS_ZONE}
+    if [[ "${PRIMARY_EXCHANGE}" =~ "${NODE_NAME}" ]]; then
+      exec ~/scripts/exchange.sh init-primary
+    else
+      exec ~/scripts/exchange.sh init-secondary
+    fi
+elif [[ "${HOSTNAME}" =~ ${AGGREGATOR_HOSTS} ]]; then 
     setup_log
     enable_logrotate
-    enable_netdelay ${DATABASE_DOMAIN}
-    exec ~/scripts/exchange.sh init
-    ;;
-  ${MERCHANT_HOSTS})
-    set_host merchant
-    set_ddn ${MERCHANT_DOMAIN}
+    enable_netdelay db.${DNS_ZONE}
+    exec ~/scripts/exchange-aggregator.sh init
+elif [[ "${HOSTNAME}" =~ ${CLOSER_HOSTS} ]]; then 
+    setup_log
+    enable_logrotate
+    enable_netdelay db.${DNS_ZONE}
+    exec ~/scripts/exchange-closer.sh init
+elif [[ "${HOSTNAME}" =~ ${TRANSFER_HOSTS} ]]; then 
+    setup_log
+    enable_logrotate
+    enable_netdelay db.${DNS_ZONE}
+    exec ~/scripts/exchange-transfer.sh init
+elif [[ "${HOSTNAME}" =~ ${WIREWATCH_HOSTS} ]]; then 
+    setup_log
+    enable_logrotate
+    enable_netdelay db.${DNS_ZONE}
+    exec ~/scripts/exchange-wirewatch.sh init
+elif [[ "${HOSTNAME}" =~ ${MERCHANT_HOSTS} ]]; then 
     setup_log
     enable_logrotate
     exec ~/scripts/merchant.sh init
-    ;;
-  ${MONITOR_HOSTS})
-    set_host monitor
-    set_ddn ${MONITOR_DOMAIN}
+elif [[ "${HOSTNAME}" =~ ${MONITOR_HOSTS} ]]; then 
     exec ~/scripts/monitor.sh init
-    ;;
-  ${PROXY_HOSTS})
-    set_host proxy
-    set_ddn ${PROXY_DOMAIN}
-    enable_netdelay ${EXCHANGE_DOMAIN}
+elif [[ "${HOSTNAME}" =~ ${EPROXY_HOSTS} ]]; then 
+    PROMTAIL_LOG_PORT=1516
+    # Single domain for DNS load balancing
+    set_ddn ${EXCHANGE_GW_DOMAIN}
+    # We need a second domain for monitoring to
+    # be able to get information about all proxies
+    enable_netdelay ${PRIMARY_EXCHANGE}
     setup_log
     enable_logrotate
-    exec ~/scripts/proxy.sh init
-    ;;
-  ${DNS_HOSTS})
-    set_host dns
-    setup_log
-    ;;
-  ${WALLET_HOSTS}) 
-    set_host wallet
-    HOST=$(hostname | cut -d '.' -f1)
-    set_ddn "${WALLET_DOMAIN//\*/${HOST}}"
-    enable_netdelay ${PROXY_DOMAIN}
+    exec ~/scripts/exchange-proxy.sh init
+elif [[ "${HOSTNAME}" =~ ${DNS_HOSTS} ]]; then 
+    exec ~/scripts/dns.sh
+else
+    # Be a wallet if no other node matched
+    PROMTAIL_LOG_PORT=1517
+    enable_netdelay ${EXCHANGE_GW_DOMAIN}
     setup_log
     exec ~/scripts/wallet.sh init
-    ;;
-esac
+fi
 
 exit 0
diff --git a/experiment/scripts/setup.sh b/experiment/scripts/setup.sh
index 6d5b544..6ceeeb4 100644
--- a/experiment/scripts/setup.sh
+++ b/experiment/scripts/setup.sh
@@ -1,5 +1,19 @@
 #!/bin/bash
 # Setup nodes for the experiment
+# This script does the following:
+
+# 0. Stop previous experiments 
+# 1. Parse the experiment-info.json from jFed to get
+#    - The user which runs the experiment (used for NFS) - env: G5K_USER
+#    - Which Grid5k node is which node in jFed (used to run the correct script 
later)
+#      This also sets variables like PRIMARY_EXCHANGE, NUM_<NODES>, NODE_NAME 
(jFed) and
+#      G5K_HOST (e.g. dahu-3)
+# 2. Setup the directory where application logs will be stored 
(/home/G5K_USER/exp-logs) 
+#    or /tmp/exp-logs
+# 3. Export all environment to ~/.env and /etc/environment
+# 4. Update the g5k repo from taler.net and copy the configurations 
(g5k-repo/configs) to /
+# 5. Configure the DNS and start the DNS server on the DNS node
+
 
 # Set the current user
 echo "G5K_USER=$(cat ~/experiment-info.json | jq -r '.user.name')" >> ~/.env
@@ -15,7 +29,7 @@ function parse_experiment_nodes() {
   if [ ! -f ~/nodes.json ]; then
     cat ~/experiment-info.json | \
          jq '.nodes | to_entries | .[] | {node: .key, host: 
.value.ssh_login[1].hostname }' | \
-         jq -s \
+         jq -s '.' \
          > ~/nodes.json
   fi
   
@@ -28,30 +42,52 @@ function parse_experiment_nodes() {
   # EXCHANGE_HOSTS=node-1.site-1.grid5000.fr 
   # This will be used in run.sh to determine which role script to execute
   for NODE in ${NODES}; do
-   echo "${NODE^^}_HOSTS=\"$(\
-     cat ~/nodes.json | \
-     jq --arg NODE ${NODE}.* -r 'map(select(.node | test($NODE)) | .host) | 
join("|")'
-   )\"" \
-   >> ~/.env
+    NODES_STR=$(\
+      jq --arg NODE ${NODE}.* -r \
+        'map(select(.node | test($NODE)) | .host) |
+         join("|") |
+         select(. != "") // "none"' \
+      ~/nodes.json
+    )
+
+    echo "${NODE^^}_HOSTS=\"${NODES_STR}\"" >> ~/.env
+    echo "NUM_${NODE^^}S=$(echo ${NODES_STR} | awk -F '|' '{print NF}')" >> 
~/.env
   done
-  
+
+  # Export NODE_NAME, which can be used to set log directories for example
+  jq -r '.[] | .node, .host' ~/nodes.json | \
+  while read -r NODE; read -r HOST; do 
+    if [[ "${HOST}" =~ "${HOSTNAME}" ]]; then
+      echo "NODE_NAME=\"${NODE,,}\"" >> ~/.env
+      if grep -q "Red Hat" /proc/version; then 
+        # Hostname in centos is set to e.g. dahu-8 only
+        # override with the fqdn from the grid
+         echo HOSTNAME="${HOST}" >> ~/.env
+      fi
+    fi
+  done
+
+  echo "PRIMARY_EXCHANGE=${PRIMARY_EXCH,,}.${DNS_ZONE}" >> ~/.env
+
   echo "WALLET_HOSTS=*" >> ~/.env
+
+  echo "G5K_HOST=\"$(hostname | cut -d '.' -f1)\"" >> ~/.env
 }
 
 # Determine and create the base log directory
 # If NFS exists, it will be created in the users home dir on the NFS
 function setup_log_dir() {
-  LOG_DIR=/home/${G5K_USER}/taler-logs
+  LOG_DIR=/home/${G5K_USER}/exp-logs
   
   if [ -d ${LOG_DIR} ]; then
     # If multiple nodes want to delete the same dir we run into errors
     # Let it fail safely with || true
     rm -rf ${LOG_DIR}/* || true
-  elif [ -d /home/${G5K_USER} ]; then 
-    mkdir ${LOG_DIR} | true
-  else
-    LOG_DIR=/tmp/taler && mkdir ${LOG_DIR}
+  elif [ ! -d /home/${G5K_USER} ]; then 
+    LOG_DIR=/tmp/taler
   fi
+
+  mkdir ${LOG_DIR} || true
   
   echo "LOG_DIR=${LOG_DIR}" >> ~/.env
 }
@@ -106,6 +142,8 @@ function setup_config() {
 # Configure the experiments DNS
 function setup_dns() {
   NS_IP=$(host ${DNS_HOSTS} | sed -n 1p | awk '{print $4}')
+  echo "DNS_IP=${NS_IP}" >> ~/.env
+  echo "DNS_IP=${NS_IP}" >> /etc/environment
 
   # Set our DNS to be the only DNS to query by the stub resolver
   if ! grep -Fxq "server=${NS_IP}" /etc/dnsmasq.conf ; then
@@ -139,21 +177,47 @@ function setup_dns() {
   
   if ! [[ "${HOSTNAME}" =~ ${DNS_HOSTS} ]]; then
     # Wait for named to be ready before starting dnsmasq
-    sleep 5
+    sleep 10
     systemctl restart dnsmasq
-    # Wait again in hope that the hostname error is fixed
-    # hostname -I couldn't get address for 'x': failure syntax error
-    sleep 5
   else 
     # Start the DNS when we are the DNS host
     systemctl restart named
   fi
 }
 
+# Stop and 'unconfigure' all important services
+# to start on an 'empty' playground
+function clean_previous_setup() {
+  # (not all are present on every node - || true - to ignore errors)
+  systemctl stop taler-exchange-* \
+                taler-wallet* \
+                prometheus* \
+                 postgresql* \
+                promtail \
+                loki \
+                || true
+  # Remove access to postgres for all nodes
+  HBA_FILE=/etc/postgresql/${POSTGRES_VERSION}/main/pg_hba.conf
+  if grep -q "Red Hat" /proc/version; then 
+    HBA_FILE=/tmp/postgresql/${POSTGRES_VERSION}/data/pg_hba.conf
+  fi
+  sed -i "/172.16.0.0\/12/d" "${HBA_FILE}" || true
+}
+
+clean_previous_setup
+# Check if binaries need to be rebuilt on debian based operating systems
+if ! grep -q "Red Hat" /proc/version; then
+  source ~/scripts/install.sh &
+fi
 parse_experiment_nodes
 setup_log_dir
 setup_environment
 setup_config
 setup_dns
 
-exec ~/scripts/createusers.sh
+wait
+
+if ! grep -q "Red Hat" /proc/version; then
+  # Only works in debian based operating systems
+  exec ~/scripts/createusers.sh
+fi
diff --git a/experiment/scripts/database.sh b/experiment/scripts/shard.sh
similarity index 54%
copy from experiment/scripts/database.sh
copy to experiment/scripts/shard.sh
index b19cabf..4160c5d 100755
--- a/experiment/scripts/database.sh
+++ b/experiment/scripts/shard.sh
@@ -1,46 +1,18 @@
 #!/bin/bash
 INFO_MSG="
-Setup the database node (start postgresql)
+Setup the database shard nodes
 "
 OPT_MSG="
 init:
-  Initialize and start the taler database
+  Initialize and start the shard database
 "
 
 set -eux
 source ~/scripts/helpers.sh
 
-# move to tmp to prevent change directory errors
-cd /tmp 
-
-function setup_disks() {
-  if [[ "$(hostname)" =~ "dahu" ]]; then
-    mkdir /mnt/sdb || true
-    mount /dev/sdb /mnt/sdb || true
-    if [ ! -L /var/lib/postgresql/${POSTGRES_VERSION}/main/pg_wal ]; then
-      rm -rf /mnt/sdb/pg_wal || true
-      mv /var/lib/postgresql/${POSTGRES_VERSION}/main/pg_wal/ /mnt/sdb
-      ln -s /mnt/sdb/pg_wal /var/lib/postgresql/${POSTGRES_VERSION}/main/pg_wal
-      chown -R postgres:postgres 
/var/lib/postgresql/${POSTGRES_VERSION}/main/pg_wal/
-    fi
-  fi
-}
-
-function setup_ram_storage() {
-  SIZE=$(($(awk '/MemTotal/ {print $2}' /proc/meminfo) / 10))
-  if ! df | grep -q /var/lib/postgresql; then
-    mv /var/lib/postgresql /var/lib/postgresql.bak
-    mkdir /var/lib/postgresql
-    chown postgres:postgres /var/lib/postgresql
-    mount -t tmpfs -o size=${SIZE}k pgdata /var/lib/postgresql
-    cp -rp /var/lib/postgresql.bak/* /var/lib/postgresql
-  fi
-}
+cd /tmp
 
-# Setup the postgresql configuration
 function setup_config() {
-  sed -i "s\<DB_URL_HERE>\postgresql:///${DB_NAME}\g" \
-       /etc/taler/secrets/exchange-db.secret.conf
   
   # Enable password for taler since this is the case in real world deployments
   # For the postgres user do not enable authentication (used in metrics)
@@ -74,8 +46,9 @@ function setup_config() {
   echo "
   listen_addresses='*'
   log_destination=syslog
-  syslog_ident='taler-database'
-  log_min_duration_statement=500
+  log_error_verbosity=terse
+  syslog_ident='taler-database-shard'
+  log_min_duration_statement=300
   shared_preload_libraries='pg_stat_statements,auto_explain'
   auto_explain.log_min_duration='300ms'
   auto_explain.log_analyze=true
@@ -99,6 +72,41 @@ function setup_config() {
   checkpoint_completion_target=0.9
   random_page_cost=1.1
   
+  # Default 2kB
+  bgwriter_flush_after = 2MB
+
+  # Default 0
+  # 
https://www.cybertec-postgresql.com/en/the-mysterious-backend_flush_after-configuration-setting/
+  # backend_flush_after = 0
+
+  # Too much results in CPU load
+  # 
https://www.postgresql.org/docs/13/runtime-config-resource.html#GUC-EFFECTIVE-IO-CONCURRENCY
+  effective_io_concurrency = 100
+
+  # Bad when turned off - Recovering db may not be possible
+  # https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-FSYNC
+  fsync = on
+
+  # Not so bad as when turning off fsync, but single transactions might get 
lost on crash - but
+  # like they would have aborted cleanly
+  # 
https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT
+  # When having replication, this one can be changed (in local only on and off 
are of use)
+  # 
https://www.postgresql.org/docs/13/runtime-config-replication.html#GUC-SYNCHRONOUS-STANDBY-NAMES
+  # on causes us to get 100% IO load
+  synchronous_commit = off
+
+  # Default off
+  wal_compression = off
+
+  wal_sync_method = fsync
+
+  # Bad to turn off, may lead to inconcistency
+  # 
https://www.postgresql.org/docs/13/runtime-config-wal.html#GUC-FULL-PAGE-WRITES
+  # Write full pages to WAL while partial are written to disk, helpful in case 
of crash, then
+  # partially written pages can be recovered.
+  # Can be disabled if FS does not support partial written pages (such as ZFS)
+  full_page_writes = on
+
   max_worker_processes=${NUM_CPU}
   max_parallel_workers=${NUM_CPU}
   max_connections=500
@@ -108,54 +116,29 @@ function setup_config() {
   # out of shared memory
   max_locks_per_transaction=85
   
-  # Increase work mem to lower I/O utilization (max used =~ work_mem * 
max_connections)
+  # (max used =~ work_mem * max_connections)
   # NOTE: This formula is not completely correct 
-  work_mem=265MB
+  work_mem=128MB
   maintenance_work_mem=2GB
   # 1 min
   idle_in_transaction_session_timeout=60000
-  " > /etc/postgresql/${POSTGRES_VERSION}/main/exchange.conf
+  " > /etc/postgresql/${POSTGRES_VERSION}/main/exchange-shard.conf
 
-  if ! grep -q "include = 'exchange.conf'" \
+  if ! grep -q "include = 'exchange-shard.conf'" \
          /etc/postgresql/${POSTGRES_VERSION}/main/postgresql.conf; then
-    echo "include = 'exchange.conf'" >> \
+    echo "include = 'exchange-shard.conf'" >> \
           /etc/postgresql/${POSTGRES_VERSION}/main/postgresql.conf
   fi
 }
 
-# Configure and start pgBouncer if $USE_PGBOUNCER is true
-function setup_pgbouncer() {
-  if [ "${USE_PGBOUNCER}" = "true" ]; then
-    sed -i -e "s/<DB_USER_HERE>/${DB_USER}/g" \
-           -e "s/<DB_PASSWORD_HERE>/${DB_PASSWORD}/g" \
-           /etc/pgbouncer/userlist.txt
-    sed -i -e "s/<DB_NAME_HERE>/${DB_NAME}/g" \
-           /etc/pgbouncer/pgbouncer.ini
-    # pgbouncer does not cleanup those sometimes
-    rm -f /var/run/postgresql/pgbouncer.pid
-    rm -f /var/run/postgresql/.s.PGSQL.6432
-    systemctl restart pgbouncer
-  fi
-}
-
-# Initialize the database for taler exchange
+# Initialize the database for taler exchange shard
 function init_db() {
+
+  sed -i 
"s\<DB_URL_HERE>\postgresql://${DB_USER}:${DB_PASSWORD}@localhost:${DB_PORT}/${DB_NAME}\g"
 \
+       /etc/taler/secrets/exchange-db.secret.conf
+
   systemctl restart postgresql
 
-  # Create the role taler-exchange-httpd and the database
-  su postgres << EOF
-psql postgres -tAc "SELECT 1 FROM pg_roles WHERE 
rolname='taler-exchange-httpd'" | \
-  grep -q 1 || \
-  createuser taler-exchange-httpd
-psql -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | \
-  grep -q 1 || \
-  createdb -O taler-exchange-httpd "${DB_NAME}"
-EOF
-  
-  sudo -u taler-exchange-httpd taler-exchange-dbinit -r || true
-  sudo -u taler-exchange-httpd taler-exchange-dbinit -s || true
-  sudo -u taler-exchange-httpd taler-exchange-dbinit
-  
   # Create the remote user "$DB_USER" and load pg_stat_statements for metrics
   su postgres << EOF
 psql postgres -tAc "SELECT 1 FROM pg_roles WHERE rolname='${DB_USER}'" | \
@@ -165,22 +148,23 @@ psql postgres -tAc "SELECT 1 FROM pg_roles WHERE 
rolname='${DB_USER}'" | \
     CREATE EXTENSION pg_stat_statements;
 END
 EOF
-  
-  # Grant access to the databse to the remote user
-  su taler-exchange-httpd -s /bin/bash << EOF
-psql -d "${DB_NAME}"
-GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public TO "${DB_USER}";
-GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO "${DB_USER}";
+
+  # Create the role taler-exchange-httpd and the database
+  su postgres << EOF
+psql -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | \
+  grep -q 1 || \
+  createdb -O "${DB_USER}" "${DB_NAME}"
 EOF
+  
+  IDX=$(echo $NODE_NAME | cut -d "-" -f 2)
+  sudo -u taler-exchange-httpd taler-exchange-dbinit -R ${IDX} || true
+  sudo -u taler-exchange-httpd taler-exchange-dbinit -S ${IDX}
 }
 
 case ${1} in 
   init)
     setup_config
-    #setup_disks
-    setup_ram_storage
     init_db
-    setup_pgbouncer
     restart_rsyslog
     ;;
   *)
diff --git a/experiment/scripts/taler-perf.sh b/experiment/scripts/taler-perf.sh
index e1ff428..9e3340c 100644
--- a/experiment/scripts/taler-perf.sh
+++ b/experiment/scripts/taler-perf.sh
@@ -1,55 +1,75 @@
 #!/bin/bash
+# taler-perf utility script
+# Start and stop processes
+#
+# Usage: ./taler-perf.sh
 set -e
 
 source ~/scripts/helpers.sh
 
-function update_processes() {
-  case "$1" in 
-    prometheus)
-      ssh -A -o StrictHostKeyChecking=no ${MONITOR_DOMAIN} \
-                "/bin/bash /root/scripts/monitor.sh start"
-      ;;
-    *)
-      echo "Unknown argument '$1' for function ${FUNCNAME[0]}"
-      echo "Usage: update [prometheus]"
-      ;;
-  esac
+function get_running_exchanges_per_host() {
+  RUNNING=$(\
+    ssh -o StrictHostKeyChecking=no ${PRIMARY_EXCHANGE} \
+           '/bin/bash -c "ps -aux | grep [taler]-exchange-httpd | wc -l"' \
+  )
+  echo "${RUNNING}"
 }
 
 function start_wallets() {
-  for WALLET in $(get_wallet_hosts); do
-    ssh -o StrictHostKeyChecking=no ${WALLET_DOMAIN//\*/${WALLET}} \
+  for WALLET in $(get_hosts "wallet"); do
+    ssh -o StrictHostKeyChecking=no ${WALLET}.${DNS_ZONE} \
            "/bin/bash /root/scripts/wallet.sh start 
${1:-${NUM_WALLET_PROCESSES}}" &
   done
   wait
 }
 
 function stop_wallets() {
- for WALLET in $(get_wallet_hosts); do
-   ssh -o StrictHostKeyChecking=no ${WALLET_DOMAIN//\*/${WALLET}} \
+ for WALLET in $(get_hosts "wallet"); do
+   ssh -o StrictHostKeyChecking=no ${WALLET}.${DNS_ZONE} \
           "/bin/bash /root/scripts/wallet.sh stop 
${1:-${NUM_WALLET_PROCESSES}}" &
   done
   wait
 }
 
 function start_exchanges() {
-  ssh -o StrictHostKeyChecking=no ${EXCHANGE_DOMAIN} \
-         "/bin/bash /root/scripts/exchange.sh start 
${1:-${NUM_EXCHANGE_PROCESSES}}" 
-  ssh -o StrictHostKeyChecking=no ${PROXY_DOMAIN} \
-         "/bin/bash /root/scripts/proxy.sh start 
${1:-${NUM_EXCHANGE_PROCESSES}}"
-  update_processes "prometheus"
+  RUNNING=$(get_running_exchanges_per_host)
+  for HOST in $(get_hosts "exchange-"); do
+    ssh -o StrictHostKeyChecking=no ${HOST}.${DNS_ZONE} \
+           "/bin/bash /root/scripts/exchange.sh start 
${1:-${NUM_EXCHANGE_PROCESSES}}" 
+  done
+  for HOST in $(get_hosts "eproxy"); do
+    ssh -o StrictHostKeyChecking=no ${HOST}.${DNS_ZONE} \
+           "/bin/bash /root/scripts/exchange-proxy.sh start ${RUNNING} 
${1:-${NUM_EXCHANGE_PROCESSES}}"
+  done
+  ssh -o StrictHostKeyChecking=no "monitor.${DNS_ZONE}" \
+         "/bin/bash /root/scripts/monitor.sh start ${RUNNING} 
${1:-${NUM_EXCHANGE_PROCESSES}}"
 }
 
 function stop_exchanges() {
   # must remove the exchange form the monitor host before the one from the 
nginx
   # since helpers.sh gets all exchanges from the nginx config
-  ssh -A -o StrictHostKeyChecking=no ${MONITOR_DOMAIN} \
-         "/bin/bash /root/scripts/monitor.sh stop-exchanges 
${1:-${NUM_EXCHANGE_PROCESSES}}"
-  ssh -A -o StrictHostKeyChecking=no ${PROXY_DOMAIN} \
-         "/bin/bash /root/scripts/proxy.sh stop 
${1:-${NUM_EXCHANGE_PROCESSES}}"
+  RUNNING=$(get_running_exchanges_per_host)
+  ssh -A -o StrictHostKeyChecking=no "monitor.${DNS_ZONE}" \
+         "/bin/bash /root/scripts/monitor.sh stop-exchanges ${RUNNING} 
${1:-${NUM_EXCHANGE_PROCESSES}}"
+  for HOST in $(get_hosts "eproxy"); do
+    ssh -A -o StrictHostKeyChecking=no ${HOST}.${DNS_ZONE} \
+           "/bin/bash /root/scripts/exchange-proxy.sh stop ${RUNNING} 
${1:-${NUM_EXCHANGE_PROCESSES}}"
+  done
   sleep 5
-  ssh -o StrictHostKeyChecking=no ${EXCHANGE_DOMAIN} \
-         "/bin/bash /root/scripts/exchange.sh stop 
${1:-${NUM_EXCHANGE_PROCESSES}}" 
+  for HOST in $(get_hosts "exchange-"); do
+    ssh -o StrictHostKeyChecking=no ${HOST}.${DNS_ZONE} \
+           "/bin/bash /root/scripts/exchange.sh stop 
${1:-${NUM_EXCHANGE_PROCESSES}}" 
+  done
+}
+
+function start_wirewatches() {
+  ssh -A -o StrictHostKeyChecking=no "wirewatch.${DNS_ZONE}" \
+         "/bin/bash /root/scripts/exchange-wirewatch.sh start ${1}"
+}
+
+function stop_wirewatches() {
+  ssh -A -o StrictHostKeyChecking=no "wirewatch.${DNS_ZONE}" \
+         "/bin/bash /root/scripts/exchange-wirewatch.sh stop ${1}"
 }
 
 function start_processes() {
@@ -60,9 +80,12 @@ function start_processes() {
     exchange)
       start_exchanges $2
       ;;
+    wirewatch)
+      start_wirewatches $2
+      ;;
     *)
       echo "Unknown argument '$1' for function ${FUNCNAME[0]}"
-      echo "Usage: start [wallet|exchange] NUM"
+      echo "Usage: start [wallet|exchange|wirewatch] NUM"
       ;;
   esac
 }
@@ -75,9 +98,12 @@ function stop_processes() {
     exchange)
       stop_exchanges $2
       ;;
+    wirewatch)
+      stop_wirewatches $2
+      ;;
     *)
       echo "Unknown argument '$1' for function ${FUNCNAME[0]}"
-      echo "Usage: stop [wallet] NUM"
+      echo "Usage: stop [wallet|exchange|wirewatch] NUM"
       ;;
    esac
 }
@@ -85,34 +111,67 @@ function stop_processes() {
 function rebuild() {
   while [[ $# -gt 0 ]]; do
     case "$1" in
+      --libmicrohttpd|-m)
+        LIBMICROHTTPD_COMMIT_SHA="$2"
+        shift 2
+        ;;
+      --libmicro-cflags|-lc)
+       LIBMICROHTTPD_CFLAGS="$2"
+       shift 2
+       ;;
       --exchange|-e)
-        EXCHANGE_COMMIT_SHA=$2
+        EXCHANGE_COMMIT_SHA="$2"
+        shift 2
+        ;;
+      --exch-cflags|-ec)
+       EXCHANGE_CFLAGS="$2"
        shift 2
        ;;
       --gnunet|-g)
-        GNUNET_COMMIT_SHA=$2
+        GNUNET_COMMIT_SHA="$2"
+        shift 2
+        ;;
+      --gnunet-cflags|-gc)
+       GNUNET_CFLAGS="$2"
        shift 2
        ;;
       --wallet|-w)
-        WALLET_COMMIT_SHA=$2
-       shift 2
-       ;;
+        WALLET_COMMIT_SHA="$2"
+        shift 2
+        ;;
       --merchant|-m)
-        MERCHANT_COMMIT_SHA=$2
+        MERCHANT_COMMIT_SHA="$2"
+        shift 2
+        ;;
+      --merch-cflags|-mc)
+       MERCHANT_CFLAGS="$2"
        shift 2
        ;;
       *)
         echo "Unkown argument $1"
-       echo "Usage rebuilt [target]"
-       echo "Targets: "
-       echo "-e|--exchange <commit-sha>"
+        echo "Usage rebuilt [target] [cflags]"
+        echo "Targets: "
+        echo "-e|--exchange <commit-sha>"
         echo "-g|--gnunet <commit-sha>"
-       echo "-w|--wallet <commit-sha>"
-       echo "-m|--merchant <commit-sha>"
-       exit 1
+        echo "-w|--wallet <commit-sha>"
+        echo "-m|--merchant <commit-sha>"
+       echo "Cflags: "
+       echo "-lc|--libmicro-cflags <cflags>"
+       echo "-gc|--gnunet-cflags <cflags>"
+       echo "-ec|--exch-cflags <cflags>"
+       echo "-mc|--merch-cflags <cflags>"
+        exit 1
     esac
   done
-  # TODO
+  exec ~/scripts/install.sh
+}
+
+function rebuild_all() {
+  for NODE in $(dig -t AXFR ${DNS_ZONE} | grep "\<A\>" | awk 'print substr($1, 
1, length($1)-1)}'); do
+    if [[ $NODE == $EXCHANGE_GW_DOMAIN ]]; then continue; fi
+    ssh ${NODE} "taler-perf build $(printf "%q " "$@")" &
+  done
+  wait
 }
 
 case "$1" in
@@ -124,13 +183,19 @@ case "$1" in
     shift
     stop_processes $@
     ;;
-  update)
+  rebuild)
     shift
-    update_processes $@
+    rebuild_all "$@"
     ;;
-  rebuild)
+  build)
     shift
-    rebuild
+    rebuild "$@"
+    ;;
+  *)
+    echo "Usage:"
+    echo "start|stop|rebuild"
+    echo "just run a command without an argument to get help"
+    exit 1
     ;;
 esac
 
diff --git a/experiment/scripts/wallet.sh b/experiment/scripts/wallet.sh
index 45ba4f4..0b55178 100755
--- a/experiment/scripts/wallet.sh
+++ b/experiment/scripts/wallet.sh
@@ -19,7 +19,7 @@ source ~/scripts/helpers.sh
 # Enable rsyslog and wait until the exchange is ready
 function init_wallets() {
   restart_rsyslog
-  wait_for_keys "${PROXY_DOMAIN}"
+  wait_for_keys "${EXCHANGE_GW_DOMAIN}"
   sleep 5
 }
 
@@ -40,6 +40,7 @@ function start_wallets() {
 
   for i in $(seq ${1}); do
     let "i+=${RUNNING}"
+    # This starts the benchmark.sh script with i as argument
     systemctl restart taler-wallet@${i}.service
     sleep 0.5
   done
diff --git a/experiment/ssh/id_rsa b/experiment/ssh/id_rsa
new file mode 100644
index 0000000..87d338a
--- /dev/null
+++ b/experiment/ssh/id_rsa
@@ -0,0 +1,38 @@
+-----BEGIN OPENSSH PRIVATE KEY-----
+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
+NhAAAAAwEAAQAAAYEArh6U/jL4LNSr7xhRNTxAK6f6T/RtoUP/BJWfI+6tFPYx8gyM5zoS
+roCkGijow/twt+BnzBq3Lat3o/p0onab00i/ALZkQrsCGv1S5lgUq+VJu1ssu+Ly0tmW3L
+Mi6z0Gzr2IIN92psaxQEZr7JU1KS94KpooR0iXmpiWooaweCLOZhodZL1LmCy1xyGsEv5Z
+BB0jzgEh9MYxvsI9+pnqNI/PbsnFlfUoCltf+R8D5YwRCJKTOO4Gq0kAryL5/B3dLQnFd+
+rge4qUZjiIz9U9/u29m4/DyXYhujO3nEzeiV5Y9Zs9BuxGtba5ZmfvNF2Gc7RbzIZVcWOj
+WIXQ9OtsKZWo0PeMgMAR+unzvIYTt/IwVQzyQQNhRGAwMeBGypV2QlWwfiAboqraxiWFJV
+Gv/AiEurLMaVCV8u8aDvQfYw5F4++a66d1AxH1yQdOdqmn16yeoZZ2q14tDbfeNa2NdU8j
+oFAt/f/zIl/nFCW37WXhu0LNAKOtZdAAFp/mdWEzAAAFiLTJCvG0yQrxAAAAB3NzaC1yc2
+EAAAGBAK4elP4y+CzUq+8YUTU8QCun+k/0baFD/wSVnyPurRT2MfIMjOc6Eq6ApBoo6MP7
+cLfgZ8waty2rd6P6dKJ2m9NIvwC2ZEK7Ahr9UuZYFKvlSbtbLLvi8tLZltyzIus9Bs69iC
+DfdqbGsUBGa+yVNSkveCqaKEdIl5qYlqKGsHgizmYaHWS9S5gstcchrBL+WQQdI84BIfTG
+Mb7CPfqZ6jSPz27JxZX1KApbX/kfA+WMEQiSkzjuBqtJAK8i+fwd3S0JxXfq4HuKlGY4iM
+/VPf7tvZuPw8l2Ibozt5xM3oleWPWbPQbsRrW2uWZn7zRdhnO0W8yGVXFjo1iF0PTrbCmV
+qND3jIDAEfrp87yGE7fyMFUM8kEDYURgMDHgRsqVdkJVsH4gG6Kq2sYlhSVRr/wIhLqyzG
+lQlfLvGg70H2MORePvmuundQMR9ckHTnapp9esnqGWdqteLQ233jWtjXVPI6BQLf3/8yJf
+5xQlt+1l4btCzQCjrWXQABaf5nVhMwAAAAMBAAEAAAGAEf1A4X58m40hcmNtyHVAIAKL3w
+Te6sFusJeQyJKZOUgyYtKfICik03ig+77sRYtN2wGJV9IOyN4lT0DKGhrtAIhMi5NMioRt
+tEIl9Xx2LkhTNNM3rPXGprgqWQT8/5bfhC6ayOKtjI+MsppT/i5wPqAT5zrkHHFIkIVhUs
+tdohvefTgHf2f7Tm6YHUnCUHgM1Fr6XwdI7dQoQZAp/SE3zFRrVwPrsRGSIHfOU5u7uFSf
+UeZq5X/aGopBUtbnQwAGtUQrbSaEkBeEy4wv1GINOSi8to7jt52ERpM/K0K0SQ2EXPJPD8
+LOIeODlT+N3y+JykxgmONcPr68ws3Qgy/YUg4J0gAv/kWlo00iMO15Fv8yuuOSI8Lrdm+U
+VVW0yB6dkyh8wKHIfo21e0Hx7J/RKH1LMzwnu1vvq3s5tYWmrdEXzbyCbmIxscPaOd7TUJ
+UK+UdDWj0RZcHIc0Be5camArsbuSYee95YCt0oR5g+wA3pdPSVHNhcwX/iXg7NpJmBAAAA
+wFawVP34hdVhQc3qEYiyVt2Tw7+cbLCkK7BjiVNSyNZbxdWlmMEAeb5r5SjO038ODzHBnK
+l+9X0OWsRi+vTOR5aoI3z4RC6/uigdNUOwpdrNZiRZDHhiV7ryewbltSJYM6je/+yvpx9o
+6I49k6cqRMu6TdOB8TFM7YWSTRTtHfKYSYfqeEujq0PIlIhgwkI0kgFuNoen43q8CDwbTM
+O2BP0YIp4re82Z1xb/rikBEveUebGpSGc1o0LsQSEzqemRMgAAAMEA2CD9pXBsQkziLk+y
+nSTCkY4ALJ2LYvhCoVkMNCBbHIDcp1N8FfKP/rxL1286qdUBrfl+wKqbpfMuCFBxaI9Y01
+Hrov+WHPnmqeXSroVXpsErC3OyeVAZHj816IDARAxvAP58U+42yxpAo9kJfAyrpFbOHbCx
+aV8Cuq7U0FtmUlZmdYSOU7V6YOS5kSkm2vLQj1qzdZiGo1mwVlghnLTVGmIm0KK7wUZNh4
+ODM8RKuz44Czzis5p+Q2U/lqt6IVJBAAAAwQDOPaJN4wE5uruESHCMOVNEUM9+nSQnYXtH
+mnFjyvwxs+F2mKnDHnepfnl6IkoyPEKdMW8qVVmbO/+/MSByOHqOsuZtTBYOQ+xKv6PBdC
+mn2L+kLQprhXzNbdAYhfjdSlDgZdbGGJhrMtYPuADDQPEf1ZE9HOmtpcSx7BBvlR+fHOkx
+O4SQNW0UrWfcB4w9EQfQ80K3hseVQzQMJZ6l1/LK3yHt5G7yx1Y8yUqhQji+lnWrG0Y8Cr
+/U/8wb8gPF7nMAAAAOdmlzaW9uQHdha2FuZGEBAgMEBQ==
+-----END OPENSSH PRIVATE KEY-----
diff --git a/experiment/ssh/id_rsa.pub b/experiment/ssh/id_rsa.pub
new file mode 100644
index 0000000..dbf1cd5
--- /dev/null
+++ b/experiment/ssh/id_rsa.pub
@@ -0,0 +1 @@
+ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABgQCuHpT+Mvgs1KvvGFE1PEArp/pP9G2hQ/8ElZ8j7q0U9jHyDIznOhKugKQaKOjD+3C34GfMGrctq3ej+nSidpvTSL8AtmRCuwIa/VLmWBSr5Um7Wyy74vLS2ZbcsyLrPQbOvYgg33amxrFARmvslTUpL3gqmihHSJeamJaihrB4Is5mGh1kvUuYLLXHIawS/lkEHSPOASH0xjG+wj36meo0j89uycWV9SgKW1/5HwPljBEIkpM47garSQCvIvn8Hd0tCcV36uB7ipRmOIjP1T3+7b2bj8PJdiG6M7ecTN6JXlj1mz0G7Ea1trlmZ+80XYZztFvMhlVxY6NYhdD062wplajQ94yAwBH66fO8hhO38jBVDPJBA2FEYDAx4EbKlXZCVbB+IBuiqtrGJYUlUa/8CIS6ssxpUJXy7xoO9B9jDkXj75rrp3UDEfXJB052qafXrJ6h
 [...]
diff --git a/experiment/taler.many.rspec b/experiment/taler.many.rspec
new file mode 100644
index 0000000..4abfe99
--- /dev/null
+++ b/experiment/taler.many.rspec
@@ -0,0 +1,453 @@
+<?xml version='1.0'?>
+<rspec xmlns="http://www.geni.net/resources/rspec/3"; type="request" 
generated_by="jFed RSpec Editor" generated="2022-04-06T21:42:37.131+02:00" 
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"; 
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"; 
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"; 
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"; 
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1"; xmlns: 
[...]
+  <node client_id="DB" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="97.68354430379748" y="25.0"/>
+  </node>
+  <node client_id="Exchange-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="221.0" 
y="72.5"/>
+  </node>
+  <node client_id="Bank" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="474.7974683544304" y="25.0"/>
+  </node>
+  <node client_id="EProxy-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="226.5" 
y="126.5"/>
+  </node>
+  <node client_id="Monitor" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="915.0" 
y="92.81119637333838"/>
+  </node>
+  <node client_id="Merchant-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="662.6455696202531" y="92.81119637333838"/>
+  </node>
+  <node client_id="DNS" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="781.0253164556962" y="25.0"/>
+  </node>
+  <node client_id="Aggregator" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="500.5" 
y="138.5"/>
+  </node>
+  <node client_id="Wirewatch" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="649.5" 
y="139.5"/>
+  </node>
+  <node client_id="Transfer" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="790.5" 
y="138.5"/>
+  </node>
+  <node client_id="Closer" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="913.5" 
y="137.5"/>
+  </node>
+  <node client_id="Exchange-2" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="364.0" 
y="70.5"/>
+  </node>
+  <node client_id="Wallet-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="75.0" 
y="205.30722735107315"/>
+  </node>
+  <node client_id="Wallet-2" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="273.4810126582279" y="205.30722735107315"/>
+  </node>
+  <node client_id="Wallet-3" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="471.9620253164557" y="205.30722735107315"/>
+  </node>
+  <node client_id="Wallet-4" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="660.5" 
y="202.5"/>
+  </node>
+  <node client_id="Wallet-5" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="868.9240506329114" y="205.30722735107315"/>
+  </node>
+  <node client_id="Wallet-6" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="75.0" 
y="236.665006020825"/>
+  </node>
+  <node client_id="Wallet-7" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="273.4810126582279" y="236.665006020825"/>
+  </node>
+  <node client_id="Wallet-8" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="471.9620253164557" y="236.665006020825"/>
+  </node>
+  <node client_id="Wallet-9" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="670.4430379746834" y="236.665006020825"/>
+  </node>
+  <node client_id="Wallet-10" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="868.9240506329114" y="236.665006020825"/>
+  </node>
+  <node client_id="Wallet-11" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="75.0" 
y="268.0227846905768"/>
+  </node>
+  <node client_id="Wallet-12" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="273.4810126582279" y="268.0227846905768"/>
+  </node>
+  <node client_id="Wallet-13" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="471.9620253164557" y="268.0227846905768"/>
+  </node>
+  <node client_id="Wallet-14" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="670.4430379746834" y="268.0227846905768"/>
+  </node>
+  <node client_id="Wallet-15" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="868.9240506329114" y="268.0227846905768"/>
+  </node>
+  <node client_id="Wallet-16" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="75.0" 
y="299.3805633603287"/>
+  </node>
+  <node client_id="Wallet-17" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="273.4810126582279" y="299.3805633603287"/>
+  </node>
+  <node client_id="Wallet-18" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="471.9620253164557" y="299.3805633603287"/>
+  </node>
+  <node client_id="Wallet-19" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="670.4430379746834" y="299.3805633603287"/>
+  </node>
+  <node client_id="Wallet-20" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="868.9240506329114" y="299.3805633603287"/>
+  </node>
+  <node client_id="Wallet-21" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="80.67088607594937" y="333.4821476636838"/>
+  </node>
+  <node client_id="Wallet-22" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="279.15189873417717" y="333.4821476636838"/>
+  </node>
+  <node client_id="Wallet-23" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="477.63291139240505" y="334.26609213042764"/>
+  </node>
+  <node client_id="Wallet-24" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="677.5316455696203" y="333.4821476636838"/>
+  </node>
+  <node client_id="Wallet-25" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="876.012658227848" y="331.91425873019625"/>
+  </node>
+  <node client_id="Wallet-26" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="86.34177215189874" y="364.0559818666919"/>
+  </node>
+  <node client_id="Wallet-27" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="281.9873417721519" y="364.8399263334357"/>
+  </node>
+  <node client_id="Wallet-28" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="477.99999999999994" y="370.93658536585366"/>
+  </node>
+  <node client_id="Wallet-29" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="681.7848101265823" y="366.40781526692325"/>
+  </node>
+  <node client_id="Wallet-30" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="881.6835443037975" y="366.40781526692325"/>
+  </node>
+  <node client_id="Wallet-31" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="80.67088607594937" y="393.84587160295615"/>
+  </node>
+  <node client_id="Wallet-32" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="281.9873417721519" y="397.7655939366752"/>
+  </node>
+  <node client_id="Wallet-33" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="484.72151898734177" y="399.33348287016264"/>
+  </node>
+  <node client_id="Wallet-34" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="678.9493670886076" y="397.7655939366752"/>
+  </node>
+  <node client_id="Wallet-35" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="884.5189873417721" y="395.41376053644376"/>
+  </node>
+  <node client_id="Wallet-36" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="80.67088607594937" y="426.77153920619554"/>
+  </node>
+  <node client_id="Wallet-37" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="289.0759493670886" y="428.33942813968315"/>
+  </node>
+  <node client_id="Wallet-38" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="488.97468354430373" y="429.90731707317076"/>
+  </node>
+  <node client_id="Wallet-39" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="688.873417721519" y="426.77153920619554"/>
+  </node>
+  <node client_id="Wallet-40" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="891.6075949367088" y="427.55548367293943"/>
+  </node>
+  <node client_id="Wallet-41" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="84.0" 
y="463.3365853658537"/>
+  </node>
+  <node client_id="Wallet-42" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="295.0" 
y="460.3317073170732"/>
+  </node>
+  <node client_id="Wallet-43" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="485.0" 
y="460.3317073170732"/>
+  </node>
+  <node client_id="Wallet-44" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="685.0" 
y="455.8243902439025"/>
+  </node>
+  <node client_id="Wallet-45" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="892.0" 
y="460.3317073170732"/>
+  </node>
+  <node client_id="Wallet-46" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="87.0" 
y="497.89268292682925"/>
+  </node>
+  <node client_id="Wallet-47" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="297.0" 
y="492.63414634146346"/>
+  </node>
+  <node client_id="Wallet-48" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="491.0" 
y="496.390243902439"/>
+  </node>
+  <node client_id="Wallet-49" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="689.0" 
y="487.37560975609756"/>
+  </node>
+  <node client_id="Wallet-50" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="897.0" 
y="492.63414634146346"/>
+  </node>
+  <node client_id="Wallet-51" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="86.0" 
y="530.1951219512196"/>
+  </node>
+  <node client_id="Wallet-52" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="301.0" 
y="525.6878048780488"/>
+  </node>
+  <node client_id="Wallet-53" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="492.99999999999994" y="529.4439024390244"/>
+  </node>
+  <node client_id="Wallet-54" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="692.0" 
y="526.439024390244"/>
+  </node>
+  <node client_id="Wallet-55" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="901.9999999999999" y="529.4439024390244"/>
+  </node>
+  <node client_id="Wallet-56" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="90.0" 
y="558.7414634146342"/>
+  </node>
+  <node client_id="Wallet-57" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="304.0" 
y="558.7414634146342"/>
+  </node>
+  <node client_id="Wallet-58" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="494.0" 
y="560.2439024390244"/>
+  </node>
+  <node client_id="Wallet-59" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="696.0" 
y="557.2390243902439"/>
+  </node>
+  <node client_id="Wallet-60" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="904.9999999999999" y="564.0"/>
+  </node>
+  <node client_id="EProxy-2" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="338.0" 
y="126.5"/>
+  </node>
+</rspec>
\ No newline at end of file
diff --git a/experiment/taler.rspec b/experiment/taler.rspec
index 462f39a..065e19a 100644
--- a/experiment/taler.rspec
+++ b/experiment/taler.rspec
@@ -1,51 +1,52 @@
 <?xml version='1.0'?>
-<rspec xmlns="http://www.geni.net/resources/rspec/3"; type="request" 
generated_by="jFed RSpec Editor" generated="2021-11-25T12:41:28.205+01:00" 
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"; 
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"; 
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"; 
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"; 
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1"; xmlns: 
[...]
+<rspec xmlns="http://www.geni.net/resources/rspec/3"; type="request" 
generated_by="jFed RSpec Editor" generated="2022-04-06T21:41:56.411+02:00" 
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"; 
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"; 
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"; 
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"; 
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1"; xmlns: 
[...]
   <node client_id="DB" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
     <hardware_type name="dahu-grenoble"/>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="156.0" 
y="70.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="203.0" 
y="96.5"/>
   </node>
-  <node client_id="Exchange" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Exchange-2" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
     <hardware_type name="dahu-grenoble"/>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="283.0" 
y="127.5"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="362.0" 
y="162.5"/>
   </node>
   <node client_id="Bank" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
     <hardware_type name="dahu-grenoble"/>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="422.0" 
y="70.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="332.0" 
y="96.5"/>
   </node>
-  <node client_id="Proxy" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="EProxy-2" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
     <hardware_type name="dahu-grenoble"/>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="284.5" 
y="184.5"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="354.5" 
y="203.5"/>
   </node>
   <node client_id="Monitor" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="732.5" 
y="156.5"/>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="669.5" 
y="104.5"/>
   </node>
-  <node client_id="Merchant" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+  <node client_id="Merchant-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="554.5" 
y="156.5"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="523.5" 
y="104.5"/>
   </node>
   <node client_id="DNS" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
       <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
     </sliver_type>
     <hardware_type name="dahu-grenoble"/>
-    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="638.0" 
y="70.0"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="599.0" 
y="47.5"/>
   </node>
   <node client_id="Wallet-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
     <sliver_type name="raw-pc">
@@ -167,4 +168,46 @@
     </sliver_type>
     <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="700.0" 
y="420.0"/>
   </node>
+  <node client_id="Aggregator" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="532.5" 
y="184.5"/>
+  </node>
+  <node client_id="Wirewatch" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="535.5" 
y="220.5"/>
+  </node>
+  <node client_id="Transfer" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="674.5" 
y="183.5"/>
+  </node>
+  <node client_id="Closer" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="671.5" 
y="221.5"/>
+  </node>
+  <node client_id="Exchange-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="210.0" 
y="162.5"/>
+  </node>
+  <node client_id="EProxy-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="229.5" 
y="202.5"/>
+  </node>
 </rspec>
\ No newline at end of file
diff --git a/experiment/taler.sharded.rspec b/experiment/taler.sharded.rspec
new file mode 100644
index 0000000..b7befef
--- /dev/null
+++ b/experiment/taler.sharded.rspec
@@ -0,0 +1,481 @@
+<?xml version='1.0'?>
+<rspec xmlns="http://www.geni.net/resources/rspec/3"; type="request" 
generated_by="jFed RSpec Editor" generated="2022-04-02T11:19:43.414+02:00" 
xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1"; 
xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1"; 
xmlns:jfed-command="http://jfed.iminds.be/rspec/ext/jfed-command/1"; 
xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1"; 
xmlns:jfed-ssh-keys="http://jfed.iminds.be/rspec/ext/jfed-ssh-keys/1"; xmlns: 
[...]
+  <node client_id="DB" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="139.0" 
y="108.5"/>
+  </node>
+  <node client_id="Exchange-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="224.69280280866005" y="153.94117647058823"/>
+  </node>
+  <node client_id="Bank" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="469.5236980690462" y="93.19004524886878"/>
+  </node>
+  <node client_id="EProxy-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="242.65593914569925" y="199.81447963800903"/>
+  </node>
+  <node client_id="Monitor" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="1005.091281451141" y="90.710407239819"/>
+  </node>
+  <node client_id="Merchant-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="680.4242246928029" y="90.710407239819"/>
+  </node>
+  <node client_id="DNS" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="847.4148624926859" y="90.710407239819"/>
+  </node>
+  <node client_id="Aggregator" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="679.0936220011703" y="152.70135746606337"/>
+  </node>
+  <node client_id="Wirewatch" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="680.4242246928029" y="197.33484162895928"/>
+  </node>
+  <node client_id="Transfer" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="864.0473961380924" y="150.2217194570136"/>
+  </node>
+  <node client_id="Closer" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="861.3861907548273" y="196.09502262443436"/>
+  </node>
+  <node client_id="Exchange-2" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="421.622001170275" y="152.70135746606337"/>
+  </node>
+  <node client_id="Shard-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="75.0" 
y="24.999999999999996"/>
+  </node>
+  <node client_id="Shard-2" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="205.5" 
y="24.5"/>
+  </node>
+  <node client_id="Shard-3" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; x="81.5" 
y="60.49999999999999"/>
+  </node>
+  <node client_id="Shard-4" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="207.49999999999997" y="61.5"/>
+  </node>
+  <node client_id="Wallet-1" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="94.29373902867174" y="265.2858836841359"/>
+  </node>
+  <node client_id="Wallet-2" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="323.5893158059645" y="265.2858836841359"/>
+  </node>
+  <node client_id="Wallet-3" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="552.8848925832572" y="265.2858836841359"/>
+  </node>
+  <node client_id="Wallet-4" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="770.6937553580904" y="261.80542986425337"/>
+  </node>
+  <node client_id="Wallet-5" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="1011.4760461378427" y="265.2858836841359"/>
+  </node>
+  <node client_id="Wallet-6" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="94.29373902867174" y="304.1638536185794"/>
+  </node>
+  <node client_id="Wallet-7" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="323.5893158059645" y="304.1638536185794"/>
+  </node>
+  <node client_id="Wallet-8" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="552.8848925832572" y="304.1638536185794"/>
+  </node>
+  <node client_id="Wallet-9" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="782.1804693605496" y="304.1638536185794"/>
+  </node>
+  <node client_id="Wallet-10" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="1011.4760461378427" y="304.1638536185794"/>
+  </node>
+  <node client_id="Wallet-11" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="94.29373902867174" y="343.0418235530229"/>
+  </node>
+  <node client_id="Wallet-12" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="323.5893158059645" y="343.0418235530229"/>
+  </node>
+  <node client_id="Wallet-13" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="552.8848925832572" y="343.0418235530229"/>
+  </node>
+  <node client_id="Wallet-14" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="782.1804693605496" y="343.0418235530229"/>
+  </node>
+  <node client_id="Wallet-15" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="1011.4760461378427" y="343.0418235530229"/>
+  </node>
+  <node client_id="Wallet-16" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="94.29373902867174" y="381.9197934874664"/>
+  </node>
+  <node client_id="Wallet-17" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="323.5893158059645" y="381.9197934874664"/>
+  </node>
+  <node client_id="Wallet-18" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="552.8848925832572" y="381.9197934874664"/>
+  </node>
+  <node client_id="Wallet-19" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="782.1804693605496" y="381.9197934874664"/>
+  </node>
+  <node client_id="Wallet-20" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="1011.4760461378427" y="381.9197934874664"/>
+  </node>
+  <node client_id="Wallet-21" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="100.84504122230867" y="424.19958579117355"/>
+  </node>
+  <node client_id="Wallet-22" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="330.1406179996014" y="424.19958579117355"/>
+  </node>
+  <node client_id="Wallet-23" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="559.4361947768941" y="425.17153503953466"/>
+  </node>
+  <node client_id="Wallet-24" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="790.3695971025962" y="424.19958579117355"/>
+  </node>
+  <node client_id="Wallet-25" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="1019.6651738798886" y="422.2556872944515"/>
+  </node>
+  <node client_id="Wallet-26" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="107.39634341594561" y="462.10560647725606"/>
+  </node>
+  <node client_id="Wallet-27" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="333.4162690964199" y="463.07755572561706"/>
+  </node>
+  <node client_id="Wallet-28" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="559.8602746063927" y="470.6363094581172"/>
+  </node>
+  <node client_id="Wallet-29" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="795.2830737478238" y="465.02145422233923"/>
+  </node>
+  <node client_id="Wallet-30" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="1026.2164760735259" y="465.02145422233923"/>
+  </node>
+  <node client_id="Wallet-31" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="100.84504122230867" y="499.03967791497723"/>
+  </node>
+  <node client_id="Wallet-32" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="333.4162690964199" y="503.8994241567828"/>
+  </node>
+  <node client_id="Wallet-33" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="567.6253225189403" y="505.84332265350474"/>
+  </node>
+  <node client_id="Wallet-34" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="792.0074226510053" y="503.8994241567828"/>
+  </node>
+  <node client_id="Wallet-35" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="1029.4921271703442" y="500.98357641169946"/>
+  </node>
+  <node client_id="Wallet-36" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="100.84504122230867" y="539.8615463461429"/>
+  </node>
+  <node client_id="Wallet-37" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="341.60539683846605" y="541.805444842865"/>
+  </node>
+  <node client_id="Wallet-38" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="572.5387991641679" y="543.7493433395873"/>
+  </node>
+  <node client_id="Wallet-39" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="803.47220148987" y="539.8615463461429"/>
+  </node>
+  <node client_id="Wallet-40" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="1037.6812549123902" y="540.833495594504"/>
+  </node>
+  <node client_id="Wallet-41" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="104.69100657259105" y="585.1955854762167"/>
+  </node>
+  <node client_id="Wallet-42" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="348.4491678800332" y="581.4700805650589"/>
+  </node>
+  <node client_id="Wallet-43" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="567.9470382516636" y="581.4700805650589"/>
+  </node>
+  <node client_id="Wallet-44" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="798.9974281165375" y="575.8818231983225"/>
+  </node>
+  <node client_id="Wallet-45" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="1038.1345816266821" y="581.4700805650589"/>
+  </node>
+  <node client_id="Wallet-46" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="108.15676242056416" y="628.0388919545303"/>
+  </node>
+  <node client_id="Wallet-47" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="350.759671778682" y="621.5192583600044"/>
+  </node>
+  <node client_id="Wallet-48" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="574.8785499476098" y="626.1761394989514"/>
+  </node>
+  <node client_id="Wallet-49" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="803.618435913835" y="614.9996247654783"/>
+  </node>
+  <node client_id="Wallet-50" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="1043.910841373304" y="621.5192583600044"/>
+  </node>
+  <node client_id="Wallet-51" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="107.00151047123981" y="668.0880697494758"/>
+  </node>
+  <node client_id="Wallet-52" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="355.3806795759794" y="662.4998123827393"/>
+  </node>
+  <node client_id="Wallet-53" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="577.1890538462585" y="667.1566935216864"/>
+  </node>
+  <node client_id="Wallet-54" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="807.0841917618081" y="663.4311886105287"/>
+  </node>
+  <node client_id="Wallet-55" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="1049.6871011199257" y="667.1566935216864"/>
+  </node>
+  <node client_id="Wallet-56" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="111.62251826853728" y="703.480366405474"/>
+  </node>
+  <node client_id="Wallet-57" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="358.8464354239525" y="703.480366405474"/>
+  </node>
+  <node client_id="Wallet-58" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="578.3443057955828" y="705.3431188610527"/>
+  </node>
+  <node client_id="Wallet-59" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="811.7051995591056" y="701.6176139498951"/>
+  </node>
+  <node client_id="Wallet-60" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="1053.152856967899" y="710.0"/>
+  </node>
+  <node client_id="EProxy-2" exclusive="true" 
component_manager_id="urn:publicid:IDN+am.grid5000.fr+authority+am">
+    <sliver_type name="raw-pc">
+      <disk_image 
name="http://public.lille.grid5000.fr/~bfhch01/taler-debian11.dsc"/>
+    </sliver_type>
+    <hardware_type name="dahu-grenoble"/>
+    <location xmlns="http://jfed.iminds.be/rspec/ext/jfed/1"; 
x="396.34055002925686" y="199.81447963800903"/>
+  </node>
+</rspec>
diff --git a/image/README.md b/image/README.md
index cc52c66..2799de6 100644
--- a/image/README.md
+++ b/image/README.md
@@ -1,53 +1,76 @@
-# Grid5000 Environment creation
+# Grid'5000 Environment creation
 
 Official documentation can be found on these links:
 
-* [Grid5000 
Environment](https://www.grid5000.fr/w/Environments_creation_using_Kameleon_and_Puppet)
-* [Grid5000 Kadeploy](https://www.grid5000.fr/w/Advanced_Kadeploy)
+* [Grid'5000 
Environment](https://www.grid5000.fr/w/Environments_creation_using_Kameleon_and_Puppet)
+* [Grid'5000 Kadeploy](https://www.grid5000.fr/w/Advanced_Kadeploy)
 * [Kameleon Documentation](http://kameleon.imag.fr/grid5000_tutorial.html)
 
+## Images
+
+There are two variants, debian11 and centos8 please change into the respective 
directory 
+before running any commands. Please do also replace debian11 with the 
corresponding name.
+
+**NOTE** Centos8 does not have nfs enabled and can only be used to run 
Postgresql currently.
+
 ## Manual Build
 
-Replace `<G5K_USER>` with your Grid5000 username.
+Replace `<G5K_USER>` with your Grid'5000 username.
 This variable is required, if not specified the build will fail.
 
 ```bash
 kameleon build -g g5k_user:<G5K_USER> taler-debian11
 ```
 
-**NOTE** Make sure that all dependencies listed in `Grid5000 Environment` are 
installed
+**NOTE** Make sure that all dependencies listed in
+[Grid'5000 
Environment](https://www.grid5000.fr/w/Environments_creation_using_Kameleon_and_Puppet)
+are installed
 
 ### Additional Variables
 
+#### Source
+
 The Taler binaries are built from source. You have the possiblity to override 
the commit from 
 which should be built with the following variables (default `master`):
 
 `gnunet_commit_sha`, `exchange_commit_sha`, `merchant_commit_sha`, 
`wallet_commit_sha` and `grid5k_commit_sha`
 
-To override them you must add them to the `-g` option of `kameleon build`:
+(All except `gid5k_commit_sha` are for the debian11 environment only)
+
+#### Build Flags
+
+For each package built from source there are CFLAG variables which can be 
passed to the image build:
+
+`libmicrohttpd_cflags`, `gnunet_cflags`, `exchange_cflags` and 
`merchant_cflags`
+
+(debian11 only)
+
+#### Usage
+
+To override them you must pass them with the `-g` option of `kameleon build`:
 
 ```bash
-kameleon build -g g5k_user:<G5K_USER> gnunet_commit_sha:master 
grid5k_commit_sha:node-setup taler-debian11
+kameleon build -g g5k_user:<G5K_USER> gnunet_commit_sha:master 
libmicrohttpd_cflags:"-O0 -g" taler-debian11
 ```
 
 For more information please run `kameleon build --help`
 
 ### Deploy
 
-Copy the image to a Grid5000 site:
+Copy the image to a Grid'5000 site:
 
 ```bash
 cd build/taler-debian11
 scp taler-debian11.* <G5K_USER>@access.grid5000.fr:<G5K_SITE>/public/
 ```
 
-**NOTE** G5K_USER and G5K_SITE should match the ones in taler-debian11.dsc
-G5K_SITE defaults to `lyon`.
+**NOTE** `G5K_USER` and `G5K_SITE` must match the ones in taler-debian11.dsc
+`G5K_SITE` defaults to `lyon`.
 
 ## Usage
 
 Place `http://public.lyon.grid5000.fr/~<G5K_USER>/taler-debian11.dsc` in the 
nodes disk image field
-in jFed.
+in jFed or replace them directly in the `rspec` files.
 
 ## Automated Build
 
diff --git a/image/grid5000/debian11-x64-common.yaml 
b/image/centos8/grid5000/centos8-x64-min.yaml
similarity index 62%
copy from image/grid5000/debian11-x64-common.yaml
copy to image/centos8/grid5000/centos8-x64-min.yaml
index 6b53d71..129a035 100644
--- a/image/grid5000/debian11-x64-common.yaml
+++ b/image/centos8/grid5000/centos8-x64-min.yaml
@@ -2,19 +2,18 @@
 # vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
 #==============================================================================
 #
-# DESCRIPTION: Debian bullseye (11) x64 common Grid'5000 environment
+# DESCRIPTION: Centos8 x64 min Grid'5000 environment
 #
 #==============================================================================
 ---
-extend: from_scratch/debian-bullseye.yaml
+extend: from_scratch/centos-8.yaml
 
 global:
-  # Export format to generate
   appliance_formats: qcow2 tar.zst
   # Output base filename
   output: "$${kameleon_cwd}/$${kameleon_recipe_name}"
   # Grid'5000 environment variant
-  g5k_variant: common
+  g5k_variant: min
   # Grid'5000 environment version
   g5k_version: 1111111111
   # Grid'5000 environment arch
@@ -24,30 +23,31 @@ global:
   g5k_tar_compression: "zstd"
   g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
   g5k_postinst_compression: "gzip"
-  g5k_postinst_script: g5k-postinstall --net debian --disk-aliases
-  g5k_kernel_params: ""
-  deb_backports: true
-  # grub-efi-amd64-bin has to be installed if we want to support both mbr and
-  # efi boot methods. This package can be installed in parallel with grub-pc
-  # (in contrary to grub-efi-amd64 which conflit with grub-pc)
-  packages: "grub-efi-amd64-bin"
+  g5k_postinst_script: g5k-postinstall --net redhat --disk-aliases
+  g5k_kernel_params: "crashkernel=no"
+  g5k_kernel_path: "/vmlinuz"
+  g5k_initrd_path: "/initramfs.img"
+  g5k_no_chroot_for_grub: "true"
+  # Packages to install
+  packages: "zstd"
   # locales
   locales: POSIX C en_US.UTF8
   lang: en_US.UTF8
   timezone: Europe/Paris
-  # puppet
-  puppetlabs_apt_version: 6.3.0
+  # password
+  root_password: grid5000
 
 bootstrap:
   - "@base"
 
 setup:
+  - create_kernel_symlinks
   - "@base"
   - configure_system
-  - configure_apt_sources
   - install_packages
-  - setup_orchestrator
-  - run_orchestrator
+  - disable_kdump
+  - set_g5k_release
+  - set_g5k_motd
 
 export:
   - clean_dhcp_leases
diff --git a/image/grid5000/from_scratch/base.yaml 
b/image/centos8/grid5000/from_scratch/base.yaml
similarity index 100%
copy from image/grid5000/from_scratch/base.yaml
copy to image/centos8/grid5000/from_scratch/base.yaml
diff --git a/image/grid5000/from_scratch/debian-bullseye.yaml 
b/image/centos8/grid5000/from_scratch/centos-8.yaml
similarity index 62%
copy from image/grid5000/from_scratch/debian-bullseye.yaml
copy to image/centos8/grid5000/from_scratch/centos-8.yaml
index a017aab..1cccbda 100644
--- a/image/grid5000/from_scratch/debian-bullseye.yaml
+++ b/image/centos8/grid5000/from_scratch/centos-8.yaml
@@ -2,17 +2,16 @@
 # vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
 #==============================================================================
 #
-# DESCRIPTION: Debian 11 (Bullseye) recipe using the netinstall mechanism
+# DESCRIPTION: Centos 8 recipe using the netinstall mechanism
 #
 #==============================================================================
 ---
-extend: debian-base.yaml
-# Global variables use by Kameleon engine and the steps
+extend: centos-base.yaml
+
 global:
-  # Distribution
-  distrib: debian
-  release: bullseye
-  release_number: 11
+  release_number: 8
+  release: 8.5.2111
+  mirror_url: $${mirror_base_url}$${release}/BaseOS/$${arch}/os
 
 bootstrap:
   - "@base"
diff --git a/image/centos8/grid5000/from_scratch/centos-base.yaml 
b/image/centos8/grid5000/from_scratch/centos-base.yaml
new file mode 100644
index 0000000..19fdad2
--- /dev/null
+++ b/image/centos8/grid5000/from_scratch/centos-base.yaml
@@ -0,0 +1,55 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Centos generic recipe using the netinstall mechanism
+#
+# Uses the netinstall + kickstart mechanism
+#
+#==============================================================================
+---
+extend: base.yaml
+global:
+  distrib: centos
+  release_number: 7
+  # release_minor and release_date are not required if using the 
installer_iso_finder
+  # helper script
+  #release_major: $${release_number}
+  #release_minor: 4
+  #release_date: 1708
+  release: $${release_number}
+
+  #mirror_base_url: https://vault.centos.org/
+  # faster mirror
+  mirror_base_url: http://mirror.nsc.liu.se/centos-store/
+  mirror_url: $${mirror_base_url}$${release}/os/$${arch}/
+
+  # location of the CentOS netinstall iso
+  # can be set manually or guessed using a url finder helper script
+  #installer_iso_filename: 
CentOS-$${release_major}-$${arch}-NetInstall-$${release_date}.iso
+  #installer_iso_url: 
$${mirror_base_url}/$${release_major}.$${release_minor}.$${release_date}/isos/$${arch}/$${installer_iso_filename}
+  installer_iso_finder_helper: 
$${kameleon_data_dir}/helpers/netinstall_iso_finder.py
+  installer_iso_finder_mirror_url: $${mirror_base_url}
+  installer_iso_finder_args: $${distrib} $${release_number} $${arch} 
$${installer_iso_finder_mirror_url}
+  qemu_iso_path: $${kameleon_cwd}/$${distrib}.iso
+
+  # If memory size is too low, the VM crashes.
+  qemu_memory_size: 2G
+
+  base_kickstart_path: 
$${kameleon_data_dir}/kickstart/$${distrib}$${release_number}-ks.cfg
+
+  qemu_sendkeys_commands: 
$${kameleon_data_dir}/qemu-sendkeys/netinst-$${distrib}
+
+  # Include specific steps
+  include_steps:
+    - $${distrib}/$${release_number}
+    - $${distrib}
+
+bootstrap:
+  - "@base"
+
+setup:
+  - "@base"
+
+export:
+  - "@base"
diff --git a/image/grid5000/steps/aliases/defaults.yaml 
b/image/centos8/grid5000/steps/aliases/defaults.yaml
similarity index 100%
copy from image/grid5000/steps/aliases/defaults.yaml
copy to image/centos8/grid5000/steps/aliases/defaults.yaml
diff --git 
a/image/centos8/grid5000/steps/bootstrap/centos/prepare_autoinstall.yaml 
b/image/centos8/grid5000/steps/bootstrap/centos/prepare_autoinstall.yaml
new file mode 100644
index 0000000..db41561
--- /dev/null
+++ b/image/centos8/grid5000/steps/bootstrap/centos/prepare_autoinstall.yaml
@@ -0,0 +1,7 @@
+- copy_kickstart_file_to_http_directory:
+  - exec_local: mkdir -p $${http_directory}
+  - exec_local: cp $${base_kickstart_path} $${http_directory}/ks.cfg
+
+- customize_kickstart:
+  - exec_local: sed -i s'|rootpw\(.*\)|rootpw $${root_password}|'g 
$${http_directory}/ks.cfg
+  - exec_local: sed -i s'|url --url\(.*\)|url --url=$${mirror_url}|'g 
$${http_directory}/ks.cfg
diff --git a/image/grid5000/steps/bootstrap/download_installer.yaml 
b/image/centos8/grid5000/steps/bootstrap/download_installer.yaml
similarity index 100%
copy from image/grid5000/steps/bootstrap/download_installer.yaml
copy to image/centos8/grid5000/steps/bootstrap/download_installer.yaml
diff --git a/image/grid5000/steps/bootstrap/prepare_appliance.yaml 
b/image/centos8/grid5000/steps/bootstrap/prepare_appliance.yaml
similarity index 100%
copy from image/grid5000/steps/bootstrap/prepare_appliance.yaml
copy to image/centos8/grid5000/steps/bootstrap/prepare_appliance.yaml
diff --git a/image/grid5000/steps/bootstrap/prepare_disk.yaml 
b/image/centos8/grid5000/steps/bootstrap/prepare_disk.yaml
similarity index 100%
copy from image/grid5000/steps/bootstrap/prepare_disk.yaml
copy to image/centos8/grid5000/steps/bootstrap/prepare_disk.yaml
diff --git a/image/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml 
b/image/centos8/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml
similarity index 100%
copy from image/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml
copy to image/centos8/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml
diff --git a/image/grid5000/steps/bootstrap/start_http_server.yaml 
b/image/centos8/grid5000/steps/bootstrap/start_http_server.yaml
similarity index 100%
copy from image/grid5000/steps/bootstrap/start_http_server.yaml
copy to image/centos8/grid5000/steps/bootstrap/start_http_server.yaml
diff --git a/image/grid5000/steps/bootstrap/start_qemu.yaml 
b/image/centos8/grid5000/steps/bootstrap/start_qemu.yaml
similarity index 98%
copy from image/grid5000/steps/bootstrap/start_qemu.yaml
copy to image/centos8/grid5000/steps/bootstrap/start_qemu.yaml
index 35e0206..4dd5888 100644
--- a/image/grid5000/steps/bootstrap/start_qemu.yaml
+++ b/image/centos8/grid5000/steps/bootstrap/start_qemu.yaml
@@ -113,10 +113,10 @@
       echo "Starting qemu..."
       if [ "$${qemu_enable_kvm}" == "true" ] && (/usr/sbin/kvm-ok > /dev/null 
|| egrep '(vmx|svm)' /proc/cpuinfo > /dev/null) ; then # print warning if 
/usr/sbin/kvm-ok is not installed
         if [ "$${qemu_arch}" == "aarch64" ]; then
-          ENABLE_KVM="-enable-kvm -accel kvm -machine 
virt,gic-version=host,accel=kvm:tcg -cpu host"
+          ENABLE_KVM="-enable-kvm -machine virt,gic-version=host,accel=kvm:tcg 
-cpu host"
           #ENABLE_KVM="-global virtio-blk-pci.scsi=off -no-user-config 
-enable-fips -machine virt,gic-version=host,accel=kvm:tcg -cpu host -rtc 
driftfix=slew -object rng-random,filename=/dev/urandom,id=rng0 -device 
virtio-rng-pci,rng=rng0"
         elif [ "$${qemu_arch}" == "ppc64" ]; then
-          ENABLE_KVM="-enable-kvm -accel kvm -machine pseries,accel=kvm:tcg 
-cpu host"
+          ENABLE_KVM="-enable-kvm -machine pseries,accel=kvm:tcg -cpu host"
         else #X86_64
           ENABLE_KVM="-enable-kvm -cpu host"
         fi
diff --git a/image/grid5000/steps/checkpoints/simple.yaml 
b/image/centos8/grid5000/steps/checkpoints/simple.yaml
similarity index 100%
copy from image/grid5000/steps/checkpoints/simple.yaml
copy to image/centos8/grid5000/steps/checkpoints/simple.yaml
diff --git a/image/grid5000/steps/data/helpers/export_appliance.py 
b/image/centos8/grid5000/steps/data/helpers/export_appliance.py
similarity index 100%
copy from image/grid5000/steps/data/helpers/export_appliance.py
copy to image/centos8/grid5000/steps/data/helpers/export_appliance.py
diff --git a/image/grid5000/steps/data/helpers/netinstall_iso_finder.py 
b/image/centos8/grid5000/steps/data/helpers/netinstall_iso_finder.py
similarity index 76%
copy from image/grid5000/steps/data/helpers/netinstall_iso_finder.py
copy to image/centos8/grid5000/steps/data/helpers/netinstall_iso_finder.py
index a3a98ab..5eebef5 100755
--- a/image/grid5000/steps/data/helpers/netinstall_iso_finder.py
+++ b/image/centos8/grid5000/steps/data/helpers/netinstall_iso_finder.py
@@ -128,19 +128,45 @@ if __name__ == '__main__':
             [visited,found] = url_find(servers, set(), set())
         elif (args.distrib.lower() == "centos"):
             if args.mirror == None:
-                args.mirror = "http://mirror.in2p3.fr/linux/CentOS/";
+                args.mirror = "https://vault.centos.org/";
             if not re.match("^\d+$",args.version):
                 raise Exception("please give the CentOS release number (e.g. 7 
for CentOS-7)")
             if args.version == '6':
-                url_regex = 
re.compile("^"+args.mirror+"(?:"+args.version+"/(?:isos/(?:"+args.arch+"/(?:CentOS-"+args.version+"(?:\.\d+)?-"+args.arch+"-netinstall\.iso)?)?)?)?$")
+                url_regex = 
re.compile("^"+args.mirror+"(?:"+args.version+"(?:\.\d+)?/(?:isos/(?:"+args.arch+"/(?:CentOS-"+args.version+"(?:\.\d+)?-"+args.arch+"-netinstall\.iso)?)?)?)?$")
                 target_regex = 
re.compile("^.*CentOS-\d+(?:\.\d+)?-\w+-netinstall\.iso$")
             elif args.version == '7':
-                url_regex = 
re.compile("^"+args.mirror+"(?:"+args.version+"/(?:isos/(?:"+args.arch+"/(?:CentOS-"+args.version+"-"+args.arch+"-NetInstall-\d+\.iso)?)?)?)?$")
+                url_regex = 
re.compile("^"+args.mirror+"(?:"+args.version+"(?:\.\d+)*/(?:isos/(?:"+args.arch+"/(?:CentOS-"+args.version+"-"+args.arch+"-NetInstall-\d+\.iso)?)?)?)?$")
                 target_regex = 
re.compile("^.*CentOS-\d+-\w+-NetInstall-\d+\.iso$")
             else:
-                url_regex = 
re.compile("^"+args.mirror+"(?:"+args.version+"/(?:isos/(?:"+args.arch+"/(?:CentOS-"+args.version+"\.\d+\.\d+-"+args.arch+"-boot\.iso)?)?)?)?$")
+                url_regex = 
re.compile("^"+args.mirror+"(?:"+args.version+"(?:\.\d+)*/(?:isos/(?:"+args.arch+"/(?:CentOS-"+args.version+"\.\d+\.\d+-"+args.arch+"-boot\.iso)?)?)?)?$")
                 target_regex = 
re.compile("^.*CentOS-\d+\.\d+\.\d+-\w+-boot\.iso$")
             [visited,found] = url_find(set([args.mirror]), set(), set())
+        elif (args.distrib.lower() == "centos-stream"):
+            if not re.match("^\d+$",args.version):
+                raise Exception("please give the CentOS-stream release number 
(e.g. 8)")
+            if args.version == '8':
+                if args.mirror == None:
+                    args.mirror = "http://mirror.in2p3.fr/linux/CentOS/";
+                url_regex = 
re.compile("^"+args.mirror+"(?:"+args.version+"-stream/(?:isos/(?:"+args.arch+"/(?:CentOS-Stream-"+args.version+"-"+args.arch+"-latest-boot\.iso)?)?)?)?$")
+                target_regex = 
re.compile("^.*CentOS-Stream-\d+-\w+-latest-boot\.iso$")
+            else:
+                if args.mirror == None:
+                    args.mirror = "http://mirror.stream.centos.org/";
+                url_regex = 
re.compile("^"+args.mirror+"(?:"+args.version+"-stream/(?:BaseOS/(?:"+args.arch+"/(?:iso/(?:CentOS-Stream-"+args.version+"-latest-"+args.arch+"-boot\.iso)?)?)?)?)?$")
+                target_regex = 
re.compile("^.*CentOS-Stream-\d+-latest-\w+-boot\.iso$")
+
+            [visited,found] = url_find(set([args.mirror]), set(), set())
+        elif (args.distrib.lower() == "rocky"):
+            if args.mirror == None:
+                args.mirror = "https://mirror.in2p3.fr/linux/rocky/";
+            if not re.match("^\d+$",args.version):
+                raise Exception("please give the Rocky Linux release number 
(e.g. 8 for Rocky Linux 8)")
+            if args.version != '8':
+                raise Exception("Only Rocky Linux 8 is supported !")
+            else:
+                url_regex = 
re.compile("^"+args.mirror+"(?:"+args.version+"/(?:isos/(?:"+args.arch+"/(?:Rocky-"+args.version+"\.\d+-"+args.arch+"-boot\.iso)?)?)?)?$")
+                target_regex = re.compile("^.*Rocky-\d+\.\d+-\w+-boot\.iso$")
+            [visited,found] = url_find(set([args.mirror]), set(), set())
         else:
             raise Exception("this distribution is not supported")
         logger.info("URL regex: "+url_regex.pattern)
@@ -155,7 +181,7 @@ if __name__ == '__main__':
             if (args.distrib.lower() == "debian"):
                 print(sorted(found,key=lambda 
x:key_normalize(re.sub(r".*/debian-(\d+).(\d+).(\d+)-"+args.arch+"-netinst\.iso$",r"\1.\2.\3",x)),reverse=True)[0])
             else:
-                print(sorted(found, reverse=False)[0])
+                print(sorted(found, reverse=True)[0])
         else:
             raise Exception("no url found")
     except Exception as exc:
diff --git a/image/grid5000/steps/data/helpers/simple_http_server.py 
b/image/centos8/grid5000/steps/data/helpers/simple_http_server.py
similarity index 100%
copy from image/grid5000/steps/data/helpers/simple_http_server.py
copy to image/centos8/grid5000/steps/data/helpers/simple_http_server.py
diff --git a/image/centos8/grid5000/steps/data/kickstart/centos8-ks.cfg 
b/image/centos8/grid5000/steps/data/kickstart/centos8-ks.cfg
new file mode 100644
index 0000000..84c3175
--- /dev/null
+++ b/image/centos8/grid5000/steps/data/kickstart/centos8-ks.cfg
@@ -0,0 +1,46 @@
+install
+url --url="http://mirror.nsc.liu.se/centos-store/8.5.2111/BaseOS/x86_64/os/";
+
+lang en_US.UTF-8
+keyboard --vckeymap=us --xlayouts='us'
+timezone Europe/Paris --isUtc 
--ntpservers=0.centos.pool.ntp.org,1.centos.pool.ntp.org,2.centos.pool.ntp.org,3.centos.pool.ntp.org
+
+firewall --enable --ssh
+selinux --disabled
+rootpw kameleon
+
+text
+skipx
+logging --level=info
+
+## Parition
+clearpart --all --initlabel
+bootloader --location=mbr
+zerombr
+# Disk partitioning information
+# autopart
+part /boot --fstype="ext4" --size=500
+part swap --hibernation
+part / --fstype="ext4" --size=3000 --grow
+
+
+authconfig --enableshadow --passalgo=sha512
+auth --useshadow --enablemd5
+firstboot --disabled
+reboot
+
+%packages
+@Core
+dracut-config-generic
+tar
+-dracut-config-rescue
+grub2-efi-x64-modules
+efibootmgr
+%end
+
+%post
+# Update distribution
+yum update -y
+# Make ssh quicker in disconnected situations.
+echo 'UseDNS no' >> /etc/ssh/sshd_config
+%end
diff --git a/image/grid5000/steps/data/qemu-sendkeys.rb 
b/image/centos8/grid5000/steps/data/qemu-sendkeys.rb
old mode 100644
new mode 100755
similarity index 100%
copy from image/grid5000/steps/data/qemu-sendkeys.rb
copy to image/centos8/grid5000/steps/data/qemu-sendkeys.rb
diff --git a/image/centos8/grid5000/steps/data/qemu-sendkeys/netinst-centos 
b/image/centos8/grid5000/steps/data/qemu-sendkeys/netinst-centos
new file mode 100644
index 0000000..f46bf51
--- /dev/null
+++ b/image/centos8/grid5000/steps/data/qemu-sendkeys/netinst-centos
@@ -0,0 +1 @@
+<tab><wait> text ks=http://%LOCAL_IP%:%HTTP_PORT%/ks.cfg<kp_enter>
diff --git a/image/grid5000/steps/disable_checkpoint.yaml 
b/image/centos8/grid5000/steps/disable_checkpoint.yaml
similarity index 100%
copy from image/grid5000/steps/disable_checkpoint.yaml
copy to image/centos8/grid5000/steps/disable_checkpoint.yaml
diff --git a/image/grid5000/steps/enable_checkpoint.yaml 
b/image/centos8/grid5000/steps/enable_checkpoint.yaml
similarity index 100%
copy from image/grid5000/steps/enable_checkpoint.yaml
copy to image/centos8/grid5000/steps/enable_checkpoint.yaml
diff --git a/image/grid5000/steps/env/bashrc 
b/image/centos8/grid5000/steps/env/bashrc
similarity index 100%
copy from image/grid5000/steps/env/bashrc
copy to image/centos8/grid5000/steps/env/bashrc
diff --git a/image/grid5000/steps/env/functions.sh 
b/image/centos8/grid5000/steps/env/functions.sh
similarity index 100%
copy from image/grid5000/steps/env/functions.sh
copy to image/centos8/grid5000/steps/env/functions.sh
diff --git a/image/grid5000/steps/export/debian/clean_dhcp_leases.yaml 
b/image/centos8/grid5000/steps/export/centos/clean_dhcp_leases.yaml
similarity index 62%
copy from image/grid5000/steps/export/debian/clean_dhcp_leases.yaml
copy to image/centos8/grid5000/steps/export/centos/clean_dhcp_leases.yaml
index 85ee860..52daa38 100644
--- a/image/grid5000/steps/export/debian/clean_dhcp_leases.yaml
+++ b/image/centos8/grid5000/steps/export/centos/clean_dhcp_leases.yaml
@@ -1,2 +1,2 @@
 - clean_dhcp_leases:
-  - exec_local: virt-customize -a $${image_disk}.$${image_format} 
--run-command "rm -rf /var/lib/dhcp/*"
+  - exec_local: virt-customize -a $${image_disk}.$${image_format} 
--run-command "rm -rf /var/lib/NetworkManager/*"
\ No newline at end of file
diff --git a/image/grid5000/steps/export/do_qcow2_finish_works.yaml 
b/image/centos8/grid5000/steps/export/do_qcow2_finish_works.yaml
similarity index 100%
copy from image/grid5000/steps/export/do_qcow2_finish_works.yaml
copy to image/centos8/grid5000/steps/export/do_qcow2_finish_works.yaml
diff --git a/image/grid5000/steps/export/export_g5k.yaml 
b/image/centos8/grid5000/steps/export/export_g5k.yaml
similarity index 84%
copy from image/grid5000/steps/export/export_g5k.yaml
copy to image/centos8/grid5000/steps/export/export_g5k.yaml
index 3362908..6cb89f1 100644
--- a/image/grid5000/steps/export/export_g5k.yaml
+++ b/image/centos8/grid5000/steps/export/export_g5k.yaml
@@ -10,7 +10,8 @@
 - g5k_destructive: "false"
 - g5k_tar_compression: "gzip"
 - g5k_postinst_compression: "gzip"
-- g5k_description: $${distrib} $${release_number} ($${release}) for 
$${g5k_image_arch} - $${g5k_variant}
+- g5k_no_chroot_for_grub: "false"
+- g5k_description: $${distrib} $${release_number} ($${release}) for $${arch} - 
$${g5k_variant}
 
 # - save_as_tgz:
 #   - check_cmd_local: guestfish
@@ -28,7 +29,8 @@
       if [[ "x$${g5k_variant}" != "xxen" ]]; then
       cat << EOF > $${output}.dsc
       $${dashes}
-      name: $${kameleon_recipe_name}
+      name: $${distrib}$${release_number}-$${g5k_variant}
+      alias: $${distrib}$${release_number}-$${g5k_image_arch}-$${g5k_variant}
       arch: $${arch}
       version: $${g5k_version}
       description: $${g5k_description}
@@ -55,7 +57,8 @@
       else
       cat << EOF > $${output}.dsc
       $${dashes}
-      name: $${kameleon_recipe_name}
+      name: $${distrib}$${release_number}-$${g5k_variant}
+      alias: $${distrib}$${release_number}-$${g5k_image_arch}-$${g5k_variant}
       arch: $${arch}
       version: $${g5k_version}
       description: $${g5k_description}
@@ -82,6 +85,12 @@
       multipart: false
       EOF
       fi
+      if [[ "x$${g5k_no_chroot_for_grub}" == "xtrue" ]]; then
+      cat << EOF >> $${output}.dsc
+      custom_variables:
+        BOOTLOADER_NO_GRUB_FROM_DEST: '1'
+      EOF
+      fi
 
 - generate_md5:
   - exec_local: md5sum $${kameleon_recipe_name}.* > 
$${kameleon_recipe_name}.md5
diff --git a/image/grid5000/steps/export/save_appliance_VM.yaml 
b/image/centos8/grid5000/steps/export/save_appliance_VM.yaml
similarity index 100%
copy from image/grid5000/steps/export/save_appliance_VM.yaml
copy to image/centos8/grid5000/steps/export/save_appliance_VM.yaml
diff --git 
a/image/centos8/grid5000/steps/setup/centos/8/create_kernel_symlinks.yaml 
b/image/centos8/grid5000/steps/setup/centos/8/create_kernel_symlinks.yaml
new file mode 100644
index 0000000..3d895dd
--- /dev/null
+++ b/image/centos8/grid5000/steps/setup/centos/8/create_kernel_symlinks.yaml
@@ -0,0 +1,25 @@
+- create_kernel_symlinks_hook:
+  - exec_in: |
+      mkdir -p /etc/kernel/install.d/
+      cat <<'EOF' > /etc/kernel/install.d/01-symlinks.install
+      #!/bin/bash
+      ACTION=${1:-add}
+      KERNEL_VERSION="${2:-$(uname -r)}"
+      KERNEL_IMAGE="/boot/vmlinuz-${KERNEL_VERSION}"
+      INITRAMFS_IMAGE="/boot/initramfs-${KERNEL_VERSION}.img"
+      case $ACTION in
+        add)
+          echo "Create relative symlinks in /:"
+          ln -sfvn ${KERNEL_IMAGE#/} /vmlinuz
+          ln -sfvn ${INITRAMFS_IMAGE#/} /initramfs.img
+        ;;
+        remove)
+        ;;
+      esac
+      EOF
+      chmod 755 /etc/kernel/install.d/01-symlinks.install
+- force_create_kernel_symlinks:
+  - on_setup_clean:
+    - exec_in: |
+        KERNEL_PKG=$(rpm -q kernel --last | head -n1 | cut -d\  -f1)
+        /etc/kernel/install.d/01-symlinks.install add ${KERNEL_PKG#kernel-}
diff --git a/image/centos8/grid5000/steps/setup/centos/clean_system.yaml 
b/image/centos8/grid5000/steps/setup/centos/clean_system.yaml
new file mode 100644
index 0000000..79dc482
--- /dev/null
+++ b/image/centos8/grid5000/steps/setup/centos/clean_system.yaml
@@ -0,0 +1,26 @@
+- remove_old_kernels:
+  - on_setup_clean:
+    - exec_in: rpm -q kernel --last | tail -n +2 | cut -d\  -f1 | xargs -I {} 
rpm -ev {}
+
+- clean_yum_cache:
+  - on_setup_clean:
+    - exec_in: echo "Cleaning old yum repodata."
+    - exec_in: yum clean all -y
+    - exec_in: yum history new
+    - exec_in: truncate -c -s 0 /var/log/yum.log
+
+- clean_network:
+  - on_setup_clean:
+    - exec_in: rm -f /etc/sysconfig/network-scripts/ifcfg-e*
+    - exec_in: rm -rf /var/lib/dhcp/*
+    - exec_in: rm -rf /var/lib/NetworkManager/*
+
+- clean_udev:
+  - on_setup_clean:
+    - exec_in: rm -rf /etc/udev/rules.d/70-persistent-net.rules
+    - exec_in: rm -rf /dev/.udev/
+
+- clean_rescue_initramfs:
+  - on_setup_clean:
+    - exec_in: rm -f /boot/initramfs*rescue*
+    - exec_in: rm -f /boot/vmlinuz*rescue*
diff --git a/image/centos8/grid5000/steps/setup/centos/configure_system.yaml 
b/image/centos8/grid5000/steps/setup/centos/configure_system.yaml
new file mode 100644
index 0000000..15547cb
--- /dev/null
+++ b/image/centos8/grid5000/steps/setup/centos/configure_system.yaml
@@ -0,0 +1,61 @@
+# System configuration
+- grub_cmdline_linux: ""
+
+# This will set the locals and the timezone
+- set_locales:
+  # uncomment the locales
+  - exec_in: |
+      echo $${locales} | tr ' ' '\n' | xargs -I {} localedef -v -c -i {} -i {} 
-f UTF-8 $${lang} 2>&1 || :
+
+- set_timezone:
+  - exec_in: ln -sf /usr/share/zoneinfo/$${timezone} /etc/localtime
+
+- set_wheel_sudo:
+  - exec_in: echo "%wheel      ALL=(ALL) ALL" >> /etc/sudoers
+
+- set_root_password:
+  - exec_in: echo -n 'root:$${root_password}' | chpasswd
+
+- remove_random_seed:
+  - exec_in: echo "Removing random-seed so it's not the same in every image."
+  - exec_in: rm -f /var/lib/random-seed
+
+- cracklib_path: /usr/share/cracklib/pw_dict.pwd
+
+- compress_cracklib:
+  - exec_in: test ! -f $${cracklib_path} || gzip -9 $${cracklib_path}
+
+- selinux: disabled
+- selinuxtype: targeted
+
+- configure_selinux:
+  - write_in:
+    - /etc/selinux/config
+    - |
+      # This file controls the state of SELinux on the system.
+      # SELINUX= can take one of these three values:
+      #       enforcing - SELinux security policy is enforced.
+      #       permissive - SELinux prints warnings instead of enforcing.
+      #       disabled - SELinux is fully disabled.
+      SELINUX=$${selinux}
+      # SELINUXTYPE= type of policy in use. Possible values are:
+      #       targeted - Only targeted network daemons are protected.
+      #       strict - Full SELinux protection.
+      SELINUXTYPE=$${selinuxtype}
+
+- make_new_kernels_the_default:
+  - write_in:
+    - /etc/sysconfig/kernel
+    - |
+      # UPDATEDEFAULT specifies if new-kernel-pkg should make
+      # new kernels the default
+      UPDATEDEFAULT=yes
+      # DEFAULTKERNEL specifies the default kernel package type
+      DEFAULTKERNEL=kernel
+
+- fix_NetworkManager_timeout:
+  - exec_in: sed -i "s/--timeout=30/--timeout=50/" 
/usr/lib/systemd/system/NetworkManager-wait-online.service
+
+- configure_grub:
+  - exec_in: sed -i 's|^\(GRUB_CMDLINE_LINUX=\).*|\1"$${grub_cmdline_linux}"|' 
/etc/default/grub
+  - exec_in: grub2-mkconfig -o "$(readlink -e /etc/grub2.cfg)"
diff --git a/image/centos8/grid5000/steps/setup/centos/disable_kdump.yaml 
b/image/centos8/grid5000/steps/setup/centos/disable_kdump.yaml
new file mode 100644
index 0000000..ac35a77
--- /dev/null
+++ b/image/centos8/grid5000/steps/setup/centos/disable_kdump.yaml
@@ -0,0 +1,7 @@
+# This disables kdump
+# To enabled, it needs:
+# - crashkernel=auto or a memory size in the kernel command line (grub)
+# - /boot/initramfs-XXX.x86_64kdump.img to be generated (does not work in 
kameloen qemu VM.
+# 
https://access.redhat.com/documentation/fr-fr/red_hat_enterprise_linux/7/html/kernel_crash_dump_guide/sect-memory-requirements
+- disable_kdump_service:
+  - exec_in: systemctl disable kdump
diff --git a/image/centos8/grid5000/steps/setup/centos/install_packages.yaml 
b/image/centos8/grid5000/steps/setup/centos/install_packages.yaml
new file mode 100644
index 0000000..3853b34
--- /dev/null
+++ b/image/centos8/grid5000/steps/setup/centos/install_packages.yaml
@@ -0,0 +1,13 @@
+
+# > $ ping X.X.X.X
+# > ping: icmp open socket: Operation not permitted
+# http://comments.gmane.org/gmane.linux.redhat.fedora.general/409425
+
+# Fixed iputils
+- reinstall_iputils:
+  - exec_in: yum reinstall -y iputils 2>&1
+
+# Software Install
+- install_packages:
+  - exec_in: yum install -y epel-release 2>&1
+  - exec_in: yum install -y $${packages} 2>&1
diff --git a/image/centos8/grid5000/steps/setup/centos/minimal_install.yaml 
b/image/centos8/grid5000/steps/setup/centos/minimal_install.yaml
new file mode 100644
index 0000000..b3e11cb
--- /dev/null
+++ b/image/centos8/grid5000/steps/setup/centos/minimal_install.yaml
@@ -0,0 +1,12 @@
+
+- set_root_password:
+  - exec_in: echo -n 'root:$${root_password}' | chpasswd
+
+- update_system:
+  - test:
+    # fix URL for centos 8 (not needed for centos-stream 8)
+    - exec_local: test "$${distrib}" == "centos" -a "$${release_number}" == "8"
+    - exec_in: |
+        sed -i -e 's%^\(mirrorlist=http://mirrorlist.centos.org\)%#\1%' 
/etc/yum.repos.d/*
+        sed -i -e 
's%^#baseurl=http://mirror.centos.org/%baseurl=http://vault.centos.org/%' 
/etc/yum.repos.d/*
+  - exec_in: yum upgrade -y
diff --git a/image/centos8/grid5000/steps/setup/centos/set_g5k_motd.yaml 
b/image/centos8/grid5000/steps/setup/centos/set_g5k_motd.yaml
new file mode 100644
index 0000000..f5d3eea
--- /dev/null
+++ b/image/centos8/grid5000/steps/setup/centos/set_g5k_motd.yaml
@@ -0,0 +1,19 @@
+- g5k_version: "unknown"
+
+- create_dhclient_hook_for_g5k_hostname:
+  - write_in:
+    - /etc/motd
+    - |
+      %%RECIPE_NAME%%-%%VERSION%%
+      (Image based on %%DISTRIB%% %%RELEASE%% for %%ARCH%%)
+      Maintained by support-staff <support-staff@lists.grid5000.fr>
+      
+  - exec_in: |
+      sed -i \
+        -e 's/%%RECIPE_NAME%%/$${kameleon_recipe_name}/g' \
+        -e 's/%%DISTRIB%%/$${distrib}/g' \
+        -e 's/%%RELEASE%%/$${release}/g' \
+        -e 's/%%ARCH%%/$${arch}/g' \
+        -e 's/%%VERSION%%/$${g5k_version}/g' \
+        /etc/motd
+        
diff --git a/image/centos8/grid5000/steps/setup/set_g5k_release.yaml 
b/image/centos8/grid5000/steps/setup/set_g5k_release.yaml
new file mode 100644
index 0000000..6762fd5
--- /dev/null
+++ b/image/centos8/grid5000/steps/setup/set_g5k_release.yaml
@@ -0,0 +1,14 @@
+- g5k_release_file: /etc/grid5000/release
+- g5k_version: 1
+
+- set_release:
+  - exec_in: mkdir -p $(dirname $${g5k_release_file})
+  - write_in:
+    - $${g5k_release_file}
+    - |
+      $${kameleon_recipe_name}-$${g5k_version}
+  # this extracts last git commit hash from local repo
+  - pipe:
+    - exec_local: |
+        (cd ../.. && git rev-parse HEAD 2>/dev/null) || echo "Error: could not 
retrieve git sha1"
+    - exec_in: cat - >> $${g5k_release_file}
diff --git a/image/centos8/taler-centos8.yaml b/image/centos8/taler-centos8.yaml
new file mode 100644
index 0000000..6099991
--- /dev/null
+++ b/image/centos8/taler-centos8.yaml
@@ -0,0 +1,92 @@
+#==============================================================================
+# vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
+#==============================================================================
+#
+# DESCRIPTION: Recipe extending a Grid'5000 environment recipe supported by
+# the technical team. The build will be similar to the one of the supported
+# environments, involving puppet notably.
+#
+#==============================================================================
+# This recipe extends another. To look at the step involed, run:
+#   kameleon dryrun taler-centos8.yaml
+# To see the variables that you can override, use the following command:
+#   kameleon info taler-centos8.yaml
+---
+extend: grid5000/centos8-x64-min.yaml
+
+global:
+  ### Uncomment and adapt the global variables below as needed
+
+  ## Export format to generate
+  # appliance_formats: qcow2 tar.zst
+
+  ## Environment description customization
+  ## Author
+  g5k_author: "bossm8@bfh.ch"
+  ## Version
+  g5k_version: 1
+  ## Environment image path and compression
+  g5k_tar_path: 
"http://public.lyon.grid5000.fr/~$${g5k_user}/taler-centos8.tar.zst";
+  # g5k_tar_compression: "zstd"
+  ## Environment postinstall path, compression, and script command
+  # g5k_postinst_path: server:///grid5000/postinstalls/g5k-postinstall.tgz
+  # g5k_postinst_compression: "gzip"
+  # g5k_postinst_script: g5k-postinstall --net redhat
+  ## Environment kernel path and params
+  # g5k_kernel_path: "/vmlinuz"
+  # g5k_initrd_path: "/initrd.img"
+  # g5k_kernel_params: ""
+  ## Environment visibility
+  # g5k_visibility: "shared"
+  taler_packages: "postgresql13 postgresql-contrib postgresql13-contrib 
pgstats_13 curl wget jq bc sudo git bind-utils bind net-tools netcat parallel 
dnsmasq bash-completion vim"
+  taler_node_exporter_version: "1.3.1"
+  taler_path: /root/taler
+  grid5k_commit_sha: master
+  ## Other parameters can be changed, see kameleon info taler-centos8.yaml
+
+bootstrap:
+  ### The bootstrap section takes in charge the initial installation of the
+  ## system (distribution installation). No modification should be needed here.
+  - "@base"
+
+setup:
+  ### The setup section is where customizations of the system take place.
+  ## We can request steps from the extended recipe to be executed
+  - "@base"
+  ## We add steps required by our customization after or before @base. Use
+  ## kameleon dryrun taler-centos8.yaml to see the resulting steps in the 
build.
+
+  - install:
+    - packages:
+      - exec_in: |
+         yum install -y yum install 
https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
+         dnf install -y 
https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
+         dnf -qy module disable postgresql
+         yum update -y
+         yum upgrade -y
+
+         yum install -y $${taler_packages} 
+
+         mkdir -p $${taler_path}
+
+    - grid5k:
+      - exec_in: |
+         cd $${taler_path}
+
+         git clone git://git.taler.net/grid5k.git 
+         cd grid5k
+         git checkout $${grid5k_commit_sha} || true
+
+    - prometheus_node_exporter:
+      - exec_in: |
+         useradd -M -r -s /bin/false prometheus
+         wget 
https://github.com/prometheus/node_exporter/releases/download/v$${taler_node_exporter_version}/node_exporter-$${taler_node_exporter_version}.linux-amd64.tar.gz
 -P /tmp
+         cd /tmp
+         tar xzf 
node_exporter-$${taler_node_exporter_version}.linux-amd64.tar.gz
+         mv 
node_exporter-$${taler_node_exporter_version}.linux-amd64/node_exporter 
/usr/bin/prometheus-node-exporter
+         chown prometheus:prometheus /usr/bin/prometheus-node-exporter
+
+export:
+  ### The export section takes in charge the export of your customized 
Grid'5000
+  ## environment. No modification should be needed here.
+  - "@base"
diff --git a/image/grid5000/debian11-x64-common.yaml 
b/image/debian11/grid5000/debian11-x64-common.yaml
similarity index 100%
rename from image/grid5000/debian11-x64-common.yaml
rename to image/debian11/grid5000/debian11-x64-common.yaml
diff --git a/image/grid5000/debian11-x64-nfs.yaml 
b/image/debian11/grid5000/debian11-x64-nfs.yaml
similarity index 100%
rename from image/grid5000/debian11-x64-nfs.yaml
rename to image/debian11/grid5000/debian11-x64-nfs.yaml
diff --git a/image/grid5000/from_scratch/base.yaml 
b/image/debian11/grid5000/from_scratch/base.yaml
similarity index 100%
rename from image/grid5000/from_scratch/base.yaml
rename to image/debian11/grid5000/from_scratch/base.yaml
diff --git a/image/grid5000/from_scratch/debian-base.yaml 
b/image/debian11/grid5000/from_scratch/debian-base.yaml
similarity index 100%
rename from image/grid5000/from_scratch/debian-base.yaml
rename to image/debian11/grid5000/from_scratch/debian-base.yaml
diff --git a/image/grid5000/from_scratch/debian-bullseye.yaml 
b/image/debian11/grid5000/from_scratch/debian-bullseye.yaml
similarity index 100%
rename from image/grid5000/from_scratch/debian-bullseye.yaml
rename to image/debian11/grid5000/from_scratch/debian-bullseye.yaml
diff --git a/image/grid5000/steps/aliases/defaults.yaml 
b/image/debian11/grid5000/steps/aliases/defaults.yaml
similarity index 100%
rename from image/grid5000/steps/aliases/defaults.yaml
rename to image/debian11/grid5000/steps/aliases/defaults.yaml
diff --git a/image/grid5000/steps/bootstrap/debian/prepare_autoinstall.yaml 
b/image/debian11/grid5000/steps/bootstrap/debian/prepare_autoinstall.yaml
similarity index 100%
rename from image/grid5000/steps/bootstrap/debian/prepare_autoinstall.yaml
rename to 
image/debian11/grid5000/steps/bootstrap/debian/prepare_autoinstall.yaml
diff --git a/image/grid5000/steps/bootstrap/download_installer.yaml 
b/image/debian11/grid5000/steps/bootstrap/download_installer.yaml
similarity index 100%
rename from image/grid5000/steps/bootstrap/download_installer.yaml
rename to image/debian11/grid5000/steps/bootstrap/download_installer.yaml
diff --git a/image/grid5000/steps/bootstrap/prepare_appliance.yaml 
b/image/debian11/grid5000/steps/bootstrap/prepare_appliance.yaml
similarity index 100%
rename from image/grid5000/steps/bootstrap/prepare_appliance.yaml
rename to image/debian11/grid5000/steps/bootstrap/prepare_appliance.yaml
diff --git a/image/grid5000/steps/bootstrap/prepare_disk.yaml 
b/image/debian11/grid5000/steps/bootstrap/prepare_disk.yaml
similarity index 100%
rename from image/grid5000/steps/bootstrap/prepare_disk.yaml
rename to image/debian11/grid5000/steps/bootstrap/prepare_disk.yaml
diff --git a/image/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml 
b/image/debian11/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml
similarity index 100%
rename from image/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml
rename to 
image/debian11/grid5000/steps/bootstrap/prepare_ssh_to_out_context.yaml
diff --git a/image/grid5000/steps/bootstrap/start_http_server.yaml 
b/image/debian11/grid5000/steps/bootstrap/start_http_server.yaml
similarity index 100%
rename from image/grid5000/steps/bootstrap/start_http_server.yaml
rename to image/debian11/grid5000/steps/bootstrap/start_http_server.yaml
diff --git a/image/grid5000/steps/bootstrap/start_qemu.yaml 
b/image/debian11/grid5000/steps/bootstrap/start_qemu.yaml
similarity index 100%
rename from image/grid5000/steps/bootstrap/start_qemu.yaml
rename to image/debian11/grid5000/steps/bootstrap/start_qemu.yaml
diff --git a/image/grid5000/steps/checkpoints/simple.yaml 
b/image/debian11/grid5000/steps/checkpoints/simple.yaml
similarity index 100%
rename from image/grid5000/steps/checkpoints/simple.yaml
rename to image/debian11/grid5000/steps/checkpoints/simple.yaml
diff --git a/image/grid5000/steps/data/helpers/export_appliance.py 
b/image/debian11/grid5000/steps/data/helpers/export_appliance.py
similarity index 100%
rename from image/grid5000/steps/data/helpers/export_appliance.py
rename to image/debian11/grid5000/steps/data/helpers/export_appliance.py
diff --git a/image/grid5000/steps/data/helpers/netinstall_iso_finder.py 
b/image/debian11/grid5000/steps/data/helpers/netinstall_iso_finder.py
similarity index 100%
rename from image/grid5000/steps/data/helpers/netinstall_iso_finder.py
rename to image/debian11/grid5000/steps/data/helpers/netinstall_iso_finder.py
diff --git a/image/grid5000/steps/data/helpers/simple_http_server.py 
b/image/debian11/grid5000/steps/data/helpers/simple_http_server.py
similarity index 100%
rename from image/grid5000/steps/data/helpers/simple_http_server.py
rename to image/debian11/grid5000/steps/data/helpers/simple_http_server.py
diff --git a/image/grid5000/steps/data/preseed/debian-bullseye-preseed.cfg 
b/image/debian11/grid5000/steps/data/preseed/debian-bullseye-preseed.cfg
similarity index 100%
rename from image/grid5000/steps/data/preseed/debian-bullseye-preseed.cfg
rename to image/debian11/grid5000/steps/data/preseed/debian-bullseye-preseed.cfg
diff --git a/image/grid5000/steps/data/qemu-sendkeys.rb 
b/image/debian11/grid5000/steps/data/qemu-sendkeys.rb
similarity index 100%
rename from image/grid5000/steps/data/qemu-sendkeys.rb
rename to image/debian11/grid5000/steps/data/qemu-sendkeys.rb
diff --git a/image/grid5000/steps/data/qemu-sendkeys/netinst-iso-debian 
b/image/debian11/grid5000/steps/data/qemu-sendkeys/netinst-iso-debian
similarity index 100%
rename from image/grid5000/steps/data/qemu-sendkeys/netinst-iso-debian
rename to image/debian11/grid5000/steps/data/qemu-sendkeys/netinst-iso-debian
diff --git a/image/grid5000/steps/data/setup/hiera/hiera.yaml 
b/image/debian11/grid5000/steps/data/setup/hiera/hiera.yaml
similarity index 100%
rename from image/grid5000/steps/data/setup/hiera/hiera.yaml
rename to image/debian11/grid5000/steps/data/setup/hiera/hiera.yaml
diff --git a/image/grid5000/steps/data/setup/hiera/hieradata/defaults.yaml 
b/image/debian11/grid5000/steps/data/setup/hiera/hieradata/defaults.yaml
similarity index 100%
rename from image/grid5000/steps/data/setup/hiera/hieradata/defaults.yaml
rename to image/debian11/grid5000/steps/data/setup/hiera/hieradata/defaults.yaml
diff --git a/image/grid5000/steps/data/setup/puppet/manifests/base.pp 
b/image/debian11/grid5000/steps/data/setup/puppet/manifests/base.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/manifests/base.pp
rename to image/debian11/grid5000/steps/data/setup/puppet/manifests/base.pp
diff --git a/image/grid5000/steps/data/setup/puppet/manifests/big.pp 
b/image/debian11/grid5000/steps/data/setup/puppet/manifests/big.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/manifests/big.pp
rename to image/debian11/grid5000/steps/data/setup/puppet/manifests/big.pp
diff --git a/image/grid5000/steps/data/setup/puppet/manifests/min.pp 
b/image/debian11/grid5000/steps/data/setup/puppet/manifests/min.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/manifests/min.pp
rename to image/debian11/grid5000/steps/data/setup/puppet/manifests/min.pp
diff --git a/image/grid5000/steps/data/setup/puppet/manifests/nfs.pp 
b/image/debian11/grid5000/steps/data/setup/puppet/manifests/nfs.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/manifests/nfs.pp
rename to image/debian11/grid5000/steps/data/setup/puppet/manifests/nfs.pp
diff --git a/image/grid5000/steps/data/setup/puppet/manifests/std.pp 
b/image/debian11/grid5000/steps/data/setup/puppet/manifests/std.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/manifests/std.pp
rename to image/debian11/grid5000/steps/data/setup/puppet/manifests/std.pp
diff --git a/image/grid5000/steps/data/setup/puppet/manifests/xen.pp 
b/image/debian11/grid5000/steps/data/setup/puppet/manifests/xen.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/manifests/xen.pp
rename to image/debian11/grid5000/steps/data/setup/puppet/manifests/xen.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/cpufreq/cpufrequtils
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/cpufreq/cpufrequtils
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/base/cpufreq/cpufrequtils
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/cpufreq/cpufrequtils
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/ganglia/gmond.conf
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/ganglia/gmond.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/base/ganglia/gmond.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/ganglia/gmond.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/90-ib.rules
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/90-ib.rules
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/90-ib.rules
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/90-ib.rules
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openib.conf
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openib.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openib.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openib.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd.service
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd.service
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd.service
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/infiniband/openibd.service
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/kexec/kexec 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/kexec/kexec
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/base/kexec/kexec
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/kexec/kexec
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/mx/ip_over_mx 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/mx/ip_over_mx
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/base/mx/ip_over_mx
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/mx/ip_over_mx
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/ndctl/ndctl.preset
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/ndctl/ndctl.preset
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/base/ndctl/ndctl.preset
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/ndctl/ndctl.preset
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/sshfs/40-fuse.rules
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/sshfs/40-fuse.rules
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/base/sshfs/40-fuse.rules
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/sshfs/40-fuse.rules
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/limits-grid5000.conf
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/limits-grid5000.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/limits-grid5000.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/limits-grid5000.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/sysctl-00-grid5000.conf
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/sysctl-00-grid5000.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/sysctl-00-grid5000.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/tuning/sysctl-00-grid5000.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/base/userns/sysctl-00-userns.conf
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/userns/sysctl-00-userns.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/base/userns/sysctl-00-userns.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/base/userns/sysctl-00-userns.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/amd_gpu/70-amdgpu.rules
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/amd_gpu/70-amdgpu.rules
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/big/amd_gpu/70-amdgpu.rules
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/amd_gpu/70-amdgpu.rules
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/60-qemu-system.rules
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/60-qemu-system.rules
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/60-qemu-system.rules
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/60-qemu-system.rules
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/create_tap 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/create_tap
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/create_tap
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/create_tap
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/random_mac 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/random_mac
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/random_mac
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/random_mac
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/sudoers 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/sudoers
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/sudoers
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/kvm/sudoers
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/85-mic.rules 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/85-mic.rules
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/85-mic.rules
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/85-mic.rules
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/fstab 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/fstab
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/fstab
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/fstab
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mic0.filelist
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mic0.filelist
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mic0.filelist
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mic0.filelist
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mpss 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mpss
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mpss
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/mic/mpss
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/cuda.conf 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/cuda.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/cuda.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/cuda.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/dcgm-exporter.service
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/dcgm-exporter.service
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/dcgm-exporter.service
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/dcgm-exporter.service
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/ganglia-monitor.service
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/ganglia-monitor.service
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/ganglia-monitor.service
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/ganglia-monitor.service
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/modpython-nvidia.conf
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/modpython-nvidia.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/modpython-nvidia.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/modpython-nvidia.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-persistenced.service
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-persistenced.service
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-persistenced.service
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-persistenced.service
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-smi.service
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-smi.service
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-smi.service
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/big/nvidia/nvidia-smi.service
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/apt/grid5000-archive-key.asc
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/apt/grid5000-archive-key.asc
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/min/apt/grid5000-archive-key.asc
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/apt/grid5000-archive-key.asc
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/amd64-microcode
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/amd64-microcode
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/amd64-microcode
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/amd64-microcode
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/intel-microcode
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/intel-microcode
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/intel-microcode
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/cpu_microcode/intel-microcode
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/git_tag
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/git_tag
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/git_tag
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/git_tag
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/postinst
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/postinst
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/postinst
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/image_versioning/postinst
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale.gen
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale.gen
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale.gen
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/locales/locale.gen
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/network/g5k-update-host-name
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/network/g5k-update-host-name
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/min/network/g5k-update-host-name
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/network/g5k-update-host-name
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/min/network/hosts 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/network/hosts
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/min/network/hosts
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/min/network/hosts
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ca2019.grid5000.fr.cert
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ca2019.grid5000.fr.cert
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ca2019.grid5000.fr.cert
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ca2019.grid5000.fr.cert
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-auth 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-auth
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-auth
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-auth
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-password
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-password
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-password
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/common-password
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ldap.conf 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ldap.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ldap.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/ldap.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/libnss-ldap.conf
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/libnss-ldap.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/libnss-ldap.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/libnss-ldap.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nscd.conf 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nscd.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nscd.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nscd.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nslcd.conf 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nslcd.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nslcd.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nslcd.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nsswitch.conf
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nsswitch.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nsswitch.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/ldap/nsswitch.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/55-openiscsi.rules
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/55-openiscsi.rules
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/55-openiscsi.rules
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/55-openiscsi.rules
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/iscsidev.sh
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/iscsidev.sh
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/iscsidev.sh
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/nfs/openiscsi/iscsidev.sh
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend.service
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend.service
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend.service
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-disk-manager-backend.service
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager.service
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager.service
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager.service
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/g5k-pmem-manager.service
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/lib/g5k-manager.rb
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/lib/g5k-manager.rb
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/lib/g5k-manager.rb
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k-manager/lib/g5k-manager.rb
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k_generator/g5k_generator
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k_generator/g5k_generator
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k_generator/g5k_generator
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5k_generator/g5k_generator
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5kchecks/g5k-checks.conf
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5kchecks/g5k-checks.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/g5kchecks/g5k-checks.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/g5kchecks/g5k-checks.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/lvm/lvm.conf 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/lvm/lvm.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/lvm/lvm.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/lvm/lvm.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables.stretch
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables.stretch
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables.stretch
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/iptables.stretch
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/rsyslog.conf
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/rsyslog.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/rsyslog.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/rsyslog.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/syslog_iptables.conf
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/syslog_iptables.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/syslog_iptables.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/net_access/syslog_iptables.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig.service
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig.service
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig.service
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/nvidia_configure/nvidia-reset-mig.service
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/batch_job_bashrc
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/batch_job_bashrc
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/batch_job_bashrc
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/batch_job_bashrc
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/etc/security/access.conf
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/etc/security/access.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/etc/security/access.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/etc/security/access.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node-service
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node-service
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node-service
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node-service
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node.service.override
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node.service.override
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node.service.override
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar-node.service.override
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar_sshclient_config
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar_sshclient_config
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar_sshclient_config
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/oar_sshclient_config
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/var/lib/oar/access.conf
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/var/lib/oar/access.conf
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/var/lib/oar/access.conf
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/oar/var/lib/oar/access.conf
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k.pub
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k.pub
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k.pub
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/std/sudo-g5k/id_rsa_sudo-g5k.pub
diff --git a/image/grid5000/steps/data/setup/puppet/modules/env/files/version 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/version
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/modules/env/files/version
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/version
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa.pub 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa.pub
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa.pub
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/id_rsa.pub
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/random_mac 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/random_mac
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/random_mac
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/random_mac
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k.service
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k.service
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k.service
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xen-g5k.service
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xend-config.sxp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xend-config.sxp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xend-config.sxp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/files/xen/xen/xend-config.sxp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/lib/facter/installed_kernelreleases.rb
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/lib/facter/installed_kernelreleases.rb
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/lib/facter/installed_kernelreleases.rb
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/lib/facter/installed_kernelreleases.rb
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base.pp 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/modules/env/manifests/base.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/add_ca_grid5000.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/add_ca_grid5000.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/add_ca_grid5000.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/add_ca_grid5000.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_dhclient.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_dhclient.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_dhclient.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_dhclient.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_ip_over_infiniband.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_ip_over_infiniband.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_ip_over_infiniband.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_ip_over_infiniband.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_kexec.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_kexec.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_kexec.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_kexec.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_omnipath.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_omnipath.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_omnipath.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/configure_omnipath.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_ndctl_monitor.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_ndctl_monitor.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_ndctl_monitor.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_ndctl_monitor.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_nvme_multipath.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_nvme_multipath.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_nvme_multipath.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/disable_nvme_multipath.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/do_not_clean_tmp.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/do_not_clean_tmp.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/do_not_clean_tmp.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/do_not_clean_tmp.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_cpufreq_with_performance_governor.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_cpufreq_with_performance_governor.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_cpufreq_with_performance_governor.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_cpufreq_with_performance_governor.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_userns.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_userns.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_userns.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/enable_userns.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/increase_ssh_maxstartups.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/increase_ssh_maxstartups.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/increase_ssh_maxstartups.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/increase_ssh_maxstartups.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/install_and_disable_ganglia.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/install_and_disable_ganglia.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/install_and_disable_ganglia.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/install_and_disable_ganglia.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/tcp_tuning_for_10gbe.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/tcp_tuning_for_10gbe.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/tcp_tuning_for_10gbe.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/tcp_tuning_for_10gbe.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/unlimited_memlock_for_infiniband.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/unlimited_memlock_for_infiniband.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/base/unlimited_memlock_for_infiniband.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/base/unlimited_memlock_for_infiniband.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big.pp 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/modules/env/manifests/big.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_amd_gpu.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_amd_gpu.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_amd_gpu.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_amd_gpu.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_initramfs.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_initramfs.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_initramfs.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_initramfs.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_kvm.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_kvm.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_kvm.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_kvm.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/cuda.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/cuda.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/cuda.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/cuda.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/drivers.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/drivers.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/drivers.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/drivers.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/ganglia.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/ganglia.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/ganglia.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/ganglia.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/modules.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/modules.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/modules.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/modules.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/prometheus.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/prometheus.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/prometheus.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/prometheus.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/services.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/services.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/services.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_nvidia_gpu/services.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_postfix.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_postfix.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_postfix.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_postfix.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_sshfs.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_sshfs.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_sshfs.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/configure_sshfs.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_beegfs.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_beegfs.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_beegfs.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_beegfs.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_g5k_jupyterlab.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_g5k_jupyterlab.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_g5k_jupyterlab.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_g5k_jupyterlab.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_openmpi.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_openmpi.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_openmpi.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_openmpi.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_prometheus_exporters.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_prometheus_exporters.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_prometheus_exporters.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_prometheus_exporters.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_smartd.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_smartd.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_smartd.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_smartd.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_snmp_tools.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_snmp_tools.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_snmp_tools.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/install_snmp_tools.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/prepare_kernel_module_build.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/prepare_kernel_module_build.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/big/prepare_kernel_module_build.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/big/prepare_kernel_module_build.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/common/apt_pinning.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/common/apt_pinning.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/common/apt_pinning.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/common/apt_pinning.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/common/g5kpackages.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/common/g5kpackages.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/common/g5kpackages.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/common/g5kpackages.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/common/software_versions.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/common/software_versions.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/common/software_versions.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/common/software_versions.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/commonpackages.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/commonpackages.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/commonpackages.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/commonpackages.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/init.pp 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/init.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/modules/env/manifests/init.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/init.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min.pp 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/modules/env/manifests/min.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/add_image_version_in_etc.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/add_image_version_in_etc.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/add_image_version_in_etc.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/add_image_version_in_etc.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_kernel_and_blacklist_some_modules.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_kernel_and_blacklist_some_modules.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_kernel_and_blacklist_some_modules.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_kernel_and_blacklist_some_modules.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_network_and_install_drivers.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_network_and_install_drivers.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_network_and_install_drivers.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/configure_network_and_install_drivers.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/generate_etc_motd.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/generate_etc_motd.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/generate_etc_motd.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/generate_etc_motd.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_locales.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_locales.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_locales.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_locales.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_ssh.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_ssh.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_ssh.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_and_configure_ssh.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_cpu_microcode.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_cpu_microcode.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_cpu_microcode.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_cpu_microcode.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_metapackage.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_metapackage.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_metapackage.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_metapackage.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_tgz_g5k.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_tgz_g5k.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_tgz_g5k.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/install_tgz_g5k.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/initramfs.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/initramfs.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/initramfs.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/initramfs.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/modules.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/modules.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/modules.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/modules.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/remove_old.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/remove_old.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/remove_old.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/remove_old.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/setup_links.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/setup_links.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/setup_links.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/kernel/setup_links.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_root_password.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_root_password.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_root_password.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_root_password.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_timezone_to_europe_paris.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_timezone_to_europe_paris.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_timezone_to_europe_paris.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/min/set_timezone_to_europe_paris.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs.pp 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_iscsi.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_iscsi.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_iscsi.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_iscsi.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ldap.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ldap.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ldap.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ldap.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_module_path.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_module_path.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_module_path.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_module_path.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ntp.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ntp.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ntp.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/configure_ntp.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_nfs_requirements.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_nfs_requirements.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_nfs_requirements.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_nfs_requirements.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_osirim_requirements.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_osirim_requirements.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_osirim_requirements.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_osirim_requirements.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_storage5k_requirements.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_storage5k_requirements.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_storage5k_requirements.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/nfs/install_storage5k_requirements.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std.pp 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/modules/env/manifests/std.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/add_g5kcode_to_path.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/add_g5kcode_to_path.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/add_g5kcode_to_path.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/add_g5kcode_to_path.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kdiskmanagerbackend.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kdiskmanagerbackend.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kdiskmanagerbackend.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kdiskmanagerbackend.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kmanager.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kmanager.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kmanager.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kmanager.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kpmemmanager.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kpmemmanager.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kpmemmanager.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_g5kpmemmanager.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_oar_client.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_oar_client.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_oar_client.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_oar_client.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_rsyslog_remote.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_rsyslog_remote.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_rsyslog_remote.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/configure_rsyslog_remote.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell.pp 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell/params.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell/params.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell/params.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/dell/params.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/disable_lvm_pvscan.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/disable_lvm_pvscan.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/disable_lvm_pvscan.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/disable_lvm_pvscan.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/g5k_generator.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/g5k_generator.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/g5k_generator.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/g5k_generator.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5kchecks.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5kchecks.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5kchecks.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5kchecks.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5ksubnets.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5ksubnets.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5ksubnets.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_g5ksubnets.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_hwraid_apt_source.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_hwraid_apt_source.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_hwraid_apt_source.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_hwraid_apt_source.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_kameleon.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_kameleon.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_kameleon.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_kameleon.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_libguestfs_backport.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_libguestfs_backport.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_libguestfs_backport.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_libguestfs_backport.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_megacli.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_megacli.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_megacli.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_megacli.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_sudog5k.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_sudog5k.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_sudog5k.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/install_sudog5k.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/ipmitool.pp 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/ipmitool.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/ipmitool.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/ipmitool.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/nvidia_reset_mig.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/nvidia_reset_mig.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/std/nvidia_reset_mig.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/std/nvidia_reset_mig.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/xen.pp 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/xen.pp
similarity index 100%
rename from image/grid5000/steps/data/setup/puppet/modules/env/manifests/xen.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/xen.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/configure_xen.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/configure_xen.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/configure_xen.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/configure_xen.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/install_grub.pp
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/install_grub.pp
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/install_grub.pp
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/manifests/xen/install_grub.pp
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/templates/base/omnipath/scibian.key.erb
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/base/omnipath/scibian.key.erb
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/templates/base/omnipath/scibian.key.erb
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/base/omnipath/scibian.key.erb
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/templates/common/apt_pinning.erb
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/common/apt_pinning.erb
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/templates/common/apt_pinning.erb
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/common/apt_pinning.erb
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/templates/min/motd.erb 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/min/motd.erb
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/templates/min/motd.erb
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/min/motd.erb
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ldap/common-account.erb
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ldap/common-account.erb
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ldap/common-account.erb
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ldap/common-account.erb
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ntp/ntp.conf.erb
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ntp/ntp.conf.erb
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ntp/ntp.conf.erb
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/nfs/ntp/ntp.conf.erb
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/templates/std/dell/linux.dell.com.key.erb
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/std/dell/linux.dell.com.key.erb
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/templates/std/dell/linux.dell.com.key.erb
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/std/dell/linux.dell.com.key.erb
diff --git 
a/image/grid5000/steps/data/setup/puppet/modules/env/templates/std/hwraid/hwraid.le-vert.net.key.erb
 
b/image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/std/hwraid/hwraid.le-vert.net.key.erb
similarity index 100%
rename from 
image/grid5000/steps/data/setup/puppet/modules/env/templates/std/hwraid/hwraid.le-vert.net.key.erb
rename to 
image/debian11/grid5000/steps/data/setup/puppet/modules/env/templates/std/hwraid/hwraid.le-vert.net.key.erb
diff --git a/image/grid5000/steps/disable_checkpoint.yaml 
b/image/debian11/grid5000/steps/disable_checkpoint.yaml
similarity index 100%
rename from image/grid5000/steps/disable_checkpoint.yaml
rename to image/debian11/grid5000/steps/disable_checkpoint.yaml
diff --git a/image/grid5000/steps/enable_checkpoint.yaml 
b/image/debian11/grid5000/steps/enable_checkpoint.yaml
similarity index 100%
rename from image/grid5000/steps/enable_checkpoint.yaml
rename to image/debian11/grid5000/steps/enable_checkpoint.yaml
diff --git a/image/grid5000/steps/env/bashrc 
b/image/debian11/grid5000/steps/env/bashrc
similarity index 100%
rename from image/grid5000/steps/env/bashrc
rename to image/debian11/grid5000/steps/env/bashrc
diff --git a/image/grid5000/steps/env/functions.sh 
b/image/debian11/grid5000/steps/env/functions.sh
similarity index 100%
rename from image/grid5000/steps/env/functions.sh
rename to image/debian11/grid5000/steps/env/functions.sh
diff --git a/image/grid5000/steps/export/debian/clean_dhcp_leases.yaml 
b/image/debian11/grid5000/steps/export/debian/clean_dhcp_leases.yaml
similarity index 100%
rename from image/grid5000/steps/export/debian/clean_dhcp_leases.yaml
rename to image/debian11/grid5000/steps/export/debian/clean_dhcp_leases.yaml
diff --git a/image/grid5000/steps/export/do_qcow2_finish_works.yaml 
b/image/debian11/grid5000/steps/export/do_qcow2_finish_works.yaml
similarity index 100%
rename from image/grid5000/steps/export/do_qcow2_finish_works.yaml
rename to image/debian11/grid5000/steps/export/do_qcow2_finish_works.yaml
diff --git a/image/grid5000/steps/export/export_g5k.yaml 
b/image/debian11/grid5000/steps/export/export_g5k.yaml
similarity index 100%
rename from image/grid5000/steps/export/export_g5k.yaml
rename to image/debian11/grid5000/steps/export/export_g5k.yaml
diff --git a/image/grid5000/steps/export/save_appliance_VM.yaml 
b/image/debian11/grid5000/steps/export/save_appliance_VM.yaml
similarity index 100%
rename from image/grid5000/steps/export/save_appliance_VM.yaml
rename to image/debian11/grid5000/steps/export/save_appliance_VM.yaml
diff --git a/image/grid5000/steps/setup/debian/clean_system.yaml 
b/image/debian11/grid5000/steps/setup/debian/clean_system.yaml
similarity index 100%
rename from image/grid5000/steps/setup/debian/clean_system.yaml
rename to image/debian11/grid5000/steps/setup/debian/clean_system.yaml
diff --git a/image/grid5000/steps/setup/debian/configure_apt_sources.yaml 
b/image/debian11/grid5000/steps/setup/debian/configure_apt_sources.yaml
similarity index 100%
rename from image/grid5000/steps/setup/debian/configure_apt_sources.yaml
rename to image/debian11/grid5000/steps/setup/debian/configure_apt_sources.yaml
diff --git a/image/grid5000/steps/setup/debian/configure_system.yaml 
b/image/debian11/grid5000/steps/setup/debian/configure_system.yaml
similarity index 100%
rename from image/grid5000/steps/setup/debian/configure_system.yaml
rename to image/debian11/grid5000/steps/setup/debian/configure_system.yaml
diff --git a/image/grid5000/steps/setup/debian/install_packages.yaml 
b/image/debian11/grid5000/steps/setup/debian/install_packages.yaml
similarity index 100%
rename from image/grid5000/steps/setup/debian/install_packages.yaml
rename to image/debian11/grid5000/steps/setup/debian/install_packages.yaml
diff --git a/image/grid5000/steps/setup/debian/minimal_install.yaml 
b/image/debian11/grid5000/steps/setup/debian/minimal_install.yaml
similarity index 100%
rename from image/grid5000/steps/setup/debian/minimal_install.yaml
rename to image/debian11/grid5000/steps/setup/debian/minimal_install.yaml
diff --git a/image/grid5000/steps/setup/debian/run_orchestrator.yaml 
b/image/debian11/grid5000/steps/setup/debian/run_orchestrator.yaml
similarity index 100%
rename from image/grid5000/steps/setup/debian/run_orchestrator.yaml
rename to image/debian11/grid5000/steps/setup/debian/run_orchestrator.yaml
diff --git a/image/grid5000/steps/setup/debian/setup_orchestrator.yaml 
b/image/debian11/grid5000/steps/setup/debian/setup_orchestrator.yaml
similarity index 100%
rename from image/grid5000/steps/setup/debian/setup_orchestrator.yaml
rename to image/debian11/grid5000/steps/setup/debian/setup_orchestrator.yaml
diff --git a/image/taler-debian11.yaml b/image/debian11/taler-debian11.yaml
similarity index 80%
rename from image/taler-debian11.yaml
rename to image/debian11/taler-debian11.yaml
index 9f695d3..738fba4 100644
--- a/image/taler-debian11.yaml
+++ b/image/debian11/taler-debian11.yaml
@@ -36,22 +36,25 @@ global:
   ## Environment kernel path and params
   # g5k_kernel_path: "/vmlinuz"
   # g5k_initrd_path: "/initrd.img"
-  # g5k_kernel_params: ""
+  g5k_kernel_params: "mitigations=off"
   ## Environment visibility
   # g5k_visibility: "shared"
-  taler_build_packages: "recutils autoconf uncrustify autopoint libtool 
python3-pip libgcrypt20-dev libjansson-dev libcurl4-gnutls-dev libsodium-dev 
libidn2-dev libunistring-dev libmicrohttpd-dev libsqlite3-dev libqrencode-dev 
valgrind libpq-dev texinfo gdb make npm zip python3-distutils pkg-config"
-  taler_packages: "nginx postgresql-13 postgresql-contrib curl jq bc sudo git 
zile dnsutils prometheus-postgres-exporter prometheus-nginx-exporter net-tools 
netcat parallel nodejs tshark dnsmasq bind9 systemd-coredump bash-completion 
pgbouncer pgstat"
+  taler_build_packages: "recutils autoconf uncrustify autopoint libtool 
python3-pip libgcrypt20-dev libjansson-dev libcurl4-gnutls-dev libsodium-dev 
libidn2-dev libunistring-dev libgnutls28-dev libsqlite3-dev libqrencode-dev 
valgrind libpq-dev texinfo gdb make npm zip python3-distutils pkg-config"
+  taler_packages: "nginx postgresql-13 postgresql-contrib curl jq bc sudo git 
zile dnsutils prometheus-postgres-exporter prometheus-nginx-exporter net-tools 
netcat parallel nodejs tshark dnsmasq bind9 systemd-coredump bash-completion 
pgbouncer pgstat linux-perf"
   taler_packages_no_recommends: "prometheus prometheus-node-exporter 
prometheus-pgbouncer-exporter"
   taler_disable_services: "nginx postgresql prometheus 
prometheus-postgres-exporter prometheus-nginx-exporter prometheus-node-exporter 
named gettext-base dnsmasq prometheus-pgbouncer-exporter pgbouncer"
-  taler_loki_version: "v2.4.0"
+  taler_loki_version: "v2.4.2"
   taler_path: /root/taler
   gnunet_commit_sha: master
   exchange_commit_sha: master
   merchant_commit_sha: master
   wallet_commit_sha: master
   grid5k_commit_sha: master
+  libmicrohttpd_cflags: "-O2"
+  gnunet_cflags: "-O2"
+  exchange_cflags: "-O2"
+  merchant_cflags: "-O2"
   ## Other parameters can be changed, see kameleon info debian10-taler.yaml
-
 bootstrap:
   ### The bootstrap section takes in charge the initial installation of the
   ## system (distribution installation). No modification should be needed here.
@@ -63,14 +66,10 @@ setup:
   - "@base"
   ## We add steps required by our customization after or before @base. Use
   ## kameleon dryrun debian10_custom.yaml to see the resulting steps in the 
build.
-  ## The following is given as example only, replace with your steps.
-
 
   - install:
     - packages:
       - exec_in: |
-         echo "deb https://deb.taler.net/apt/debian bullseye main" > 
/etc/apt/sources.list.d/taler.list
-         wget -O - https://taler.net/taler-systems.gpg.key | apt-key add -
          apt update
          apt upgrade -y
          apt install -y $${taler_packages} $${taler_build_packages}
@@ -78,17 +77,32 @@ setup:
 
          mkdir -p $${taler_path}
 
-    - gnunet: 
+    - microhttpd: 
       - exec_in: |
          cd $${taler_path} 
 
+         git clone https://git.gnunet.org/libmicrohttpd.git
+         cd libmicrohttpd
+
+         # We need sudo, otherwise we'll get a strange error
+         sudo ./bootstrap
+         CFLAGS="$${libmicrohttpd_cflags}" ./configure 
--enable-logging=verbose --prefix=/usr # --enable-sanitizer
+         make || true
+         make install
+         ldconfig
+
+    - gnunet: 
+      - exec_in: |
+         cd $${taler_path}
+
          git clone https://git.gnunet.org/gnunet.git
          cd gnunet
          git checkout $${gnunet_commit_sha} || true
          git pull || true
 
+         # We need sudo, otherwise we'll get a strange error
          sudo ./bootstrap
-         CFLAGS="-O0 -g" ./configure --enable-logging=verbose --prefix=/usr # 
--enable-sanitizer
+         CFLAGS="$${gnunet_cflags}" ./configure --enable-logging=verbose 
--prefix=/usr --enable-poisoning=false # --enable-sanitizer
          make || true
          make install
          ldconfig
@@ -104,8 +118,9 @@ setup:
          git checkout $${exchange_commit_sha} || true
          git pull || true
 
+         # We need sudo, otherwise we'll get a strange error
          sudo ./bootstrap
-         CFLAGS="-O0 -g" ./configure --enable-logging=verbose --prefix=/usr # 
--enable-sanitizer
+         CFLAGS="$${exchange_cflags}" ./configure --enable-logging=verbose 
--prefix=/usr # --enable-sanitizer
          make || true
          make install
          ldconfig
@@ -119,9 +134,9 @@ setup:
          git checkout $${merchant_commit_sha} || true
          git pull || true
 
+         # We need sudo, otherwise we'll get a strange error
          sudo ./bootstrap
-
-         ./configure --enable-logging=verbose --prefix=/usr # 
--enable-sanitizer
+         CFLAGS="$${merchant_cflags}" ./configure --enable-logging=verbose 
--prefix=/usr # --enable-sanitizer
          make || true
          make install
          ldconfig
@@ -135,11 +150,11 @@ setup:
          git checkout $${wallet_commit_sha} || true
          git pull || true
 
-         sudo ./bootstrap
-
          npm install -g pnpm
+
+         ./bootstrap
          ./configure
-         make || true
+         sed -i "s|^\s*pnpm install --frozen-lockfile --filter 
@gnu-taler/taler-wallet-cli...|& --unsafe-perm|" Makefile
          make install
 
     - grid5k:
diff --git a/notes.txt b/notes.txt
deleted file mode 100644
index e69de29..0000000

-- 
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]