From 84fcbdbafdf58d0f1963c69bad5b6bcb9c805ce1 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Thu, 3 Mar 2022 10:10:12 +0300 Subject: Add endpoint for checking state of external processes Long-running computations are handed off to external processes. This avoids timeouts in the webserver, and also reduces chances of instability of the webserver. The results of these long-running computations are needed eventually, so this commit provides a way to check for the state of the computation, and the results if any. --- gn3/api/async_commands.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 gn3/api/async_commands.py (limited to 'gn3/api') diff --git a/gn3/api/async_commands.py b/gn3/api/async_commands.py new file mode 100644 index 0000000..f8400c8 --- /dev/null +++ b/gn3/api/async_commands.py @@ -0,0 +1,21 @@ +"""Endpoints and functions concerning commands run in external processes.""" +import json + +import redis +from flask import jsonify, Blueprint + +async_commands = Blueprint("async_commands", __name__) + +@async_commands.route("/state/") +def command_state(command_id): + with redis.Redis() as rconn: + state = rconn.hgetall(name=command_id) + if not state: + return jsonify( + status=404, + error="The command id provided does not exist.") + state = { + key.decode("utf-8"): val.decode("utf8") + for key,val in state.items() + } + return jsonify(state) -- cgit v1.2.3