时间序列图数据

时间:2020-01-29 06:16:06

标签: django

我的任务是创建一个函数,该函数可获取并返回要由时间序列图使用的数据,所有必需的数据都存储在单个模型中。目前,我的函数将根据设置的日期查询和获取数据, 然后在最后调用一个函数对重复数据进行分组 。下面是两个单独的函数

    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,
                    .....
                ],
....
}

有谁可以帮忙?

0 个答案:

没有答案