gelkao volume

Die Volume-Platzierung anzeigen und als Treemap zeichnen.

BEZEICHNUNG

gelkao volume - die Platzierungstabelle des Hetzner-Supports anzeigen und zeichnen

ÜBERSICHT

cat volumes.tsv | ./gelkao volume draw [-o <pfad>] [-t <volumes>]
cat volumes.tsv | ./gelkao volume show

BESCHREIBUNG

Die Hetzner Cloud sagt dir nicht, wo ein Volume physisch liegt. Auf Anfrage schickt dir der Support eine Tabelle, die genau das auflistet. gelkao volume liest diese Tabelle von der Standardeingabe (stdin) und macht sichtbar, welche deiner Volumes sich eine Ausfalldomäne teilen: draw zeichnet eine Treemap, show gibt denselben Baum als Text aus.

Beide Subkommandos lesen ausschließlich die Standardeingabe. Es wird nichts heruntergeladen, es wird kein API-Token gebraucht und nichts verlässt deinen Rechner.

Beide brauchen sqlite3 (ab 3.8.3): die Rangfolge wird in einer Datenbank im Arbeitsspeicher berechnet, nicht auf der Platte. draw braucht darüber hinaus zwei Programme, die weiter unten stehen.

Die Eingabe besteht aus drei durch Tabulator getrennten Spalten - Volume-ID, Volume-Pool-ID, Leaf - eine Zeile pro Volume:

100000001	140	fsn1-cloud2-leaf20
100000002	141	fsn1-cloud2-leaf20

Die Kopfzeile der Mail und jede Zeile, die dieser Form nicht entspricht, werden übersprungen: Volume-ID und Pool-ID müssen aus Ziffern bestehen, das Leaf darf nicht leer sein. Das Wagenrücklaufzeichen am Zeilenende, das der Anhang mitbringt, wird abgeschnitten. Die Datei lässt sich also unverändert durchreichen.

Die Reihenfolge ist in beiden Subkommandos dieselbe und hängt nicht vom Zufall ab: Leaves nach Anzahl der Volumes absteigend - der größte Ausfallradius zuerst -, bei Gleichstand nach Namen; innerhalb eines Leaf die Volume-Gruppen nach Größe absteigend, dann nach Pool-Nummer, dann nach Volume-ID. Zwei Läufe über dieselbe Datei liefern damit dieselbe Ausgabe.

OPTIONEN

  • -o <pfad> - Zieldatei der Treemap (Vorgabe data/volumes.webp). Nur bei draw gültig; bei show ein Fehler.
  • -t <volumes> - wie viele Volumes du auf einmal verlieren kannst. Ein Leaf oder eine Volume-Gruppe mit mindestens so vielen Volumes wird rot gezeichnet (Vorgabe 10). Der Wert muss mindestens 2 sein, sonst wäre jedes Leaf rot. Nur bei draw gültig; bei show ein Fehler.

BEFEHLE

gelkao volume draw

Zeichnet die Platzierung als Treemap und schreibt sie als WebP (1280 x 800). Jedes Leaf ist ein Block, seine Fläche entspricht der Anzahl der Volumes darauf; innerhalb des Blocks liegen die Volume-Gruppen, ebenfalls flächengetreu. Ein Spalt zwischen den Blöcken trennt die Ausfalldomänen sichtbar voneinander.

Die Farbe eines Leaf richtet sich danach, wie viele Volumes es trägt: rot ab dem mit -t gesetzten Wert (Vorgabe 10), gelb ab 2, darunter grün. Die Gruppen innerhalb eines Leaf tragen dieselbe Farbe, aufgehellt nach ihrer eigenen Größe - eine Gruppe, die für sich genommen schon rot ist, bleibt satt, eine kleine wird blass. Ein grünes Leaf wird durchgehend gefüllt, weil seine Gruppen gar nicht schlechter sein können als es selbst.

draw braucht zwei Programme, die show und alles unter invoice nicht brauchen: rsvg-convert (librsvg) und cwebp (libwebp). Fehlt eines, bricht der Aufruf mit einem Hinweis ab, welches zu installieren ist.

AUSGABE - die WebP-Datei am Zielpfad; auf der Standardfehlerausgabe die Zeile wrote <pfad>.

EXIT-STATUS - 0 geschrieben, 1 keine Platzierungszeilen auf der Standardeingabe, -t kein ganzzahliger Wert oder kleiner als 2, -o oder -t bei show angegeben, oder rsvg-convert beziehungsweise cwebp nicht gefunden.

./gelkao volume draw < examples/example-volumes-real-fleet.tsv
./gelkao volume draw -o karte.webp -t 4 < examples/example-volumes.tsv

gelkao volume show

Gibt denselben Baum als Text aus, in derselben Reihenfolge: je Leaf eine Zeile, darunter eingerückt die Volume-Gruppen, darunter die Volume-IDs. Das ist die Variante für ein Terminal ohne Bildbetrachter und für grep.

AUSGABE - der Baum auf der Standardausgabe:

fsn1-cloud2-leaf20
    volume pool 140
        900000001
        900000002
    volume pool 141
        900000003

EXIT-STATUS - 0 Baum ausgegeben, 1 keine Platzierungszeilen auf der Standardeingabe (oder gar keine Standardeingabe, weil der Aufruf an einem Terminal hängt).

./gelkao volume show < examples/example-volumes-real-fleet.tsv
./gelkao volume show < examples/example-volumes.tsv | grep -c 'volume pool'

← Zurück zur Dokumentation

Inhalt