import { Schema } from '../../schemas/schema';
import { IProvider } from '../../providers/provider';
import { IContainer } from '../../di/resolvers';
import { IMetrics } from '../../metrics/metrics';
import { RequestContext } from '../../servers/requestContext';
/**
 *
 *
 * @export
 * @abstract
 * @class AbstractCommand
 * @template T
 */
export declare abstract class AbstractProviderCommand<T> {
    private providerFactory;
    protected metrics: IMetrics;
    private customTags;
    /**
     *
     *
     * @type {RequestContext}
     */
    requestContext: RequestContext;
    readonly container: IContainer;
    /**
     *
     *
     * @type {IProvider<T>}
     */
    provider: IProvider<T>;
    /**
     *
     *
     * @type {Schema}
     */
    schema: Schema;
    private static METRICS_NAME;
    /**
     * Creates an instance of AbstractCommand.
     *
     * @param {IContainer} container
     * @param {any} providerFactory
     */
    constructor(container: IContainer);
    /**
     *
     *
     * @param {string} schema
     */
    setSchemaAsync(schema: string): Promise<any>;
    protected initializeMetricsInfo(): void;
    protected setMetricsTags(address: string, schema: string, tenant?: string): void;
    onCommandCompleted(duration: number, success: boolean): void;
    /**
     * execute command
     * @protected
     * @abstract
     * @param {any} args
     * @returns {Promise<T>}
     */
    abstract runAsync(...args: any[]): Promise<T>;
}
