import Config = require("./Config");
import Context = require("./Context");
import * as Contracts from "../Declarations/Contracts";
/** State Container for sending to the QuickPulse Service */
declare class QuickPulseStateManager {
    config: Config;
    context: Context;
    private static MAX_POST_WAIT_TIME;
    private static MAX_PING_WAIT_TIME;
    private static FALLBACK_INTERVAL;
    private static PING_INTERVAL;
    private static POST_INTERVAL;
    private _isCollectingData;
    private _sender;
    private _isEnabled;
    private _lastSuccessTime;
    private _lastSendSucceeded;
    private _handle;
    private _metrics;
    private _documents;
    private _collectors;
    constructor(iKey?: string, context?: Context);
    /**
     *
     * @param collector
     */
    addCollector(collector: any): void;
    /**
     * Override of TelemetryClient.trackMetric
     */
    trackMetric(telemetry: Contracts.MetricTelemetry): void;
    /**
     * Add a document to the current buffer
     * @param envelope
     */
    addDocument(envelope: Contracts.Envelope): void;
    /**
     * Enable or disable communication with QuickPulseService
     * @param isEnabled
     */
    enable(isEnabled: boolean): void;
    /**
     * Enable or disable all collectors in this instance
     * @param enable
     */
    private enableCollectors(enable);
    /**
     * Add the metric to this buffer. If same metric already exists in this buffer, add weight to it
     * @param telemetry
     */
    private _addMetric(telemetry);
    private _resetQuickPulseBuffer();
    private _goQuickPulse();
    private _ping(envelope);
    private _post(envelope);
    /**
     * Change the current QPS send state. (shouldPOST == undefined) --> error, but do not change the state yet.
     */
    private _quickPulseDone(shouldPOST?, res?);
}
export = QuickPulseStateManager;
