play1 の @status endpoing

PlayFramework

play1 には status というサブコマンドがあります。

status.py, PlayStatusPlugin.java あたりのコード。
コマンドのドキュメント (cmd-status.txt)

$ play status APPDIR

port がデフォルトと違う場合は port を指定

$ play status APPDIR --http.port=8080

環境ごとの設定を行っている場合は --%ENV で指定

$ play status APPDIR --%prod

JVM のメモリ情報、Thread の状態や、Request と Job を実行する thread pool の情報

Java:
~~~~~
Version: 1.8.0_171
Home: /usr/java/jdk1.8.0_171/jre
Max memory: 4294967296
Free memory: 2981053320
Total memory: 4294967296
Available processors: 4
Requests execution pool:
~~~~~~~~~~~~~~~~~~~~~~~~
Pool size: XX
Active count: XX
Scheduled task count: XXXXX
Queue size: X

URL にマップされているメソッドごとの実行回数(hit), 実行時間(avg, min, max)、
DBCP 設定、Job の情報などが確認できます。

status コマンドは内部で /@status に HTTP でアクセスしてそのレスポンスをそのまま返しています。
/@status.json という URL も用意されており、JSON でレスポンスが返されます。ただし、残念ながら情報量がずっと少ない、バグかな?

ただ、HTTP でアクセスしても 401 Unauthorized となります、認証を通すためには conf/application.conf で設定してある secret が必要です。

status コマンドは python で次のようになっているので

hm = hmac.new(secret_key, '@status', sha)
authorization = hm.hexdigest()

shell では openssl で次のようにして得ることができます

echo -n '@status' | openssl sha1 -hmac 'secret_key'

これを Authorization ヘッダーとして渡せばアクセスできます。