Präsentiere: siginfo-ng 0.1

  • Zitat von Wynton

    (obwohl ich als Programmiersprachen-Noob davon ausgehe das man siginfo-ng zu 80% umschreiben dürfte.).


    Problem ist Netzwerk (also HTTP) und der ganze Kram, den gibts in C nicht plattformunabhängig, ohne besondere Bibliothek. Und die Plugins selber müssen um an die Infos ranzukommen direkt Linux-Funktionen verwenden. Plugins muss man also so oder so auch für Windows neu schreiben.

    Ansonsten dürfte man siginfo-ng ohne Plugins vermutlich mit einer POSIX-kompatiblen Umgebung wie cygwin unter Windows kompileren können. Unter OSX kompiliertes ja angeblich.

    Zitat von Blue-Fox

    Was ich gut finden würde, wenn gandro mir verraten würde, wie das mit den Makefile krams ist, oder sonstige Implentierungen in siginfo-ng, damit ich mein Plug-In so implrntieren kann, wie ich mir das vorstelle.


    Als Pluginentwickler brauchst du nicht an der Makefile rumzufummeln, lediglich wenn es dich interessiert, wie das intern läuft, aber dazu musst du so ne Makefile auch lesen könne, um das zu verstehen.

    Kleines Beispiel-Plugin:

    Beachten: #include "../plugin.h"#include "../siginfo-ng.h"

    Wird benötigt für die Funktionen und Datentypen die man als Plugin braucht. Dass man die <stdio.h> einbinden muss, ist mehr ein Bug den ich gerade gefunden habe.

    Wichtig: Der Dateiname (hier myplugin.c) muss auch in den Funktionen verwendet werden. Wenn du also im "plugins" Ordner eine "myplugin.c" erstellst, muss in dieser Datei eine Funktion myplugin_init() vorhanden sein.

    Diese Funktion wird beim Starten von siginfo-ng bei allen Plugins aufgerufen, in dieser Funktion meldest du deine "Hooks" an. Im obigen Beispiel soll beim Hook "MY_PLUGIN" (in der Konfigurationsdatei dann {MY_PLUGIN}) die Funktion myplugin_funktion bei jedem Update aufgerufen werden.

    Die Funktion muss einen Parameter als Pointer von Typ plugin_t sein. In diesem Beispiel, heisst der self. Jetzt kannst du in der Funktion tun und lassen was du willst, das Resultat, welches am Ende in der Signatur angezeigt werden soll, gibst du dann über die Funktion set_value(plugin_t *plugin, const void *value, type_t type) zurück.

    Den Wert hinter dem Pointer *value (in diesem Falle &variable) kannst du danach wieder löschen/freigeben, er wird kopiert. Als Datentyp kannst du momentan Strings (T_STRING), Ganzahlen (T_INTEGER), Gleitpunktzahlen (T_FLOAT)) oder lange Ganzzahlen (T_LONG) zurückgeben.

    Die fertige Datei kommt wie gesagt mit richtigem Dateinamen ins "plugins"-Verzeichnis. Danach machst du im Hauptverzeichnis (da wo die Makefile liegt) sicherheitshalber erstmal ein "make clean", danach ein "make config", wo du dein Plugin jetzt mit Y aktivieren kannst. Danach compilieren mit "make".

  • An mein BOFH-Plugin sähe der Code so aus:

    Spoiler anzeigen

    Meine siginfo-ng.conf sieht so aus:

    Spoiler anzeigen
    Code
    row1=CPU: {CPU0_MODEL}, {CPU0_CACHE} KB Cache, {CPU_COUNT} Kerne.
    row2=RAM: {RAM_USED} von {RAM_TOTAL} MB benutzt, {RAM_FREE} MB frei. Swap: {SWAP_USED} von {SWAP_TOTAL} MB benutzt, {SWAP_FREE} MB frei.
    row3=OS: {UNAME_SYSNAME}, {UNAME_RELEASE} auf {UNAME_NODENAME}, wo{PROCESSES} Prozesse laufen.
    row4=HDD: {HDD_USED} von {HDD_TOTAL} GB Speicher benutzt, {HDD_FREE} GB frei.
    row5=Uptime: {UPTIME_DAYS_TOTAL} Tage, {UPTIME_HOURS} Stunden, {UPTIME_MINS} Minuten und {UPTIME_SECS} Sekunden. {BOFH_PLUGIN}


    Und die Befehle (make) so:

    Spoiler anzeigen

    Bei Make kommt immer ein Fehler, dass irgendwas falsch in Zeile 7 sei.

  • okay, habe ich übersehen... :(


    Edit: Tippfehler verbessert, make meckert nicht mehr rum, aber...
    ...wenn ich siginfo-ng ausführe, kommt eine Fehlermeldung:

    Zitat

    Warning: Unkown plugin hook {BOFH} in row 5!

  • Zitat von gandro

    Noch ein Flüchtigkeitsfehler: Du hast den Hook in deinem Quellcode BOFH_PLUGIN und nicht BOFH genannt.

    [...]

    Das habe ich geändert;

    Gleicher Fehler...

  • Huhu, Version 0.1.3-1 ist fertig!

    Muss nur noch Fehlerbereinig werden, bzw. optimiert werden.

    Edit: Fehlerfrei!
    Edit2: Optimiert!
    Edit3: Jetzt fehlt nur noch die sprueche.conf
    Edit4: Done!
    Edit5: Quellcode:

    Spoiler anzeigen


    Bis jetzt weiß ich noch nicht genau, ob das so funktioniert...
    Edit6: Die sprueche.conf muss selber geschrieben werden und im plugin-Verzeichnis abgelegt werden.

    So, 0.1.3-1pl1 ist fertig, Zip, rar und tar folgen.
    Done!:
    http://blue-fox.bplaced.net/BOFH/bofh-plug….3-1pl1.tar.bz2
    http://blue-fox.bplaced.net/BOFH/bofh-plugin-0.1.3-1pl1.tar.gz
    http://blue-fox.bplaced.net/BOFH/bofh-plugin-0.1.3pl1.7z
    http://blue-fox.bplaced.net/BOFH/bofh-plugin-0.1.3pl1.tar
    http://blue-fox.bplaced.net/BOFH/bofh-plugin-0.1.3pl1.zip

    Ist alles das selbe, nur in Anderen Archiven.

    Wichtig: Ich übernehme keine Haftung für Schäden an PC und Software!
    (gandro wies mich darauf hin, dass ich aufpassen soll, das meine Programme keine Hunde fressen.)

  • *push*

    Das Plugin-Framework von siginfo-ng 0.1 an sich ist ein bisschen unpraktisch, abgesehen davon, dass Blue-Fox und Blue, afaik die beiden einzigen die noch bisschen daran rumbasteln, nur C-Basiskenntnisse haben, ist es mühsam, die Binary jedes mal neu zu kompilieren für andere Plugins.

    Ich hab mir überlegt, das ganze Pluginsystem mit dynamischen Libraries zu machen (.so-Dateien über dlopen() und Co), das gibt allerdings viel zu tun, und macht im Grunde nichts einfacher, im Gegenteil, nur vieles komplizierter, dafür müsste nur nicht mehr so oft kompilieren.

    Daher ist mein Gedanke, einen Lua-Interpreter in siginfo-ng 0.2 einzubauen. Würde heissen: Man schreibt Plugins zukünftig nicht mehr in C, sondern in Lua. Dessen Standard-Bibliothek kann zwar nur wenig mehr als Dateien und Prozesse öffnen und Strings parsen, aber für 95% der existierenden Plugins machen ja genau das.

    Das coole an Lua ist, dass es wirklich überall läuft (überall wo ANSI-C läuft, also wirklich überall) und nicht zwingend eine Abhängigkeit darstellt, da man die ganze Sprache inkl. Standardbibliothek direkt ins Binary mit einkompilieren kann, sind nur rund 120KB.

    Vorteil ist: Man kann Plugins als Scripte schreiben, zur Laufzeit laden, muss nur einmal kompileren und hat ne einfachere Programmiersprache.

    Frage ans Publikum ist jetzt daher, ob die Leute, die siginfo-ng nutzen bzw. daran basteln, Interesse haben das einzubauen, oder ob sie lieber mit dem alten statischen C-Müll bleiben wollen, daran werd ich aber in naher Zukunft nichts tun.

  • ich fänd den ansatz mit lua definitiv interessant
    könnte genügend testrechner zur verfügung stellen um die plattformunabhängigkeit testgetrieben sicherzustellen ;)

    vll schau ich mir in paar freien minuten (der tag sollte definitiv mehr stunden haben) auch mal siginfo-ng an, das ist (doch hoffentlich??) nich ganz so enorme bloat-software und daher vll ganz nett da einzusteigen

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!