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 (Vorgabedata/volumes.webp). Nur beidrawgültig; beishowein 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 (Vorgabe10). Der Wert muss mindestens2sein, sonst wäre jedes Leaf rot. Nur beidrawgültig; beishowein 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