diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 2a0cabff80..bc408e1a32 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -7,6 +7,7 @@ in development Added ~~~~~ +* Add sample passive sensor at `contrib/examples/sensors/echo_flask_app`. (improvement) #3667 * Add pack config into action context. This is made available under the ``config_context`` key. #3183 * Implement pause and resume for Mistral workflow. Pause and resume will cascade down to diff --git a/contrib/examples/sensors/echo_flask_app.py b/contrib/examples/sensors/echo_flask_app.py new file mode 100644 index 0000000000..0e0b5ede95 --- /dev/null +++ b/contrib/examples/sensors/echo_flask_app.py @@ -0,0 +1,49 @@ +from flask import request, Flask + +from st2reactor.sensor.base import Sensor + + +class EchoFlaskSensor(Sensor): + + def __init__(self, sensor_service, config): + super(EchoFlaskSensor, self).__init__( + sensor_service=sensor_service, + config=config + ) + + self._host = '127.0.0.1' + self._port = '5000' + self._path = '/echo' + + self._log = self._sensor_service.get_logger(__name__) + self._app = Flask(__name__) + + def setup(self): + pass + + def run(self): + @self._app.route(self._path, methods=['POST']) + def echo(): + payload = request.get_json(force=True) + self._sensor_service.dispatch(trigger="examples.echo_flask", + payload=payload) + return request.data + + self._log.info('Listening for payload on http://%s:%s%s' % + (self._host, self._port, self._path)) + self._app.run(host=self._host, port=self._port, threaded=True) + + def cleanup(self): + pass + + def add_trigger(self, trigger): + # This method is called when trigger is created + pass + + def update_trigger(self, trigger): + # This method is called when trigger is updated + pass + + def remove_trigger(self, trigger): + # This method is called when trigger is deleted + pass diff --git a/contrib/examples/sensors/echo_flask_app.yaml b/contrib/examples/sensors/echo_flask_app.yaml new file mode 100644 index 0000000000..e7c3231afd --- /dev/null +++ b/contrib/examples/sensors/echo_flask_app.yaml @@ -0,0 +1,13 @@ +--- + class_name: "EchoFlaskSensor" + entry_point: "echo_flask_app.py" + description: "Simple echo flask app sensor that echoes its input." + trigger_types: + - + name: "echoflasksensor" + description: "Echo flask sensor." + payload_schema: + type: "object" + properties: + payload: + type: "object"