package com.easyagents.federation.sql.execute;

/**
 * Adapter 向 Core 回传 Fragment 执行阶段耗时的轻量观察器。
 */
public interface FederationExecutionObserver {

    /**
     * 记录获取物理连接的耗时。
     *
     * @param elapsedNanos 获取连接耗时
     */
    default void connectionAcquired(long elapsedNanos) {
    }

    /**
     * 记录数据库完成 Statement 执行并返回 ResultSet 的耗时。
     *
     * @param elapsedNanos 数据库执行耗时
     */
    default void databaseExecutionCompleted(long elapsedNanos) {
    }

    /**
     * 记录 ResultSet 返回首行的耗时。
     *
     * @param elapsedNanos 从 ResultSet 创建到首行可用的耗时
     */
    default void firstRowAvailable(long elapsedNanos) {
    }

    /**
     * 返回不采集指标的观察器。
     *
     * @return 空观察器
     */
    static FederationExecutionObserver none() {
        return new FederationExecutionObserver() {
        };
    }
}
