GrowthForecast つかってみた
なんかすごくグラフを作成したい要件があったので、id:kazeburo さんが開発している GrowthForecast をつかってみました。
- GrowthForecast
- https://github.com/kazeburo/GrowthForecast
いつも通りメモだよん。
GrowthForecast を Clone する
App::gh *1 をインストールしてあるので、gh コマンドを使って
$ gh clone kazeburo/GrowthForecast
でおわり。便利ですね!
依存モジュールをインストール
cpanm さえ入っていればこれもいつものように
$ cpanm -l extlib --installdeps .
でおわり。これまた便利!
Alien::RRDtool をインストール
依存モジュールインストールしたし、もうカンペキ!と思ったけれど、実はグラフ描画ツールである RRDtool は一緒にインストールされない模様。
ということで、RRDtool も導入します。
今までは yum / aptitude などを経由してインストールしたり、自分でコンパイルしたりと大変でしたが、今は Alien::RRDtool があるので、こちらを cpanm を使っていれます。
依存するライブラリの問題でインストールできない場合もありますが、その場合は yum / aptitude などで依存ライブラリを別途インストールする必要があります。
$ cpanm -l extlib Alien::RRDtool
起動してみる
GrowthForecast には growthforecast.pl という起動スクリプトがついてくるので、これを実行してアプリケーションを起動します。
$ perl growthforecast.pl --host 0.0.0.0
これだけで準備完了。カンタン!
curl でグラフをかく
特定の URL を叩くだけでグラフを生成してくれるので、ためにし curl でグラフを書いてみます。
$ curl -F number=2.5 -F mode=gauge http://mydomain.com:5005/api/service/section/name
これだけでカンタンにグラフが。。。
あれ?なんか "number is not null" とか言うエラーが出ちゃったよ?
NULL 値なんて渡してないのにどうして!?
と思い、ソースコードを見てみると、どうやら number は整数値じゃないとダメみたい。
整数値以外のグラフも描画できるように
今回どうしても、整数値以外のグラフが書きたかったので、無理矢理整数値以外でも描画できるようにしてみました。
変更した差分は以下の通り。
diff --git a/lib/GrowthForecast/Data.pm b/lib/GrowthForecast/Data.pm index f334efa..c88c24a 100644 --- a/lib/GrowthForecast/Data.pm +++ b/lib/GrowthForecast/Data.pm @@ -27,7 +27,7 @@ CREATE TABLE IF NOT EXISTS graphs ( service_name VARCHAR(255) NOT NULL, section_name VARCHAR(255) NOT NULL, graph_name VARCHAR(255) NOT NULL, - number INT NOT NULL DEFAULT 0, + number REAL NOT NULL DEFAULT 0, mode VARCHAR(255) NOT NULL DEFAULT 'gauge', description VARCHAR(255) NOT NULL DEFAULT '', sort UNSIGNED INT NOT NULL DEFAULT 0, @@ -60,7 +60,7 @@ EOF $dbh->do(<<EOF); CREATE TABLE IF NOT EXISTS prev_graphs ( graph_id INT NOT NULL, - number INT NOT NULL DEFAULT 0, + number REAL NOT NULL DEFAULT 0, subtract INT, updated_at UNSIGNED INT NOT NULL, PRIMARY KEY (graph_id) @@ -70,7 +70,7 @@ EOF $dbh->do(<<EOF); CREATE TABLE IF NOT EXISTS prev_short_graphs ( graph_id INT NOT NULL, - number INT NOT NULL DEFAULT 0, + number REAL NOT NULL DEFAULT 0, subtract INT, updated_at UNSIGNED INT NOT NULL, PRIMARY KEY (graph_id) @@ -83,7 +83,7 @@ CREATE TABLE IF NOT EXISTS complex_graphs ( service_name VARCHAR(255) NOT NULL, section_name VARCHAR(255) NOT NULL, graph_name VARCHAR(255) NOT NULL, - number INT NOT NULL DEFAULT 0, + number REAL NOT NULL DEFAULT 0, description VARCHAR(255) NOT NULL DEFAULT '', sort UNSIGNED INT NOT NULL DEFAULT 0, meta TEXT NOT NULL DEFAULT '', diff --git a/lib/GrowthForecast/Web.pm b/lib/GrowthForecast/Web.pm index 61539e9..6dd813f 100644 --- a/lib/GrowthForecast/Web.pm +++ b/lib/GrowthForecast/Web.pm @@ -748,7 +748,7 @@ post '/api/:service_name/:section_name/:graph_name' => sub { 'number' => { rule => [ ['NOT_NULL','number is null'], - ['INT','number is not null'] + # ['INT','number is not null'] ], }, 'mode' => {
ValidateRule とか、HTML::Shakan を使ってそうな書き方なので、本当は数値だけが通るようにとかしたほうがいいとは思うんだけれど、とりあえずこれで整数値以外の値でもグラフがかけるようになりました。
いまのところ特に問題はないし、まぁいいかな?
というわけで当初の目的通り、グラフを生成することができました。
後日談
本当は GrowthForecast ではなく、HRForecast を導入しようとしていて、MySQL ではなく PostgreSQL にも対応できるように書き換えたりとか頑張ったけれど、最終的に HRForecast も整数値しかグラフにすることができなく、その部分を直すのがめんどくさそうだったので GrowthForecast に乗り換えました。時間があるときに HRForecast 整数値以外でグラフがかけるようにしたいな。
*1:cpanm App::gh でインストールしました。