使用Ruby迭代不规则数据,同时“填充空白”

时间:2012-12-09 20:50:02

标签: ruby-on-rails ruby ruby-on-rails-3 highcharts

我正在推动以下内容:

  • Rails 3.2.9
  • Highcharts
  • State Machine

我有一组不规则的数据代表了数百个linux盒子的状态变化。每个盒子每两分钟检查一次中央ping服务器。

每次设备心跳时,ping服务器都会检查设备的当前状态是否处于脱机状态,如果是,则将状态更改为online,并将心跳表的online col设置为true并插入发生的时间。

在ping服务器上,我们有一个每5分钟运行一次rake任务的cron。这会发现所有设备的心跳小于现在的时间减去5分钟。

如果发现设备处于脱机状态,它会将设备状态设置为离线,并使用上一次心跳的时间和0标记到心跳表。

我们已经这样做了一段时间,这似乎是存储正常运行时间数据的有效方式,而不是每5分钟为500个设备创建一行。

表格看起来有点像这样:

+---------------------+--------+--------+
| created_at          | dev_id | online |
+---------------------+--------+--------+
| 2012-10-08 16:29:16 |   2345 |      0 |
| 2012-11-21 16:40:22 |   2345 |      1 |
| 2012-11-03 19:15:00 |   2345 |      0 |
| 2012-11-08 09:15:01 |   2345 |      1 |
| 2012-11-08 09:18:03 |   2345 |      0 |
| 2012-11-09 17:57:22 |   2345 |      1 |
| 2012-12-09 13:57:23 |   2345 |      0 |
| 2012-12-09 14:57:25 |   2345 |      1 |
| 2012-12-09 15:00:30 |   2345 |      0 |
| 2012-12-09 15:57:31 |   2345 |      1 |
| 2012-12-09 16:07:35 |   2345 |      0 |
| 2012-12-09 16:37:38 |   2345 |      1 |
| 2012-12-09 17:57:40 |   2345 |      0 |
+---------------------+--------+--------+

根据Ryan Bate的精彩Railscast on Highcharts,我可以用不规则的间隔创建这些数据的折线图。

图表和数据系列

遵循这个例子:

http://www.highcharts.com/demo/spline-irregular-time

使用类似这样的数据系列:

 = @devices.heartbeats.map { |o|  o.online == true ? 1 : 0 } 

它很好地绘制了线图。

我被困的地方

图表在最后一次检查时结束,我需要图表在Now处显示一个点。在Ryan的例子中,如果没有价值,他会将零映射到日期。我无法翻译这部分内容。

我正在尝试实现堆栈条形图之类的图形,但无法对数据进行排序。

http://www.highcharts.com/demo/bar-stacked

如何格式化我的查询以便将数据提供到Now以及每个单独的点以便我可以创建这样的图形?

0 个答案:

没有答案