intra-mart Accel Platform Kibana ポートレットセットアップガイド 初版 2017-04-01

7. プラグインクラス

所定の抽象クラスを継承した Java クラスを作成し、設定ファイルに記述することによって、モジュールの動作をカスタマイズすることができます。 作成した Java クラス名を設定ファイルに記述し、Java クラスと共に war ファイルに含めてデプロイを行うと使用することが可能です。 設定ファイルへの記述は 設定ファイルリファレンス - Kibanaポートレットの設定 を参照してください。

なお、下記のメソッド引数にある Map<String, Object> customConfig には、ポートレット設定画面の「拡張項目」に設定したカスタムフィールドのパラメータが受け渡されます。

7.1. KibanaAuthorizer

Kibana のインデックス、フィールド、ドキュメントに対するアクセス権チェックを行います。

/**
 + Kibana連携のアクセスチェックを行う抽象クラスを継承したクラスです。
 * このクラスは全てのアクセスを許可します。
 */
public class SampleAuthorizer extends KibanaAuthorizer {

    /**
     * ドキュメントのアクセス権制御に使用される暗黙の絞り込み条件を取得します。<br/>
     *
     * Kibana (Elasticsearch) の各ドキュメント(行)に、アクセス権制御用のフィールドが存在することが前提です。
     *
     * 返り値として、絞り込み条件のクエリを返します。アクセス権制御が不要な場合は、null を返します。
     *
     * 絞り込み条件は、Lucene のクエリフォーマット (https://lucene.apache.org/core/2_9_4/queryparsersyntax.html) で記述します。
     *
     * 例:
     * <pre>
     * # フィールド role_id の値が R1 または R2
     * role_id: R1 OR role_id: R2
     * </pre>
     *
     * @param indexPattern インデックスパターン
     * @param customConfig カスタム項目
     * @return クエリ条件
     * @throws IOException 入出力エラーが発生した
     */
    @Override
    public String getEssentialQuery(final String indexPattern, final Map<String, Object> customConfig) {
        return null;
    }

    /**
     * 指定されたフィールドにアクセスできるかどうかを確認します。
     *
     * @param indexPattern インデックスパターン
     * @param field フィールド名
     * @param customConfig カスタム項目
     * @return アクセス可能ならばtrue、不可能ならばfalseを返します。
     * @throws IOException 入出力エラーが発生した
     */
    @Override
    public boolean validateField(final String indexPattern, final String field, final Map<String, Object> customConfig) {
        return true;
    }

    /**
     * 指定されたインデックスパターンにアクセスできるかどうかを確認します。
     *
     * @param indexPattern インデックスパターン
     * @param customConfig カスタム項目
     * @return アクセス可能ならばtrue、不可能ならばfalseを返します。
     * @throws IOException 入出力エラーが発生した
     */
    @Override
    public boolean validateIndex(final String indexPattern, final Map<String, Object> customConfig) {
        return true;
    }
}

7.2. KibanaFieldMapper

Kibana のフィールド名の物理名(Kibana 側に登録された名称)と論理名(Kibana ポートレットに表示される名称)の変換を行います。

/**
 * Kinabaフィールド名の論理名と物理名の変換を行うフィールドマッパの抽象クラスを継承したクラスです。
 * フィールド名の変換を行わないフィールドマッパクラスです。
 */
public class SampleFieldMapper extends KibanaFieldMapper {

    /**
     * 物理名を元に論理名を取得します。
     * @param indexPattern インデックスパターン
     * @param physicalName 論理名
     * @param locale ロケール
     * @param customConfig カスタム設定
     * @return 論理名
     */
    @Override
    public String getLogicalName(final String indexPattern, final String physicalName, final Locale locale, final Map<String, Object> customConfig) {
        return physicalName;
    }

    /**
     * 論理名を元に物理名を取得します。
     * @param indexPattern インデックスパターン
     * @param logicalName 論理名
     * @param locale ロケール
     * @param customConfig カスタム設定
     * @return 物理名
     */
    @Override
    public String getPhysicalName(final String indexPattern, final String logicalName, final Locale locale, final Map<String, Object> customConfig) {
        return logicalName;
    }
}

7.3. KibanaFieldProvider

Kibana のフィールドのリストを提供します。

Kibana ポートレット設定画面の絞り込み条件の取得などで利用されます。

/**
 * Kibanaのフィールド名を提供するフィールドプロバイダのクラスです。
 * Kibanaにアクセスして取得したフィールドを使用するフィールドプロバイダのクラスです。
 */
public class SampleFieldProvider extends NativeFieldProvider {

    /**
     * フィールド名のリストを返します。
     * @param kibanaId Kibana連携の設定ファイルに指定したID
     * @param indexPattern インデックスパターン
     * @param customConfig カスタム設定
     * @return フィールド名のリスト
     * @throws IOException 入出力エラーが発生した
     */
    @Override
    public List<KibanaField> getFieldNameList(final String kibanaId, final String indexPattern, final Map<String, Object> customConfig) throws IOException {
        return super.getFieldNameList(kibanaId, indexPattern, customConfig);
    }
}