package com.easyagents.federation.sql.execute;

import com.easyagents.federation.sql.source.SourceId;
import java.io.Serializable;

/**
 * 单个物理分片的查询消耗快照。
 *
 * @param fragmentId 分片标识
 * @param sourceId 物理数据源标识
 * @param rowsRead 已读取行数
 * @param bytesRead 已读取估算字节数；Adapter 未安全提供时为 -1
 * @param elapsedNanos 当前或最终耗时
 * @param connectionAcquireNanos 获取连接耗时
 * @param databaseExecutionNanos Statement 返回 ResultSet 的耗时
 * @param firstRowNanos ResultSet 创建到首行可用的耗时；不可用时为 -1
 * @param complete 是否已完成或关闭
 */
public record FederationFragmentMetrics(
    String fragmentId,
    SourceId sourceId,
    long rowsRead,
    long bytesRead,
    long elapsedNanos,
    long connectionAcquireNanos,
    long databaseExecutionNanos,
    long firstRowNanos,
    boolean complete
) implements Serializable {

    /**
     * 创建只包含旧基础字段的兼容分片指标。
     *
     * @param fragmentId 分片标识
     * @param sourceId 数据源
     * @param rowsRead 读取行数
     * @param bytesRead 读取字节数
     * @param elapsedNanos 耗时
     * @param complete 是否完成
     */
    public FederationFragmentMetrics(
        String fragmentId,
        SourceId sourceId,
        long rowsRead,
        long bytesRead,
        long elapsedNanos,
        boolean complete
    ) {
        this(fragmentId, sourceId, rowsRead, bytesRead, elapsedNanos, 0, 0, -1, complete);
    }
}
