Example #1
0
def api_get_counters():
    ret = {
        "ok": False,
        "msg": "",
        "data": [],
    }
    endpoints = request.form.get("endpoints") or ""
    endpoints = endpoints and json.loads(endpoints)
    q = request.form.get("q") or ""
    limit = int(request.form.get("limit") or 100)

    nethelp = request.form.get("nethelp") or ""
    if not (endpoints or q):
        ret['msg'] = "no endpoints or counter given"
        return json.dumps(ret)

    endpoint_objs = Endpoint.gets_by_endpoint(endpoints)
    endpoint_ids = [x.id for x in endpoint_objs]
    group_ids = []
    if not endpoint_ids:
        group_objs = Group.gets_by_group(endpoints)
        group_ids = [x.id for x in group_objs]
        grouphost_objs = GroupHost.search(group_ids)
        host_ids = [x.hostId for x in grouphost_objs]
        host_objs = Host.search(host_ids)
        host_names = [x.name for x in host_objs]
        endpoint_objs = Endpoint.gets_by_endpoint(host_names)
        endpoint_ids = [x.id for x in endpoint_objs]

        if not endpoint_ids:
            ret['msg'] = "no endpoints in graph"
            return json.dumps(ret)

    qs = q.split()
    if nethelp == "true":
        ecs = EndpointCounter.search_in_endpoint_ids(qs, endpoint_ids, limit=100)
    elif len(group_ids) > 0:
        limit = 5000
    if len(qs) > 0:
        ecs = EndpointCounter.search_in_endpoint_ids(qs, endpoint_ids, limit=limit)
    else:
        ecs = EndpointCounter.gets_by_endpoint_ids(endpoint_ids, limit=limit)

    if not ecs:
        ret["msg"] = "no counters in graph"
        return json.dumps(ret)
    
    counters_map = {}
    for x in ecs:
        counters_map[x.counter] = [x.counter, x.type_, x.step]
    sorted_counters = sorted(counters_map.keys())
    sorted_values = [counters_map[x] for x in sorted_counters]

    ret['data'] = sorted_values
    ret['ok'] = True

    return json.dumps(ret)
Example #2
0
def generate_graph_urls(graph, start, end):
    print today_date_str(), "generate_graph_urls_start", graph.counters
    counters = graph.counters or []
    if not counters:
        return []

    endpoint_list = graph.hosts or []
    if not endpoint_list:
        return []

    endpoint_objs = Endpoint.gets_by_endpoint(endpoint_list)
    print today_date_str(), "generate_graph_urls_endpoint_objs"
    if not endpoint_objs:
        return []
    endpoint_ids = [x.id for x in endpoint_objs]

    counters = []
    print today_date_str(), len(graph.counters)
    for c in graph.counters:
        print today_date_str(), "c", c
        if c.find("metric=") == -1:
            counters.append(c)
        else:
            metric = ""
            tags = []
            qs = []
            c = c.strip()
            for q in c.split():
                q = q.strip()
                if q.startswith("metric="):
                    metric = q.replace("metric=", "^", 1)
                    qs.append(metric)
                else:
                    qs.append(q)
                    tags.append(q)
            print "counter_objs_start"
            counter_objs = EndpointCounter.search_in_endpoint_ids(
                qs, endpoint_ids[:], limit=100)
            print "counter_objs", counter_objs

            if not counter_objs:
                continue
            for co in counter_objs:
                if not re.search('^%s(/|$)' % metric, co.counter):
                    continue

                matched = True
                for tag in tags:
                    if not re.search('(/|,)%s(,|$)' % tag, co.counter):
                        matched = False
                        break
                if not matched:
                    continue

                counters.append(co.counter)
    if not counters:
        return []
    counters = sorted(list(set(counters)))

    return _generate_graph_urls(graph, counters, endpoint_list, start, end)
Example #3
0
def api_get_counters():
    ret = {
        "ok": False,
        "msg": "",
        "data": [],
    }
    endpoints = request.form.get("endpoints") or ""
    endpoints = endpoints and json.loads(endpoints)
    q = request.form.get("q") or ""
    limit = int(request.form.get("limit") or 100)

    if not (endpoints or q):
        ret['msg'] = "no endpoints or counter given"
        return json.dumps(ret)

    endpoint_objs = Endpoint.gets_by_endpoint(endpoints)
    endpoint_ids = [x.id for x in endpoint_objs]
    if not endpoint_ids:
        ret['msg'] = "no endpoints in graph"
        return json.dumps(ret)

    if q:
        qs = q.split()
        ecs = EndpointCounter.search_in_endpoint_ids(qs,
                                                     endpoint_ids,
                                                     limit=limit)
    else:
        ecs = EndpointCounter.gets_by_endpoint_ids(endpoint_ids, limit=limit)

    if not ecs:
        ret["msg"] = "no counters in graph"
        return json.dumps(ret)

    counters_map = {}
    for x in ecs:
        counters_map[x.counter] = [x.counter, x.type_, x.step]
    sorted_counters = sorted(counters_map.keys())
    sorted_values = [counters_map[x] for x in sorted_counters]

    ret['data'] = sorted_values
    ret['ok'] = True

    return json.dumps(ret)