日本全国 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
はもちろん、gem
はdashing
自身のパス設定- デーモン化させたい場合には
-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
の場合にはバインドされた任意のポート)にアクセスすると...
おお、なんか Windows 8
っぽいけどカッコいい。ちなみに上図のようにウィジェットを集めたものを一つのダッシュボード(プロジェクト)と扱うようだ。
curl でなんか出来るっぽい
ダッシュボードの最下部に以下のような表示が見える。
ドキュメントによると API
でウィジェットにデータを送ることが出来るようなので上図に倣って試してみる。
curl -d '{ "auth_token": "YOUR_AUTH_TOKEN", "text": "osugi and peeko" }' \http://localhost:3030/widgets/welcome
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 ダッシュボード(仮)
docker-api を利用してみて最終的に以下のようになった。
別にダッシュボードで見なくてもよくね?というツッコミは無しで...