コード例 #1
0
def update_gentime_graphite_metric(test_id):
    graphite_url = Configuration.objects.get(name='graphite_url').value
    graphite_user = Configuration.objects.get(name='graphite_user').value
    graphite_password = Configuration.objects.get(name='graphite_pass').value
    gc = graphiteclient.GraphiteClient(graphite_url, graphite_user,
                                       str(graphite_password))

    test = Test.objects.get(id=test_id)
    for parameter in test.parameters:
        if 'WORLD_ID' in parameter:
            world_id = parameter['WORLD_ID']

    start_time = datetime.datetime.fromtimestamp(test.start_time /
                                                 1000).strftime("%H:%M_%Y%m%d")
    end_time = datetime.datetime.fromtimestamp(test.end_time /
                                               1000).strftime("%H:%M_%Y%m%d")

    query = 'alias(avg(servers.' + world_id + 'w*_foe' + '.software.gentime.TimeSiteAvg),"avg")'
    results = gc.query(
        query,
        start_time,
        end_time,
    )
    # Ugly bullshit
    query = 'alias(avg(servers.' + world_id + 'w*_foe' + '.software.gentime.TimeSiteMed),"median")'
    print query
    results_median = gc.query(
        query,
        start_time,
        end_time,
    )
    results.append(results_median[0])

    query = 'alias(sum(servers.' + world_id + 'w*_foe' + '.software.gentime.SiteReqPerSec),"rps")'
    results_rps = gc.query(
        query,
        start_time,
        end_time,
    )
    results.append(results_rps[0])
    data = {}
    for res in results:
        metric = res['target']
        for p in res['datapoints']:
            ts = str(datetime.datetime.fromtimestamp(p[1]))
            if ts not in data:
                t = {}
                t['timestamp'] = ts
                t[metric] = p[0]
                data[ts] = t
            else:
                t = data[ts]
                t[metric] = p[0]
                data[ts] = t
    TestData.objects.filter(test_id=test.id, source='graphite').delete()
    for d in data:
        test_data = TestData(test_id=test.id, data=data[d], source='graphite')
        test_data.save()
    return data
コード例 #2
0
def update_test_graphite_data(test_id):
    graphite_url = Configuration.objects.get(name='graphite_url').value
    graphite_user = Configuration.objects.get(name='graphite_user').value
    graphite_password = Configuration.objects.get(name='graphite_pass').value
    gc = graphiteclient.GraphiteClient(graphite_url, graphite_user,
                                       str(graphite_password))

    test = Test.objects.get(id=test_id)
    for parameter in test.parameters:
        if 'MONITOR_HOSTS' in parameter:
            hosts_for_monitoring = parameter['MONITOR_HOSTS'].split(',')
        if 'WORLD_ID' in parameter:
            world_id = parameter['WORLD_ID']

    start_time = datetime.datetime.fromtimestamp(test.start_time /
                                                 1000).strftime("%H:%M_%Y%m%d")
    end_time = datetime.datetime.fromtimestamp(test.end_time /
                                               1000).strftime("%H:%M_%Y%m%d")
    game_short_name = hosts_for_monitoring[0].split(".", 1)[1]
    for server_name in hosts_for_monitoring:
        server = Server.objects.get(server_name=server_name)

        query = 'aliasSub(stacked(asPercent(nonNegativeDerivative(groupByNode(servers.{' + server_name.replace(
            '.', '_'
        ) + '}.system.cpu.{user,system,iowait,irq,softirq,nice,steal},4,"sumSeries")),nonNegativeDerivative(sum(servers.' + server_name.replace(
            '.', '_'
        ) + '.system.cpu.{idle,time})))),".*Derivative\((.*)\),non.*","CPU_\\1")'
        results = gc.query(
            query,
            start_time,
            end_time,
        )
        data = {}
        for res in results:
            metric = res['target']
            for p in res['datapoints']:
                ts = str(datetime.datetime.fromtimestamp(p[1]))
                if ts not in data:
                    t = {}
                    t['timestamp'] = ts
                    t[metric] = p[0]
                    data[ts] = t
                else:
                    t = data[ts]
                    t[metric] = p[0]
                    data[ts] = t
        ServerMonitoringData.objects.filter(server_id=server.id,
                                            test_id=test.id,
                                            source='graphite').delete()
        for d in data:
            server_monitoring_data = ServerMonitoringData(test_id=test.id,
                                                          server_id=server.id,
                                                          data=data[d],
                                                          source='graphite')
            server_monitoring_data.save()

    webservers_mask = '{}w*_{}'.format(world_id, game_short_name)
    if not ProjectGraphiteSettings.objects.filter(
            project_id=test.project_id, name='gentime_avg_request').exists():
        query = 'alias(avg(servers.' + webservers_mask + '.software.gentime.TimeSiteAvg),"avg")'
        ProjectGraphiteSettings(project_id=test.project_id,
                                name='gentime_avg_request',
                                value=query).save()
    if not ProjectGraphiteSettings.objects.filter(
            project_id=test.project_id,
            name='gentime_median_request').exists():
        query = 'alias(avg(servers.' + webservers_mask + '.software.gentime.TimeSiteMed),"median")'
        ProjectGraphiteSettings(project_id=test.project_id,
                                name='gentime_median_request',
                                value=query).save()
    if not ProjectGraphiteSettings.objects.filter(
            project_id=test.project_id,
            name='gentime_req_per_sec_request').exists():
        query = 'alias(sum(servers.' + webservers_mask + '.software.gentime.SiteReqPerSec),"rps")'
        ProjectGraphiteSettings(project_id=test.project_id,
                                name='gentime_req_per_sec_request',
                                value=query).save()

    query = ProjectGraphiteSettings.objects.get(
        project_id=test.project_id, name='gentime_avg_request').value
    results = gc.query(
        query,
        start_time,
        end_time,
    )
    # Ugly bullshit
    query = ProjectGraphiteSettings.objects.get(
        project_id=test.project_id, name='gentime_median_request').value
    results_median = gc.query(
        query,
        start_time,
        end_time,
    )
    results.append(results_median[0])

    query = ProjectGraphiteSettings.objects.get(
        project_id=test.project_id, name='gentime_req_per_sec_request').value
    results_rps = gc.query(
        query,
        start_time,
        end_time,
    )
    results.append(results_rps[0])
    data = {}
    for res in results:
        metric = res['target']
        for p in res['datapoints']:
            ts = str(datetime.datetime.fromtimestamp(p[1]))
            if ts not in data:
                t = {}
                t['timestamp'] = ts
                t[metric] = p[0]
                data[ts] = t
            else:
                t = data[ts]
                t[metric] = p[0]
                data[ts] = t
    TestData.objects.filter(test_id=test.id, source='graphite').delete()
    for d in data:
        test_data = TestData(test_id=test.id, data=data[d], source='graphite')
        test_data.save()
    return True