From f60e3a3f89549b4ce88df20888c08a01062d086a Mon Sep 17 00:00:00 2001 From: clerie Date: Sun, 20 Jun 2021 12:19:35 +0200 Subject: [PATCH] Let data get expired. --- README.md | 7 ++++++- iot_data/__init__.py | 9 ++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1c3d78c..1c0eca6 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,8 @@ Content type is considered too: curl -X POST -d '{"key": "value"}' -H 'Content-Type: application/json' http://iot-data.clerie.de/ingress/asdf1234/ ``` +Check for the last data input with the `Last-Modified` header. + ## Deployment Init codebase ``` @@ -38,12 +40,15 @@ Create `config.json` with the following contents and edit values for your needs: "key": "asdf1234" }, "sensor2": { - "key": "supersecret" + "key": "supersecret", + "delete-after": 60 }, } ``` +`delete-after`: Specifies the seconds after which the data gets discarded and no data is returned. + Starten und updaten lässt sich die Flask-App folgendermaßen: ``` cd iot-data/ diff --git a/iot_data/__init__.py b/iot_data/__init__.py index a13ba3e..0213789 100644 --- a/iot_data/__init__.py +++ b/iot_data/__init__.py @@ -3,6 +3,7 @@ from flask import Flask, abort, request, make_response import json import os +import time app = Flask(__name__) @@ -32,6 +33,7 @@ def ingress(key): values[keys[key]] = { "payload": request.data, "content-type": content_type, + "last-modified": time.time(), } else: return make_response("", 404) @@ -42,10 +44,15 @@ def ingress(key): def data(name): if not name in config: return make_response("", 404) + if name in values: + if "delete-after" in config[name]: + if (values[name]["last-modified"] + config[name]["delete-after"]) < time.time(): + values.pop(name) if not name in values: return make_response("", 404) resp = make_response(values[name]["payload"], 200) - resp.headers['content-type'] = values[name]["content-type"] + resp.headers['Content-Type'] = values[name]["content-type"] + resp.headers['Last-Modified'] = time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(values[name]["last-modified"])) return resp if __name__ == "__main__":