Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | Nächste Überarbeitung Beide Seiten der Revision | ||
xml:jobdownload [27.08.2012 ] dstore |
xml:jobdownload [13.11.2014 ] 127.0.0.1 Externe Bearbeitung |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Download von Jobs ====== | ||
+ | Um Jobs unabhängig ihres Typs (Artikel, Personen, Aufträge) vom Server abzurufen verwenden Sie die folgende URL | ||
+ | |||
+ | https://<Partner>-<Projekt>.dstore.de/xml/job | ||
+ | |||
+ | mit den Pflichtparametern: | ||
+ | |||
+ | * Interfacename : Name der Schnittstelle, also in der Regel "orders_out", "persons_out". Es können natürlich auch Jobs von "_in"-Schnittstellen abgerufen werden | ||
+ | * Jobname : Name des Jobs der abgerufen werden soll. Die Namen der noch nicht abgerufenen Jobs erhalten Sie über [[jobmanagement|die Liste der Jobs in der Warteschleife (jobqueue)]]. | ||
+ | |||
+ | Es ist eine HTTP-Auth-Anmeldung mit einem [[dstoreterm>dStoreUser|dStore-User]] erforderlich. | ||
+ | | ||
+ | Die Rückmeldung im Erfolgsfall ist | ||
+ | |||
+ | * HTTP-Status 200 OK | ||
+ | * Body (application/xml) mit dem Inhalt des Jobs | ||
+ | |||
+ | Ist es zu einem Fehler gekommen (Jobname falsch o.ä.) ist die Rückmeldung: | ||
+ | |||
+ | * HTTP-Status ungleich 200, in der Regel ist das dann: | ||
+ | * Falls eine Änderung der Parameter den Fehler beheben kann: 400 Bad Request | ||
+ | * Falls der Request unverändert zu einem späteren Zeitpunkt erfolgreich sein kann: 503 Service Unavailable | ||
+ | * Falls http statt https verwendet wurde ist der HTTP-Status 403 Forbidden | ||
+ | * Body (text/plain) mit weiteren Informationen (i.d.R. sind dies die Fehlermeldungen) | ||
+ | |||
+ | ==== Pollen in Intervallen ==== | ||
+ | |||
+ | Gerade bei den _out-Schnittstellen möchte man in Intervallen die Schnittstelle auf neue, exportierte Jobs in Intervallen abfragen und die empfangenen Dateien dann verarbeiten. Wir verwenden hierzu oft bash-Skripte die so aufgebaut sind: | ||
+ | |||
+ | <code bash poll_queue.sh> | ||
+ | #!/bin/bash | ||
+ | |||
+ | USAGE="Usage: $0 | ||
+ | --hostname <partner-project.dstore.de> | ||
+ | --interface <eg. orders_out> | ||
+ | --username <username> | ||
+ | --password <password> | ||
+ | [--sleep <sleep between polls in seconds>] | ||
+ | " | ||
+ | # default values | ||
+ | SLEEPTIME=120 | ||
+ | |||
+ | # read parameters | ||
+ | while :; do | ||
+ | case "$1" in | ||
+ | --hostname) | ||
+ | shift; HOSTNAME="$1"; shift | ||
+ | ;; | ||
+ | --interface) | ||
+ | shift; INTERFACE="$1"; shift | ||
+ | ;; | ||
+ | --username) | ||
+ | shift; USERNAME="$1"; shift | ||
+ | ;; | ||
+ | --password) | ||
+ | shift; PASSWORD="$1"; shift | ||
+ | ;; | ||
+ | --sleep) | ||
+ | shift; SLEEPTIME="$1"; shift | ||
+ | ;; | ||
+ | -*) | ||
+ | # Unexpected option | ||
+ | echo $USAGE | ||
+ | exit 2 | ||
+ | ;; | ||
+ | *) | ||
+ | break | ||
+ | ;; | ||
+ | esac | ||
+ | done | ||
+ | |||
+ | # Required Parameters | ||
+ | if [ -z "$HOSTNAME" -o -z "$INTERFACE" -o -z "$USERNAME" -o -z "$PASSWORD" ]; then | ||
+ | echo $USAGE | ||
+ | exit 2 | ||
+ | fi | ||
+ | |||
+ | function GetNextJobInQueue { | ||
+ | local HOSTNAME=$1 | ||
+ | local INTERFACE=$2 | ||
+ | local USERNAME=$3 | ||
+ | local PASSWORD=$4 | ||
+ | JOBS_IN_QUEUE=$(curl 'https://'${HOSTNAME}'/xml/jobqueue?Interfacename='${INTERFACE} --user ${USERNAME}:${PASSWORD} --silent --fail --show-error ) | ||
+ | RETVAL=$? | ||
+ | if [ $RETVAL -ne 0 ]; then | ||
+ | echo "Could not get jobqueue via http request: https://${HOSTNAME}/xml/jobqueue?Interfacename=${INTERFACE}. Maybe username:password wrong? Please check." | ||
+ | return 255; | ||
+ | fi | ||
+ | if [ "$JOBS_IN_QUEUE" == "" ]; then | ||
+ | FOUND_JOBFILE=""; | ||
+ | echo "No job in ${INTERFACE} queue" | ||
+ | return; | ||
+ | fi | ||
+ | JOBS_IN_QUEUE=($JOBS_IN_QUEUE); | ||
+ | FOUND_JOBFILE=${JOBS_IN_QUEUE[0]} | ||
+ | } | ||
+ | |||
+ | function GetJob { | ||
+ | local HOSTNAME=$1 | ||
+ | local INTERFACE=$2 | ||
+ | local JOBNAME=$3 | ||
+ | local USERNAME=$4 | ||
+ | local PASSWORD=$5 | ||
+ | |||
+ | HTTP_STATUS=$(curl --output ${JOBNAME} --write-out "%{http_code}" 'https://'${HOSTNAME}'/xml/job?Interfacename='${INTERFACE}'&Jobname='${JOBNAME} --user ${USERNAME}:${PASSWORD} --silent --fail --show-error) | ||
+ | RETVAL=$? | ||
+ | if [ $RETVAL -ne 0 -o $HTTP_STATUS -ne 200 ]; then | ||
+ | echo "Could not get job via http request: https://${HOSTNAME}/xml/job?Interfacename=${INTERFACE}. Maybe username:password wrong? Please check." | ||
+ | return 255; | ||
+ | fi | ||
+ | echo "Fetched ${JOBNAME} (HTTP-status-code ${HTTP_STATUS})" | ||
+ | } | ||
+ | |||
+ | function ProcessJob { | ||
+ | local JOBNAME=$1 | ||
+ | echo "Processing ${JOBNAME}" | ||
+ | } | ||
+ | |||
+ | # Loop endless | ||
+ | while [ 1 == 1 ]; do | ||
+ | GetNextJobInQueue $HOSTNAME $INTERFACE $USERNAME $PASSWORD | ||
+ | if [ "$FOUND_JOBFILE" != "" ]; then | ||
+ | GetJob $HOSTNAME $INTERFACE $FOUND_JOBFILE $USERNAME $PASSWORD | ||
+ | ProcessJob $FOUND_JOBFILE | ||
+ | fi | ||
+ | # Sleep until next poll-cycle | ||
+ | sleep $SLEEPTIME | ||
+ | done | ||
+ | </code> |