海の底のブログ

node.jsからTracを操作する(ための下準備)

しばらく前の話になりますが、Trac Lightningのバージョン3あたりからTraMが同梱されなくなりました。

個人で使う分には別に問題無いんですが、会社で使う場合だと大抵複数のプロジェクトが同時に走っており、それに応じて1人が関わっているプロジェクトも複数あるという場合が珍しくありません。

で、各プロジェクトが完全に独立していれば良いんですがまあ、そんなわけもなくプロジェクトを横断してチケットを集計したレポートが欲しいという話が出てきます。

そういうときにTracのプラグインを作ってもいいんですが、出来れば慣れた(というかマイブームの)CoffeeScriptで書きたい。

特にチケットの集計だけで良いならTrac Lightningには最初からXMLRPCプラグインが入っているのでそいつ経由でデータを抽出することが出来ます。

そこで、node.jsでXMLRPCが扱えるライブラリはないかと探したところ、node-xmlrpcというそのものずばりな物があったので使ってみたのですがBASIC認証には対応している物のDigest認証に対応していませんでした。

Trac Lightningは普通に入れるとDigest認証なのでこのままでは接続できません。

で、(探せば見つかりそうな気もするけど)ない物は作れというわけでnode-xmlrpcをDigest認証に対応させました。

かなりざっくりな上にTracとの接続しか試してませんが以下のようにすることでTracのXMLRPCメソッドが呼び出せます。

xmlrpc = require 'xmlrpc'
options =
host: "example.com"
port: 80
path: "/trac/hogehoge/login/xmlrpc"
digest_auth:
user: "foo"
pass: "bar"
client = xmlrpc.createClient(options)
client.methodCall 'ticket.get', [id], (err, ticket)->
console.log ticket

これでチケットの情報は一通り抜けるのであとはプロジェクト毎に定期的に取得してDBに格納するなりして集計を行います。

今回改造を加えたソースは以下のリポジトリにアップしてあります。

https://github.com/syaku/node-xmlrpc