我的任务是创建一个函数,该函数可获取并返回要由时间序列图使用的数据,所有必需的数据都存储在单个模型中。目前,我的函数将根据设置的日期查询和获取数据, 然后在最后调用一个函数对重复数据进行分组 。下面是两个单独的函数
def get_system_endpoint_response_time(system_id, start_date, end_date):
"""
Returns the response time of every endpoint for a specific system
@param end_date: End date of the period of which the data is to be extracted
@type:str
@param start_date: Start point of the data to be presented
@type: str
@param: system_id: Id of the system
@type system_id: str
@return: Response code indicating status and response time graph data
"""
try:
system = SystemService().get(pk = system_id, state__name = 'Active')
if not system:
return {'code': '800.400.200'}
now = timezone.now()
start_date = dateutil.parser.parse(start_date)
end_date = dateutil.parser.parse(end_date)
period = start_date - end_date
labels = []
label = []
dataset = []
if period.days <= 31:
for i in range(0, 31):
current_day = now - timedelta(days = i, hours = 0, minutes = 0)
past_day = current_day + timedelta(days = 1)
response_times = list(SystemMonitorService().filter(
system = system, date_created__lte = past_day,
date_created__gte = current_day).values(
name = F('endpoint__name'), responseTime = F('response_time'),
dateCreated = F('date_created')))
past_day = past_day.replace(hour = 0, minute = 0)
label.append(past_day.strftime("%m/%d/%y %H:%M"))
result = {"Initial": {"data": [0]}}
for response_time in response_times:
response_time.update(
responseTime = timedelta.total_seconds(response_time.get('responseTime')),
dateCreated = response_time["dateCreated"].strftime("%m/%d/%y %H:%M")
)
dataset.append(response_time)
labels.append(response_time['dateCreated'])
if dataset:
result = join_repetitive_dictionaries(dataset)
return {'code': '800.200.001', 'data': {'labels': label, 'datasets': result}}
数据分组功能
def join_repetitive_dictionaries(data):
"""
@param data: a dictionary holding data
@type: dict
@return:
"""
result = {}
for row in data:
if row["name"] in result:
result[row["name"]]["data"].append(row["responseTime"])
result[row["name"]]["dateCreated"].append(row["dateCreated"])
else:
result[row["name"]] = {
"label": row["name"],
"data": [row["responseTime"]],
"dateCreated": [row["dateCreated"]],
}
return result
这是get_system_endpoint_response_time的示例返回值
{
"code": "800.200.001",
"data": {
"labels": [
"01/29/20 00:00",
"01/28/20 00:00",
"01/27/20 00:00",
"01/26/20 00:00",
"01/25/20 00:00",
"01/24/20 00:00",
"01/23/20 00:00",
"01/22/20 00:00",
"01/21/20 00:00",
"01/20/20 00:00",
"01/19/20 00:00",
"01/18/20 00:00",
"01/17/20 00:00",
"01/16/20 00:00",
"01/15/20 00:00",
"01/14/20 00:00",
"01/13/20 00:00",
"01/12/20 00:00",
"01/11/20 00:00",
"01/10/20 00:00",
"01/09/20 00:00",
"01/08/20 00:00",
"01/07/20 00:00",
"01/06/20 00:00",
"01/05/20 00:00",
"01/04/20 00:00",
"01/03/20 00:00",
"01/02/20 00:00",
"01/01/20 00:00",
"12/31/19 00:00",
"12/30/19 00:00"
],
"datasets": {
"Github": {
"dateCreated": [
"01/27/20 08:08",
"01/27/20 08:54",
"01/27/20 11:47",
"01/20/20 13:53",
"01/20/20 13:53"
],
"data": [
1.0,
0.0,
1.0,
1.0,
1.0
],
"label": "Github"
},
"Stack Overflow": {
"dateCreated": [
"01/27/20 08:08",
"01/27/20 08:54",
"01/27/20 11:47",
"01/20/20 13:53"
],
"data": [
0.0,
1.0,
1.0,
0.0
],
"label": "Stack Overflow"
},
"Linked In": {
"dateCreated": [
"01/27/20 08:08",
"01/27/20 08:54",
"01/27/20 11:47",
"01/20/20 13:53",
"01/20/20 13:53"
],
"data": [
0.0,
0.0,
0.0,
0.0,
0.0
],
"label": "Linked In"
},
"Devrant": {
"dateCreated": [
"01/27/20 08:08",
"01/27/20 08:54",
"01/27/20 11:47"
],
"data": [
1.0,
1.0,
1.0
],
"label": "Devrant"
},
"Plural Sight": {
"dateCreated": [
"01/27/20 08:08",
"01/27/20 08:54",
"01/27/20 11:47"
],
"data": [
0.0,
0.0,
0.0
],
"label": "Plural Sight"
},
"Gmail": {
"dateCreated": [
"01/27/20 08:08",
"01/27/20 08:54",
"01/27/20 11:47"
],
"data": [
0.0,
0.0,
0.0
],
"label": "Gmail"
}
}
}
}
我想像这样在每个分组的数据中添加值为0的缺失日期
"labels": [
"01/29/20 00:00",
"01/28/20 00:00",
"01/27/20 00:00",
"01/26/20 00:00",
"01/25/20 00:00",
"01/24/20 00:00",
"01/23/20 00:00",
"01/22/20 00:00",
"01/21/20 00:00",
"01/20/20 00:00",
"01/19/20 00:00",
"01/18/20 00:00",
"01/17/20 00:00",
"01/16/20 00:00",
"01/15/20 00:00",
"01/14/20 00:00",
"01/13/20 00:00",
"01/12/20 00:00",
"01/11/20 00:00",
"01/10/20 00:00",
"01/09/20 00:00",
"01/08/20 00:00",
"01/07/20 00:00",
"01/06/20 00:00",
"01/05/20 00:00",
"01/04/20 00:00",
"01/03/20 00:00",
"01/02/20 00:00",
"01/01/20 00:00",
"12/31/19 00:00",
"12/30/19 00:00"
],
"datasets": {
"Github": {
"dateCreated": [
"01/28/20 00:00",
"01/27/20 08:08",
"01/27/20 08:54",
"01/27/20 11:47",
"01/20/20 13:53",
"01/20/20 13:53",
"01/29/20 00:00",
"01/26/20 00:00",
"01/25/20 00:00",
"01/24/20 00:00",
"01/23/20 00:00",
"01/22/20 00:00",
"01/21/20 00:00",
"01/20/20 00:00",
"01/19/20 00:00",
........
],
"data": [
1.0,
0.0,
1.0,
1.0,
1.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
.....
],
....
}
有谁可以帮忙?