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:
NETWAYS Blog
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
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)');
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();
}
);
Eigene Icon-Fonts erstellen
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.