起動・運用

2つのコマンドが含まれます.

$ cd path/to/qkouserver
$ python manage.py -h
usage: manage.py [-h] {qkoubot,stream} ...

QkouBot is an application for KIT students. This automatically collect and
redistribute information and cancellation of lectures. QkouBot detect update
of information and tweet it.

positional arguments:
  {qkoubot,stream}  sub commands help
    qkoubot         Start QkouBot command
    stream          Start stream processing

optional arguments:
  -h, --help        show this help message and exit

更新通知botとして起動

qkoubotコマンドを使用します.

ヘルプメッセージ

$ cd path/to/qkouserver
$ python manage.py qkoubot -h
usage: manage.py qkoubot [-h] [-v] [-l {1,2,3}] [--ini INI]
                         [--file-log-enable] [--log-path LOG_PATH] [-t]
                         [--without-failure]

optional arguments:
  -h, --help            show this help message and exit
  -v, --verbose         Default logging output is above WARNING level to
                        stderr. If this option enabled, logging output is
                        above INFO level to stdout by default.You can change
                        its level using `-l` or `--log-level` option.
  -l {1,2,3}, --log-level {1,2,3}
                        Choose a log level. 1: debug, 2: info, 3: warning.
                        Default value is 2
  --ini INI             Read `*.ini` file and overwrite environment variables.
  --file-log-enable     Enable logging to `*.log` file. These files are save
                        into `log` directory by default.
  --log-path LOG_PATH   Specify location of `*.log` file.
  -t, --tweet           Enable tweet update of any information.
  --without-failure     Tweet update of information, but do not tweet login
                        failure information.

各種オプションについて

  • -h, --help
    ヘルプメッセージの表示.
  • -v, --verbose
    詳細情報を標準出力に出力.デフォルトのログレベルはINFO
  • -l, --log-level
    出力ログレベルの変更.引数を1~3のうちから一つとる.1: DEBUG, 2: INFO, 3: WARNING.それぞれそのレベル以上の情報を出力する.DEBUGで全てのログを出力することになる.
  • --ini
    .iniファイルへのパスを指定.
  • --file-log-enable
    .logファイルへのログ出力を行う.デフォルトではリポジトリ中のlogディレクトリにdebug.logerror.logを出力.それぞれ2MBずつでログローテートを行い,順に.log.1.log.2と拡張子が付けられ最大5個分蓄積される.
  • --log-path
    引数を一つとり,ログファイルの出力先ディレクトリを指定.末尾が/にならないよう注意.
  • -t, --tweet
    ツイート機能の有効化.なお,機能の有効無効問わず現在はTwitterAppの認証情報が必要となる.
  • --without-failure
    ツイート機能を有効化した際,デフォルトではログイン試行やパースに失敗すると障害情報検知ツイートを行う.このオプションを有効にすると,障害情報をツイートしなくなる.

iniファイルを使用する場合

.iniファイルは4つのセクションから成ります.全てが要求されるわけではありません.不要なものはコメントアウトしても問題ありませんが,Twitter認証情報及び,シボレス認証情報は必須となります.
セクション名・キー名が間違っている場合エラーを出力します.

mysqlセクション

[mysql]
MYSQL_USERNAME=MySQLのユーザ名
MYSQL_PASSWORD=MySQLのパスワード
MYSQL_HOST=MySQLサーバのホスト名
MYSQL_DATABASE_NAME=MySQLのデータベース名

shibbolethセクション

[shibboleth]
SHIBBOLETH_USERNAME=bから始まるログインに使用する学生番号
SHIBBOLETH_PASSWORD=上記のパスワード

twitterセクション

[twitter]
CONSUMER_KEY=コンシューマキー
CONSUMER_SECRET=コンシューマシークレット
ACCESS_TOKEN=アクセストークン
ACCESS_SECRET=アクセスシークレット

otherセクション

[other]
TESTING=テスト実行フラグ.trueまたはfalseSCRAPING_INTERVAL=スクレイピング間隔.デフォルトは300(秒)
LOGIN_FAILURE_TWEET_INTERVAL=ログイン失敗時の障害情報ツイートの間隔.デフォルトは1800(秒)
DAILY_TWEET_HOUR=毎日の休講ツイートの時刻.デフォルトは7SQLITE_PATH=SQLiteデータベースファイルへのパス.デフォルトは`path/to/qkouserver/data`.指定したパス以下にsqlite.dbとして作成される.
LOG_LOCATION=ログファイルの出力先ディレクトリ.デフォルトは`path/to/qkouserver/log`.

.iniファイルを使用しない場合

環境変数から与えることが出来ます.この方法は環境変数に値を追加する必要があり,どのアプリケーションが利用する環境変数とコンフリクトするか分からないのでDockerコンテナでの使用のみ推奨します.

docker runする場合

-eオプション

$ docker run --name qkoubot -e SHIBBOLETH_USERNAME=ユーザ名 \
    -e SHIBBOLETH_PASSWORD=パスワード \
    -e CONSUMER_KEY=コンシューマキー \
    -e CONSUMER_SECRET=コンシューマシークレット \
    -e ACCESS_TOKEN=アクセストークン \
    -e ACCESS_SECRET=アクセスシークレット \
    pddg/qkouserver:latest qkoubot -v -t

--env-fileオプション

.envファイルを作成する.

$ touch .env
$ vim .env

キー=値形式で記述.
リファレンス: http://docs.docker.jp/compose/env-file.html

SHIBBOLETH_USERNAME=bから始まるログインに使用する学生番号
SHIBBOLETH_PASSWORD=上記のパスワード
CONSUMER_KEY=コンシューマキー
CONSUMER_SECRET=コンシューマシークレット
ACCESS_TOKEN=アクセストークン
ACCESS_SECRET=アクセスシークレット

--env-fileオプションで指定.

$ docker run --name qkoubot --env-file .env \
    pddg/qkouserver:latest qkoubot -v -t

docker-composeを使用する場合

同様にenvironmentセクションで直接環境変数を指定,またはenv_fileセクションで.envファイルを指定し,docker-compose.ymlと同じ階層に.envファイルを作成します.

UserStreamを処理するbotとして起動

streamコマンドを使用.

ヘルプメッセージ

$ cd path/to/qkouserver
$ python manage.py stream -h
usage: manage.py stream [-h] [-v] [-l {1,2,3}] [--ini INI] [--file-log-enable]
                        [--log-path LOG_PATH]

optional arguments:
  -h, --help            show this help message and exit
  -v, --verbose         Default logging output is above WARNING level to
                        stderr. If this option enabled, logging output is
                        above INFO level to stdout by default.You can change
                        its level using `-l` or `--log-level` option.
  -l {1,2,3}, --log-level {1,2,3}
                        Choose a log level. 1: debug, 2: info, 3: warning.
                        Default value is 2
  --ini INI             Read `*.ini` file and overwrite environment variables.
  --file-log-enable     Enable logging to `*.log` file. These files are save
                        into `log` directory by default.
  --log-path LOG_PATH   Specify location of `*.log` file.

各種オプションについて

全てqkoubotコマンドに準ずる.

iniファイルを使用する場合

qkoubotコマンドの時と同様.

iniファイルを使用しない場合

qkoubotコマンドの時と同様.

SQLiteを使用している場合

qkoubotにおいてMySQLではなくSQLiteを使用している場合,データベースファイルをqkoubotコンテナとstreamコンテナで共有させる必要があります.

以下のようにdocker-compose.ymlvolumesセクションでコンテナの/dataディレクトリにホストのディレクトリをマウントする,またはdocker runコマンドで指定する必要があります.

version: "2"
services:
  qkoubot:
    container_name: qkoubot
    image: pddg/qkouserver:latest
    volumes:
      - ./data:/data
      - ./bot_log:/srv/qkouserver/log
    command: qkoubot -v -t --ini /data/config.ini --file-log-enable
    restart: always
  qkoustream:
    container_name: qkoustream
    image: pddg/qkouserver:latest
    volumes:
      - ./data:/data
      - ./stream_log:/srv/qkouserver/log
        tag: qkoustream
    restart: always
    command: stream -v --ini /data/config.ini --file-log-enable

排他制御について

上記のようにSQLiteデータベースのファイルをプロセス間で共有すると,おそらく(期待される動作としては)ファイルごとロック,つまり,qkoubotのプロセスが書き込みをする間,streamプロセスはいかなる読み込みも出来ないはずです.

これは厳密に検証したわけでは無く,仕様上おそらくそうだろうという憶測で書いています.現状botの動作はそれほど遅いモノでも無く,それほど頻繁にuserstreamからのアクセスが来るわけでも内のでSQLiteでも良いとしていますが,心配ならばMySQLを使用するべきでしょう.

ただしSQLiteにおいても複数プロセス間での処理は適切に行われるはずであり,それほど問題は無いと言えるかも知れません.

results matching ""

    No results matching ""