サーバースクリプトの状態遷移
言うまでもなくclient側と言ってもWebサーバ上で動いているわけなのでユーザから見ればサーバーとして機能しているわけですが、TwitterAPIを使ってデータをDBに保存するサーバースクリプトに対してclient側ということです。
state_machine gemを利用してサーバースクリプトの状態を管理しています。
-
状態遷移表
status\method start store stop 停止中(down) 待機中(prepared) - - 待機中(prepared) - 集計中(storing) 停止中(down) 集計中(storing) - - 停止中(down) - サーバー停止中のユーザー画面
- サーバー集計中のユーザー画面
ユーザ向け画面では「停止中」と「集計中」の2つの状態しかないのですが、EventMachineを使用しているサーバースクリプトでは、接続確立が完了した状態(post_initイベントが発生後)にならないとコマンドラインで渡したパラメータが有効にならないので、サーバースクリプトを起動した直後の状態を「待機中」として管理しています。
- 停止中 —– サーバースクリプト停止中
- 待機中 —– サーバースクリプトが起動しているが、TwitterAPIを呼び出していない状態
- 集計中 —– TwitterAPIを呼び出しツイートデータをDBに保存している状態
※「集計中」から「待機中」には遷移できません(停止して再起動)。
機能
- server側スクリプトの制御(起動、終了、状態確認)
※遅いノートPC(Atom機)で試したところserver側スクリプト起動に時間がかかり、接続がタイムアウトすることがあったので5秒のsleepを入れています。 - server側のスクリプトがDBに保存したツイートデータを集計してグラフ表示する。
※Twitterのデータ構造はハッシュタグを本文とは別に保持しているようですが、SQLで集計する際にハッシュタグで集計するのはコストがかかるので、本文の内容でgroup byするという単純なやり方で妥協しています。詳細は別記事にするつもりです。
ER図
- Tweetテーブルへの書き込みはサーバースクリプトのみで、client側のRailsアプリからTweetテーブルへのアクセスはRead onlyです。
- Servモデルはユーザがサーバースクリプトを起動する時に指定したTwitter検索タグとサーバースクリプトの状態を管理します。
- ユーザは複数のTrackモデル(検索タグ)を保存できますが、サーバースクリプト起動時に指定出来るタグは一つだけです。