コード例 #1
0
ファイル: apache.py プロジェクト: codeinthehole/pygmetric
def fetch_stats(host, port):
    cmd = 'www-browser -dump http://%s:%s/server-status?auto' % (host, port)
    stdout = run(cmd)
    stats = []
    for line in stdout.split("\n"):
        if ':' not in line:
            continue
        parts = line.split(':')
        if len(parts) != 2:
            continue
        key, value = parts
        if key in types:
            prototype = types[key]
            stats.append({
                'name': prototype['name'],
                'type': prototype['type'],
                'value': value,
            })
    return stats
コード例 #2
0
ファイル: nginx.py プロジェクト: codeinthehole/pygmetric
def fetch_stats(host, port):
    cmd = 'www-browser -dump http://%s:%s/nginx_status' % (host, port)
    stdout = run(cmd)
    lines = stdout.split("\n")
    if len(lines) < 4:
        raise RuntimeError("Invalid output: %s" % stdout)
    metrics = {}
    metrics['nginx_active_connections'] = {
        'name': 'nginx_active_connections',
        'type': 'uint32',
        'value': int(lines[0].split(': ')[1])
    }

    # Global stats - need to use these with previous values
    accepts, handled, requests = map(int, lines[2].split())
    metrics['nginx_server_accepts'] = {
        'name': 'nginx_server_accepts',
        'type': 'uint32',
        'value': accepts
    }
    metrics['nginx_server_handled'] = {
        'name': 'nginx_server_handled',
        'type': 'uint32',
        'value': handled
    }
    metrics['nginx_server_requests'] = {
        'name': 'nginx_server_requests',
        'type': 'uint32',
        'value': requests
    }

    # Attempt to load stats
    ts = int(time.time())
    filepath = '/tmp/nginx_stats'
    if os.path.exists(filepath):
        with open(filepath, 'r') as f:
            old_data = pickle.load(f)
            delta = ts - old_data['timestamp']
            metrics['nginx_server_accepts_rate'] = {
                'name': 'nginx_server_accepts_rate',
                'type': 'float',
                'value': (accepts - old_data['accepts']) / delta
            }
            metrics['nginx_server_handled_rate'] = {
                'name': 'nginx_server_handled_rate',
                'type': 'float',
                'value': (handled - old_data['handled']) / delta
            }
            metrics['nginx_server_requests_rate'] = {
                'name': 'nginx_server_requests_rate',
                'type': 'float',
                'value': (requests - old_data['requests']) / delta
            }
    data = {
        'timestamp': ts,
        'accepts': accepts,
        'handled': handled,
        'requests': requests
    }
    with open(filepath, 'w') as f:
        pickle.dump(data, f)

    # Active stats
    match = re.match(r'^Reading: (\d+) Writing: (\d+) Waiting: (\d+)', lines[3])
    reading, writing, waiting = map(int, match.groups())
    metrics['nginx_reading'] = {
        'name': 'nginx_reading',
        'type': 'uint32',
        'value': reading
    }
    metrics['nginx_writing'] = {
        'name': 'nginx_writing',
        'type': 'uint32',
        'value': writing
    }
    metrics['nginx_waiting'] = {
        'name': 'nginx_waiting',
        'type': 'uint32',
        'value': waiting
    }

    return metrics