예제 #1
0
def get_packet_stats(service_name):
    query = 'pkts = from(bucket: "%s") |> range(start: -%s) \
                        |> filter(fn: (r) => r["com.docker.swarm.service.name"] == "%s" and r["_measurement"] == "docker_container_net" and r["network"] == "total") \
                        |> filter(fn: (r) => r["_field"] == "tx_packets" or r["_field"] == "rx_packets" or r["_field"] == "tx_dropped" or r["_field"] == "rx_dropped") \
                        |> spread() \
             total_tx = pkts |> filter(fn: (r) => r["_field"] == "tx_packets") \
             total_rx = pkts |> filter(fn: (r) => r["_field"] == "rx_packets") \
             drop_tx = pkts |> filter(fn: (r) => r["_field"] == "tx_dropped") \
             drop_rx = pkts |> filter(fn: (r) => r["_field"] == "rx_dropped") \
             total = join(tables: {total_tx, total_rx}, on: ["container_name"]) \
             drop = join(tables: {drop_tx, drop_rx}, on: ["container_name"]) \
             join(tables: {total, drop}, on: ["container_name"]) \
              |> map(fn: (r) => ({ container_name: r.container_name,  \
                                   drop: r._value_drop_tx + r._value_drop_rx, drop_tx: r._value_drop_tx, drop_rx: r._value_drop_rx, \
                                   total: r._value_total_tx + r._value_total_rx, total_tx: r._value_total_tx, total_rx: r._value_total_rx })) ' % (
        database, interval, service_name)

    query_api = InfluxDBClient(url=db_url, token=token, org=org).query_api()
    response = query_api.query(query)
    results = list()

    for table in response:
        for row in table.records:
            results.append({
                "container_name": row["container_name"],
                "total": row["total"],
                "total_tx": row["total_tx"],
                "total_rx": row["total_rx"],
                "drop": row["drop"],
                "drop_tx": row["drop_tx"],
                "drop_rx": row["drop_rx"]
            })

    return results
예제 #2
0
def get_disk_io(service_name):
    query = 'pages = from(bucket: "%s") \
                      |> range(start: -%s) \
                      |> filter(fn: (r) => r["com.docker.swarm.service.name"] == "%s" and r["_measurement"] == "docker_container_mem") \
                      |> filter(fn: (r) => r["_field"] == "total_pgpgin" or r["_field"] == "total_pgpgout") \
                      |> spread() \
             pgin = pages |> filter(fn: (r) => r["_field"] == "total_pgpgin") \
             pgout = pages |> filter(fn: (r) => r["_field"] == "total_pgpgout") \
             join(tables:{pgin, pgout}, on: ["container_name"]) \
                |> map(fn: (r) => ({container_name: r.container_name, total: r._value_pgin + r._value_pgout, page_in: r._value_pgin, page_out: r._value_pgout }))' % (
        database, interval, service_name)

    query_api = InfluxDBClient(url=db_url, token=token, org=org).query_api()
    response = query_api.query(query)
    results = list()

    for table in response:
        for row in table.records:
            results.append({
                "container_name": row["container_name"],
                "total": row["total"],
                "page_in": row["page_in"],
                "page_out": row["page_out"]
            })

    return results
예제 #3
0
def get_node_spec():
    query = 'from(bucket: "%s") \
      |> range(start: -%s) \
      |> filter(fn: (r) => r["_measurement"] == "docker") \
      |> filter(fn: (r) => r["_field"] == "n_cpus" or r["_field"] == "memory_total") \
      |> pivot(rowKey:["engine_host"], columnKey: ["_field"], valueColumn: "_value") \
      |> map(fn: (r) => ({name: r.engine_host, id: r.host, cpu: r.n_cpus, memory: r.memory_total}))' % (
        database, interval)

    query_api = InfluxDBClient(url=db_url, token=token, org=org).query_api()
    response = query_api.query(query)

    result = list()
    for table in response:
        for row in table.records:
            result.append(row.values)

    return result
예제 #4
0
def get_running_container(service_name):
    query = 'from(bucket: "%s") \
              |> range(start: -%s) \
              |> filter(fn: (r) => r["com.docker.swarm.service.name"] == "%s") \
              |> filter(fn: (r) => r["_measurement"] == "docker_container_status") \
              |> filter(fn: (r) => r["container_status"] == "running") \
              |> last() \
              |> pivot(rowKey:["container_name"], columnKey: ["_field"], valueColumn: "_value") \
              |> map(fn: (r) => ({name: r.container_name, id: r.container_id, placement: r.engine_host}))' % (
        database, interval, service_name)

    query_api = InfluxDBClient(url=db_url, token=token, org=org).query_api()
    response = query_api.query(query)
    result = list()

    for table in response:
        for row in table.records:
            result.append(row.values)

    return result
예제 #5
0
def get_CPU_usage(service_name):
    query = 'from(bucket: "%s") \
      |> range(start: -%s) \
      |> filter(fn: (r) => r["com.docker.swarm.service.name"] == "%s") \
      |> filter(fn: (r) => r["_measurement"] == "docker_container_cpu") \
      |> filter(fn: (r) => r["container_status"] == "running") \
      |> filter(fn: (r) => r["_field"] == "usage_percent") \
      |> mean() \
      |> map(fn: (r) => ({ container_name: r.container_name, _value: r._value/100.0}))' % (
        database, interval, service_name)

    query_api = InfluxDBClient(url=db_url, token=token, org=org).query_api()
    response = query_api.query(query)
    results = list()

    for table in response:
        for row in table.records:
            results.append({
                "container_name": row["container_name"],
                "cpu": row["_value"]
            })

    return results
예제 #6
0
def get_memory_usage(service_name):
    query = 'mem = from(bucket: "%s") \
                |> range(start: -%s) \
                |> filter(fn: (r) => r["com.docker.swarm.service.name"] == "%s" and r["_measurement"] == "docker_container_mem" and r["container_status"] == "running") \
                |> filter(fn: (r) => r["_field"] == "limit" or r["_field"] == "usage") \
                |> mean() \
             tmp1 = mem |> filter(fn: (r) => r["_field"] == "limit") \
             tmp2 = mem |> filter(fn: (r) => r["_field"] == "usage") \
             join(tables:{tmp1, tmp2}, on: ["container_name"]) \
                |> map(fn:(r) => ({ container_name: r.container_name, _value: r._value_tmp2/r._value_tmp1}))' % (
        database, interval, service_name)

    query_api = InfluxDBClient(url=db_url, token=token, org=org).query_api()
    response = query_api.query(query)
    results = list()

    for table in response:
        for row in table.records:
            results.append({
                "container_name": row["container_name"],
                "memory": row["_value"]
            })

    return results