Seite wählen

NETWAYS Blog

JavaScript code mit Jasmine testen

Test-, bzw. Behaviour-driven Development hat mittlerweile auch vor JavaScript nicht Halt gemacht. Der Grundgedanke des Entwicklungsansatzes wirkt auch sehr charmant: Da man für die meisten Klassen erst Tests schreibt, erkennt man Implementierungsfehler in vielen Fällen schon während der Entwicklung.
In JavaScript gibt es für diesen Programmieransatz eine tolle UnitTest-Suite namens Jasmine (der Nachfolger von JSUnit). Diese zeichnet sich nicht nur durch quasi nicht vorhandene Abhängigkeiten, und ein umfangreiches Featureset aus, sondern auch durch eine tolle Art, seine Tests zu beschreiben. Möchte man z.B. eine Klasse „UserLogin“ beschreiben, die Eingaben überprüfen und User einloggen kann, sieht das wie folgt aus:

describe("UserLogin", function() {
    it("can log-in user", function() {
        ...Test code...
        expect(loginSuccess).toEqual(true);
    });
    it("can check input", function() {
        ...Test code...
    });
});

Das ist natürlich nur ein kurzer Einblick – es lohnt sich wirklich mal, über die sehr gute und einfach gehaltene Dokumentation zu lesen.

Version 2.0 der EventDB released

Seit heute ist Version 2.0 unserer EventDB released.

Externe Ereignisquellen wie z.B. SNMP-Traps oder Logfiles lassen sich damit in Icinga/Nagios® berücksichtigen und übersichtlich darstellen. Seit der letzten Version haben wir Performance, Skalierbarkeit und Usability stark optimiert.

Ein kleiner Überblick über die wichtigsten Änderungen:
1. Performance
Bei großen Umgebungen litt die EventDB bisher oftmals an Performanceschwäche: Sobald die Eventanzahl in die Millionenzahl ging, stiegen die Wartezeiten bei den Datenbankabfragen ebenfalls stark an. Hier haben wir angesetzt und das Datenbankschema optimiert.
Der Icinga-Web Cronk besitzt jetzt ebenfalls eine dezidierte Datenbank und unterstützt die Möglichkeit, separate Verbindungen für Lese- und Schreiboperationen zu verwenden.
Dadurch skaliert die EventDB jetzt deutlich besser, Abfragen gehen auch bei großen Datenmengen zügig vonstatten.
2. Icinga-Cronk und Classic Web
Übersicht über die EventDB
Der Icinga-Web Cronk wurde mit Augenmerk auf die Usability und Übersichtlichkeit umgeschrieben. Dreh- und Angelpunkt des neuen Interfaces ist dabei die neue Suchmaske: Mit ihr können Events einfach nach den verschiedensten Kriterien gefiltert werden. Egal ob man einfach nur gewisse Quellen ausblenden will oder komplexe Suchen nach verschiedenen Hosts, Messages, Programmen, etc. einrichten will – für jedes Szenario kann ein Filter eingerichtet werden.
Soll es mal schneller gehen bietet die Eventübersicht mit den praktischen Quickfiltern die Möglichkeit, schnell nach Hostnamen (oder Adressen) zu filtern oder bestimmte Eventkategorien auszublenden. Die Integration im Icinga-Web ist dabei nahtlos, Cronks können gespeichert, in Portalen zusammengefasst werden, etc.
Wer das klassische Interface bevorzugt, kann dieses natürlich auch weiterhin nutzen. Zwar hat sich im Featureset nichts geändert, dank der verbesserten Performance lohnt sich ein Umstieg jedoch trotzdem.
3. Plugin und IPv6
Beim Plugin gibt es neben einer neuen Option zur Integration ins Icinga-Web jetzt auch die Möglichkeit, mehrere Facilities und Severities gleichzeitig mit einem Status zu taggen. Ausserdem unterstützt die EventDB jetzt auch Hostadressen im IPv6 und IPv4 Format.
Die neue Version findet man wie immer unter netways.org oder direkt im git.

SASS – so macht CSS wieder Spaß

Keiner weiß, wie viele Entwickler schon aus dem Fenster gesprungen sind, weil sie „mal eben schnell“ alle Vorkommnisse eines Grautons und dessen Abstufungen leicht ins bläuliche Färben sollten. CSS wird zwar um viele Features erweitert, doch die Auzeichnungssprache an sich hat sich seit 1998 kaum geändert. Features wie Variablen sucht man vergebens, was einem bleibt ist viel doppelte Arbeit.
Doch bevor nun alle Entwicklungsabteilungen ins Erdgeschoß verlegt werden, möchte ich den Ausweg aus der misere Vorstellen: SASS.
*.sass Dateien sind spezielle Stylesheets, die über einen Compiler einfach in CSS umwandelt werden. Man kann so Variablen, verschachtelte Definitionen, Funktionen und vieles mehr in sein Stylesheet einbauen – der Compiler erstellt daraus dann eine valide CSS-Datei.
Und das beste: Wer CSS kann, muss kaum Neues lernen. Eigentlich kann man damit sofort produktiv loslegen.
Nehmen wir mal ein einfaches Stylesheet:

div.header {
   background-color: #ababab; /*dunkelgrauer Rand*/
   border: 1px solid #dedede; /*grauer Rand*/
}

Mit SASS würde dies wie folgt aussehen:

$theme_color1: rgb(222,222,222) /*Variable mit Farbwert*/
div.header
   background-color: darken($theme_color1, 20%) /*Rand, dank Funktion 20% dunkler als $theme_color*/
   border: $theme_color1 /*grauer Rand*/

Der Vorteil ist sofort ersichtlich: Muss man bei einem neuen Grauton das CSS  an zwei Stellen ändern und sogar den neuen Farbwert des Randes per Hand ausrechen, reicht bei der .sass Datei lediglich eine Änderung in der Variable $theme_color – den Rest erledigt SASS.
Das CSS erstellt man einfach via

sass --watch %sass-quelle%:%ziel-datei% 

Durch den –watch Parameter erkennt SASS, wenn sich Änderungen an der *.sass Datei ergeben haben und aktualisiert das CSS. So kann man direkt am SASS Entwurf arbeiten und sieht das Ergebnis sofort.
Natürlich ist das nur ein kleiner Einblick in die Möglichkeiten. Am besten einfach mal auf die Homepage gehen, ausprobieren und begeistert sein.

Neue Versionen von Noma, LConf for Icinga und BP-Cronk

Pünktlich zur Weihnachtszeit legen eine ganze Portion neuer Versionen unserer Monitoringtools unter den Weihnachtsbaum:
Noma Logo
Noma 1.0.6:
Der Email/SMS/Voicemail/etc. Notification Handler für Nagios/Icinga bekam neben einigen Bugfixes eine neue Filtermöglichkeit: Regeln können jetzt nicht nur anhand der Hosts und Services, sondern auch mittels der Hostgruppen eingerichtet werden.
Gerade wenn man mehrere Kunden anhand der Hostgruppen unterscheidet ist das eine große Hilfe – Musste man vormals jeden Host und Service einzeln heraussuchen, kann man jetzt einfach die Hostgruppe eintragen.
Das spart nicht nur Zeit, sondern auch Nerven.
LConf LogoLConf for Icinga 1.0.1:
Bei dem in Icinga-Web integrierten LDAP Editor wurde das Verhalten des DIT optimiert. Bei Änderungen muss man jetzt nicht mehr durch den Baum klicken, um seine Position zu finden, er klappt sich nun selbst wieder auf.
Auch gängige Tastaturkürzel funktionieren jetzt im DIT: Ctrl-C kopiert, Ctrl-X schneidet aus, Ctrl-V fügt ein, Ctrl-N legt ein neues Element an und mit der Entfernen Taste kann man einfach ausgewählte Einträge löschen.
Außerdem gab es Verbesserungen in der PostgreSQL Unterstützung und eine Menge Bugfixes.
BP-Cronk 1.0.1:
Der Icinga-Web Cronk für Bernd Strössenreuthers Business-Process-Addon (http://bp-addon.monitoringexchange.org/) wurde ebenfalls verbessert. Das Speichern neuer Konfigurationen wurde intuitiver und der Konfigurationsparser optimiert. So treten z.B. keine Fehler mehr bei der Behandlung des „min“ Prozesstyps auf.
Herunterladen kann man sich die Tools entweder bei netways.org oder direkt via git.
Frohe Weihnachten!

LConf 1.0 & LConf for Icinga 1.0.0

Vor einiger Zeit hat Tobias in seiner Blogserie „Nagios Config Interfaces“ unser Tool ‚LConf‘ vorgestellt, mit dem sich auch große Monitoringumgebungen bequem konfigurieren lassen. Wir freuen uns, heute Version 1.0 des freien (GPL) Tools veröffentlichen zu können.
Neben neuen Features wie Servicegruppen, SVN Revisions, neuen LDAP Schemas und vielen neuen Attributen mussten auch zahlreiche Bugs das Zeitliche segnen. Herunterladen kann man sich LConf wie immer auf netways.org.
Der Komfort von LConf steht und fällt natürlich mit dem verwendeten LDAP Editor. Für alle Benutzer der neuen Icinga-Web Oberfläche (und die, die es noch werden wollen) haben wir deshalb ein eigenes,  (nicht nur) auf LConf zugeschnittenen LDAP Modul entwickelt: LConf for Icinga.
Ein kleiner Auszug aus den Features:

  • Direkte Verwaltung des LConf Baums über den Browser in Icinga-Web
  • Intuitive Bedienung per Drag&Drop
  • Aliase lassen sich einfache per Drag&Drop erstellen und werden automatisch aktualisiert
  • Schlüsselwortsuche
  • Filterbarer LDAP Baum mittels Filtertemplates, die auch komplexe Filter einfach und übersichtlich ermöglichen
  • Search/Replace via Regular Expressions
  • Mehrere Datenbankverbindungen gleichzeitig möglich – inkl. Kopieren/Verschieben von Elementen einer Datenbank zur nächsten.
  • Autocomplete für viele Eigenschaften
  • Cronkintegration möglich, um von Hosts in der Icinga Host/Service Ansicht direkt zu ihrem Pendant im LDAP Baum zu springen

Serverseitig wird nur PHP5, Icinga-Web und das php_ldap Modul benötigt und schon kann man seinen Directory-Server vom Browser aus Verwalten.
Heruntergeladen werden kann auch dieses Modul ab sofort auf netways.org.