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.

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Sebastian am :

Die Z-Push Präsentation vom Zarafa Summercamp ist nun auch öffentlich verfügbar: http://www.slideshare.net/zarafagroupware/zpush-debugging

Viele Grüße! Seb

Flo am :

Die Einstellungen zum debugging haben mir sehr bei der Eingrenzung meines Akku-Problems geholfen. Allerdings habe ich auch nach langer Suche nicht herausgefunden, wie ich den zu dem entsprechenden SyncKey gehörenden Kalendereintrage herausfinden kann. Für einen Tip hierzu wäre ich echt dankbar.

Savar am :

Hallo Flo,

freut mich dass es dir ein bisschen geholfen hat. Hast du in der wbxml.php den Wert auf true gesetzt?

Dann solltest du die Einträge menschenlesbar sehen. Unteranderem auch den SyncKey. Wenn ein Kalendereintrag immer wieder kommt, also immer der gleiche SyncKey benutzt wird. Dann ist das dein Übeltäter.

Grüße

Ingo

Flo am :

"define('WBXML_DEBUG', true);" ist eingestellt und die maxitems in der request.php sind auf 1 begrenzt. Den SyncKey sehe ich im logfile auch, aber dabei steht kein Betreff etc. eines bestimmten Eintrages. Kann es sein, dass für die Synchronisierung des Kalenders allgemein ein bestimmter SyncKey verwendet wird, dessen "rote Nummer" sich nur bei Änderungen irgendwo im Kalender erhöht?

savar am :

Wenn sich im Kalender nichts geändert hat dann wird auch der SyncKey nicht größer. Aber wenn du die Syncro einmal ausschaltest und wieder einschaltest wird alles neu syncronisiert und da muss der SyncKey größer werden wenn du mehr als einen Kalendereintrag hast. Ansonsten poste mal einen Teil deiner Logdatei hier vielleicht kann ich dir dann helfen....

Grüße

Ingo

Kommentar schreiben

Markdown-Formatierung erlaubt
Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

Formular-Optionen
tweetbackcheck