Skip to content

Instantly share code, notes, and snippets.

@javierwilson
Last active May 17, 2017 12:59
Show Gist options
  • Save javierwilson/0e30cd228d7d549b78ed3c9d8b602660 to your computer and use it in GitHub Desktop.
Save javierwilson/0e30cd228d7d549b78ed3c9d8b602660 to your computer and use it in GitHub Desktop.
Generates CSV for last week cpu, mem and disk utilization
#!/usr/bin/env python
import datetime
import os
from datadog import initialize, api
options = {
'api_key': os.getenv('DD_API_KEY'),
'app_key': os.getenv('DD_APP_KEY'),
}
initialize(**options)
def dd_query(metric, environment, start_time, end_time, extra_filter=''):
if extra_filter:
extra_filter = ',' + extra_filter
query = 'avg:%s{environment:%s%s}by{host}' % (metric, environment, extra_filter)
query_max = 'max:%s{environment:%s%s}by{host}' % (metric, environment, extra_filter)
return {
'avg': api.Metric.query(start=start_time, end=end_time, query=query),
'max': api.Metric.query(start=start_time, end=end_time, query=query_max)
}
def show_csv(data, percent=False, invert=False):
print '"metric","vm","len","sum","avg","max"'
rows = []
for serie in data['avg']['series']:
metric = serie['display_name']
vm = serie['scope']
vm = vm[vm.rfind(':')+1:]
pointlist = serie['pointlist']
list1 = filter(None, (x[1] for x in pointlist))
len1 = len(list1)
if percent:
list1 = [100*x for x in list1]
if invert:
list1 = [100-x for x in list1]
if len1:
sum1 = sum(list1)
max1 = max(list1)
avg1 = sum1 / len1
else:
import pdb; pdb.set_trace()
sum1 = max1 = avg1 = 0
rows.append('"%s","%s",%s,%s,%s' % (metric, vm, len1, sum1, avg1, ))
i = 0
for serie in data['max']['series']:
metric = serie['display_name']
vm = serie['scope']
vm = vm[vm.rfind(':')+1:]
pointlist = serie['pointlist']
list1 = filter(None, (x[1] for x in pointlist))
len1 = len(list1)
if percent:
list1 = [100*x for x in list1]
if invert:
list1 = [100-x for x in list1]
if len1:
max1 = max(list1)
else:
max1 = 0
rows[i] = '%s,%s' % (rows[i], max1)
i+=1
for row in rows:
print row
# get time range
today = datetime.date.today()
start_time = (datetime.datetime.combine(today - datetime.timedelta(days=today.weekday(), weeks=1), datetime.time.min) - datetime.datetime(1970, 1, 1)).total_seconds()
end_time = start_time + (3600 * 24 * 7)
# sets vars
environment = 'icds'
data_disk = '/opt/data'
cpu = dd_query('system.cpu.idle', environment, start_time, end_time)
disk = dd_query('system.disk.in_use', environment, start_time, end_time, extra_filter='device:%s' % (data_disk,))
mem = dd_query('system.mem.pct_usable', environment, start_time, end_time)
show_csv(cpu, invert=True)
show_csv(disk, percent=True)
show_csv(mem, percent=True, invert=True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment