/// import { IBackoffStrategy } from "./backoff/backoff"; import { Host } from "./host"; import * as http from "http"; import * as https from "https"; import * as urlModule from "url"; export interface IPoolOptions { /** * Number of times we should retry running a query * before calling back with an error. */ maxRetries?: number; /** * The length of time after which HTTP requests will error * if they do not receive a response. */ requestTimeout?: number; /** * Options to configure the backoff policy for the pool. Defaults * to using exponential backoff. */ backoff?: IBackoffStrategy; } export interface IPoolRequestOptions { /** * Request method. */ method: "GET" | "POST"; /** * Path to hit on the database server, must begin with a leading slash. */ path: string; /** * Query string to be appended to the request path. */ query?: any; /** * Request body to include. */ body?: string; /** * For internal use only, a counter of the number of times we've retried * running this request. */ retries?: number; } /** * An ServiceNotAvailableError is returned as an error from requests that * result in a > 500 error code. */ export declare class ServiceNotAvailableError extends Error { constructor(message: string); } /** * An RequestError is returned as an error from requests that * result in a 300 <= error code <= 500. */ export declare class RequestError extends Error { req: http.ClientRequest; res: http.IncomingMessage; constructor(req: http.ClientRequest, res: http.IncomingMessage, body: string); static Create(req: http.ClientRequest, res: http.IncomingMessage, callback: (e: RequestError) => void): void; } export interface IPingStats { url: urlModule.Url; res: http.IncomingMessage; online: boolean; rtt: number; version: string; } /** * * The Pool maintains a list available Influx hosts and dispatches requests * to them. If there are errors connecting to hosts, it will disable that * host for a period of time. */ export declare class Pool { private readonly _options; private _index; private readonly _timeout; private readonly _hostsAvailable; private readonly _hostsDisabled; /** * Creates a new Pool instance. * @param {IPoolOptions} options */ constructor(options: IPoolOptions); /** * Returns a list of currently active hosts. * @return {Host[]} */ getHostsAvailable(): Host[]; /** * Returns a list of hosts that are currently disabled due to network * errors. * @return {Host[]} */ getHostsDisabled(): Host[]; /** * Inserts a new host to the pool. */ addHost(url: string, options?: https.RequestOptions): Host; /** * Returns true if there's any host available to by queried. * @return {Boolean} */ hostIsAvailable(): boolean; /** * Makes a request and calls back with the response, parsed as JSON. * An error is returned on a non-2xx status code or on a parsing exception. */ json(options: IPoolRequestOptions): Promise; /** * Makes a request and resolves with the plain text response, * if possible. An error is raised on a non-2xx status code. */ text(options: IPoolRequestOptions): Promise; /** * Makes a request and discards any response body it receives. * An error is returned on a non-2xx status code. */ discard(options: IPoolRequestOptions): Promise; /** * Ping sends out a request to all available Influx servers, reporting on * their response time and version number. */ ping(timeout: number, path?: string, auth?: string | undefined): Promise; /** * Makes a request and calls back with the IncomingMessage stream, * if possible. An error is returned on a non-2xx status code. */ stream(options: IPoolRequestOptions, callback: (err: Error, res: http.IncomingMessage) => void): void; /** * Returns the next available host for querying. * @return {Host} */ private _getHost; /** * Re-enables the provided host, returning it to the pool to query. * @param {Host} host */ private _enableHost; /** * Disables the provided host, removing it from the query pool. It will be * re-enabled after a backoff interval */ private _disableHost; private _handleRequestError; }