Topologie auf Basis von C-Sharp und Mono
von tox
In den letzten Wochen habe ich mich damit befasst, eine mindestens gleichwertige Topologie wie die bisher bekannte auf Python basierende Implementierung in einer modernen Architektur zu erstellen. Zielstellung war dabei die Benutzung einer Hochsprache, die vor Ausführung in nativen Code kompilert wird. Dazu eignete sich sehr gut C# in Verbindung mit Mono, sodass die neue Implementierung also auf deren Basis erstellt wurde.
Der gegenwärtige Status setzt alle Merkmale der ursprünglichen Variante um:
- Unterschiedliche Farben für HNAs und Nicht-HNAs,
- Hervorherbung der Linkqualitäten durch Farbe und Linienbreite und -länge,
- Abfrage der FFHTopo-Datenbank für die Anzeige der Straßennamen und für die farbliche Kennzeichnung der letzten Sichtung der Nodes,
- Verkürzung der Darstellung von IP-Adresse und Straßennamen,
- verwendet GraphViz für die Topologieberechnung.
Neue Features sind:
- Vollständig dynamische Umsetzung ohne serverseitig gespeicherte Datei, dadurch Aktualität zu jedem Zeitpunkt, soweit die Daten dem Server vorliegen,
- bei Aufruf können URL-Parameter angegeben werden (siehe unten).
URL-Parameter
Die Parameter werden regulär hinter einem Fragezeichen hinter der Pfadangabe aufgelistet, mehrere Parameter werden durch kaufmännische Unds getrennt. Die Form eines Parameters ist dabei "Parametername=Wert". Die Daten müssen im Allgemeinen maskiert werden, allderings sind bislang keine Parameter vorhanden, bei denen das notwendig ist.
Die möglichen Parameter sind im Einzelnen:
- maxetx: der maximale etx-Wert der auszugebenden Links. Die Zahl muss als eine Gleitkommazahl nach Deutsch-Deutschland formatiert sein. Standardwert ist 8.
- format: das Ausgabeformat, entweder png, svg, dot oder pdf, standard ist png. Zusätzlich akzeptiert der Parameter noch input, wodurch die dot-Daten, die normalerweise an GraphViz gesendet werden, direkt ausgegeben werden.
- hvip: eine Liste von IP-Adressen hervorzuhebender Knoten, Trennzeichen sind das Pipe-Symbol (|) und das Komma. Die Adressen können verkürzt angegeben werden und werden auf 104.62.1.1 aufgefüllt. Beispielsweise wird "7" auf "104.62.1.7" und "61.28.1" auf "104.61.28.1" vervollständig. Dieser Parameter kann mehrfach angegeben werden.
- zeig: eine Ganzzahl Deutsch-Deutschland formatiert. 0 oder kleiner (Standardwert) bedeutet, dass sämtliche Knoten dargestellt werden. 1 bedeutet, dass nur Nicht-HNAs dargestellt werden, die eine Verbindung zu einem anderen Knoten haben, und sämtliche HNAs. 2 und größer bedeutet, dass nur Knoten dargestellt werden, die eine Verbindung zu enem anderen Knoten haben.
- groesse: gibt die maximale Größe der Ausgabe in Zoll an, d.h. die Höhe und Breite. Dies ist eine Gleitkommazahl Deutsch-Deutschland formatiert. Sie muss größer als 0 sein und höchstens 10000. Ein Zoll entspricht bei GraphViz 96 Pixeln. Man kann den Wert leer lassen, dann wird die Größe allein von GraphViz bestimmt.
- ffhtopo: eine Ganzzahl Deutsch-Deutschland formatiert. 0 und größer (Standardwert) bedeutet, dass die FFHTopo-Datenbank für zusätzliche Informationen abgefragt wird. Bei Werten kleiner als 0 wird dies nicht getan. Wenn die FFHTopo-Datenbank abgefragt wird, ist der Standartwert für die groesse-Option 60 und die Schriftgröße in den Knoten 8. Wenn sie nicht abgefragt wird, ist der Standartwert für die groesse-Option 40 und die Schriftgröße in den Knoten 12.
Formatierung von Zahlen
Die Angabe, dass eine Zahl "Deutsch-Deutschland" formatiert ist, bezieht sich auf die akzeptierten Zeichen für das Dezimaltrennzeichen (in dem Fall das Komma) und das Zifferngruppierungszeichen (in dem Fall der Punkt), welches ausgelassen werden kann, aber akzeptiert wird, wenn es vorhanden ist. Bei Gleitkommazahlen werden darüberhinaus Zahlen in der wissenschaftlichen Exponentialdarstellung akzeptiert (z.B. 3,3e5=330000) und unendlich als Wert, dies ist in Mono normalerweise das Unendlichzeichen (∞), welches man regulär nicht zur Hand hat, und das obendrein in der URL auch noch maskiert werden müsste (%E2%88%9E). Als Workaround kann man auch "unendlich" schreiben. Jedes auftreten dieses Wortes wird serverseitig zu ∞ umgewandelt.
Beispiele
Der parameterlose Aufruf verwendet die jeweiligen Standardwerte: http://tox.3dfxatwork.de/preview/Topo.ashx
Angabe einer Größe als Vorschaubild: http://tox.3dfxatwork.de/preview/Topo.ashx?groesse=6
Darstellen sämtlicher, auch besonders schlechter Links: http://tox.3dfxatwork.de/preview/Topo.ashx?maxetx=unendlich
Der Übersichtlichkeit halber abgeschaltete Abfrage der FFHTopo-Datenbank: http://tox.3dfxatwork.de/preview/Topo.ashx?ffhtopo=-1
Einige Knoten verhorgehoben: http://tox.3dfxatwork.de/preview/Topo.ashx?hvip=28.1%7C8.22,&hvip=129
Um es sich schneller als PDF ausgeben zu lassen, weil der Download der PNG sehr groß ist: http://tox.3dfxatwork.de/preview/Topo.ashx?format=pdf
Die Werte können kombiniert werden: http://tox.3dfxatwork.de/preview/Topo.ashx?hvip=28.1%7C8.22,&hvip=129&groesse=6&maxetx=3&ffhtopo=-1&zeig=1&format=svg
Außerdem kann man sich über einen extra Link auch die gefilterten Quelldaten anschauen: http://tox.3dfxatwork.de/preview/TopoData.ashx
Bezugsquelle und Diskussion
Wer den Quellcode erhalten möchte, möge mir eine Nachricht per Jabber oder PN zukommen lassen im Forum. Dort befindet sich auch die Diskussion zum Thema.