remote.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. from pathlib import Path
  2. from flask import request, Flask
  3. from flask_cors import CORS
  4. from datetime import datetime
  5. import pyodbc
  6. import subprocess
  7. app = Flask(__name__)
  8. # cors = CORS(app, resources={r"/*": {"origins": "http://localhost:4200/"}})
  9. CORS(app)
  10. path = Path('C:/GAPS/GCStarter/batch')
  11. path2 = Path('C:/GAPS/Portal/Tasks')
  12. @app.route('/', methods=['GET', 'POST'])
  13. def main():
  14. if request.args.get('valid') != '1':
  15. return "Funktioniert!"
  16. if request.args.get('gchr') is not None:
  17. return gchr()
  18. log = request.args.get('log')
  19. if log is not None:
  20. return logs(log)
  21. filename = request.args.get('batch', 'GCStarter.bat')
  22. return batch(filename)
  23. @app.route('/gchr/', methods=['POST'])
  24. def gchr():
  25. dsn = request.form.get('dsn')
  26. query = request.form.get('query')
  27. if dsn is None or query is None:
  28. return 'Fehler: fehlende Parameter'
  29. return fetch_query_as_csv(dsn[5:], query)
  30. def fetch_query_as_csv(dsn, query):
  31. try:
  32. conn = pyodbc.connect(dsn)
  33. cursor = conn.cursor()
  34. cursor.execute(query)
  35. return "\n".join([";".join(row) for row in cursor.fetchall()])
  36. except pyodbc.InterfaceError as e:
  37. print(e.args[1])
  38. return e.args[1], 422
  39. @app.route('/logs/<log>')
  40. def logs(log):
  41. logfile = path.joinpath('logs/' + log)
  42. if not logfile.exists():
  43. return f"Fehler: Datei '{log}' unbekannt"
  44. with open(logfile, 'r') as f:
  45. return f.read()
  46. @app.route('/batch/<filename>')
  47. def batch(filename):
  48. cmd = path.joinpath(filename)
  49. if not cmd.exists():
  50. cmd = path2.joinpath(filename)
  51. if not cmd.exists():
  52. return f"Fehler: Datei '{filename}' unbekannt"
  53. log = filename[:-4] + '_' + datetime.now().strftime('%Y%m%d_%H%M%S') + '.log'
  54. logfile = path.joinpath('logs/' + log)
  55. with open(logfile, 'wb') as stream:
  56. if filename != 'GCStarter.bat':
  57. stream.write(b'Starte Prozess...')
  58. subprocess.Popen(f'C:\\Windows\\System32\\cmd.exe /C "{cmd} & echo Prozess beendet. & echo [.]" ', stdout=stream, stderr=stream)
  59. # p.wait()
  60. return log
  61. if __name__ == '__main__':
  62. app.run(host='0.0.0.0', port='8091')