예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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
예제 #7
0
def api_check():
    try:
        return jsonify({"timestamp": client.get('timestamp').decode()})
    except Exception as e:
        return str(e), 400
예제 #8
0
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
예제 #9
0
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