ようへいの日々精進XP

よかろうもん

docker で Dashing を触ってみた

日本全国 5000 万人の docker とダッシュボード愛好家の皆様、おはようございます。

参考


セットアップ

せっかくなので Dockerfile

ちょっと困ったところ(1)

dashing start すると以下のエラー。

/usr/local/lib/ruby/gems/2.1.0/gems/execjs-2.0.2/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)

上記のメッセージ通りに...execjs のランタイムの一つで therubyracer をインストール。

gem install therubyracer --no-ri --no-rdoc -V

でもダメ。issue を見ると nodejs をインストールしたら良かったよーってことで...nodejs をインストールした。

rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install -y nodejs npm --enablerepo=epel

ちょっと困ったところ(2)

コンテナ内でどーやって dashing を monit 経由で起動させるか。結局はこちらのようなシェルスクリプトに逃げた。ポイントは以下の通り。

  • Ruby はもちろん、gemdashing 自身のパス設定
  • デーモン化させたい場合には -d

などなど、半日悩みました。


使ってみる

はい docker run

docker build からの...

git clone https://github.com/inokappa/dashing-run-docker.git
cd dashing-run-docker
docker build -t xxxx/xxxx .

docker run した後で...

docker run -t -d -p 3030 -p 2812 -p 22 xxxx/xxxx

コンテナの 3030 ポート(boot2docker の場合にはバインドされた任意のポート)にアクセスすると...

f:id:inokara:20140406052833p:plain

おお、なんか Windows 8 っぽいけどカッコいい。ちなみに上図のようにウィジェットを集めたものを一つのダッシュボード(プロジェクト)と扱うようだ。

curl でなんか出来るっぽい

ダッシュボードの最下部に以下のような表示が見える。

f:id:inokara:20140406010042p:plain

ドキュメントによると APIウィジェットにデータを送ることが出来るようなので上図に倣って試してみる。

curl -d '{ "auth_token": "YOUR_AUTH_TOKEN", "text": "osugi and peeko" }' \http://localhost:3030/widgets/welcome

f:id:inokara:20140406015941p:plain


dashing を細かく見てみる

dashing -h を実行すると...

以下のように幾つかのサブオプションがある。

Commands:
  dashing generate (widget/dashboard/job) NAME  # Creates a new widget, dashboard, or job.
  dashing help [COMMAND]                        # Describe available commands or one specific command
  dashing install GIST_ID                       # Installs a new widget from a gist.
  dashing job JOB_NAME AUTH_TOKEN(optional)     # Runs the specified job. Make sure to supply your auth token if you have one set.
  dashing new PROJECT_NAME                      # Sets up ALL THE THINGS needed for your dashboard project.
  dashing start                                 # Starts the server in style!
  dashing stop                                  # Stops the thin server

dashing new を実行すると...

ダッシュボードの最小構成単位であるプロジェクトを生成する。

dashing new hoge

実行後にカレントディレクトリに hoge が生成されているのでアクセスすると以下のようなディレクトリ、ファイルが生成されている。

.
|-- Gemfile
|-- README.md
|-- assets  # 各種画像、フォント、Javascript 等を保存
|-- config.ru
|-- dashboards  # ダッシュボード上のウィジェットの配置等を決める erb が入っている
|-- jobs  # API 等を利用してデータを取得する Ruby で書かれたスクリプトが置いてある
|-- lib # jobs 以下のスクリプトのオプションスクリプトを置く
|-- public # 静的なファイル(favicon とか 404 ページを置く)
`-- widgets # 個々のウィジェットディレクトリが置いてある

6 directories, 3 files

widgets ディレクトリ以下にはさらにウィジェット名のディレクトリがある。

widgets
├── clock
│   ├── clock.coffee
│   ├── clock.html
│   └── clock.scss
├── comments
│   ├── comments.coffee
│   ├── comments.html
│   └── comments.scss
(中略)
├── meter
│   ├── meter.coffee
│   ├── meter.html
│   └── meter.scss
└── text
    ├── text.coffee
    ├── text.html
    └── text.scss

上記の通り各種ウィジェット*.coffee*.html*.scss というファイルで構成されている。さらに詳細についてはこちらこちらが詳しく書かれておりとても参考になるので是非御覧下さいませ。

ざっくり解ったこと

  • dashboards/hoge.erb を作るとブラウザから hoge でアクセスすることが出来る
  • hoge.erb での data-id="xxxx"job からデータを送る場合の識別子になる
  • 各種 job から送ったデータをどんな風に表示させるかは widget 次第
  • job からは send_event というメソッドの引数として data-id="xxxx""xxxx" そして widget で定義された data-bind="yyyy""yyyy" と値を JSON フォーマット式で渡す

せっかくなんで

なんか作ってみた。

docker ダッシュボード(仮)

f:id:inokara:20140406114056p:plain

docker-api を利用してみて最終的に以下のようになった。

f:id:inokara:20140406214629p:plain

別にダッシュボードで見なくてもよくね?というツッコミは無しで...