gpt4 book ai didi

javascript - 使用 PHP 和 JavaScript 从心跳列表构建正常运行时间图

转载 作者:行者123 更新时间:2023-11-29 21:01:59 25 4
gpt4 key购买 nike

我有许多设备每分钟“检查”一次,即心跳。这些心跳存储在MySQL中的一个表中,如下所示:

+----+-----------+---------------------+
| id | entity_id | heartbeat |
+----+-----------+---------------------+
| 1 | xyz | 2016-01-01 01:02:03 |
+----+-----------+---------------------+

“id”列是一个自动递增的整数,“entity_id”基本上标识了设备,“heartbeat”列是设备 checkin 时的时间戳。一切都很好。

现在,我想使用 JavaScript(特别是 Chart.js)创建一个漂亮的正常运行时间图表,显示设备上周的运行时间(即发送心跳)。

我遇到的问题是,显然我只存储设备 checkin 时的时间戳。所以说它在 30 分钟内没有 checkin ,我执行的两个时间戳之间会有 30 分钟的间隙有。

我在服务器端使用 PHP。是否有任何简单的方法可以使用此时间戳列表来创建一个 JSON 对象,该对象每分钟显示是否有时间戳?然后我可以将其输入 Chart.js 以将数据显示为条形图。

考虑到该表有数十万行,我还试图使其相对快速地获取数据。

最佳答案

我最终使用了类似 Grouping into interval of 5 minutes within a time range 中的查询。对于MySQL。然后,在 JavaScript 中,我使用 Moment.js 获取过去的时间,并循环添加 5 分钟并检查是否可以从数据库中找到匹配的记录。

SQL:

select unix_timestamp(date_format(`heartbeat`, \'%Y-%m-%d %H:%i\')) as `timestamp`,
count(`heartbeat`) as `num_heartbeats` from `table`
where `entity_id` = ? and `heartbeat` >= <date one week ago>
group by unix_timestamp(`heartbeat`) div 300, `entity_id`
order by `id` asc

JavaScript(jQuery):

$.get('/ajax/site/uptime', { entity_id: entity_id })
.done(function(data) {
var heartbeats = [];

// Get the time now and 7 days ago
var date = moment().subtract(7, 'days').startOf('hour');
var now = moment();

// Find the number of heartbeats per five minutes and add to the array
do
{
if (data[date.format('X')] !== undefined)
{
heartbeats.push(1);
}
else
{
heartbeats.push(0);
}

date.add(5, 'minutes');
}
while (date.format('X') <= now.format('X'));
});

关于javascript - 使用 PHP 和 JavaScript 从心跳列表构建正常运行时间图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37141717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com