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

标签 javascript php mysql graph charts

我有许多设备每分钟“检查”一次,即心跳。这些心跳存储在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/

相关文章:

php - 我想使用 PhP 删除组合框中的选定项目,并且该项目也必须反射(reflect)在数据库中

javascript - 使用 React Router 为不同的路由使用相同的组件

javascript - 仅突出显示包含复选框的单元格

javascript - Chrome 扩展程序 : Toggle content_script via browser_action

php - 从 JSON 请求中移除 DOM 标签

php - 未捕获的反射异常 : Class log does not exist Laravel 5. 2

javascript - 循环 jQuery 简单动画线 3 次

php - 是否有使用 PHP over HTTP 将消息插入 MSMQ 3.0 的教程?

java - JVM 性能、线程负载和分析,以优化基于 Java 的项目的性能

mysql - 保存 bool 值并在搜索时节省 CPU 和内存的最佳解决方案