def work(uuid): """The buoys request work and post work results to this method.""" buoy_id = models.apik_of_uuid(uuid) if request.method == 'GET': action = models.get_action_buoy(buoy_id) time = -1 if action and action['action'] == const.BUOY_AC_LAUNCH: if action['time'] == '': time = 0 models.set_action_buoy(buoy_id, const.BUOY_AC_LAUNCH) else: # If more than 7 minutes have passed from the last action # the buoy will perform the action, else continue waiting date_obj = datetime.datetime.strptime( action['time'], const.STRTIME_KEY_GENERATED) now = datetime.datetime.now() if (now-date_obj).total_seconds() / 60 >= const.SCAN_INTERVAL: time = 0 # Update when the last action mas made (now) models.set_action_buoy(buoy_id, const.BUOY_AC_LAUNCH) return jsonify({'status': 200, 'order': action['action'], 'time': time}) elif action and action['action'] == const.BUOY_AC_STOP: return jsonify({'status': 200, 'order': action['action']}) else: return jsonify({'status': 404}) elif request.method == 'POST': djson = request.get_json() decodedjson = base64.b64decode(djson['content']) data_scan = ast.literal_eval(decodedjson) wbenforcer.generate_alerts(buoy_id, data_scan) return jsonify({'status': 200, 'message': 'Got it!'})
def _set_launch(buoy_id, now): """Orders a buoy to start scanning.""" models.change_status(buoy_id, const.BUOY_ACTIVE) models.set_action_buoy(buoy_id, const.BUOY_AC_LAUNCH, now)
def _set_stop(buoy_id): """Orders a buoy to stop scanning.""" models.change_status(buoy_id, const.BUOY_STOPPED) models.set_action_buoy(buoy_id, const.BUOY_AC_STOP)