Erweiterung schreiben: Difference between revisions
No edit summary |
No edit summary |
||
Line 16: | Line 16: | ||
* wavecdn_deliver | * wavecdn_deliver | ||
Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Funktion mit dem jeweiligen Schrittnamen enthält. Damit eine Erweiterung beispielsweise im Schritt wavecdn_receive ausgeführt wird, muss eine Funktion "def wavecdn_receive()" im Python-Skript definiert werden. | Eine Erweiterung kann sich in die einzelnen Schritte einklinken, in dem sie eine Funktion mit dem jeweiligen Schrittnamen enthält. Damit eine Erweiterung beispielsweise im Schritt wavecdn_receive ausgeführt wird, muss eine Funktion "def wavecdn_receive()" im Python-Skript definiert werden. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später. | ||
= Die Environment-Klasse = | = Die Environment-Klasse = | ||
Line 25: | Line 25: | ||
* get_request_header(name): Gibt den Request-Header mit dem angegebenen Namen zurück. | * get_request_header(name): Gibt den Request-Header mit dem angegebenen Namen zurück. | ||
* set_request_header(name, value): Setzt den Request-Header mit dem angegebenen Namen und Wert. | * set_request_header(name, value): Setzt den Request-Header mit dem angegebenen Namen und Wert. | ||
Je nach Schritt sind bestimmte Funktionen verfügbar oder nicht. | |||
= Deployment = | = Deployment = |
Revision as of 01:27, 5 January 2014
Einleitung
Bei Erweiterungen handelt es sich um Python-Skripts, die auf den WaveCDN-Edges bei der Anfragenabarbeitung aufgerufen werden. Die Erweiterungen können Daten auslesen und verändern. Damit ist es möglich auf flexibelste Art und Weise WaveCDN an die eigenen Anforderungen anzupassen.
Die Erweiterungen laufen auf den Edges in abgeschlossenen Boxen. Der Speicher ist auf 8 MB limitiert und die CPU-Nutzung ist ebenfalls stark eingeschränkt. Die Funktionen der Erweiterungen werden von WaveCDN parallel aufgerufen. Thread-safety muss gewährleistet sein. Es sollten ausschließlich Python-Skripts mit hoher Performance ausgeführt werden. Für Fehler bei der Ausführung von Python-Skripts übernehmen wir keinerlei Verantwortung. Wir empfehlen insbesondere ausgiebiges Testen der Erweiterungen.
Wir empfehlen vorweg die FAQ durchlesen. Außerdem sollte man sich mit dem Anfragenmodell vertraut machen.
Schritte
Das Anfragenmodell gibt an, welche Schritte WaveCDN ausführt, wenn ein Webuser eine Anfrage stellt. 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 Funktion mit dem jeweiligen Schrittnamen enthält. Damit eine Erweiterung beispielsweise im Schritt wavecdn_receive ausgeführt wird, muss eine Funktion "def wavecdn_receive()" im Python-Skript definiert werden. Je nach Schritt gibt es bestimmte Rückgabewerte, mehr dazu später.
Die 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. Im folgenden eine kurze Dokumentation der Environment-Klasse:
- get_client_ip(): Gibt die IP vom Webuser zurück.
- get_request_header(name): Gibt den Request-Header mit dem angegebenen Namen zurück.
- set_request_header(name, value): Setzt den Request-Header mit dem angegebenen Namen und Wert.
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.