設定ファイル

設定ファイルはYAML形式で記述します。YAMLの詳細は、PyYAMLのサイト、または、WikiPediaを参照してください。
設定ファイルは大きく4つのセクションで構成されています。

  1. globalセクション
  2. schedulerセクション
  3. pipelineセクション
  4. serverセクション

globalセクション

globalセクションでは,habu全体の設定をします。ここではログ出力設定や、複数のプラグインでの共通の設定を行ないます。現在利用できる設定は,logの設定とプラグインのパスの設定です。

ログの設定

logでログの出力先を指定します。出力先に指定でstdoutで標準出力に,stderrで標準エラーにログを出力します。nullを指定するとログ出力を抑制します。ファイルパスを指定すると,指定したファイルにログを出力します。ログをファイルに出力するように指定した場合,自動的に日付ごとにログローテートします。

loglevelを指定することで,ログ出力を制御できます。値は数字,または、次の文字列です。数値の場合は,値が大きいほど、より詳細なログが出力できます。文字列での指定は,DEBUGがもっとも詳細な出力で,NONEは殆ど出力されません。

  • NONE
  • CRITICAL
  • FATAL
  • ERROR
  • WARN
  • INFO
  • DEBUG
global:
  log: stdout
  loglevel: INFO

プラグインのパスの設定

プラグインのパスは任意の場所(パス)を指定できます。追加のプラグインの場所はplugin_pathで指定します。plugin_pathの値は配列で、複数指定することができます。プラグインのロード順は、

  1. コマンドライン引き数のプラグインのパス
  2. 設定ファイルのplugin_path
  3. カレントディレクトリ
  4. habuのモジュールディレクトリ

です。

global:
  plugin_path:
    - /plugin/path/1
    - /plugin/path/2

プロキシ設定

プロキシを指定できます。指定しない場合は,直接インターネットに接続します。proxy_hostでプロキシのホスト名、または,IPアドレスを指定します。proxy_portで、プロキシのポート番号を指定します。proxy_portを指定しない場合は,80番が使用されます。

global:
  proxy_host: myproxy.host.name
  proxy_port: 3128

データベース設定

オプションでhabuで使用するデータベースをdburiで指定できます。データベースに接続するためにはSQLObjectを使用します。dburiはSQLObjectのデータベースのURIでの指定方法で指定します。%(current_dir_uri)sはカレントディレクトリのパスに置換されます。

SQLObjectが使用するデータベースは使用できますが、sqliteを推奨します。

データベースを設定すると、publisher.dbstoreプラグインが使用できるようになります。また、Webサーバ機能でplanetモジュールが使用できます。

schedulerセクション

scheduleセクションを指定すると,habuをデーモンとして常駐させて,指定したスケジューリングに従って,定期実行できます。この仕様は将来変更するかも知れません。

scheduler:
  - pipeline: mypipeline
     expression: "* * * * *"

指定方法は,piplelineごとにcronライクなスケジュール指定を行ないます。具体的には,scheduleは配列です。各配列の要素はpipelineとexpressionになります。pipelineは実行したい処理になります。expressionで、実行スケジュールを指定します。expressionでは,空白区切りで,実行する分,時間,日,月,曜日になります。「*」は、毎Xと言う意味になります。「* * * * *」と記述することで,一分ごとに実行できます。また,「*/1- * * * *」と記述すると10分ごとに実行することができます。

実行スケジュールにhourly, dairy, weekly, monthlyを指定すると,それぞれ,一時間ごと、毎日,一週間ごと,毎月の意味になります。これは,単純なエイリアスです。

エイリアス名実際の値意味
hourly 0 * * * * 毎時
daily 0 2 * * * 毎日
weekly 0 0 0 0 1 一週間ごと
monthly 0 0 1 * * 毎月

pipelineセクション

RSSの配布サイトごとに別のフィルタを通すことで、RSSの加工方法を変更したい場合があります。その場合、設定ファイルを複数に分割して、複数のプロセスで処理することもできます。PlaggerやPRaggerはこの方式で動作します。habuも同じように動作させることもできますが、一つのプロセス内で複数の加工方法を同時並行で処理できます。一つの一連のフィルタ(フィルタチェーン)の組み合わせをpipelineと呼んでいます。例えば、pipeline Aでは、RSSを取得後、「python」という単語があるエントリだけを抜き出してRSSを再配信し、pipleline BではすべてのRSSのエントリのRSSを取得することができます。最終的にpipeline Aとpipeline BのRSSを一つのRSSにまとめあげることも、別のRSSとして読むこともできます。

pipeline:
  rss_fetcher:
    - module: subscription.config
      config:
        feed:
          - http://www.liris.org/blog/RSS
          - http://dev.ariel-networks.com/Members/blog_update/RSS
      sub-modules:
        - module: subscription.mixidiary
          config:
            userid: mixiuserid
            password: mixipassword
    - module: filter.join
    - module: filter.sort
      config:
        reverse: True
    - module: publisher.rssfeeder
      config:
        file: "out.rss"

pipelineセクションの中は辞書になっています。キーに各pipelineの名前をしていします。上の例ではrss_fetcherです。この名前はpipelineセクションの中でユニークでなければなりません。値としては、プラグインの配列になります。プラグインはインスタンス化された後に上から順次、実行されます。

プラグインの設定はmoduleとconfig、sub-modules, urlから構成されます。moduleはプラグインの名前(プラグインのモジュール名)です。moduleはプラグインのモジュール名です。configは各プラグインごとに固有の設定です。configの詳細は、「プラグイン一覧」の各項目を参照してください。urlはもし、プラグインパス上にモジュールが見つからなかった場合、指定したURLから自動でプラグインをダウンロードします。URLを指定せずに、プラグインパス上にモジュールが見つからない場合は、エラーを出力してプログラムを終了します。

sub-modulesはプラグインの中にプラグインを入れ子にするための機能です。subscription.configプラグインは、RSSフィードを取得しますが、サブモジュールとしてsubscription.mixidiaryを指定することで、同時にmixiのお友達の日記も同時に取得することができます。sub-modulesは配列で、複数のプラグインを指定できます。指定方法はpipelineの各モジュールの指定方法と同じです。sub-modulesに複数指定してもチェーンになりません。

sub-modulesの機能はオプショナルで、現在sub-modulesをサポートしているプラグインは次のものです。

  • subscription.config

moduleの名前は「.」で区切られ、標準のプラグインはsubscription.*, filter.* publisher.*です。それぞれはカテゴリ分けされていますが、これはプラグインの機能を把握しやすくするために分けています。機能的な差異はほとんどありません。

serverセクション

habuのサーバ機能を設定します。serverセクションは辞書で,キーにサーバの種類,値にサーバの設定を記述します。現在利用できるサーバ機能はwebです。

サーバ機能を利用するためには,パーソナルファイアウォールなどの設定を見直す必用があるかも知れません。

web

configにwebサーバとしての基本設定,resourceにwebサーバの個別の機能を設定します。

configの値は辞書です。portにサーバを起動するときのポート番号、interfaceにサーバを起動するときのアドレスを入力します。interfaceはオプションで,指定しない場合は,localhostになります。0.0.0.0を指定すると,外部PCからアクセスできます。

resourceの値は配列です。Webサーバのルートパスの直下に配置されます。各要素は,辞書で最低,次の二つの要素を持つ必用があります。

  • module: サーバの機能名です。
    staticで静的なファイルをフィードでします。現在は,動的なモジュールのロードはサポートしていません。
  • name: Webサーバのルートパスの配下におくオブジェクトの名前です。
    hogeとした場合,http://localhost:port/hogeでアクセスできます。

上記の二つ以外は、module固有の設定です。

module: static

静的ファイルをフィードします。pathにフィードしたいファイルへのパスを指定します。ディレクトリを指定した場合は,そのディレクトリ以下のファイルがすべてフィードされます。

module: hyperestraier

Web UIからHyperEstraierに全文検索し,RSS出力します。nodeで全文検索するHyperEstraierのノードへのURLを指定します。userid,passwordでそれぞれユーザID、パスワードを指定します。省略すると,admin,adminにそれぞれなります。 これを利用するためには,hyperestraier pure python版0.10.0以降が必用です。

module: planet

データベースから更新上を取得してRSSをフィードするPlanet機能を提供します。現状はRSSを直接フィードするだけです。

titleにRSSのタイトルを指定します。urlはこのPlanet機能へのリンクです。省略するとそれぞれ、「Habu Planet」「http://localhost/」になります。

rangeで表示する日数を指定します。sizeで表示する最大サイズを指定します。データベースから取得したデータでrangeとsizeで少ない方の数だけフィードします。rangeは省略すると7日間になります。sizeは省略すると0になります。0は無制限を意味します。