applicationinsights
Version:
Microsoft Application Insights module for Node.js
102 lines (101 loc) • 4.05 kB
TypeScript
/// <reference types="node" />
import events = require("events");
import * as azureFunctionsTypes from "../Library/Functions";
import * as http from "http";
import Traceparent = require("../Library/Traceparent");
import Tracestate = require("../Library/Tracestate");
import { ISpanContext } from "diagnostic-channel";
export interface CustomProperties {
/**
* Get a custom property from the correlation context
*/
getProperty(key: string): string;
/**
* Store a custom property in the correlation context.
* Do not store sensitive information here.
* Properties stored here are exposed via outgoing HTTP headers for correlating data cross-component.
* The characters ',' and '=' are disallowed within keys or values.
*/
setProperty(key: string, value: string): void;
}
export interface PrivateCustomProperties extends CustomProperties {
addHeaderData(header: string): void;
serializeToHeader(): string;
}
export interface CorrelationContext {
operation: {
name: string;
id: string;
parentId: string;
traceparent?: Traceparent;
tracestate?: Tracestate;
};
/** Do not store sensitive information here.
* Properties here are exposed via outgoing HTTP headers for correlating data cross-component.
*/
customProperties: CustomProperties;
}
export declare class CorrelationContextManager {
private static enabled;
private static hasEverEnabled;
private static forceClsHooked;
private static session;
private static cls;
private static CONTEXT_NAME;
/**
* Provides the current Context.
* The context is the most recent one entered into for the current
* logical chain of execution, including across asynchronous calls.
*/
static getCurrentContext(): CorrelationContext | null;
/**
* A helper to generate objects conforming to the CorrelationContext interface
*/
static generateContextObject(operationId: string, parentId?: string, operationName?: string, correlationContextHeader?: string, traceparent?: Traceparent, tracestate?: Tracestate): CorrelationContext;
static spanToContextObject(spanContext: ISpanContext, parentId?: string, name?: string): CorrelationContext;
/**
* Runs a function inside a given Context.
* All logical children of the execution path that entered this Context
* will receive this Context object on calls to GetCurrentContext.
*/
static runWithContext(context: CorrelationContext, fn: () => any): any;
/**
* Wrapper for cls-hooked bindEmitter method
*/
static wrapEmitter(emitter: events.EventEmitter): void;
/**
* Patches a callback to restore the correct Context when getCurrentContext
* is run within it. This is necessary if automatic correlation fails to work
* with user-included libraries.
*
* The supplied callback will be given the same context that was present for
* the call to wrapCallback. */
static wrapCallback<T extends Function>(fn: T, context?: CorrelationContext): T;
/**
* Enables the CorrelationContextManager.
*/
static enable(forceClsHooked?: boolean): void;
static startOperation(context: azureFunctionsTypes.Context | (http.IncomingMessage | azureFunctionsTypes.HttpRequest), request?: azureFunctionsTypes.HttpRequest): CorrelationContext | null;
/**
* Disables the CorrelationContextManager.
*/
static disable(): void;
/**
* Reset the namespace
*/
static reset(): void;
/**
* Reports if CorrelationContextManager is able to run in this environment
*/
static isNodeVersionCompatible(): boolean;
/**
* We only want to use cls-hooked when it uses async_hooks api (8.2+), else
* use async-listener (plain -cls)
*/
static shouldUseClsHooked(): boolean;
/**
* A TypeError is triggered by cls-hooked for node [8.0, 8.2)
* @internal Used in tests only
*/
static canUseClsHooked(): boolean;
}