Erweiterung schreiben: Difference between revisions

From WaveCDN Wiki
Jump to navigation Jump to search
Line 34: Line 34:
= Die Klasse WavecdnEnvironmentV1 =
= Die Klasse WavecdnEnvironmentV1 =


Wenn WaveCDN eine Funktion der Erweiterung aufruft, wird eine Instanz der Environment-Klasse übergeben. Aus ihr können Daten ausgelesen oder auch gespeichert werden. Im folgenden eine kurze Dokumentation der Environment-Klasse:
Wenn WaveCDN eine Funktion der Erweiterung aufruft, wird eine Instanz der Environment-Klasse übergeben. Aus ihr können Daten ausgelesen oder auch gespeichert werden. Man sollte sich auf jeden Fall die [[Dokumentation der Environment-Klasse]] ansehen.
 
 


Je nach Schritt sind bestimmte Funktionen verfügbar oder nicht.
Je nach Schritt sind bestimmte Funktionen verfügbar oder nicht.

Revision as of 11:48, 8 January 2014

Einleitung

Bei Erweiterungen handelt es sich um Python-Skripts, die auf den weltweiten Edges von WaveCDN ausgeführt werden. Damit ist es möglich, die Abarbeitung der Webuser-Anfragen stark zu beeinflussen. Die Erweiterungen können Daten auslesen und verändern. Erweiterungen erlauben es WaveCDN auf flexibelste Art und Weise an die eigenen Anforderungen anzupassen.

Die Erweiterungen laufen auf den Edges in abgeschlossenen Einheiten. Ein Python-Programm lädt die Erweiterung und führt die Erweiterungsfunktionen in mehrerenen Python-Threads parallel aus. Die Funktionen müssen also thread-safe sein. Der Speicher ist auf insgesamt 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Aufgrund der begrenzten Ressourcen sollten ausschließlich Python-Skripts mit hoher Performance eingesetzt werden. Für Fehler oder Beschränkungen bei der Ausführung von Erweiterungen übernehmen wir keinerlei Verantwortung. Man sollte Erweiterungen insbesondere ausgiebig Testen.

Wir empfehlen vorweg die FAQ durchlesen.

Funktionen

Wenn ein Webuser eine Anfrage an WaveCDN stellt, so müssen bis zur Antwort einige Schritte abgearbeitet werden. Diese sind im Anfragenmodell beschrieben. Konkret handelt es sich um folgende fünf Schritte:

  • wavecdn_receive
  • wavecdn_hit
  • wavecdn_miss
  • wavecdn_fetch
  • wavecdn_deliver

Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Python-Funktion mit dem jeweiligen Schrittnamen deklariert. Damit zum Beispiel eine Erweiterung im Schritt wavecdn_receive ausgeführt wird, muss die entsprechende Funktion im Python-Skript deklariert sein. Das kann wie folgt aussehen:

#!/usr/bin/python

def wavecdn_receive():
    pass

Parameter

Bei Aufruf einer Erweiterungsfunktion wird ein Environment übergeben. Konkret handelt es sich um eine Instanz der Python-Klasse WavecdnEnvironmentV1.


Rückgabewerte

Die Erweiterungsfunktionen können bestimmte Werte zurückgeben. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.

Die Klasse WavecdnEnvironmentV1

Wenn WaveCDN eine Funktion der Erweiterung aufruft, wird eine Instanz der Environment-Klasse übergeben. Aus ihr können Daten ausgelesen oder auch gespeichert werden. Man sollte sich auf jeden Fall die Dokumentation der Environment-Klasse ansehen.

Je nach Schritt sind bestimmte Funktionen verfügbar oder nicht.

Deployment

Um die Erweiterungen auf den weltweiten Edges von WaveCDN zu deployen, muss man zunächst im Webpanel das CDN-Setup öffnen, in welchem die Erweiterung laufen soll. Im Tab "Erweiterungen" gibt es einen Button zum Hinzufügen einer Erweiterung. Nach Einfügen des Python-Codes und Abschicken des Formulars wird die Erweiterung weltweit installiert. Dies kann einige Minuten dauern.

Troubleshooting

Zunächst sollte ein Blick in die Logs geworfen werden. Dafür klickt man auf das betroffene CDN-Setup, auf den Tab "Erweiterungen" und auf den Button "Anzeigen" bei der entsprechenden Erweiterung. Unten auf der Seite sind dann die letzten Log Messages vorzufinden.