@1: Genau, entweder habt ihr jemanden mit Erfahrung mit Python, ansonsten unterstütze ich gerne

@2: Genau, im Prinzip ist es immer der gleiche Aufbau:
  • Funktion erstellen (z.B. hier get_active_jobs(subsystem))
  • Die gewünschte Route (URL-Pfad) dafür festlegen (@app.route)
  • Funktions-Code selbst


cnxn = pyodbc.connect('DSN=*LOCAL')
cursor = cnxn.cursor()


@app.route('/get-active-job/', methods=['GET', 'POST'])
def get_active_jobs(subsystem):

cursor.execute("Select job_name, subsystem, job_type, thread_count, cpu_time, function_type, FUNCTION, job_status \
from table(QSYS2.ACTIVE_JOB_INFO(SUBSYSTEM_LIST_FILTER=>upper(?))) t", subsystem)

rows = cursor.fetchall()

return jsonify(result)



Diesen Block kannst du kopieren. Statt SELECT kannst du auch einen CALL absetzen (dadurch auch RPG direkt aufrufen) ... halt alles was SQL unterstützt.

@3: CLOB & Co sind kein Problem. Hab ich auch in Verwendung. Python & ODBC handeln das automatisch.

@4: Genau, kein IWS. Man kann (und sollte) einen vorgelagerten Webserver verwenden (Apache oder NGINX).
Dieser leitet die Anfragen weiter an den Applikation Server (Python).
Ist beim IWS genauso. Dadurch können im WebServer diverse Konfigurationen vorgenommen werden, wie Berechtigungen und Verschlüsselung (HTTPS) und der Applikations Server braucht sich nur um die Verarbeitung kümmern.

Du kannst die Funktionen in diverse Skripts verteilen (am Besten mit entsprechender Ordnerstruktur je Bereich).

Grundsätzlich können die unterschiedlichen Requests alle unter dem gleichen Applikations-Server laufen.
Man kann aber auch mehrere WebServer und/oder mehrere Applikations-Server verwenden wenn man will. Es muss halt die Python App (das Grundgerüst) mehrfach kopiert werden.

@5: Zunächst gibt es die Möglichkeit vom Logging. Du kannst alles im Python in ein Log ausgeben lassen.
Für mich reicht das aus um damit den SQL Aufruf nachzustellen und ggf. interaktiv zu debuggen.
Ansonsten verbindet sich Python via ODBC mit der DB2. Dadurch sind das normale Jobs in der QUSRWRK.
Um diese Jobs direkt zu debuggen gibt es mehrere Möglichkeiten. Man könnte z.B. im RPG ein DSPLY mit Antwort-Aufforderung einbauen. Dadurch steht der Job auf MSGW und man kann sich via STRSRVJOB verbinden und mit STRDBG debuggen.

In der Regel reicht jedoch das Logging aus. Im IWS hab ich ja gar kein Logging, bis auf das was der IWS von sich aus ausgibt.