Skip to content

z-push debugging

Gerade bin ich vom Zarafa Summercamp 2011 zurück und eines was ich mitgenommen habe will ich hier gleich mal beschreiben. Wenn ihr ein Smartphone z.B. Android oder iPhone habt und z-push einsetzt und euch wundert warum der Akku immer so schnell leer ist, dann könnte es sein euer Smartphone sich in einer Loop befindet. Mit schnell leer meine ich, dass man denkt das Telefon muss kaputt sein, weil es extrem heiß wird und innerhalb von 3-4 Stunden leer ist.

Debugging einschalten

Um herauszufinden ob tatsächlich z-push an dem Problem schuld ist oder ob es nicht doch etwas anderes ist müssen wir erst ein mal das Debugging von z-push einschalten. Dazu muss einfach eine debug.txt angelegt werden.

touch /var/www/z-push/debug.txt
chmod 777 /var/www/z-push/debug.txt

Damit fängt z-push erst mal an rudimentär mit zu loggen. Mit z.B. tail -f debug.txt kann man dabei zuschauen.

Verfangen

In eine Loop kann sich das Telefon verfangen wenn z.B. ein Kalendereintrag nicht richtig ist. So kann es sein das ein anderer Client (z.B. via Caldav) den Eintrag falsch abgespeichert hat oder bestimmte wichtige Parameter nicht gesetzt sind. Das Smartphone erhält die Daten dann via z-push, kann sie aber nicht interpretieren. Verwirft diese dann und fängt wieder an die Daten neu abzufragen (könnte ja sein dass nur temporär etwas schief gegangen ist). Und dies geschieht so lange bis der Akku leer ist.

Um jetzt den kaputten Eintrag zu finden müssen wir die request.php von z-push bearbeiten. Normalerweise empfangen die Smartphone 25, 50 oder gar 100 Einträge gleichzeitig. Das heißt so würden wir nie nur den einen Eintrag sehen der fehlerhaft ist. Daher zwingen wir z-push, egal wieviele Einträge das Smartphone anfragt, immer nur einen zu schicken. Dazu in die request.php folgendes hinzufügen:

$collection["maxitems"] = 1;

Jetzt wird immer nur ein Objekt ans Smartphone gesendet. Damit die Ausgabe in der debug.txt besser lesbar wird muss noch die wbxml.php bearbeitet werden

define('WBXML_DEBUG', true);

Dazu WBXML Debug auf true setzten.

Fehler suchen

Jetzt kann die Fehlersuche beginnen. Bringt euer Smartphone dazu die Daten zu aktualisieren. Öffnet z.B. den Kalender, Email oder Adressbuch. Und schaut in die Debug.txt

07/02/11 12:05:34 [12017][ie] O  <SyncKey>
07/02/11 12:05:34 [12017][ie] O  {c62e9122-b82a-4351-8ebe-dea553f7}1
07/02/11 12:05:34 [12017][ie] O  </SyncKey>

Das O steht für Output, ein I für Input. Die rot markierte Zahl muss immer größer werden.  Sollte der gleiche Sync-Key immer wieder auftreten dann schaut euch genauer an welcher Kalender bzw. Kontakt gerade gesynct werden soll. Ändert diesen (manchmal hilft einfach neu abspeichern) oder löscht diesen vom Server.

Nun sollte z-push wieder richtig funktionieren und euer Smartphone wieder den üblich Tag durchhalten.

tweetbackcheck