私は以下を転がしています:
- レール 3.2.9
- ハイチャート
- ステートマシン
何百もの Linux ボックスの状態の変化を表す不規則なデータ セットがあります。各ボックスは 2 分ごとに中央の ping サーバーにチェックインします。
デバイスがハートビートするたびに、ping サーバーはデバイスの現在の状態がオフラインかどうかを確認し、オフラインの場合は状態をオンラインに変更し、ハートビート テーブルのオンライン列を 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 のHighcharts に関するすばらしい Railscast に従って、不規則な間隔でこのデータの折れ線グラフを作成できます。
チャートとデータ系列
この例に従ってください:
http://www.highcharts.com/demo/spline-irregular-time
そして、次のようなデータ系列を使用します。
= @devices.heartbeats.map { |o| o.online == true ? 1 : 0 }
折れ線グラフをきれいにプロットしていました。
私が立ち往生している場所
グラフは最後にチェックインした時点で終了しており、現在のポイントをグラフに表示する必要があります。Ryan の例では、値がない場合、ゼロを日付にマップします。この部分は翻訳できません。
積み上げ棒グラフのようなグラフを作成しようとしていますが、データを並べ替えることができません。
http://www.highcharts.com/demo/bar-stacked
このようなグラフを作成できるように、クエリをフォーマットして、現在までのデータと個々のポイントを取得するにはどうすればよいですか?