// Path: src/main/java/acromusashi/stream/client/NimbusClientFactory.java
// public class NimbusClientFactory
// {
//     /**
//      * パラメータを指定せずにインスタンスを生成する。
//      */
//     public NimbusClientFactory()
//     {}
// 
//     /**
//      * Nimbusへの接続クライアントを生成する。
//      *
//      * @param host Nimbusホスト
//      * @param port NimbusPort
//      * @return Nimbusへの接続クライアント
//      */
//     public NimbusClient createClient(String host, int port)
//     {
//         Map<String, Object> nimbusConf = Maps.newHashMap();
//         nimbusConf.put(Config.NIMBUS_HOST, host);
//         nimbusConf.put(Config.NIMBUS_THRIFT_PORT, port);
//         nimbusConf.put(Config.STORM_THRIFT_TRANSPORT_PLUGIN,
//                 "backtype.storm.security.auth.SimpleTransportPlugin");
//         NimbusClient nimbusClient = NimbusClient.getConfiguredClient(nimbusConf);
//         return nimbusClient;
//     }
// }
// 
// Path: src/main/java/acromusashi/stream/exception/ConnectFailException.java
// public class ConnectFailException extends Exception
// {
//     /** serialVersionUID */
//     private static final long serialVersionUID = -3457655487597730586L;
// 
//     /**
//      * パラメータを指定せずにインスタンスを生成する。
//      */
//     public ConnectFailException()
//     {
//         super();
//     }
// 
//     /**
//      * コンストラクタ
//      *
//      * @param message メッセージ
//      */
//     public ConnectFailException(String message)
//     {
//         super(message);
//     }
// 
//     /**
//      * コンストラクタ
//      *
//      * @param message メッセージ
//      * @param cause 発生原因例外
//      */
//     public ConnectFailException(String message, Throwable cause)
//     {
//         super(message, cause);
//     }
// 
//     /**
//      * コンストラクタ
//      *
//      * @param cause 発生原因例外
//      */
//     public ConnectFailException(Throwable cause)
//     {
//         super(cause);
//     }
// }


import java.util.concurrent.TimeUnit;
import org.apache.commons.lang.StringUtils;
import acromusashi.stream.client.NimbusClientFactory;
import acromusashi.stream.exception.ConnectFailException;
import backtype.storm.generated.ClusterSummary;
import backtype.storm.generated.Nimbus;
import backtype.storm.generated.NotAliveException;
import backtype.storm.generated.TopologyInfo;
import backtype.storm.utils.NimbusClient;
/**
* Copyright (c) Acroquest Technology Co, Ltd. All Rights Reserved.
* Please read the associated COPYRIGHTS file for more details.
*
* THE SOFTWARE IS PROVIDED BY Acroquest Technolog Co., Ltd.,
* WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDER BE LIABLE FOR ANY
* CLAIM, DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
*/
package acromusashi.stream.topology.state;




/**
 * Nimbusに問合せ、該当Topologyの実行状態を取得するクライアントクラス<br>
 * 該当Topologyのメッセージ処理数を定期的に確認し、指定した判定実行回数分変化がなかった場合に該当Topologyを「停止中」として扱う。<br>
 * メッセージ処理数に変化があった場合はメッセージ処理中として扱い、「処理中」として扱う。
 *
 * @author kimura
 */
public class TopologyExecutionGetter
{
    /**
     * パラメータを指定せずにインスタンスを生成する。
     */
    public TopologyExecutionGetter()
    {
        // Do nothing.
    }

    /**
     * 該当Topologyの実行状態を取得する。
     *
     * @param topologyName トポロジ名
     * @param nimbusHost NimbusHost
     * @param nimbusPort NimbusPort
     * @param interval 処理中判定実行インターバル（ミリ秒単位）
     * @param number 処理中判定実行回数
     * @throws ConnectFailException 接続失敗時
     * @return Topology実行状態
     */
    public TopologyExecutionStatus getExecution(String topologyName, String nimbusHost,
// Path: src/main/java/acromusashi/stream/client/NimbusClientFactory.java
// public class NimbusClientFactory
// {
//     /**
//      * パラメータを指定せずにインスタンスを生成する。
//      */
//     public NimbusClientFactory()
//     {}
// 
//     /**
//      * Nimbusへの接続クライアントを生成する。
//      *
//      * @param host Nimbusホスト
//      * @param port NimbusPort
//      * @return Nimbusへの接続クライアント
//      */
//     public NimbusClient createClient(String host, int port)
//     {
//         Map<String, Object> nimbusConf = Maps.newHashMap();
//         nimbusConf.put(Config.NIMBUS_HOST, host);
//         nimbusConf.put(Config.NIMBUS_THRIFT_PORT, port);
//         nimbusConf.put(Config.STORM_THRIFT_TRANSPORT_PLUGIN,
//                 "backtype.storm.security.auth.SimpleTransportPlugin");
//         NimbusClient nimbusClient = NimbusClient.getConfiguredClient(nimbusConf);
//         return nimbusClient;
//     }
// }
// 
// Path: src/main/java/acromusashi/stream/exception/ConnectFailException.java
// public class ConnectFailException extends Exception
// {
//     /** serialVersionUID */
//     private static final long serialVersionUID = -3457655487597730586L;
// 
//     /**
//      * パラメータを指定せずにインスタンスを生成する。
//      */
//     public ConnectFailException()
//     {
//         super();
//     }
// 
//     /**
//      * コンストラクタ
//      *
//      * @param message メッセージ
//      */
//     public ConnectFailException(String message)
//     {
//         super(message);
//     }
// 
//     /**
//      * コンストラクタ
//      *
//      * @param message メッセージ
//      * @param cause 発生原因例外
//      */
//     public ConnectFailException(String message, Throwable cause)
//     {
//         super(message, cause);
//     }
// 
//     /**
//      * コンストラクタ
//      *
//      * @param cause 発生原因例外
//      */
//     public ConnectFailException(Throwable cause)
//     {
//         super(cause);
//     }
// }


// Path: src/main/java/acromusashi/stream/topology/state/TopologyExecutionGetter.java
import java.util.concurrent.TimeUnit;
import org.apache.commons.lang.StringUtils;
import acromusashi.stream.client.NimbusClientFactory;
import acromusashi.stream.exception.ConnectFailException;
import backtype.storm.generated.ClusterSummary;
import backtype.storm.generated.Nimbus;
import backtype.storm.generated.NotAliveException;
import backtype.storm.generated.TopologyInfo;
import backtype.storm.utils.NimbusClient;

/**
* Copyright (c) Acroquest Technology Co, Ltd. All Rights Reserved.
* Please read the associated COPYRIGHTS file for more details.
*
* THE SOFTWARE IS PROVIDED BY Acroquest Technolog Co., Ltd.,
* WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDER BE LIABLE FOR ANY
* CLAIM, DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
* OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
*/
package acromusashi.stream.topology.state;




/**
 * Nimbusに問合せ、該当Topologyの実行状態を取得するクライアントクラス<br>
 * 該当Topologyのメッセージ処理数を定期的に確認し、指定した判定実行回数分変化がなかった場合に該当Topologyを「停止中」として扱う。<br>
 * メッセージ処理数に変化があった場合はメッセージ処理中として扱い、「処理中」として扱う。
 *
 * @author kimura
 */
public class TopologyExecutionGetter
{
    /**
     * パラメータを指定せずにインスタンスを生成する。
     */
    public TopologyExecutionGetter()
    {
        // Do nothing.
    }

    /**
     * 該当Topologyの実行状態を取得する。
     *
     * @param topologyName トポロジ名
     * @param nimbusHost NimbusHost
     * @param nimbusPort NimbusPort
     * @param interval 処理中判定実行インターバル（ミリ秒単位）
     * @param number 処理中判定実行回数
     * @throws ConnectFailException 接続失敗時
     * @return Topology実行状態
     */
    public TopologyExecutionStatus getExecution(String topologyName, String nimbusHost,
            int nimbusPort, int interval, int number) throws ConnectFailException