Seite wählen

NETWAYS Blog

Versteckte Perlen in Icinga Web 2

In Icinga Web 2 gibt es ein paar versteckte Parameter, die leider noch nicht dokumentiert sind aber sicher hier und da hilfreich sein können.
Entwicklermodus für JavaScript und CSS
Icinga Web 2 liefert eigentlich JavaScript und CSS komprimiert an den Client aus. Als Entwickler oder zur Fehlersuche ist aber hilfreich, die Kandidaten in ihrer Originalform auszuliefern. Dazu hängt man den Parameter _dev=1 an die URL.
Listen und Detail-Informationen exportieren
Die Listen zur Ansicht der Hosts, Services und Gruppen und der jeweiligen Detail-Bereiche lassen sich nach JSON und CSV exportieren. Dazu hängt man den format Parameter mit entweder json oder csv als Wert an, also z.B. icingaweb2/monitoring/list/services?format=json.

Vollbildmodus
Um eine Sicht in Icinga Web 2 in den Vollbildmodus zu bringen, hängt man einfach die zwei Parameter showCompact=1 und showFullscreen=1 an die URL. showCompact blendet die Kontrollelemente wie den Filter-Editor und Paginator aus und showFullscreen das Menü und den Header. Das ganz sieht dann so aus:

Eric Lippmann
Eric Lippmann
CTO

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.

Namensauflösung für LXC in Ubuntu 16.04

Um auf Services in einem Container, wie z.B. SSH oder MySQL zuzugreifen, benötigt man ja eigentlich die IP-Adresse des Containers. Mit ein paar Handgriffen kann man aber auch einfach den Hostnamen des Containers, wie im folgenden Beispiel benutzen.

lxc-create -n mysql1.lxc -t ubuntu -- --release=xenial
lxc-start -n mysql1.lxc -d
ssh ubuntu@mysql1.lxc

Um die interne Namensauflösung für die lxc-Domain zu aktivieren, muss folgende Zeile in /etc/default/lxc-net einkommentiert werden und der Dienst lxc-net neugestartet werden.

LXC_DOMAIN=lxc

LXC startet selbst den einfachen DNS- und DHCP-Server dnsmasq für sein Netzwerk, welcher auf die IP-Adresse 10.0.3.1 hört. Diese tragen wir einfach als Nameserver in /etc/resolvconf/resolv.conf.d/head ein:

nameserver 10.0.3.1

Danach muss die Datei resolv.conf mit folgendem Befehl aktualisiert und eventuell laufende Container neugestartet werden.

resolvconf -u
Eric Lippmann
Eric Lippmann
CTO

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.

if exists for Column and Index Migrations in MySQL

Unfortunately MySQL does not provide an SQL statement for conditionally creating a column if it does not already exist. There also does not appear to be an easy way for dropping a column without causing an error if the column doesn’t exist. The same problem also applies to indices. This functionality however is commonly used for idempotent schema updates. Without stored procedures which take care of the changes you are lost. I would like to share a Gist on GitHub which helps for the following schema migrations:

  • Drop index if exists
  • Create index if not exists
  • Create unique index if not exists
  • Drop column if exists
  • Add column if not exists

I am using the INFORMATION_SCHEMA tables for testing for the existence of columns and indices. No special grant is necessary to query from those tables. The stored procedures have the following signature:
Drop index if exists
m_drop_index(table_name, index_name)
Create index if not exists
m_create_index(table_name, index_name, index_columns)
Create unique index if not exists
m_create_unique_index(table_name, index_name, index_columns)
Drop column if exists
m_drop_column(table_name, column_name)
Add column if not exists
m_add_column(table_name, column_name, column_definition)
After importing, you can use them instead of MySQL’s ALTER statements. Here is an example for adding the name column to the table person:

mysql> CALL m_add_column('person', 'name', 'varchar(255)');
Eric Lippmann
Eric Lippmann
CTO

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.

Funktionales Programmieren in PHP

Letztens bin ich auf Github auf ein interessantes Projekt gestoßen, das ich euch nicht vorenthalten möchte. Ihor Burlachenko bietet mit PHP NSPL eine großartige Bibliothek, um alltägliche Programmieraufgaben elegant und funktional zu lösen. Sein Projekt auf Github ist ausführlich dokumentiert und bietet einige Beispiele. Also am besten gleich vorbeischauen oder hier den ersten Eindruck gewinnen:

// Get user ids
// NSPL
$userIds = map(propertyGetter('id'), $users);
// vs PHP
$userIds = array_map(
    function ($user) {
        return $user->id;
    },
    $users
);
// Filter active users
// NSPL
$activeUsers = filter(methodCaller('isActive'), $users);
// vs PHP
$activeUsers = array_filter(
    $users,
    function ($user) {
        return $user->isActive();
    }
);

Eric Lippmann
Eric Lippmann
CTO

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.

Eigene Icon-Fonts erstellen

fontello Icon-Fonts erfreuen sich in der Webentwicklung großer Beliebtheit, weil sie gegenüber der klassischen Icon-Implementationen eine ganze Reihe an Vorteilen bieten. Zum Beispiel kann man die Farbe ohne große Umstände im CSS ändern, anstatt ein Tool zur Bildbearbeitung bemühen zu müssen. Auch die Skalierbarkeit und das Hinzufügen von Effekten ist mit Icon-Fonts viel einfacher.
Nun gibt es aber viele Icon-Fonts, die verwendet werden können und sicherlich braucht man nicht immer alle Icons, die geboten werden oder befindet einen Icon-Font als nicht ausreichend. Da wäre es doch toll, sich einen eigenen Icon-Font erstellen zu können. Und das geht ganz einfach mit dem online Icon-Font-Generator fontello, bei dem man sich Icons aus bekannten Icon-Fonts wie Font Awesome und Elusive zusammenklickt und dann herunterlädt.
Das generierte Archiv enthält den Icon-Font in verschiedenen Formaten, CSS um die Icon-Klassen direkt benutzen zu können und eine Konfigurationsdatei, die man in fontello wieder importieren kann, um den Icon-Font anzupassen.

Eric Lippmann
Eric Lippmann
CTO

Eric kam während seines ersten Lehrjahres zu NETWAYS und hat seine Ausbildung bereits 2011 sehr erfolgreich abgeschlossen. Seit Beginn arbeitet er in der Softwareentwicklung und dort an den unterschiedlichen NETWAYS Open Source Lösungen, insbesondere inGraph und im Icinga Team an Icinga Web. Darüber hinaus zeichnet er für viele Kundenentwicklungen in der Finanz- und Automobilbranche verantwortlich.