---
title: Sampler
author: Frederic AOUSTIN
version: 1.O
---

# Sampler: un outil de dashboard dans le terminal

![category](system)

Une petite application écrite en *go* et qui permet d'obtenir dans son **terminal** un joli dashboard

Le principe est assez simple: vous indiquez dans un fichier *config.yml* comment vous voulez voir des informations et ils vous les affiches à travers 6 composants

- Runchart
- Sparkline
- Barchart
- Gauge
- Textbox
- Asciibox

Il peut même afficher via des triggers des alertes ou joué un son en cas d'alerte.

Vous pouvez trouver cet outil sur [https://github.com/sqshq/sampler](https://github.com/sqshq/sampler)


## Installation

Le site github contient une version compilé pour linux

```bash
sudo wget https://github.com/sqshq/sampler/releases/download/v1.1.0/sampler-1.1.0-linux-amd64 -O /usr/local/bin/sampler
sudo chmod +x /usr/local/bin/sampler
```

## Fork

J'ai forker le projet pour pouvoir proposer au projet principal plusieurs nouveautés

- la possibilité de cacher la barre de status
- gérer border et show-title sur l'ensemble des composant
- avoir un composant multi-jauge
- une gestion de min et max sur sparkline

Vous pouvez retrouver ce fork sur [https://github.com/fraoustin/sampler](https://github.com/fraoustin/sampler)

Il faudra compiler vous même l'application mais cela n'est pas très compliqué

```bash
sudo apt install build-essential libasound2-dev
sudo apt-get install golang
git clone https://github.com/fraoustin/sampler
cd sampler
go build -o sampler .
./sampler -c example.yml
```

Vous avez maintenant un executable sampler avec mes dernières propositions d'ajout

## Usage avancé

Exemple de configuration que vous pouvez utiliser sous un linux

Mon fichier *config.yml*

```yaml
gauges:
  - title: System
    position: [[33, 2], [48, 10]]
    max:
        sample: echo 100
    min:
        sample: echo 0
    items:
      - label: CPU
        color: 81
        sample: null
        percent-only: true
        cur:
            sample: vmstat -w 1 2 | awk 'NR==2{for(i=1;i<=NF;i++){if($i=="id")c=i;
                if($i=="wa")w=i}} END{print 100-$c-$w}'
      - label: Free Memory
        color: 82
        sample: null
        percent-only: true
        cur:
            sample: awk '/MemTotal/{t=$2} /MemAvailable/{a=$2} END{printf "%.1f\n",(t-a)/t*100}'
                /proc/meminfo
      - label: Swap Memory
        color: 220
        sample: null
        percent-only: true
        cur:
            sample: awk '/SwapTotal/{t=$2} /SwapFree/{f=$2} END{printf "%.0f\n",(t-f)/1024}'
                /proc/meminfo
      - label: /
        color: 231
        sample: null
        percent-only: true
        cur:
            sample: df --output=pcent / | tail -1 | tr -dc '0-9'
  - title: Volume
    position: [[33, 12], [48, 3]]
    color: 213
    percent-only: true
    cur:
        sample: wpctl get-volume @DEFAULT_AUDIO_SINK@ | awk '{if (/MUTED/) print 0;
            else printf "%.0f\n", $2*100}'
    max:
        sample: echo 100
    min:
        sample: echo 0
textboxes:
  - title: meteo
    position: [[1, 18], [40, 24]]
    rate-ms: 10000
    show-title: false
    sample: curl -s "https://wttr.in/Les+herbiers?Q0&lang=fr"
    border: false
  - title: time
    position: [[0, 3], [80, 16]]
    rate-ms: 1000
    show-title: false
    color: 178
    sample: python bigfuture.py $(date +%H:%M)
    border: false
```

J'utilise un programme python pour faire un affichage de l'heure avec une pseudo police plus grosse. Vous pouvez retrouver ce programme [ici](./upload/bigfuture.py)

Pour sauvegarder la position de ma fenetre à chaque redémarrage de ma session gnogne sous *wayland* j'utilise le plugin d'extension *smart auto move*.

```bash
sudo apt install gnome-shell-extension-manager
```

et pour gérer la ressemblance de ce terminal j'ouvre les réglages de l’extension depuis le Gestionnaire d’extensions :

- Dans l’onglet Saved Windows, vérifie que ta fenêtre de terminal y figure, puis clique sur OVERRIDE (ANY) sur sa ligne.
- Dans l’onglet Overrides, mets RESTORE et un Match Threshold à 0.2.
