我们制作了董事会会议图表以显示系统的运行状况(正常运行时间等)。 从历史上看,我们每季度手动执行一次。 最近,我努力为相同的信息创建一个实时仪表板,从一段时间的生产事件开始。 我们使用PagerDuty来提醒待命人员。 每个事件都存储在PagerDuty中,可通过PagerDuty API进行查询。 从那里开始,使用pandas将JSON转换为matplotlib图表就很容易了:
首先,我们获取数据:
from datetime import datetime, timedelta
import requests
%matplotlib inline
api_url = "https://api.pagerduty.com/incidents"
headers = {
'Accept': 'application/vnd.pagerduty+json;version=2',
'Authorization': 'Token token=YOUR_TOKEN'
}
today = datetime.today()
until = today.replace(day=1)
def get_month(since, until):
current_date = since
total_incidents = 0
while current_date < until:
next_date = current_date + timedelta(days=7)
if (next_date > until):
next_date = until
url = api_url + "?since={}&until={}&time_zone=UTC&limit=100".format(current_date.date(), next_date.date())
response = requests.get(url, headers=headers)
incidents = response.json()['incidents']
total_incidents = total_incidents + len(incidents)
current_date = next_date
return total_incidents
# Lookback over twelve months
incidents_per_month = {}
for delta in range(1,12):
since = (until - timedelta(days=1)).replace(day=1)
num_incidents = get_month(since, until)
incidents_per_month[str(since.date())] = num_incidents
print "{} - {} [{}]".format(since.date(), until.date(), num_incidents)
until = since
在此刻,
incidents_per_month = { 2018-07-01": 13, "2018-08-01":5 ... }
从那里开始,只需使用pandas绘制值即可:
import pandas as pd
import numpy as np
import matplotlib
import seaborn as sns
data = pd.DataFrame(incidents_per_month.items(), columns=['Month', 'Incidents'])
data = data.sort_values(by=["Month"], ascending=True)
data.plot(kind='bar', x='Month', y='Incidents', color="lightblue")
瞧,那里有:
翻译自: https://www.javacodegeeks.com/2018/10/charting-pagerduty-using-pandas.html