import { NodeSDK } from "@opentelemetry/sdk-node";

//#region src/instrumentation.d.ts
interface InstrumentationConfig {
  serviceName: string;
  serviceVersion?: string;
  deploymentEnvironment?: string;
  otlpEndpoint?: string;
  /** Headers for authentication (e.g., Grafana Cloud, Honeycomb) */
  headers?: string;
  /** Resource attributes as comma-separated key=value pairs */
  resourceAttributes?: string;
  /** Enable async resource detection for process/host info (default: false) */
  detectResources?: boolean;
  /**
   * Use selective instrumentation instead of full auto-instrumentation
   * **Default: true** (performance-first)
   *
   * When true, auto-instrumentation is disabled. You can manually add
   * specific instrumentations via the `instrumentations` field.
   * This reduces overhead from ~81% to near-zero based on Platformatic benchmarks.
   *
   * Set to false to enable full auto-instrumentation (not recommended for production).
   *
   * @see https://blogger.platformatic.dev/the-hidden-cost-of-context
   */
  selectiveInstrumentation?: boolean;
  /**
   * Custom instrumentations to use (only when selectiveInstrumentation is true)
   * @example
   * ```typescript
   * import { HttpInstrumentation } from '@opentelemetry/instrumentation-http'
   *
   * initInstrumentation({
   *   serviceName: 'api',
   *   selectiveInstrumentation: true,
   *   instrumentations: [new HttpInstrumentation()]
   * })
   * ```
   */
  instrumentations?: any[];
}
/**
 * Shutdown the OpenTelemetry SDK gracefully
 * Call this before process exit or during hot-reloads
 */
declare function shutdownInstrumentation(sdk?: NodeSDK): Promise<void>;
declare function initInstrumentation(config: InstrumentationConfig): Promise<NodeSDK>;
//#endregion
export { InstrumentationConfig, initInstrumentation, shutdownInstrumentation };
//# sourceMappingURL=instrumentation.d.ts.map