[Play!] play statusをサービス側で再現する

 Play!framework1 Java
2013.06.20

Play!framework1.2系の話です。
みなさん、使ってます?

play status

 

Compass Study Compass Study / Calsidyrose

 

Scalaが使えて楽しいし〜と、一時浮気して2系を使いましたが
最近やっぱり1系にもどってきました。@ikeike443さん、今後ともメンテよろしくお願いします。

 

さて。

 

弊社ではPlay!を一部バッチサーバとしても利用しているのですが
どのバッチサーバでどのJobが動いているかを確認したいことがあります。
CUIからであれば

$ play status

で出力される「Scheduled jobs:」節が便利なんですが、 
できれば 監視サーバからのHTTPリクエストだけで全サーバの情報を集めたい。

 

ということでググった結果、サービス内でならこう書くといいよ、とでてくるのが大概この方法。

    out.println("Jobs execution pool:");
    out.println("~~~~~~~~~~~~~~~~~~~");
    out.println("Pool size: " + JobsPlugin.executor.getPoolSize());
    out.println("Active count: " + JobsPlugin.executor.getActiveCount());
    out.println("Scheduled task count: " + JobsPlugin.executor.getTaskCount());
    out.println("Queue size: " + JobsPlugin.executor.getQueue().size());

出典: How to check active and queued jobs count in the Play Framework? - Stack Overflow

 

えーでもなー。ちょっとなー
ってことで、僕はこう書いてます。

public class Server extends Controller {

	/**
	 * Check Play! server's status
	 */
	public static void status() {
		StringBuilder buffer = new StringBuilder();
		buffer.append(new play.CorePlugin().getStatus())
		buffer.append(crlf);
		buffer.append(new play.db.DBPlugin().getStatus());
		buffer.append(crlf);
		buffer.append(new play.jobs.JobsPlugin().getStatus());
		buffer.append(crlf);
		renderText(buffer.toString());
	}
	private static final String crlf = System.getProperty("line.separator");
}

 

結果をみていただけば一目瞭然、これ、 play statusと全く同じ出力になります。
(Jobに関することだけでいいなら、CorePluginとDBPluginの行はコメントアウト)
ぜひお試しを〜

 

ちなみにうちのPlay!サービスにはここに書いていない以下の機能もつけて
このServerコントローラクラスを追加することがしばしばです。

 

もちろん外部公開されているWebサーバにはつけていませんが、ツール用の社内サーバ、
内部ネットワークにあるAPサーバやBatchサーバにはいい方法かもしれません。
特に負荷分散させているときには。