예제 #1
0
def plot_all_phases(db_name, host_ip, bucket_name):
    # initialize seriesly client
    db = Seriesly()[db_name]
    db_event = Seriesly()['event']

    # plot all metrics to PNG images
    outdir = mkdtemp()
    
    # get a set of all unique keys based on time range
    all_docs = db.get_all()
    all_keys = set(key for doc in all_docs.itervalues()
                    for key in doc.iterkeys())

    # get system test phase info and plot phase by phase
    all_event_docs = db_event.get_all()
    phases_info = {}
    for doc in all_event_docs.itervalues():
        phases_info[int(doc.keys()[0])] = doc.values()[0]
    phases_info.keys().sort()

    phases = []
    for v in phases_info.itervalues():
        phases.append(v)
    num_phases = len(phases)
    run_id = ''

    for i in range(num_phases):
        if i == 0:
            run_id = phases[i]['run_id']

        start_time = phases[i].values()[0]
        start_time = int(start_time[:10])
        end_time = 0
        if i == num_phases-1:
            end_time = str(time.time())
            end_time = int(end_time[:10])
        else:
            end_time = phases[i+1].values()[0]
            end_time = int(end_time[:10])

        for metric in all_keys:
            #print metric
            if '/' not in metric:  # views and xdcr stuff
                query = get_query(metric, host_ip, bucket_name, start_time, end_time)
                if len(query) > 0:
                    plot_metric(db, metric, query, outdir, i,  phases[i].keys()[0])

#                try:
#                    subprocess.call(['convert', '{0}/*'.format(outdir), 'report.pdf'])
#                    print "PDF report was successfully generated!"
#                except OSError:
    plot_metric_single_value("average", outdir, num_phases)
    plot_metric_single_value("90th", outdir, num_phases)
    plot_metric_single_value("absolute_time", outdir, num_phases)

    print "All images saved to: {0}".format(outdir)
    return outdir, run_id
예제 #2
0
def plot_all_phases(db_name, host_ip, bucket_name):
    # initialize seriesly client
    db = Seriesly()[db_name]
    db_event = Seriesly()['event']

    # plot all metrics to PNG images
    outdir = mkdtemp()
    
    # get a set of all unique keys based on time range
    all_docs = db.get_all()
    all_keys = set(key for doc in all_docs.itervalues()
                    for key in doc.iterkeys())

    # get system test phase info and plot phase by phase
    all_event_docs = db_event.get_all()
    phases_info = {}
    for doc in all_event_docs.itervalues():
        phases_info[int(doc.keys()[0])] = doc.values()[0]
    phases_info.keys().sort()

    phases = []
    for v in phases_info.itervalues():
        phases.append(v)
    num_phases = len(phases)
    run_id = ''

    for i in range(num_phases)[1:]:
        if i == 1:
            run_id = phases[i]['run_id']

        start_time = phases[i].values()[0]
        start_time = int(start_time[:10])
        end_time = 0
        if i == num_phases-1:
            end_time = str(time.time())
            end_time = int(end_time[:10])
        else:
            end_time = phases[i+1].values()[0]
            end_time = int(end_time[:10])

        for metric in all_keys:
            #print metric
            if '/' not in metric:  # views and xdcr stuff
                query = get_query(metric, host_ip, bucket_name, start_time, end_time)
                if len(query) > 0:
                    plot_metric(db, metric, query, outdir, i,  phases[i].keys()[0])

    for key in TABLE.keys():
        plot_metric_single_value(key, outdir, num_phases)

    print "All images saved to: {0}".format(outdir)
    return outdir, run_id
예제 #3
0
def main():
    # parse database name from cli arguments
    db_name = parse_args()

    # initialize seriesly client
    db = Seriesly()[db_name]

    # get a set of all unique keys
    all_docs = db.get_all()
    all_keys = set(key for doc in all_docs.itervalues()
                   for key in doc.iterkeys())

    # plot all metrics to PNG images
    outdir = mkdtemp()
    for metric in all_keys:
        print metric
        if '/' not in metric:  # views and xdcr stuff
            keys, values = get_metric(db, metric)
            plot_metric(metric, keys, values, outdir)

    try:
        subprocess.call(['convert', '{0}/*'.format(outdir), 'report.pdf'])
        print "PDF report was successfully generated!"
    except OSError:
        print "All images saved to: {0}".format(outdir)
예제 #4
0
def generate_index_file(storage_folder, test_file):
    db_event = Seriesly(cfg.SERIESLY_IP, 3133)['event']
    all_event_docs = db_event.get_all()
    phases_info = {}
    for doc in all_event_docs.itervalues():
        phases_info[int(doc.keys()[0])] = doc.values()[0]
    phases_info.keys().sort()
    num_phases = len(phases_info.keys())
    run_id = phases_info[1]['desc']
    run_id = run_id.replace(" ", "_")
    run_id = run_id.replace(",", "_")
    content = ""

    json_data = open(test_file)
    tests = json.load(json_data)

    for i in range(num_phases)[1:]:
        sub_folder = storage_folder + "phase" + str(i) + "/"
        content += "<a style=\"font-family:arial;color:black;font-size:20px;\" href=\"%s\">%s</a><p>" % ("phase" + str(i) , "phase" + str(i))
        if str(i) in tests["phases"]:
            content += json.dumps(tests["phases"][str(i)], indent=10, sort_keys=True) + "<p>"
        files = [ f for f in os.listdir(sub_folder) if os.path.isfile(os.path.join(sub_folder, f))]
        for f in files:
            content += "<a href=\"%s\">&nbsp;&nbsp;&nbsp;&nbsp;%s</a><p>" % ("phase" + str(i) + "/" + f, f)

    html_path = storage_folder + "index.html"
    file1 = open(html_path, 'w')
    file1.write(index_html % content)
예제 #5
0
def get_run_info(desc):
    db_event = Seriesly(cfg.SERIESLY_IP, 3133)['event']

    all_event_docs = db_event.get_all()
    phases_info = {}
    for doc in all_event_docs.itervalues():
        phases_info[int(doc.keys()[0])] = doc.values()[0]
    phases_info.keys().sort()

    run_info = ''
    #will take the first name/desc value; but we assume that their values are the same for all phases
    if desc == 'name':
        for phase in phases_info:
            if 'name' in phases_info[phase]:
                run_info = phases_info[phase]['name']
                break
    if desc == 'build':
        for phase in phases_info:
            if 'desc' in phases_info[phase]:
                run_info = phases_info[phase]['desc']
                break
    run_info = run_info.replace(" ", "_")
    run_info = run_info.replace(",", "_")

    return run_info
예제 #6
0
def generate_index_file(storage_folder, test_file):
    db_event = Seriesly(cfg.SERIESLY_IP, 3133)['event']
    all_event_docs = db_event.get_all()
    phases_info = {}
    for doc in all_event_docs.itervalues():
        phases_info[int(doc.keys()[0])] = doc.values()[0]
    phases_info.keys().sort()
    num_phases = len(phases_info.keys())
    run_id = phases_info[1]['desc']
    run_id = run_id.replace(" ", "_")
    run_id = run_id.replace(",", "_")
    content = ""

    json_data = open(test_file)
    tests = json.load(json_data)

    for i in range(num_phases)[1:]:
        sub_folder = storage_folder + "phase" + str(i) + "/"
        content += "<a style=\"font-family:arial;color:black;font-size:20px;\" href=\"%s\">%s</a><p>" % (
            "phase" + str(i), "phase" + str(i))
        if str(i) in tests["phases"]:
            content += json.dumps(
                tests["phases"][str(i)], indent=10, sort_keys=True) + "<p>"
        files = [
            f for f in os.listdir(sub_folder)
            if os.path.isfile(os.path.join(sub_folder, f))
        ]
        for f in files:
            content += "<a href=\"%s\">&nbsp;&nbsp;&nbsp;&nbsp;%s</a><p>" % (
                "phase" + str(i) + "/" + f, f)

    html_path = storage_folder + "index.html"
    file1 = open(html_path, 'w')
    file1.write(index_html % content)
예제 #7
0
def get_run_info(desc):
    db_event = Seriesly(cfg.SERIESLY_IP, 3133)['event']

    all_event_docs = db_event.get_all()
    phases_info = {}
    for doc in all_event_docs.itervalues():
        phases_info[int(doc.keys()[0])] = doc.values()[0]
    phases_info.keys().sort()

    run_info = ''
    #will take the first name/desc value; but we assume that their values are the same for all phases
    if desc == 'name':
        for phase in phases_info:
            if 'name' in phases_info[phase]:
                run_info = phases_info[phase]['name']
                break
    if desc == 'build':
        for phase in phases_info:
            if 'desc' in phases_info[phase]:
                run_info = phases_info[phase]['desc']
                break
    run_info = run_info.replace(" ", "_")
    run_info = run_info.replace(",", "_")

    return run_info
예제 #8
0
def main(db_name):
    # parse database name from cli arguments
    #db_name = parse_args()

    # initialize seriesly client
    db = Seriesly()[db_name]

    # get a set of all unique keys
    all_docs = db.get_all()
    all_keys = set(key for doc in all_docs.itervalues()
                       for key in doc.iterkeys())

    # plot all metrics to PNG images
    outdir = mkdtemp()
    for metric in all_keys:
        print metric
        if '/' not in metric:  # views and xdcr stuff
            keys, values = get_metric(db, metric)
            plot_metric(metric, keys, values, outdir)

    try:
        subprocess.call(['convert', '{0}/*'.format(outdir), 'report.pdf'])
        print "PDF report was successfully generated!"
    except OSError:
        print "All images saved to: {0}".format(outdir)
    return outdir
예제 #9
0
def plot_all_phases(cluster_name, buckets):

    db_event = Seriesly(cfg.SERIESLY_IP, 3133)['event']

    # Get system test phase info and plot phase by phase
    all_event_docs = db_event.get_all()
    phases_info = {}
    for doc in all_event_docs.values():
        phases_info[int(list(doc.keys())[0])] = list(doc.values())[0]
    list(phases_info.keys()).sort()

    num_phases = len(list(phases_info.keys()))

    run_id = store_report.get_run_info('name')

    if not os.path.exists("%s" % run_id):
        os.makedirs("%s" % run_id)
    else:
        shutil.rmtree("%s" % run_id)
        os.makedirs("%s" % run_id)

    for i in list(phases_info.keys()):
        start_time = phases_info[i][[
            name for name in list(phases_info[i].keys())
            if (name != 'name' and name != 'desc')
        ][0]]
        start_time = int(start_time[:10])
        end_time = 0
        if i == list(phases_info.keys())[-1]:
            end_time = str(time.time())
            end_time = int(end_time[:10])
        else:
            end_time = phases_info[i + 1][[
                name for name in list(phases_info[i + 1].keys())
                if (name != 'name' and name != 'desc')
            ][0]]
            end_time = int(end_time[:10])

        start_time_snapshot = datetime.datetime.fromtimestamp(
            start_time).strftime('%m/%d/%Y %H:%M')
        end_time_snapshot = datetime.datetime.fromtimestamp(end_time).strftime(
            '%m/%d/%Y %H:%M')

        snapshot_name = "phase-%d-%s" % (i, [
            name for name in list(phases_info[i].keys())
            if (name != 'name' and name != 'desc')
        ][0])

        plot_use_cbmonitor(snapshot_name, cluster_name, start_time_snapshot,
                           end_time_snapshot)

        prepare_folder_report(run_id, i)

        store_90th_avg_value(buckets, start_time, end_time, run_id, i)

    storage_folder = os.getcwd() + "/" + run_id + "/"
    print("data stored in %s" % (storage_folder))
    return storage_folder
예제 #10
0
def plot_all_phases(cluster_name, buckets):

    db_event = Seriesly(cfg.SERIESLY_IP, 3133)['event']

    # Get system test phase info and plot phase by phase
    all_event_docs = db_event.get_all()
    phases_info = {}
    for doc in all_event_docs.itervalues():
        phases_info[int(doc.keys()[0])] = doc.values()[0]
    phases_info.keys().sort()

    num_phases = len(phases_info.keys())

    run_id = store_report.get_run_info('name')

    if not os.path.exists("%s" % run_id):
        os.makedirs("%s" % run_id)
    else:
        shutil.rmtree("%s" % run_id)
        os.makedirs("%s" % run_id)

    for i in phases_info.keys():
        start_time = phases_info[i][[name for name in phases_info[i].keys() if (name != 'name' and name != 'desc')][0]]
        start_time = int(start_time[:10])
        end_time = 0
        if i == phases_info.keys()[-1]:
            end_time = str(time.time())
            end_time = int(end_time[:10])
        else:
            end_time = phases_info[i + 1][[name for name in phases_info[i + 1].keys() if (name != 'name' and name != 'desc')][0]]
            end_time = int(end_time[:10])

        start_time_snapshot = datetime.datetime.fromtimestamp(start_time).strftime('%m/%d/%Y %H:%M')
        end_time_snapshot = datetime.datetime.fromtimestamp(end_time).strftime('%m/%d/%Y %H:%M')

        snapshot_name = "phase-%d-%s" % (i, [name for name in phases_info[i].keys() if (name != 'name' and name != 'desc')][0])

        plot_use_cbmonitor(snapshot_name, cluster_name, start_time_snapshot, end_time_snapshot)

        prepare_folder_report(run_id, i)

        store_90th_avg_value(buckets, start_time, end_time, run_id, i)

    storage_folder = os.getcwd() + "/" + run_id + "/"
    print "data stored in %s" % (storage_folder)
    return storage_folder
예제 #11
0
from seriesly import Seriesly

db = Seriesly()["fast"]
doc = db.get_all()
time = {}
for k, v in doc.iteritems():
    if "mc-curr_items" in v.keys() and "mc-host" in v.keys():
        time[k] = {"item": v["mc-curr_items"], "ip": v["mc-host"]}
    else:
        time[k] = {"item": "No items"}

for k, v in sorted(time.iteritems()):
    print k, v