def api_list(): try: ret = {} for target in registry: ret[target.pk] = [target.label, target.url, target.enabled] return jsonify({"monitors": ret}) except Exception as e: return str(e), 400
def api_inspect(): try: ret = {} values = registry._checks() for __, target in values.items(): ret[target.pk] = [target.label, target.url, target.enabled] return jsonify({"monitors": ret, "order": registry.order}) except Exception as e: return str(e), 400
def api_sort(): try: data = request.get_json() order = data['order'] registry.sort_by(order) return jsonify({"order": registry.order}) except BaseException as e: logger.exception(e) return str(e), 400
def api_add(): try: data = request.get_json() label = data["label"] init_string = data['url'] registry.add_dynamic(label, init_string) return jsonify({"message": f"'{label}' added"}) except Exception as e: logger.exception(e) return str(e), 400
def api_edit(hkey): try: existing = registry[hkey] data = request.get_json() label = data["label"] init_string = data['url'] overrides = {'label': label} if init_string != existing.url: copy = Factory.from_conn_string(label, init_string) copy.check() stats.zap(existing.name) overrides['init_string'] = init_string registry.override(hkey, **overrides) return jsonify({"message": f"'{hkey}' updated"}) except Exception as e: logger.exception(e) return str(e), 400
def data(pk, granularity): if granularity in app.config['GRANULARITIES']: ts = tz_now() start_at = hour_rounder(ts) errors = stats.get_errors(pk, granularity) pings = stats.get_pings(pk, granularity) values = [] for err, ping in zip(errors, pings): record = { 'timestamp': err[0].strftime('%Y-%m-%dT%H:%M:%S.%fZ'), 'date': err[0].timestamp() } if err[1] > 0: record['value'] = err[1] elif ping[1] > 0: record['value'] = 0 if 'value' in record: values.append(record) try: t = registry[pk] except KeyError: ret = {} else: ret = { 'datapoints': len(values), 'target': t.name, 'url': t.url, # 'errors': [e[1] for e in errors], # 'pings': [e[1] for e in pings], 'values': values, 'ts': ts, 'start': start_at } return jsonify(ret) return "", 404
def api_check(): try: return jsonify({"timestamp": client.get('timestamp').decode()}) except Exception as e: return str(e), 400
def api_del(hkey): try: registry.remove(hkey) return jsonify({"message": f"{hkey} deleted"}) except Exception as e: return f"{type(e).__name__}: {e}", 400
def scan(hkey, granularity): if granularity in app.config['GRANULARITIES']: data = stats.scan_keys('24h', 5, '*') ret = {'datapoints': len(data), 'data': data} return jsonify(ret) return "", 404