Seite wählen

NETWAYS Blog

Weekly Snap: Puppet Camp CfP, PHP SPL & OSMC

weekly snap23 – 27 June ended the month with tips for PHP developers, sys admins and business travellers, while shining the spotlight on our upcoming events.
At 155 days, Eva started her countdown to the Open Source Monitoring Conference with Luca Deri’s talk on “Monitoring Network Traffic Using Ntopng”, and Bernd followed with his OSMC reflections in suit.
Eva went on to open the Puppet Camp Call for Papers in full song and dance, as Christian reminded readers to join the Foreman / OpenNebula webinar.
Sebastian then explained how to replicate ZFS file systems with zrep, and Eric began a new blog series on PHP’s SPL with an example of ‘peek ahead during iteration’.
To end the week, Tobias shared his flight-booking tips for business travellers.

PHP SPL: Peek Ahead During Iteration

Eines der „Glanzstücke“ von PHP und definitiv eine Blog-Serie wert, ist die seit Version 5.0.0 verfügbare SPL.
Was ist das?
SPL ist die Standard PHP Library, die laut dem PHP-Handbuch eine Sammlung von Interfacen und Klassen für die Lösung von Standardproblemen ist. Wer Klassen und Interfaces aus der SPL verwendet, die quasi eine API zu den intern eingebauten PHP Funktionen sind, kann mit Standardmitteln voll objektorientierten Code schreiben.
Nachfolgend das erste Beispiel dieser Serie.
Peek ahead during iteration

getInnerIterator()->valid() ?
        $cachingIterator->getInnerIterator()->current() : 'eoi') . PHP_EOL;
}
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.

Weekly Snap: Puppet Camp Program, PHP & DRDB

weekly snap25 – 29 March was packed with events and the odd tool or two for sys admins and web devs.
Markus announced the programme for Puppet Camp 2013 on 19 April, while Bernd shared his impressions of the FLOSS UK 2013 conference in Newcastle.
Continuing on events, Eva counted 23 days to the OSDC with Andreas Schmidt’s presentation on implementing the Marionette Collective.
Philipp then introduced two new features in DRBD for high availability clustering, and Marius gave us his thoughts on the latest PHP standards from PSR-0 to PSR-3.

PSR-0,1,2, nichts dabei!

phpMir ist klar dass der Titel dieses Post erstmal Verwirrung stiftet. Denn es hat wieder mit den unmöglichen Tiefen von PHP zu tun, und zwar mit einem Standard. Bis vor einiger Zeit gibt es für PHP aus dem Vendor Team keinen eigenen Standard wie man PHP eigentlich schreibt – also wie man es so schreibt das es lesbar ist und bei jeden gleich aussieht.
Bis zu diesem Zeitpunkt gab es einige Versuche: Zend, Squiz, Pear. Aber das Ergebnis war nie perfekt. Andere Sprachen haben ihren Styleguide bereits dabei, z.B. PEP8 in Python. Auch wurde viel in fremden Welten geklaut, z.B. Code Conventions von Java oder die Entfremdung einiger C Stile brachte so manches Stirnrunzeln vor den Bildschirm. Nun hat die PHP Framework Interop Group mit Ihrem „propose a standards recommendation“ einen sehr guten Standard rausgekurbelt der:

  1. Zu PHP passt
  2. Die Aktualität berücksichtigt
  3. Von vielen akzeptiert wird

Die PHP-FIG an sich sich ist eine Gruppe von Personen die versuchen an vielen Ecken und Enden Standards zu schaffen, an die man sich halten kann – aber nicht muss. Herausgekommen ist ein vierteiliges Werk was wiederum auf spezielle Teile von Sprachkonstrukten Einfluss nimmt:

Über PSR-3 lässt sich streiten aber 0-2 sind super umgesetzt  und integriert sich sinnvoll in die Sprache. Nicht zuletzt wird der Standard von vielen Tools bereits unterstützt: PHP CodeSniffer oder PHPStorm, Eclipse. Und viele Projekte sind bereits damit umgesetzt, http://packagist.org feststellen kann.
So schaut es gut aus:

$ phpcs --standard=PSR2 Process.php
Time: 0 seconds, Memory: 6.25Mb
.
 *
 * @author Marius Hein 
 * @copyright 2012-2013 NETWAYS GmbH 
 */
namespace NETWAYS\IO;
/**
 * Specific implementation to FO
 * @package NETWAYS\IO
 * @author Marius Hein 
 */
class FileObject extends \SplFileObject
{
    /**
     * Integrate chmod on that file
     * @param int $mode
     * @return bool
     */
    public function chmod($mode)
    {
        return chmod($this->getRealPath(), $mode);
    }
}
Marius Hein
Marius Hein
Head of IT Service Management

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert und viele Jahre in der Softwareentwicklung gearbeitet. Mittlerweile ist er Herr über die interne IT und als Leiter von ITSM zuständig für die technische Schnittmenge der Abteilungen der NETWAYS Gruppe. Wenn er nicht gerade IPv6 IPSec Tunnel bohrt, sitzt er daheim am Schlagzeug und treibt seine Nachbarn in den Wahnsinn.

Wie man ein Icinga Plugin nicht schreiben sollte

(this is a cross-post with my private blog, you will find there the English version of this post)
oder: Frameworking falsch gemacht
Ich bin diese Woche bei einem Kunden auf etwas interessantes gestoßen. Einige Plugins für Icinga verursachten enorme CPU Last, sobald ein paar Checks gleichzeitig gestartet sind waren beide CPUs der VM auf 80-90%.
Als ich mir die Plugins angeschaut habe fand ich seltsamen PHP Code, sah ungefähr so aus:

<?php
require_once('phplib/Framework.php');
if(!FRAMEWORK_LOADED) Framework::initialize();
CheckLicenseManager::run();

So auf den ersten Blick wirkt es ja nicht mal schlecht, da wird halt ein Framework geladen, dass die jeweiligen Klassen bereitstellt und dann wird die jeweilige Klasse „ausführt“. Das Framework selbst bestand aus mehreren PEAR Klassen und selbst geschriebenen Klassen die die jeweiligen Checks implementieren.
Das faszinierende an der Geschichte war jedoch dass das Plugin knapp 6 Sekunden dafür gebraucht hat die „–help“ Ausgabe zu liefern, die eigentliche Funktion des Plugins ist in unter einer Sekunde fertig.
Ein strace des Skripts brachte dann das Problem recht schnell ans Tageslicht: das Framework tut nichts anderes als per PHP-Autoloadfunktion sämtliche PHP Dateien und Klassen im Verzeichnis zu laden, was ca. 90 Stück waren.
Ich erklärte dem Kunden das Problem, und dass ich wohl keine direkte Lösung anbieten könnte, außer eben die paar Plugins neu zu schreiben. Das machte ich dann auch und dem Server war wieder langweilig.
Ein paar Regeln für Icinga Plugins (die ich für mich gesetzt habe):

  • Keep it simple ™
  • Ordentlich kommentieren
  • eine verständliche –help Ausgabe mit Beispielen
  • bei komplexen Plugins: Verbose und Debug Funktionen für spätere Probleme und Tests
  • Möglichst in Perl oder Shell schreiben um weniger Abhängigkeitsprobleme zu haben
  • und last but not least:
    Wenn möglich veröffentlichen, denn dafür gibt’s monitoringexchange.org, denn irgendjemand kann es sicher auch gebrauchen!  😉