autotel-plugins 0.19.6 → 0.19.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bigquery.cjs +1 -0
- package/dist/bigquery.cjs.map +1 -1
- package/dist/bigquery.js +1 -0
- package/dist/bigquery.js.map +1 -1
- package/dist/index.cjs +1 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/bigquery.cjs
CHANGED
package/dist/bigquery.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/constants.ts","../src/bigquery/index.ts"],"names":["SpanKind","finalizeSpan","runWithSpan","trace"],"mappings":"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","file":"bigquery.cjs","sourcesContent":["/**\n * OpenTelemetry semantic conventions for database operations.\n * These constants are shared across all plugins.\n */\n\n// Common database attributes\nexport const SEMATTRS_DB_SYSTEM = 'db.system' as const;\nexport const SEMATTRS_DB_SYSTEM_NAME = 'db.system.name' as const;\nexport const SEMATTRS_DB_OPERATION = 'db.operation' as const;\nexport const SEMATTRS_DB_STATEMENT = 'db.statement' as const;\nexport const SEMATTRS_DB_NAME = 'db.name' as const;\nexport const SEMATTRS_DB_NAMESPACE = 'db.namespace' as const;\nexport const SEMATTRS_DB_COLLECTION_NAME = 'db.collection.name' as const;\nexport const SEMATTRS_DB_OPERATION_NAME = 'db.operation.name' as const;\nexport const SEMATTRS_DB_QUERY_TEXT = 'db.query.text' as const;\nexport const SEMATTRS_DB_QUERY_SUMMARY = 'db.query.summary' as const;\n\n// MongoDB-specific attributes\nexport const SEMATTRS_DB_MONGODB_COLLECTION = 'db.mongodb.collection' as const;\n\n// Network attributes\nexport const SEMATTRS_NET_PEER_NAME = 'net.peer.name' as const;\nexport const SEMATTRS_NET_PEER_PORT = 'net.peer.port' as const;\n\n// Messaging attributes (Kafka, etc.)\nexport const SEMATTRS_MESSAGING_SYSTEM = 'messaging.system' as const;\nexport const SEMATTRS_MESSAGING_DESTINATION_NAME =\n 'messaging.destination.name' as const;\nexport const SEMATTRS_MESSAGING_OPERATION = 'messaging.operation' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_CONSUMER_GROUP =\n 'messaging.kafka.consumer.group' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_PARTITION =\n 'messaging.kafka.partition' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_OFFSET =\n 'messaging.kafka.offset' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_MESSAGE_KEY =\n 'messaging.kafka.message.key' as const;\n\n// Batch lineage attributes\nexport const SEMATTRS_LINKED_TRACE_ID_COUNT = 'linked_trace_id_count' as const;\nexport const SEMATTRS_LINKED_TRACE_ID_HASH = 'linked_trace_id_hash' as const;\n\n// Correlation ID header name\nexport const CORRELATION_ID_HEADER = 'x-correlation-id' as const;\n\n// BigQuery-specific attributes (namespaced under gcp.bigquery per OTel spec)\nexport const SEMATTRS_GCP_BIGQUERY_JOB_ID = 'gcp.bigquery.job.id' as const;\nexport const SEMATTRS_GCP_BIGQUERY_JOB_LOCATION =\n 'gcp.bigquery.job.location' as const;\nexport const SEMATTRS_GCP_BIGQUERY_PROJECT_ID =\n 'gcp.bigquery.project.id' as const;\nexport const SEMATTRS_GCP_BIGQUERY_DESTINATION_TABLE =\n 'gcp.bigquery.destination.table' as const;\nexport const SEMATTRS_GCP_BIGQUERY_SOURCE_TABLES =\n 'gcp.bigquery.source.tables' as const;\nexport const SEMATTRS_GCP_BIGQUERY_STATEMENT_TYPE =\n 'gcp.bigquery.statement_type' as const;\nexport const SEMATTRS_GCP_BIGQUERY_QUERY_HASH =\n 'gcp.bigquery.query.hash' as const;\nexport const SEMATTRS_GCP_BIGQUERY_ROWS_AFFECTED =\n 'gcp.bigquery.rows.affected' as const;\nexport const SEMATTRS_GCP_BIGQUERY_ROWS_RETURNED =\n 'gcp.bigquery.rows.returned' as const;\nexport const SEMATTRS_GCP_BIGQUERY_SCHEMA_FIELDS =\n 'gcp.bigquery.schema.fields' as const;\n\n// RabbitMQ-specific attributes (aligned with OTel messaging semantic conventions)\nexport const SEMATTRS_MESSAGING_RABBITMQ_DESTINATION_ROUTING_KEY =\n 'messaging.rabbitmq.destination.routing_key' as const;\nexport const SEMATTRS_MESSAGING_RABBITMQ_DESTINATION_EXCHANGE =\n 'messaging.rabbitmq.destination.exchange' as const;\nexport const SEMATTRS_MESSAGING_RABBITMQ_ACK_RESULT =\n 'messaging.rabbitmq.ack_result' as const;\nexport const SEMATTRS_MESSAGING_RABBITMQ_REQUEUE =\n 'messaging.rabbitmq.requeue' as const;\n\n// Messaging attributes (shared across messaging systems)\nexport const SEMATTRS_MESSAGING_MESSAGE_ID = 'messaging.message.id' as const;\nexport const SEMATTRS_MESSAGING_MESSAGE_CONVERSATION_ID =\n 'messaging.message.conversation_id' as const;\nexport const SEMATTRS_MESSAGING_CONSUMER_ID = 'messaging.consumer.id' as const;\nexport const SEMATTRS_MESSAGING_OPERATION_NAME =\n 'messaging.operation.name' as const;\n\n// Kafka batch consumer attributes\nexport const SEMATTRS_MESSAGING_BATCH_MESSAGE_COUNT =\n 'messaging.batch.message_count' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_BATCH_FIRST_OFFSET =\n 'messaging.kafka.batch.first_offset' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_BATCH_LAST_OFFSET =\n 'messaging.kafka.batch.last_offset' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_BATCH_MESSAGES_PROCESSED =\n 'messaging.kafka.batch.messages_processed' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_BATCH_MESSAGES_FAILED =\n 'messaging.kafka.batch.messages_failed' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_BATCH_PROCESSING_TIME_MS =\n 'messaging.kafka.batch.processing_time_ms' as const;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n// Note: `any` is only used for dynamic method wrapping on runtime objects.\n// Type-safe interfaces are used for all public APIs.\n// BigQuery is a devDependency so we type-check against the real API; consumers use the peer.\n\nimport type { BigQuery, BigQueryOptions } from '@google-cloud/bigquery';\nimport { SpanKind, otelTrace as trace, type Span, type Tracer } from 'autotel';\nimport {\n SEMATTRS_DB_SYSTEM_NAME,\n SEMATTRS_DB_OPERATION_NAME,\n SEMATTRS_DB_QUERY_TEXT,\n SEMATTRS_DB_QUERY_SUMMARY,\n SEMATTRS_DB_NAMESPACE,\n SEMATTRS_DB_COLLECTION_NAME,\n SEMATTRS_GCP_BIGQUERY_JOB_ID,\n SEMATTRS_GCP_BIGQUERY_JOB_LOCATION,\n SEMATTRS_GCP_BIGQUERY_PROJECT_ID,\n SEMATTRS_GCP_BIGQUERY_DESTINATION_TABLE,\n SEMATTRS_GCP_BIGQUERY_QUERY_HASH,\n SEMATTRS_GCP_BIGQUERY_ROWS_AFFECTED,\n SEMATTRS_GCP_BIGQUERY_ROWS_RETURNED,\n} from '../common/constants';\nimport { runWithSpan, finalizeSpan } from 'autotel/trace-helpers';\n\nconst DEFAULT_TRACER_NAME = 'autotel-plugins/bigquery';\nconst DEFAULT_DB_SYSTEM_NAME = 'gcp.bigquery';\nconst INSTRUMENTED_FLAG = '__autotelBigQueryInstrumented' as const;\nconst PROTOTYPE_INSTRUMENTED_FLAG =\n '__autotelBigQueryPrototypeInstrumented' as const;\nconst CONFIG_STORAGE_KEY = '__autotelBigQueryConfig' as const;\nconst TRACER_STORAGE_KEY = '__autotelBigQueryTracer' as const;\n\n/**\n * Helper to get config from a BigQuery instance.\n * For Table/Dataset methods, traverses up to find the BigQuery parent.\n */\nfunction getInstanceConfig(\n instance: any,\n): BigQueryInstrumentationConfig | undefined {\n // Direct config on BigQuery instance\n if (instance?.[CONFIG_STORAGE_KEY]) {\n return instance[CONFIG_STORAGE_KEY];\n }\n // For Table: this.dataset.parent is the BigQuery instance\n if (instance?.dataset?.parent?.[CONFIG_STORAGE_KEY]) {\n return instance.dataset.parent[CONFIG_STORAGE_KEY];\n }\n // For Dataset: this.parent is the BigQuery instance\n if (instance?.parent?.[CONFIG_STORAGE_KEY]) {\n return instance.parent[CONFIG_STORAGE_KEY];\n }\n // For Job: this.parent is the BigQuery instance\n if (instance?.parent?.[CONFIG_STORAGE_KEY]) {\n return instance.parent[CONFIG_STORAGE_KEY];\n }\n return undefined;\n}\n\n/**\n * Helper to get tracer from a BigQuery instance.\n * For Table/Dataset methods, traverses up to find the BigQuery parent.\n */\nfunction getInstanceTracer(instance: any): Tracer | undefined {\n // Direct tracer on BigQuery instance\n if (instance?.[TRACER_STORAGE_KEY]) {\n return instance[TRACER_STORAGE_KEY];\n }\n // For Table: this.dataset.parent is the BigQuery instance\n if (instance?.dataset?.parent?.[TRACER_STORAGE_KEY]) {\n return instance.dataset.parent[TRACER_STORAGE_KEY];\n }\n // For Dataset: this.parent is the BigQuery instance\n if (instance?.parent?.[TRACER_STORAGE_KEY]) {\n return instance.parent[TRACER_STORAGE_KEY];\n }\n // For Job: this.parent is the BigQuery instance\n if (instance?.parent?.[TRACER_STORAGE_KEY]) {\n return instance.parent[TRACER_STORAGE_KEY];\n }\n return undefined;\n}\n\n/**\n * Plugin-only options for BigQuery instrumentation (not part of official BigQueryOptions).\n */\nexport interface BigQueryInstrumentationPluginOptions {\n /**\n * Custom tracer name (default: \"autotel-plugins/bigquery\").\n */\n tracerName?: string;\n\n /**\n * How to handle query text in spans:\n * - 'never': Don't capture any query text\n * - 'summary': Only capture low-cardinality summary (default)\n * - 'sanitized': Sanitize by replacing literals with ?\n * - 'raw': Capture raw query text (opt-in, not recommended for production)\n * @default 'summary'\n */\n captureQueryText?: 'never' | 'summary' | 'sanitized' | 'raw';\n\n /**\n * Maximum length for captured query text. Queries longer than this will be truncated.\n * @default 1000\n */\n maxQueryTextLength?: number;\n\n /**\n * Whether to include a hash of the query for exact matching without exposing text.\n * @default true\n */\n includeQueryHash?: boolean;\n\n /**\n * Whether to instrument admin operations (dataset/table create, delete, metadata).\n * @default false\n */\n instrumentAdminOps?: boolean;\n\n /**\n * Whether to instrument BigQuery ML (model) operations.\n * @default false\n */\n instrumentBqmlOps?: boolean;\n\n /**\n * Whether to instrument routine (stored procedure/function) operations.\n * @default false\n */\n instrumentRoutineOps?: boolean;\n}\n\n/**\n * Configuration options for BigQuery instrumentation.\n * Uses official BigQueryOptions for projectId and location (same semantics as the BigQuery constructor).\n * All other fields are plugin-only options.\n */\nexport type BigQueryInstrumentationConfig = Pick<\n BigQueryOptions,\n 'projectId' | 'location'\n> &\n BigQueryInstrumentationPluginOptions;\n\n/**\n * Creates a simple hash of a string for query identification without exposing text.\n */\nfunction hashQuery(query: string): string {\n let hash = 0;\n for (let i = 0; i < query.length; i++) {\n const char = query.codePointAt(i) ?? 0;\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash).toString(36);\n}\n\n/**\n * Extracts the operation type (SELECT, INSERT, etc.) from SQL query.\n */\nfunction extractOperationType(query: string): string | undefined {\n const trimmed = query.trimStart();\n const match = /^(?<op>\\w+)/iu.exec(trimmed);\n return match?.groups?.op?.toUpperCase();\n}\n\n/**\n * Creates a low-cardinality summary of a query.\n * Example: \"SELECT FROM users WHERE...\" or \"INSERT INTO orders\"\n */\nfunction createQuerySummary(query: string): string {\n const operation = extractOperationType(query);\n if (!operation) {\n return 'UNKNOWN';\n }\n\n // For SELECT/INSERT/UPDATE/DELETE, try to extract table name\n const patterns: Record<string, RegExp> = {\n SELECT: /FROM\\s+(?<table>[\\w.]+)/iu,\n INSERT: /INTO\\s+(?<table>[\\w.]+)/iu,\n UPDATE: /UPDATE\\s+(?<table>[\\w.]+)/iu,\n DELETE: /FROM\\s+(?<table>[\\w.]+)/iu,\n };\n\n const pattern = patterns[operation];\n if (pattern) {\n const match = pattern.exec(query);\n const table = match?.groups?.table;\n if (table) {\n return `${operation} ${table}`;\n }\n }\n\n return operation;\n}\n\n/**\n * Sanitizes a query by replacing literal values with ? placeholders.\n * Handles strings, numbers, and dates.\n */\nfunction sanitizeQuery(query: string): string {\n // Replace string literals: '...' or \"...\"\n let sanitized = query.replaceAll(/'(?:[^'\\\\]|\\\\.)*'/gu, \"'?'\");\n sanitized = sanitized.replaceAll(/\"(?:[^\"\\\\]|\\\\.)*\"/gu, '\"?\"');\n\n // Replace numeric literals (but preserve table names like table_123)\n // Only replace standalone numbers\n sanitized = sanitized.replaceAll(/\\b\\d+\\.?\\d*\\b/gu, '?');\n\n // Replace boolean literals\n sanitized = sanitized.replaceAll(/\\b(?:true|false)\\b/giu, '?');\n\n // Replace NULL\n sanitized = sanitized.replaceAll(/\\bNULL\\b/giu, '?');\n\n return sanitized;\n}\n\n/**\n * Truncates text to max length with ellipsis.\n */\nfunction truncateText(text: string, maxLength: number): string {\n if (text.length <= maxLength) {\n return text;\n }\n return `${text.slice(0, Math.max(0, maxLength - 3))}...`;\n}\n\n/**\n * Extracts project ID from BigQuery instance.\n */\nfunction extractProjectId(bigquery: any): string | undefined {\n try {\n return bigquery.projectId || bigquery.options?.projectId;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Extracts location from BigQuery instance or query options.\n */\nfunction extractLocation(bigquery: any, options?: any): string | undefined {\n try {\n return options?.location || bigquery.location || bigquery.options?.location;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Extracts dataset and table identifiers from various BigQuery objects.\n */\nfunction extractTableReference(obj: any): {\n datasetId?: string;\n tableId?: string;\n projectId?: string;\n} {\n try {\n // Direct properties\n if (obj.dataset?.id || obj.parent?.id) {\n return {\n projectId: obj.dataset?.parent?.projectId || obj.parent?.projectId,\n datasetId: obj.dataset?.id || obj.parent?.datasetId,\n tableId: obj.id,\n };\n }\n\n // From metadata\n if (obj.metadata?.tableReference) {\n return obj.metadata.tableReference;\n }\n\n return {};\n } catch {\n return {};\n }\n}\n\n/**\n * Creates a span for a BigQuery operation.\n */\nfunction createSpan(\n tracer: Tracer,\n operationName: string,\n target?: string,\n projectId?: string,\n config: BigQueryInstrumentationConfig = {},\n): Span {\n const spanName = target ? `${operationName} ${target}` : operationName;\n\n const attributes: Record<string, any> = {\n [SEMATTRS_DB_SYSTEM_NAME]: DEFAULT_DB_SYSTEM_NAME,\n [SEMATTRS_DB_OPERATION_NAME]: operationName,\n };\n\n if (projectId || config.projectId) {\n attributes[SEMATTRS_GCP_BIGQUERY_PROJECT_ID] =\n projectId || config.projectId;\n }\n\n if (config.location) {\n attributes[SEMATTRS_GCP_BIGQUERY_JOB_LOCATION] = config.location;\n }\n\n return tracer.startSpan(spanName, { kind: SpanKind.CLIENT, attributes });\n}\n\n/**\n * Instruments BigQuery.query() method.\n */\nfunction instrumentQueryMethod(BigQuery: any): void {\n const originalQuery = BigQuery.prototype.query;\n if (typeof originalQuery !== 'function') {\n return;\n }\n\n BigQuery.prototype.query = function instrumentedQuery(\n this: any,\n query: string | { query: string; [key: string]: any },\n options?: any,\n callback?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer) {\n // Fall back to original if no config/tracer found\n return originalQuery.call(this, query, options, callback);\n }\n\n const queryText = typeof query === 'string' ? query : query.query;\n const projectId = extractProjectId(this);\n const location = extractLocation(this, options);\n\n const operation = queryText ? extractOperationType(queryText) : 'QUERY';\n const summary = queryText ? createQuerySummary(queryText) : 'QUERY';\n\n const span = createSpan(\n tracer,\n operation || 'QUERY',\n summary,\n projectId,\n config,\n );\n\n // Set location if available\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n // Set query summary (always)\n span.setAttribute(SEMATTRS_DB_QUERY_SUMMARY, summary);\n\n // Set query text based on config\n if (config.captureQueryText !== 'never' && queryText) {\n if (config.captureQueryText === 'raw') {\n const truncated = truncateText(\n queryText,\n config.maxQueryTextLength || 1000,\n );\n span.setAttribute(SEMATTRS_DB_QUERY_TEXT, truncated);\n } else if (config.captureQueryText === 'sanitized') {\n const sanitized = sanitizeQuery(queryText);\n const truncated = truncateText(\n sanitized,\n config.maxQueryTextLength || 1000,\n );\n span.setAttribute(SEMATTRS_DB_QUERY_TEXT, truncated);\n }\n // 'summary' mode only includes summary, no raw text\n }\n\n // Set query hash if enabled\n if (config.includeQueryHash !== false && queryText) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_QUERY_HASH, hashQuery(queryText));\n }\n\n // Set destination table if specified in options\n if (options?.destination) {\n const dest = extractTableReference(options.destination);\n if (dest.tableId) {\n const destTable = dest.datasetId\n ? `${dest.datasetId}.${dest.tableId}`\n : dest.tableId;\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_DESTINATION_TABLE, destTable);\n }\n }\n\n // Handle callback-style API\n if (typeof callback === 'function') {\n const wrappedCallback = (err: any, ...args: any[]) => {\n if (err) {\n finalizeSpan(\n span,\n err instanceof Error ? err : new Error(String(err)),\n );\n } else {\n // Record row count and job ID if available in response\n const [rows, response] = args;\n if (Array.isArray(rows)) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_ROWS_RETURNED, rows.length);\n }\n if (response?.jobReference?.jobId) {\n span.setAttribute(\n SEMATTRS_GCP_BIGQUERY_JOB_ID,\n response.jobReference.jobId,\n );\n }\n finalizeSpan(span);\n }\n return callback(err, ...args);\n };\n return originalQuery.call(this, query, options, wrappedCallback);\n }\n\n // Handle Promise-style API\n return runWithSpan(span, () => {\n try {\n const result = originalQuery.call(this, query, options);\n\n return Promise.resolve(result)\n .then(([rows, response]: [any[], any]) => {\n // Record row count\n if (Array.isArray(rows)) {\n span.setAttribute(\n SEMATTRS_GCP_BIGQUERY_ROWS_RETURNED,\n rows.length,\n );\n }\n\n // Extract job ID from response if available\n if (response?.jobReference?.jobId) {\n span.setAttribute(\n SEMATTRS_GCP_BIGQUERY_JOB_ID,\n response.jobReference.jobId,\n );\n }\n\n finalizeSpan(span);\n return [rows, response];\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments BigQuery.createQueryJob() method.\n */\nfunction instrumentCreateQueryJob(BigQuery: any): void {\n const originalCreateQueryJob = BigQuery.prototype.createQueryJob;\n if (typeof originalCreateQueryJob !== 'function') {\n return;\n }\n\n BigQuery.prototype.createQueryJob = function instrumentedCreateQueryJob(\n this: any,\n options: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer) {\n return originalCreateQueryJob.call(this, options);\n }\n\n const queryText = typeof options === 'string' ? options : options.query;\n const projectId = extractProjectId(this);\n const location = extractLocation(this, options);\n\n const operation = queryText ? extractOperationType(queryText) : 'QUERY';\n const summary = queryText ? createQuerySummary(queryText) : 'QUERY';\n\n const span = createSpan(\n tracer,\n `${operation || 'QUERY'}_JOB`,\n summary,\n projectId,\n config,\n );\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n span.setAttribute(SEMATTRS_DB_QUERY_SUMMARY, summary);\n\n if (config.captureQueryText !== 'never' && queryText) {\n if (config.captureQueryText === 'raw') {\n const truncated = truncateText(\n queryText,\n config.maxQueryTextLength || 1000,\n );\n span.setAttribute(SEMATTRS_DB_QUERY_TEXT, truncated);\n } else if (config.captureQueryText === 'sanitized') {\n const sanitized = sanitizeQuery(queryText);\n const truncated = truncateText(\n sanitized,\n config.maxQueryTextLength || 1000,\n );\n span.setAttribute(SEMATTRS_DB_QUERY_TEXT, truncated);\n }\n }\n\n if (config.includeQueryHash !== false && queryText) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_QUERY_HASH, hashQuery(queryText));\n }\n\n if (options?.destination) {\n const dest = extractTableReference(options.destination);\n if (dest.tableId) {\n const destTable = dest.datasetId\n ? `${dest.datasetId}.${dest.tableId}`\n : dest.tableId;\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_DESTINATION_TABLE, destTable);\n }\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalCreateQueryJob.call(this, options);\n\n return Promise.resolve(result)\n .then(([job, response]: [any, any]) => {\n // Record job ID\n if (job?.id) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_ID, job.id);\n } else if (response?.jobReference?.jobId) {\n span.setAttribute(\n SEMATTRS_GCP_BIGQUERY_JOB_ID,\n response.jobReference.jobId,\n );\n }\n\n finalizeSpan(span);\n return [job, response];\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Table.insert() method.\n */\nfunction instrumentTableInsert(Table: any): void {\n const originalInsert = Table.prototype.insert;\n if (typeof originalInsert !== 'function') {\n return;\n }\n\n Table.prototype.insert = function instrumentedInsert(\n this: any,\n rows: any,\n options?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer) {\n return originalInsert.call(this, rows, options);\n }\n\n const tableRef = extractTableReference(this);\n const projectId = extractProjectId(this.dataset?.parent || this.parent);\n const location = extractLocation(\n this.dataset?.parent || this.parent,\n options,\n );\n\n const target = tableRef.tableId\n ? tableRef.datasetId\n ? `${tableRef.datasetId}.${tableRef.tableId}`\n : tableRef.tableId\n : undefined;\n\n const span = createSpan(tracer, 'INSERT', target, projectId, config);\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n // Record row count\n const rowCount = Array.isArray(rows) ? rows.length : 1;\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_ROWS_AFFECTED, rowCount);\n\n if (tableRef.datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, tableRef.datasetId);\n }\n if (tableRef.tableId) {\n span.setAttribute(SEMATTRS_DB_COLLECTION_NAME, tableRef.tableId);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalInsert.call(this, rows, options);\n\n return Promise.resolve(result)\n .then((response: any) => {\n // Check for insert errors\n if (response?.insertErrors?.length > 0) {\n span.setAttribute(\n 'gcp.bigquery.insert.errors',\n response.insertErrors.length,\n );\n }\n\n finalizeSpan(span);\n return response;\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Table.getRows() method.\n */\nfunction instrumentTableGetRows(Table: any): void {\n const originalGetRows = Table.prototype.getRows;\n if (typeof originalGetRows !== 'function') {\n return;\n }\n\n Table.prototype.getRows = function instrumentedGetRows(\n this: any,\n options?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer) {\n return originalGetRows.call(this, options);\n }\n\n const tableRef = extractTableReference(this);\n const projectId = extractProjectId(this.dataset?.parent || this.parent);\n const location = extractLocation(\n this.dataset?.parent || this.parent,\n options,\n );\n\n const target = tableRef.tableId\n ? tableRef.datasetId\n ? `${tableRef.datasetId}.${tableRef.tableId}`\n : tableRef.tableId\n : undefined;\n\n const span = createSpan(tracer, 'SELECT', target, projectId, config);\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n if (tableRef.datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, tableRef.datasetId);\n }\n if (tableRef.tableId) {\n span.setAttribute(SEMATTRS_DB_COLLECTION_NAME, tableRef.tableId);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalGetRows.call(this, options);\n\n return Promise.resolve(result)\n .then(([rows, nextQuery, apiResponse]: [any[], any, any]) => {\n if (Array.isArray(rows)) {\n span.setAttribute(\n SEMATTRS_GCP_BIGQUERY_ROWS_RETURNED,\n rows.length,\n );\n }\n finalizeSpan(span);\n return [rows, nextQuery, apiResponse];\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Table.createLoadJob() method.\n */\nfunction instrumentTableCreateLoadJob(Table: any): void {\n const originalCreateLoadJob = Table.prototype.createLoadJob;\n if (typeof originalCreateLoadJob !== 'function') {\n return;\n }\n\n Table.prototype.createLoadJob = function instrumentedCreateLoadJob(\n this: any,\n source: any,\n metadata?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer) {\n return originalCreateLoadJob.call(this, source, metadata);\n }\n\n const tableRef = extractTableReference(this);\n const projectId = extractProjectId(this.dataset?.parent || this.parent);\n const location = extractLocation(\n this.dataset?.parent || this.parent,\n metadata,\n );\n\n const target = tableRef.tableId\n ? tableRef.datasetId\n ? `${tableRef.datasetId}.${tableRef.tableId}`\n : tableRef.tableId\n : undefined;\n\n const span = createSpan(tracer, 'LOAD', target, projectId, config);\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n if (tableRef.datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, tableRef.datasetId);\n }\n if (tableRef.tableId) {\n span.setAttribute(SEMATTRS_DB_COLLECTION_NAME, tableRef.tableId);\n }\n\n // Record source format if available\n if (metadata?.sourceFormat) {\n span.setAttribute('gcp.bigquery.source.format', metadata.sourceFormat);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalCreateLoadJob.call(this, source, metadata);\n\n return Promise.resolve(result)\n .then(([job, response]: [any, any]) => {\n if (job?.id) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_ID, job.id);\n }\n finalizeSpan(span);\n return [job, response];\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Table.createCopyJob() method.\n */\nfunction instrumentTableCreateCopyJob(Table: any): void {\n const originalCreateCopyJob = Table.prototype.createCopyJob;\n if (typeof originalCreateCopyJob !== 'function') {\n return;\n }\n\n Table.prototype.createCopyJob = function instrumentedCreateCopyJob(\n this: any,\n destination: any,\n metadata?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer) {\n return originalCreateCopyJob.call(this, destination, metadata);\n }\n\n const sourceRef = extractTableReference(this);\n const projectId = extractProjectId(this.dataset?.parent || this.parent);\n const location = extractLocation(\n this.dataset?.parent || this.parent,\n metadata,\n );\n\n const source = sourceRef.tableId\n ? sourceRef.datasetId\n ? `${sourceRef.datasetId}.${sourceRef.tableId}`\n : sourceRef.tableId\n : 'unknown';\n\n const span = createSpan(tracer, 'COPY', source, projectId, config);\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n // Record destination\n if (destination) {\n const destRef = extractTableReference(destination);\n const destTable = destRef.tableId\n ? destRef.datasetId\n ? `${destRef.datasetId}.${destRef.tableId}`\n : destRef.tableId\n : undefined;\n if (destTable) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_DESTINATION_TABLE, destTable);\n }\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalCreateCopyJob.call(this, destination, metadata);\n\n return Promise.resolve(result)\n .then(([job, response]: [any, any]) => {\n if (job?.id) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_ID, job.id);\n }\n finalizeSpan(span);\n return [job, response];\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Table.createExtractJob() method.\n */\nfunction instrumentTableCreateExtractJob(Table: any): void {\n const originalCreateExtractJob = Table.prototype.createExtractJob;\n if (typeof originalCreateExtractJob !== 'function') {\n return;\n }\n\n Table.prototype.createExtractJob = function instrumentedCreateExtractJob(\n this: any,\n destination: any,\n metadata?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer) {\n return originalCreateExtractJob.call(this, destination, metadata);\n }\n\n const sourceRef = extractTableReference(this);\n const projectId = extractProjectId(this.dataset?.parent || this.parent);\n const location = extractLocation(\n this.dataset?.parent || this.parent,\n metadata,\n );\n\n const source = sourceRef.tableId\n ? sourceRef.datasetId\n ? `${sourceRef.datasetId}.${sourceRef.tableId}`\n : sourceRef.tableId\n : 'unknown';\n\n const span = createSpan(tracer, 'EXTRACT', source, projectId, config);\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n if (sourceRef.datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, sourceRef.datasetId);\n }\n if (sourceRef.tableId) {\n span.setAttribute(SEMATTRS_DB_COLLECTION_NAME, sourceRef.tableId);\n }\n\n // Record destination URI\n if (typeof destination === 'string') {\n span.setAttribute('gcp.bigquery.destination.uri', destination);\n } else if (Array.isArray(destination) && destination.length > 0) {\n span.setAttribute('gcp.bigquery.destination.uri', destination[0]);\n }\n\n // Record format\n const format = metadata?.destinationFormat || metadata?.format;\n if (format) {\n span.setAttribute('gcp.bigquery.destination.format', format);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalCreateExtractJob.call(\n this,\n destination,\n metadata,\n );\n\n return Promise.resolve(result)\n .then(([job, response]: [any, any]) => {\n if (job?.id) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_ID, job.id);\n }\n finalizeSpan(span);\n return [job, response];\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Job.getQueryResults() method.\n */\nfunction instrumentJobGetQueryResults(Job: any): void {\n const originalGetQueryResults = Job.prototype.getQueryResults;\n if (typeof originalGetQueryResults !== 'function') {\n return;\n }\n\n Job.prototype.getQueryResults = function instrumentedGetQueryResults(\n this: any,\n options?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer) {\n return originalGetQueryResults.call(this, options);\n }\n\n const jobId = this.id || this.metadata?.jobReference?.jobId;\n const projectId = this.parent?.projectId || this.projectId;\n const location = this.location || options?.location;\n\n const span = createSpan(\n tracer,\n 'GET_QUERY_RESULTS',\n undefined,\n projectId,\n config,\n );\n\n if (jobId) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_ID, jobId);\n }\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalGetQueryResults.call(this, options);\n\n return Promise.resolve(result)\n .then(([rows, nextQuery, apiResponse]: [any[], any, any]) => {\n if (Array.isArray(rows)) {\n span.setAttribute(\n SEMATTRS_GCP_BIGQUERY_ROWS_RETURNED,\n rows.length,\n );\n }\n finalizeSpan(span);\n return [rows, nextQuery, apiResponse];\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Dataset.create() method (admin operation).\n */\nfunction instrumentDatasetCreate(Dataset: any): void {\n const originalCreate = Dataset.prototype.create;\n if (typeof originalCreate !== 'function') {\n return;\n }\n\n Dataset.prototype.create = function instrumentedCreate(\n this: any,\n options?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer || !config.instrumentAdminOps) {\n return originalCreate.call(this, options);\n }\n\n const datasetId = this.id;\n const projectId = extractProjectId(this.parent);\n const location = extractLocation(this.parent, options);\n\n const span = createSpan(\n tracer,\n 'CREATE_DATASET',\n datasetId,\n projectId,\n config,\n );\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n if (datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, datasetId);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalCreate.call(this, options);\n\n return Promise.resolve(result)\n .then((response) => {\n finalizeSpan(span);\n return response;\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Dataset.delete() method (admin operation).\n */\nfunction instrumentDatasetDelete(Dataset: any): void {\n const originalDelete = Dataset.prototype.delete;\n if (typeof originalDelete !== 'function') {\n return;\n }\n\n Dataset.prototype.delete = function instrumentedDelete(\n this: any,\n options?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer || !config.instrumentAdminOps) {\n return originalDelete.call(this, options);\n }\n\n const datasetId = this.id;\n const projectId = extractProjectId(this.parent);\n\n const span = createSpan(\n tracer,\n 'DELETE_DATASET',\n datasetId,\n projectId,\n config,\n );\n\n if (datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, datasetId);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalDelete.call(this, options);\n\n return Promise.resolve(result)\n .then((response) => {\n finalizeSpan(span);\n return response;\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments BigQuery.createDataset() method (admin operation).\n * This is different from Dataset.prototype.create - it's called as bigquery.createDataset(id).\n */\nfunction instrumentBigQueryCreateDataset(BigQuery: any): void {\n const originalCreateDataset = BigQuery.prototype.createDataset;\n if (typeof originalCreateDataset !== 'function') {\n return;\n }\n\n BigQuery.prototype.createDataset = function instrumentedCreateDataset(\n this: any,\n id: string,\n options?: any,\n callback?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer || !config.instrumentAdminOps) {\n return originalCreateDataset.call(this, id, options, callback);\n }\n\n const datasetId = id;\n const projectId = extractProjectId(this);\n const location = extractLocation(this, options);\n\n const span = createSpan(\n tracer,\n 'CREATE_DATASET',\n datasetId,\n projectId,\n config,\n );\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n if (datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, datasetId);\n }\n\n // Handle callback-style API\n if (typeof callback === 'function') {\n const wrappedCallback = (err: any, ...args: any[]) => {\n if (err) {\n finalizeSpan(\n span,\n err instanceof Error ? err : new Error(String(err)),\n );\n } else {\n finalizeSpan(span);\n }\n return callback(err, ...args);\n };\n // Call original without runWithSpan for callbacks - the span is already active\n return originalCreateDataset.call(this, id, options, wrappedCallback);\n }\n\n // Handle Promise-style API\n return runWithSpan(span, () => {\n try {\n const result = originalCreateDataset.call(this, id, options);\n\n return Promise.resolve(result)\n .then((response) => {\n finalizeSpan(span);\n return response;\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Table.create() method (admin operation).\n */\nfunction instrumentTableCreate(Table: any): void {\n const originalCreate = Table.prototype.create;\n if (typeof originalCreate !== 'function') {\n return;\n }\n\n Table.prototype.create = function instrumentedCreate(\n this: any,\n options?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer || !config.instrumentAdminOps) {\n return originalCreate.call(this, options);\n }\n\n const tableRef = extractTableReference(this);\n const projectId = extractProjectId(this.dataset?.parent || this.parent);\n\n const target = tableRef.tableId\n ? tableRef.datasetId\n ? `${tableRef.datasetId}.${tableRef.tableId}`\n : tableRef.tableId\n : undefined;\n\n const span = createSpan(tracer, 'CREATE_TABLE', target, projectId, config);\n\n if (tableRef.datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, tableRef.datasetId);\n }\n if (tableRef.tableId) {\n span.setAttribute(SEMATTRS_DB_COLLECTION_NAME, tableRef.tableId);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalCreate.call(this, options);\n\n return Promise.resolve(result)\n .then((response) => {\n finalizeSpan(span);\n return response;\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Table.delete() method (admin operation).\n */\nfunction instrumentTableDelete(Table: any): void {\n const originalDelete = Table.prototype.delete;\n if (typeof originalDelete !== 'function') {\n return;\n }\n\n Table.prototype.delete = function instrumentedDelete(\n this: any,\n options?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer || !config.instrumentAdminOps) {\n return originalDelete.call(this, options);\n }\n\n const tableRef = extractTableReference(this);\n const projectId = extractProjectId(this.dataset?.parent || this.parent);\n\n const target = tableRef.tableId\n ? tableRef.datasetId\n ? `${tableRef.datasetId}.${tableRef.tableId}`\n : tableRef.tableId\n : undefined;\n\n const span = createSpan(tracer, 'DELETE_TABLE', target, projectId, config);\n\n if (tableRef.datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, tableRef.datasetId);\n }\n if (tableRef.tableId) {\n span.setAttribute(SEMATTRS_DB_COLLECTION_NAME, tableRef.tableId);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalDelete.call(this, options);\n\n return Promise.resolve(result)\n .then((response) => {\n finalizeSpan(span);\n return response;\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments BigQuery with OpenTelemetry tracing.\n *\n * This function patches BigQuery, Dataset, Table, and Job methods to create spans\n * for all database operations. The instrumentation is idempotent - calling it multiple\n * times will only instrument once.\n *\n * @example\n * ```typescript\n * import { BigQuery } from '@google-cloud/bigquery';\n * import { init } from 'autotel';\n * import { instrumentBigQuery } from 'autotel-plugins/bigquery';\n *\n * init({ service: 'my-app' });\n *\n * const bigquery = new BigQuery({ projectId: 'my-project' });\n * instrumentBigQuery(bigquery);\n *\n * // All operations are automatically traced\n * const [rows] = await bigquery.query('SELECT * FROM my_dataset.users');\n * ```\n *\n * @example\n * ```typescript\n * // With configuration\n * instrumentBigQuery(bigquery, {\n * captureQueryText: 'sanitized',\n * includeQueryHash: true,\n * instrumentAdminOps: true,\n * });\n * ```\n */\nexport function instrumentBigQuery(\n bigquery: BigQuery,\n config?: BigQueryInstrumentationConfig,\n): BigQuery {\n if (!bigquery) {\n return bigquery;\n }\n\n // Use any for internal storage and prototype patching; public API remains BigQuery-typed\n const bq = bigquery as any;\n\n // Check if already instrumented\n if (bq[INSTRUMENTED_FLAG]) {\n return bigquery;\n }\n\n const finalConfig: Required<BigQueryInstrumentationConfig> = {\n projectId: config?.projectId || '',\n location: config?.location || '',\n tracerName: config?.tracerName || DEFAULT_TRACER_NAME,\n captureQueryText: config?.captureQueryText || 'summary',\n maxQueryTextLength: config?.maxQueryTextLength || 1000,\n includeQueryHash: config?.includeQueryHash ?? true,\n instrumentAdminOps: config?.instrumentAdminOps ?? false,\n instrumentBqmlOps: config?.instrumentBqmlOps ?? false,\n instrumentRoutineOps: config?.instrumentRoutineOps ?? false,\n };\n\n const tracer = trace.getTracer(finalConfig.tracerName);\n\n // Store config and tracer on this instance for per-instance customization\n bq[CONFIG_STORAGE_KEY] = finalConfig;\n bq[TRACER_STORAGE_KEY] = tracer;\n\n // Get the BigQuery class constructor\n const BigQuery = bq.constructor;\n\n // Only patch prototypes once globally (prevent double-wrapping)\n if (!BigQuery[PROTOTYPE_INSTRUMENTED_FLAG]) {\n // Instrument core query methods\n instrumentQueryMethod(BigQuery);\n instrumentCreateQueryJob(BigQuery);\n instrumentBigQueryCreateDataset(BigQuery);\n\n // Instrument Dataset operations (always patch, check config at runtime)\n if (bq.dataset) {\n try {\n // Get Dataset class from a temporary instance\n const tempDataset = bq.dataset('__temp__');\n const Dataset = tempDataset.constructor;\n\n instrumentDatasetCreate(Dataset);\n instrumentDatasetDelete(Dataset);\n\n // Clean up temporary reference\n tempDataset.dataset = null;\n } catch {\n // Ignore errors in getting Dataset class\n }\n }\n\n // Instrument Table operations\n if (bq.dataset) {\n try {\n const tempDataset = bq.dataset('__temp__');\n const tempTable = tempDataset.table('__temp__');\n const Table = tempTable.constructor;\n\n // Core data operations (always instrumented)\n instrumentTableInsert(Table);\n instrumentTableGetRows(Table);\n instrumentTableCreateLoadJob(Table);\n instrumentTableCreateCopyJob(Table);\n instrumentTableCreateExtractJob(Table);\n\n // Admin operations (always patch, check config at runtime)\n instrumentTableCreate(Table);\n instrumentTableDelete(Table);\n\n // Clean up temporary references\n tempTable.table = null;\n tempDataset.dataset = null;\n } catch {\n // Ignore errors in getting Table class\n }\n }\n\n // Instrument Job operations\n if (bq.job) {\n try {\n const tempJob = bq.job('__temp__');\n const Job = tempJob.constructor;\n\n instrumentJobGetQueryResults(Job);\n\n // Clean up temporary reference\n tempJob.job = null;\n } catch {\n // Ignore errors in getting Job class\n }\n }\n\n // Mark prototypes as instrumented globally\n BigQuery[PROTOTYPE_INSTRUMENTED_FLAG] = true;\n }\n\n // Mark this instance as instrumented\n bq[INSTRUMENTED_FLAG] = true;\n\n return bigquery;\n}\n\n/**\n * Legacy export for backwards compatibility.\n * @deprecated Use `instrumentBigQuery` instead.\n */\nexport class BigQueryInstrumentation {\n constructor(private config?: BigQueryInstrumentationConfig) {}\n\n enable(bigquery: BigQuery): void {\n instrumentBigQuery(bigquery, this.config);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/common/constants.ts","../src/bigquery/index.ts"],"names":["SpanKind","finalizeSpan","runWithSpan","trace"],"mappings":"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","file":"bigquery.cjs","sourcesContent":["/**\n * OpenTelemetry semantic conventions for database operations.\n * These constants are shared across all plugins.\n */\n\n// Common database attributes\nexport const SEMATTRS_DB_SYSTEM = 'db.system' as const;\nexport const SEMATTRS_DB_SYSTEM_NAME = 'db.system.name' as const;\nexport const SEMATTRS_DB_OPERATION = 'db.operation' as const;\nexport const SEMATTRS_DB_STATEMENT = 'db.statement' as const;\nexport const SEMATTRS_DB_NAME = 'db.name' as const;\nexport const SEMATTRS_DB_NAMESPACE = 'db.namespace' as const;\nexport const SEMATTRS_DB_COLLECTION_NAME = 'db.collection.name' as const;\nexport const SEMATTRS_DB_OPERATION_NAME = 'db.operation.name' as const;\nexport const SEMATTRS_DB_QUERY_TEXT = 'db.query.text' as const;\nexport const SEMATTRS_DB_QUERY_SUMMARY = 'db.query.summary' as const;\n\n// MongoDB-specific attributes\nexport const SEMATTRS_DB_MONGODB_COLLECTION = 'db.mongodb.collection' as const;\n\n// Network attributes\nexport const SEMATTRS_NET_PEER_NAME = 'net.peer.name' as const;\nexport const SEMATTRS_NET_PEER_PORT = 'net.peer.port' as const;\n\n// Messaging attributes (Kafka, etc.)\nexport const SEMATTRS_MESSAGING_SYSTEM = 'messaging.system' as const;\nexport const SEMATTRS_MESSAGING_DESTINATION_NAME =\n 'messaging.destination.name' as const;\nexport const SEMATTRS_MESSAGING_OPERATION = 'messaging.operation' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_CONSUMER_GROUP =\n 'messaging.kafka.consumer.group' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_PARTITION =\n 'messaging.kafka.partition' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_OFFSET =\n 'messaging.kafka.offset' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_MESSAGE_KEY =\n 'messaging.kafka.message.key' as const;\n\n// Batch lineage attributes\nexport const SEMATTRS_LINKED_TRACE_ID_COUNT = 'linked_trace_id_count' as const;\nexport const SEMATTRS_LINKED_TRACE_ID_HASH = 'linked_trace_id_hash' as const;\n\n// Correlation ID header name\nexport const CORRELATION_ID_HEADER = 'x-correlation-id' as const;\n\n// BigQuery-specific attributes (namespaced under gcp.bigquery per OTel spec)\nexport const SEMATTRS_GCP_BIGQUERY_JOB_ID = 'gcp.bigquery.job.id' as const;\nexport const SEMATTRS_GCP_BIGQUERY_JOB_LOCATION =\n 'gcp.bigquery.job.location' as const;\nexport const SEMATTRS_GCP_BIGQUERY_PROJECT_ID =\n 'gcp.bigquery.project.id' as const;\nexport const SEMATTRS_GCP_BIGQUERY_DESTINATION_TABLE =\n 'gcp.bigquery.destination.table' as const;\nexport const SEMATTRS_GCP_BIGQUERY_SOURCE_TABLES =\n 'gcp.bigquery.source.tables' as const;\nexport const SEMATTRS_GCP_BIGQUERY_STATEMENT_TYPE =\n 'gcp.bigquery.statement_type' as const;\nexport const SEMATTRS_GCP_BIGQUERY_QUERY_HASH =\n 'gcp.bigquery.query.hash' as const;\nexport const SEMATTRS_GCP_BIGQUERY_ROWS_AFFECTED =\n 'gcp.bigquery.rows.affected' as const;\nexport const SEMATTRS_GCP_BIGQUERY_ROWS_RETURNED =\n 'gcp.bigquery.rows.returned' as const;\nexport const SEMATTRS_GCP_BIGQUERY_SCHEMA_FIELDS =\n 'gcp.bigquery.schema.fields' as const;\n\n// RabbitMQ-specific attributes (aligned with OTel messaging semantic conventions)\nexport const SEMATTRS_MESSAGING_RABBITMQ_DESTINATION_ROUTING_KEY =\n 'messaging.rabbitmq.destination.routing_key' as const;\nexport const SEMATTRS_MESSAGING_RABBITMQ_DESTINATION_EXCHANGE =\n 'messaging.rabbitmq.destination.exchange' as const;\nexport const SEMATTRS_MESSAGING_RABBITMQ_ACK_RESULT =\n 'messaging.rabbitmq.ack_result' as const;\nexport const SEMATTRS_MESSAGING_RABBITMQ_REQUEUE =\n 'messaging.rabbitmq.requeue' as const;\n\n// Messaging attributes (shared across messaging systems)\nexport const SEMATTRS_MESSAGING_MESSAGE_ID = 'messaging.message.id' as const;\nexport const SEMATTRS_MESSAGING_MESSAGE_CONVERSATION_ID =\n 'messaging.message.conversation_id' as const;\nexport const SEMATTRS_MESSAGING_CONSUMER_ID = 'messaging.consumer.id' as const;\nexport const SEMATTRS_MESSAGING_OPERATION_NAME =\n 'messaging.operation.name' as const;\n\n// Kafka batch consumer attributes\nexport const SEMATTRS_MESSAGING_BATCH_MESSAGE_COUNT =\n 'messaging.batch.message_count' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_BATCH_FIRST_OFFSET =\n 'messaging.kafka.batch.first_offset' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_BATCH_LAST_OFFSET =\n 'messaging.kafka.batch.last_offset' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_BATCH_MESSAGES_PROCESSED =\n 'messaging.kafka.batch.messages_processed' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_BATCH_MESSAGES_FAILED =\n 'messaging.kafka.batch.messages_failed' as const;\nexport const SEMATTRS_MESSAGING_KAFKA_BATCH_PROCESSING_TIME_MS =\n 'messaging.kafka.batch.processing_time_ms' as const;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n// Note: `any` is only used for dynamic method wrapping on runtime objects.\n// Type-safe interfaces are used for all public APIs.\n// BigQuery is a devDependency so we type-check against the real API; consumers use the peer.\n\nimport type { BigQuery, BigQueryOptions } from '@google-cloud/bigquery';\nimport { SpanKind, otelTrace as trace, type Span, type Tracer } from 'autotel';\nimport {\n SEMATTRS_DB_SYSTEM_NAME,\n SEMATTRS_DB_OPERATION_NAME,\n SEMATTRS_DB_QUERY_TEXT,\n SEMATTRS_DB_QUERY_SUMMARY,\n SEMATTRS_DB_NAMESPACE,\n SEMATTRS_DB_COLLECTION_NAME,\n SEMATTRS_GCP_BIGQUERY_JOB_ID,\n SEMATTRS_GCP_BIGQUERY_JOB_LOCATION,\n SEMATTRS_GCP_BIGQUERY_PROJECT_ID,\n SEMATTRS_GCP_BIGQUERY_DESTINATION_TABLE,\n SEMATTRS_GCP_BIGQUERY_QUERY_HASH,\n SEMATTRS_GCP_BIGQUERY_ROWS_AFFECTED,\n SEMATTRS_GCP_BIGQUERY_ROWS_RETURNED,\n} from '../common/constants';\nimport { runWithSpan, finalizeSpan } from 'autotel/trace-helpers';\n\nconst DEFAULT_TRACER_NAME = 'autotel-plugins/bigquery';\nconst DEFAULT_DB_SYSTEM_NAME = 'gcp.bigquery';\nconst INSTRUMENTED_FLAG = '__autotelBigQueryInstrumented' as const;\nconst PROTOTYPE_INSTRUMENTED_FLAG =\n '__autotelBigQueryPrototypeInstrumented' as const;\nconst CONFIG_STORAGE_KEY = '__autotelBigQueryConfig' as const;\nconst TRACER_STORAGE_KEY = '__autotelBigQueryTracer' as const;\n\n/**\n * Helper to get config from a BigQuery instance.\n * For Table/Dataset methods, traverses up to find the BigQuery parent.\n */\nfunction getInstanceConfig(\n instance: any,\n): BigQueryInstrumentationConfig | undefined {\n // Direct config on BigQuery instance\n if (instance?.[CONFIG_STORAGE_KEY]) {\n return instance[CONFIG_STORAGE_KEY];\n }\n // For Table: this.dataset.parent is the BigQuery instance\n if (instance?.dataset?.parent?.[CONFIG_STORAGE_KEY]) {\n return instance.dataset.parent[CONFIG_STORAGE_KEY];\n }\n // For Dataset: this.parent is the BigQuery instance\n if (instance?.parent?.[CONFIG_STORAGE_KEY]) {\n return instance.parent[CONFIG_STORAGE_KEY];\n }\n // For Job: this.parent is the BigQuery instance\n if (instance?.parent?.[CONFIG_STORAGE_KEY]) {\n return instance.parent[CONFIG_STORAGE_KEY];\n }\n return undefined;\n}\n\n/**\n * Helper to get tracer from a BigQuery instance.\n * For Table/Dataset methods, traverses up to find the BigQuery parent.\n */\nfunction getInstanceTracer(instance: any): Tracer | undefined {\n // Direct tracer on BigQuery instance\n if (instance?.[TRACER_STORAGE_KEY]) {\n return instance[TRACER_STORAGE_KEY];\n }\n // For Table: this.dataset.parent is the BigQuery instance\n if (instance?.dataset?.parent?.[TRACER_STORAGE_KEY]) {\n return instance.dataset.parent[TRACER_STORAGE_KEY];\n }\n // For Dataset: this.parent is the BigQuery instance\n if (instance?.parent?.[TRACER_STORAGE_KEY]) {\n return instance.parent[TRACER_STORAGE_KEY];\n }\n // For Job: this.parent is the BigQuery instance\n if (instance?.parent?.[TRACER_STORAGE_KEY]) {\n return instance.parent[TRACER_STORAGE_KEY];\n }\n return undefined;\n}\n\n/**\n * Plugin-only options for BigQuery instrumentation (not part of official BigQueryOptions).\n */\nexport interface BigQueryInstrumentationPluginOptions {\n /**\n * Custom tracer name (default: \"autotel-plugins/bigquery\").\n */\n tracerName?: string;\n\n /**\n * How to handle query text in spans:\n * - 'never': Don't capture any query text\n * - 'summary': Only capture low-cardinality summary (default)\n * - 'sanitized': Sanitize by replacing literals with ?\n * - 'raw': Capture raw query text (opt-in, not recommended for production)\n * @default 'summary'\n */\n captureQueryText?: 'never' | 'summary' | 'sanitized' | 'raw';\n\n /**\n * Maximum length for captured query text. Queries longer than this will be truncated.\n * @default 1000\n */\n maxQueryTextLength?: number;\n\n /**\n * Whether to include a hash of the query for exact matching without exposing text.\n * @default true\n */\n includeQueryHash?: boolean;\n\n /**\n * Whether to instrument admin operations (dataset/table create, delete, metadata).\n * @default false\n */\n instrumentAdminOps?: boolean;\n\n /**\n * Whether to instrument BigQuery ML (model) operations.\n * @default false\n */\n instrumentBqmlOps?: boolean;\n\n /**\n * Whether to instrument routine (stored procedure/function) operations.\n * @default false\n */\n instrumentRoutineOps?: boolean;\n}\n\n/**\n * Configuration options for BigQuery instrumentation.\n * Uses official BigQueryOptions for projectId and location (same semantics as the BigQuery constructor).\n * All other fields are plugin-only options.\n */\nexport type BigQueryInstrumentationConfig = Pick<\n BigQueryOptions,\n 'projectId' | 'location'\n> &\n BigQueryInstrumentationPluginOptions;\n\n/**\n * Creates a simple hash of a string for query identification without exposing text.\n */\nfunction hashQuery(query: string): string {\n let hash = 0;\n for (let i = 0; i < query.length; i++) {\n const char = query.codePointAt(i) ?? 0;\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash).toString(36);\n}\n\n/**\n * Extracts the operation type (SELECT, INSERT, etc.) from SQL query.\n */\nfunction extractOperationType(query: string): string | undefined {\n const trimmed = query.trimStart();\n const match = /^(?<op>\\w+)/iu.exec(trimmed);\n return match?.groups?.op?.toUpperCase();\n}\n\n/**\n * Creates a low-cardinality summary of a query.\n * Example: \"SELECT FROM users WHERE...\" or \"INSERT INTO orders\"\n */\nfunction createQuerySummary(query: string): string {\n const operation = extractOperationType(query);\n if (!operation) {\n return 'UNKNOWN';\n }\n\n // For SELECT/INSERT/UPDATE/DELETE, try to extract table name\n const patterns: Record<string, RegExp> = {\n SELECT: /FROM\\s+(?<table>[\\w.]+)/iu,\n INSERT: /INTO\\s+(?<table>[\\w.]+)/iu,\n UPDATE: /UPDATE\\s+(?<table>[\\w.]+)/iu,\n DELETE: /FROM\\s+(?<table>[\\w.]+)/iu,\n };\n\n const pattern = patterns[operation];\n if (pattern) {\n const match = pattern.exec(query);\n const table = match?.groups?.table;\n if (table) {\n return `${operation} ${table}`;\n }\n }\n\n return operation;\n}\n\n/**\n * Sanitizes a query by replacing literal values with ? placeholders.\n * Handles strings, numbers, and dates.\n */\nfunction sanitizeQuery(query: string): string {\n // Replace string literals: '...' or \"...\"\n let sanitized = query.replaceAll(/'(?:[^'\\\\]|\\\\.)*'/gu, \"'?'\");\n sanitized = sanitized.replaceAll(/\"(?:[^\"\\\\]|\\\\.)*\"/gu, '\"?\"');\n\n // Replace numeric literals (but preserve table names like table_123)\n // Only replace standalone numbers\n sanitized = sanitized.replaceAll(/\\b\\d+\\.?\\d*\\b/gu, '?');\n\n // Replace boolean literals\n sanitized = sanitized.replaceAll(/\\b(?:true|false)\\b/giu, '?');\n\n // Replace NULL\n sanitized = sanitized.replaceAll(/\\bNULL\\b/giu, '?');\n\n return sanitized;\n}\n\n/**\n * Truncates text to max length with ellipsis.\n */\nfunction truncateText(text: string, maxLength: number): string {\n if (text.length <= maxLength) {\n return text;\n }\n return `${text.slice(0, Math.max(0, maxLength - 3))}...`;\n}\n\n/**\n * Extracts project ID from BigQuery instance.\n */\nfunction extractProjectId(bigquery: any): string | undefined {\n try {\n return bigquery.projectId || bigquery.options?.projectId;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Extracts location from BigQuery instance or query options.\n */\nfunction extractLocation(bigquery: any, options?: any): string | undefined {\n try {\n return options?.location || bigquery.location || bigquery.options?.location;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Extracts dataset and table identifiers from various BigQuery objects.\n */\nfunction extractTableReference(obj: any): {\n datasetId?: string;\n tableId?: string;\n projectId?: string;\n} {\n try {\n // Direct properties\n if (obj.dataset?.id || obj.parent?.id) {\n return {\n projectId: obj.dataset?.parent?.projectId || obj.parent?.projectId,\n datasetId: obj.dataset?.id || obj.parent?.datasetId,\n tableId: obj.id,\n };\n }\n\n // From metadata\n if (obj.metadata?.tableReference) {\n return obj.metadata.tableReference;\n }\n\n return {};\n } catch {\n return {};\n }\n}\n\n/**\n * Creates a span for a BigQuery operation.\n */\nfunction createSpan(\n tracer: Tracer,\n operationName: string,\n target?: string,\n projectId?: string,\n config: BigQueryInstrumentationConfig = {},\n): Span {\n const spanName = target ? `${operationName} ${target}` : operationName;\n\n const attributes: Record<string, any> = {\n [SEMATTRS_DB_SYSTEM_NAME]: DEFAULT_DB_SYSTEM_NAME,\n [SEMATTRS_DB_OPERATION_NAME]: operationName,\n };\n\n if (projectId || config.projectId) {\n attributes[SEMATTRS_GCP_BIGQUERY_PROJECT_ID] =\n projectId || config.projectId;\n }\n\n if (config.location) {\n attributes[SEMATTRS_GCP_BIGQUERY_JOB_LOCATION] = config.location;\n }\n\n return tracer.startSpan(spanName, { kind: SpanKind.CLIENT, attributes });\n}\n\n/**\n * Instruments BigQuery.query() method.\n */\nfunction instrumentQueryMethod(BigQuery: any): void {\n const originalQuery = BigQuery.prototype.query;\n if (typeof originalQuery !== 'function') {\n return;\n }\n\n BigQuery.prototype.query = function instrumentedQuery(\n this: any,\n query: string | { query: string; [key: string]: any },\n options?: any,\n callback?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer) {\n // Fall back to original if no config/tracer found\n return originalQuery.call(this, query, options, callback);\n }\n\n const queryText = typeof query === 'string' ? query : query.query;\n const projectId = extractProjectId(this);\n const location = extractLocation(this, options);\n\n const operation = queryText ? extractOperationType(queryText) : 'QUERY';\n const summary = queryText ? createQuerySummary(queryText) : 'QUERY';\n\n const span = createSpan(\n tracer,\n operation || 'QUERY',\n summary,\n projectId,\n config,\n );\n\n // Set location if available\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n // Set query summary (always)\n span.setAttribute(SEMATTRS_DB_QUERY_SUMMARY, summary);\n\n // Set query text based on config\n if (config.captureQueryText !== 'never' && queryText) {\n if (config.captureQueryText === 'raw') {\n const truncated = truncateText(\n queryText,\n config.maxQueryTextLength || 1000,\n );\n span.setAttribute(SEMATTRS_DB_QUERY_TEXT, truncated);\n } else if (config.captureQueryText === 'sanitized') {\n const sanitized = sanitizeQuery(queryText);\n const truncated = truncateText(\n sanitized,\n config.maxQueryTextLength || 1000,\n );\n span.setAttribute(SEMATTRS_DB_QUERY_TEXT, truncated);\n }\n // 'summary' mode only includes summary, no raw text\n }\n\n // Set query hash if enabled\n if (config.includeQueryHash !== false && queryText) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_QUERY_HASH, hashQuery(queryText));\n }\n\n // Set destination table if specified in options\n if (options?.destination) {\n const dest = extractTableReference(options.destination);\n if (dest.tableId) {\n const destTable = dest.datasetId\n ? `${dest.datasetId}.${dest.tableId}`\n : dest.tableId;\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_DESTINATION_TABLE, destTable);\n }\n }\n\n // Handle callback-style API\n if (typeof callback === 'function') {\n const wrappedCallback = (err: any, ...args: any[]) => {\n if (err) {\n finalizeSpan(\n span,\n err instanceof Error ? err : new Error(String(err)),\n );\n } else {\n // Record row count and job ID if available in response\n const [rows, response] = args;\n if (Array.isArray(rows)) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_ROWS_RETURNED, rows.length);\n }\n if (response?.jobReference?.jobId) {\n span.setAttribute(\n SEMATTRS_GCP_BIGQUERY_JOB_ID,\n response.jobReference.jobId,\n );\n }\n finalizeSpan(span);\n }\n return callback(err, ...args);\n };\n return originalQuery.call(this, query, options, wrappedCallback);\n }\n\n // Handle Promise-style API\n return runWithSpan(span, () => {\n try {\n const result = originalQuery.call(this, query, options);\n\n return Promise.resolve(result)\n .then(([rows, response]: [any[], any]) => {\n // Record row count\n if (Array.isArray(rows)) {\n span.setAttribute(\n SEMATTRS_GCP_BIGQUERY_ROWS_RETURNED,\n rows.length,\n );\n }\n\n // Extract job ID from response if available\n if (response?.jobReference?.jobId) {\n span.setAttribute(\n SEMATTRS_GCP_BIGQUERY_JOB_ID,\n response.jobReference.jobId,\n );\n }\n\n finalizeSpan(span);\n return [rows, response];\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments BigQuery.createQueryJob() method.\n */\nfunction instrumentCreateQueryJob(BigQuery: any): void {\n const originalCreateQueryJob = BigQuery.prototype.createQueryJob;\n if (typeof originalCreateQueryJob !== 'function') {\n return;\n }\n\n BigQuery.prototype.createQueryJob = function instrumentedCreateQueryJob(\n this: any,\n options: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer) {\n return originalCreateQueryJob.call(this, options);\n }\n\n const queryText = typeof options === 'string' ? options : options.query;\n const projectId = extractProjectId(this);\n const location = extractLocation(this, options);\n\n const operation = queryText ? extractOperationType(queryText) : 'QUERY';\n const summary = queryText ? createQuerySummary(queryText) : 'QUERY';\n\n const span = createSpan(\n tracer,\n `${operation || 'QUERY'}_JOB`,\n summary,\n projectId,\n config,\n );\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n span.setAttribute(SEMATTRS_DB_QUERY_SUMMARY, summary);\n\n if (config.captureQueryText !== 'never' && queryText) {\n if (config.captureQueryText === 'raw') {\n const truncated = truncateText(\n queryText,\n config.maxQueryTextLength || 1000,\n );\n span.setAttribute(SEMATTRS_DB_QUERY_TEXT, truncated);\n } else if (config.captureQueryText === 'sanitized') {\n const sanitized = sanitizeQuery(queryText);\n const truncated = truncateText(\n sanitized,\n config.maxQueryTextLength || 1000,\n );\n span.setAttribute(SEMATTRS_DB_QUERY_TEXT, truncated);\n }\n }\n\n if (config.includeQueryHash !== false && queryText) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_QUERY_HASH, hashQuery(queryText));\n }\n\n if (options?.destination) {\n const dest = extractTableReference(options.destination);\n if (dest.tableId) {\n const destTable = dest.datasetId\n ? `${dest.datasetId}.${dest.tableId}`\n : dest.tableId;\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_DESTINATION_TABLE, destTable);\n }\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalCreateQueryJob.call(this, options);\n\n return Promise.resolve(result)\n .then(([job, response]: [any, any]) => {\n // Record job ID\n if (job?.id) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_ID, job.id);\n } else if (response?.jobReference?.jobId) {\n span.setAttribute(\n SEMATTRS_GCP_BIGQUERY_JOB_ID,\n response.jobReference.jobId,\n );\n }\n\n finalizeSpan(span);\n return [job, response];\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Table.insert() method.\n */\nfunction instrumentTableInsert(Table: any): void {\n const originalInsert = Table.prototype.insert;\n if (typeof originalInsert !== 'function') {\n return;\n }\n\n Table.prototype.insert = function instrumentedInsert(\n this: any,\n rows: any,\n options?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer) {\n return originalInsert.call(this, rows, options);\n }\n\n const tableRef = extractTableReference(this);\n const projectId = extractProjectId(this.dataset?.parent || this.parent);\n const location = extractLocation(\n this.dataset?.parent || this.parent,\n options,\n );\n\n const target = tableRef.tableId\n ? tableRef.datasetId\n ? `${tableRef.datasetId}.${tableRef.tableId}`\n : tableRef.tableId\n : undefined;\n\n const span = createSpan(tracer, 'INSERT', target, projectId, config);\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n // Record row count\n const rowCount = Array.isArray(rows) ? rows.length : 1;\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_ROWS_AFFECTED, rowCount);\n\n if (tableRef.datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, tableRef.datasetId);\n }\n if (tableRef.tableId) {\n span.setAttribute(SEMATTRS_DB_COLLECTION_NAME, tableRef.tableId);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalInsert.call(this, rows, options);\n\n return Promise.resolve(result)\n .then((response: any) => {\n // Check for insert errors\n if (response?.insertErrors?.length > 0) {\n span.setAttribute(\n 'gcp.bigquery.insert.errors',\n response.insertErrors.length,\n );\n }\n\n finalizeSpan(span);\n return response;\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Table.getRows() method.\n */\nfunction instrumentTableGetRows(Table: any): void {\n const originalGetRows = Table.prototype.getRows;\n if (typeof originalGetRows !== 'function') {\n return;\n }\n\n Table.prototype.getRows = function instrumentedGetRows(\n this: any,\n options?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer) {\n return originalGetRows.call(this, options);\n }\n\n const tableRef = extractTableReference(this);\n const projectId = extractProjectId(this.dataset?.parent || this.parent);\n const location = extractLocation(\n this.dataset?.parent || this.parent,\n options,\n );\n\n const target = tableRef.tableId\n ? tableRef.datasetId\n ? `${tableRef.datasetId}.${tableRef.tableId}`\n : tableRef.tableId\n : undefined;\n\n const span = createSpan(tracer, 'SELECT', target, projectId, config);\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n if (tableRef.datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, tableRef.datasetId);\n }\n if (tableRef.tableId) {\n span.setAttribute(SEMATTRS_DB_COLLECTION_NAME, tableRef.tableId);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalGetRows.call(this, options);\n\n return Promise.resolve(result)\n .then(([rows, nextQuery, apiResponse]: [any[], any, any]) => {\n if (Array.isArray(rows)) {\n span.setAttribute(\n SEMATTRS_GCP_BIGQUERY_ROWS_RETURNED,\n rows.length,\n );\n }\n finalizeSpan(span);\n return [rows, nextQuery, apiResponse];\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Table.createLoadJob() method.\n */\nfunction instrumentTableCreateLoadJob(Table: any): void {\n const originalCreateLoadJob = Table.prototype.createLoadJob;\n if (typeof originalCreateLoadJob !== 'function') {\n return;\n }\n\n Table.prototype.createLoadJob = function instrumentedCreateLoadJob(\n this: any,\n source: any,\n metadata?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer) {\n return originalCreateLoadJob.call(this, source, metadata);\n }\n\n const tableRef = extractTableReference(this);\n const projectId = extractProjectId(this.dataset?.parent || this.parent);\n const location = extractLocation(\n this.dataset?.parent || this.parent,\n metadata,\n );\n\n const target = tableRef.tableId\n ? tableRef.datasetId\n ? `${tableRef.datasetId}.${tableRef.tableId}`\n : tableRef.tableId\n : undefined;\n\n const span = createSpan(tracer, 'LOAD', target, projectId, config);\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n if (tableRef.datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, tableRef.datasetId);\n }\n if (tableRef.tableId) {\n span.setAttribute(SEMATTRS_DB_COLLECTION_NAME, tableRef.tableId);\n }\n\n // Record source format if available\n if (metadata?.sourceFormat) {\n span.setAttribute('gcp.bigquery.source.format', metadata.sourceFormat);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalCreateLoadJob.call(this, source, metadata);\n\n return Promise.resolve(result)\n .then(([job, response]: [any, any]) => {\n if (job?.id) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_ID, job.id);\n }\n finalizeSpan(span);\n return [job, response];\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Table.createCopyJob() method.\n */\nfunction instrumentTableCreateCopyJob(Table: any): void {\n const originalCreateCopyJob = Table.prototype.createCopyJob;\n if (typeof originalCreateCopyJob !== 'function') {\n return;\n }\n\n Table.prototype.createCopyJob = function instrumentedCreateCopyJob(\n this: any,\n destination: any,\n metadata?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer) {\n return originalCreateCopyJob.call(this, destination, metadata);\n }\n\n const sourceRef = extractTableReference(this);\n const projectId = extractProjectId(this.dataset?.parent || this.parent);\n const location = extractLocation(\n this.dataset?.parent || this.parent,\n metadata,\n );\n\n const source = sourceRef.tableId\n ? sourceRef.datasetId\n ? `${sourceRef.datasetId}.${sourceRef.tableId}`\n : sourceRef.tableId\n : 'unknown';\n\n const span = createSpan(tracer, 'COPY', source, projectId, config);\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n // Record destination\n if (destination) {\n const destRef = extractTableReference(destination);\n const destTable = destRef.tableId\n ? destRef.datasetId\n ? `${destRef.datasetId}.${destRef.tableId}`\n : destRef.tableId\n : undefined;\n if (destTable) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_DESTINATION_TABLE, destTable);\n }\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalCreateCopyJob.call(this, destination, metadata);\n\n return Promise.resolve(result)\n .then(([job, response]: [any, any]) => {\n if (job?.id) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_ID, job.id);\n }\n finalizeSpan(span);\n return [job, response];\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Table.createExtractJob() method.\n */\nfunction instrumentTableCreateExtractJob(Table: any): void {\n const originalCreateExtractJob = Table.prototype.createExtractJob;\n if (typeof originalCreateExtractJob !== 'function') {\n return;\n }\n\n Table.prototype.createExtractJob = function instrumentedCreateExtractJob(\n this: any,\n destination: any,\n metadata?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer) {\n return originalCreateExtractJob.call(this, destination, metadata);\n }\n\n const sourceRef = extractTableReference(this);\n const projectId = extractProjectId(this.dataset?.parent || this.parent);\n const location = extractLocation(\n this.dataset?.parent || this.parent,\n metadata,\n );\n\n const source = sourceRef.tableId\n ? sourceRef.datasetId\n ? `${sourceRef.datasetId}.${sourceRef.tableId}`\n : sourceRef.tableId\n : 'unknown';\n\n const span = createSpan(tracer, 'EXTRACT', source, projectId, config);\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n if (sourceRef.datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, sourceRef.datasetId);\n }\n if (sourceRef.tableId) {\n span.setAttribute(SEMATTRS_DB_COLLECTION_NAME, sourceRef.tableId);\n }\n\n // Record destination URI\n if (typeof destination === 'string') {\n span.setAttribute('gcp.bigquery.destination.uri', destination);\n } else if (Array.isArray(destination) && destination.length > 0) {\n span.setAttribute('gcp.bigquery.destination.uri', destination[0]);\n }\n\n // Record format\n const format = metadata?.destinationFormat || metadata?.format;\n if (format) {\n span.setAttribute('gcp.bigquery.destination.format', format);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalCreateExtractJob.call(\n this,\n destination,\n metadata,\n );\n\n return Promise.resolve(result)\n .then(([job, response]: [any, any]) => {\n if (job?.id) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_ID, job.id);\n }\n finalizeSpan(span);\n return [job, response];\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Job.getQueryResults() method.\n */\nfunction instrumentJobGetQueryResults(Job: any): void {\n const originalGetQueryResults = Job.prototype.getQueryResults;\n if (typeof originalGetQueryResults !== 'function') {\n return;\n }\n\n Job.prototype.getQueryResults = function instrumentedGetQueryResults(\n this: any,\n options?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer) {\n return originalGetQueryResults.call(this, options);\n }\n\n const jobId = this.id || this.metadata?.jobReference?.jobId;\n const projectId = this.parent?.projectId || this.projectId;\n const location = this.location || options?.location;\n\n const span = createSpan(\n tracer,\n 'GET_QUERY_RESULTS',\n undefined,\n projectId,\n config,\n );\n\n if (jobId) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_ID, jobId);\n }\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalGetQueryResults.call(this, options);\n\n return Promise.resolve(result)\n .then(([rows, nextQuery, apiResponse]: [any[], any, any]) => {\n if (Array.isArray(rows)) {\n span.setAttribute(\n SEMATTRS_GCP_BIGQUERY_ROWS_RETURNED,\n rows.length,\n );\n }\n finalizeSpan(span);\n return [rows, nextQuery, apiResponse];\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Dataset.create() method (admin operation).\n */\nfunction instrumentDatasetCreate(Dataset: any): void {\n const originalCreate = Dataset.prototype.create;\n if (typeof originalCreate !== 'function') {\n return;\n }\n\n Dataset.prototype.create = function instrumentedCreate(\n this: any,\n options?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer || !config.instrumentAdminOps) {\n return originalCreate.call(this, options);\n }\n\n const datasetId = this.id;\n const projectId = extractProjectId(this.parent);\n const location = extractLocation(this.parent, options);\n\n const span = createSpan(\n tracer,\n 'CREATE_DATASET',\n datasetId,\n projectId,\n config,\n );\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n if (datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, datasetId);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalCreate.call(this, options);\n\n return Promise.resolve(result)\n .then((response) => {\n finalizeSpan(span);\n return response;\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Dataset.delete() method (admin operation).\n */\nfunction instrumentDatasetDelete(Dataset: any): void {\n const originalDelete = Dataset.prototype.delete;\n if (typeof originalDelete !== 'function') {\n return;\n }\n\n Dataset.prototype.delete = function instrumentedDelete(\n this: any,\n options?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer || !config.instrumentAdminOps) {\n return originalDelete.call(this, options);\n }\n\n const datasetId = this.id;\n const projectId = extractProjectId(this.parent);\n\n const span = createSpan(\n tracer,\n 'DELETE_DATASET',\n datasetId,\n projectId,\n config,\n );\n\n if (datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, datasetId);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalDelete.call(this, options);\n\n return Promise.resolve(result)\n .then((response) => {\n finalizeSpan(span);\n return response;\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments BigQuery.createDataset() method (admin operation).\n * This is different from Dataset.prototype.create - it's called as bigquery.createDataset(id).\n */\nfunction instrumentBigQueryCreateDataset(BigQuery: any): void {\n const originalCreateDataset = BigQuery.prototype.createDataset;\n if (typeof originalCreateDataset !== 'function') {\n return;\n }\n\n BigQuery.prototype.createDataset = function instrumentedCreateDataset(\n this: any,\n id: string,\n options?: any,\n callback?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer || !config.instrumentAdminOps) {\n return originalCreateDataset.call(this, id, options, callback);\n }\n\n const datasetId = id;\n const projectId = extractProjectId(this);\n const location = extractLocation(this, options);\n\n const span = createSpan(\n tracer,\n 'CREATE_DATASET',\n datasetId,\n projectId,\n config,\n );\n\n if (location) {\n span.setAttribute(SEMATTRS_GCP_BIGQUERY_JOB_LOCATION, location);\n }\n\n if (datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, datasetId);\n }\n\n // Handle callback-style API\n if (typeof callback === 'function') {\n const wrappedCallback = (err: any, ...args: any[]) => {\n if (err) {\n finalizeSpan(\n span,\n err instanceof Error ? err : new Error(String(err)),\n );\n } else {\n finalizeSpan(span);\n }\n return callback(err, ...args);\n };\n // Call original without runWithSpan for callbacks - the span is already active\n return originalCreateDataset.call(this, id, options, wrappedCallback);\n }\n\n // Handle Promise-style API\n return runWithSpan(span, () => {\n try {\n const result = originalCreateDataset.call(this, id, options);\n\n return Promise.resolve(result)\n .then((response) => {\n finalizeSpan(span);\n return response;\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Table.create() method (admin operation).\n */\nfunction instrumentTableCreate(Table: any): void {\n const originalCreate = Table.prototype.create;\n if (typeof originalCreate !== 'function') {\n return;\n }\n\n Table.prototype.create = function instrumentedCreate(\n this: any,\n options?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer || !config.instrumentAdminOps) {\n return originalCreate.call(this, options);\n }\n\n const tableRef = extractTableReference(this);\n const projectId = extractProjectId(this.dataset?.parent || this.parent);\n\n const target = tableRef.tableId\n ? tableRef.datasetId\n ? `${tableRef.datasetId}.${tableRef.tableId}`\n : tableRef.tableId\n : undefined;\n\n const span = createSpan(tracer, 'CREATE_TABLE', target, projectId, config);\n\n if (tableRef.datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, tableRef.datasetId);\n }\n if (tableRef.tableId) {\n span.setAttribute(SEMATTRS_DB_COLLECTION_NAME, tableRef.tableId);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalCreate.call(this, options);\n\n return Promise.resolve(result)\n .then((response) => {\n finalizeSpan(span);\n return response;\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments Table.delete() method (admin operation).\n */\nfunction instrumentTableDelete(Table: any): void {\n const originalDelete = Table.prototype.delete;\n if (typeof originalDelete !== 'function') {\n return;\n }\n\n Table.prototype.delete = function instrumentedDelete(\n this: any,\n options?: any,\n ): any {\n const config = getInstanceConfig(this);\n const tracer = getInstanceTracer(this);\n\n if (!config || !tracer || !config.instrumentAdminOps) {\n return originalDelete.call(this, options);\n }\n\n const tableRef = extractTableReference(this);\n const projectId = extractProjectId(this.dataset?.parent || this.parent);\n\n const target = tableRef.tableId\n ? tableRef.datasetId\n ? `${tableRef.datasetId}.${tableRef.tableId}`\n : tableRef.tableId\n : undefined;\n\n const span = createSpan(tracer, 'DELETE_TABLE', target, projectId, config);\n\n if (tableRef.datasetId) {\n span.setAttribute(SEMATTRS_DB_NAMESPACE, tableRef.datasetId);\n }\n if (tableRef.tableId) {\n span.setAttribute(SEMATTRS_DB_COLLECTION_NAME, tableRef.tableId);\n }\n\n return runWithSpan(span, () => {\n try {\n const result = originalDelete.call(this, options);\n\n return Promise.resolve(result)\n .then((response) => {\n finalizeSpan(span);\n return response;\n })\n .catch((error: unknown) => {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n });\n } catch (error) {\n finalizeSpan(\n span,\n error instanceof Error ? error : new Error(String(error)),\n );\n throw error;\n }\n });\n };\n}\n\n/**\n * Instruments BigQuery with OpenTelemetry tracing.\n *\n * This function patches BigQuery, Dataset, Table, and Job methods to create spans\n * for all database operations. The instrumentation is idempotent - calling it multiple\n * times will only instrument once.\n *\n * @example\n * ```typescript\n * import { BigQuery } from '@google-cloud/bigquery';\n * import { init } from 'autotel';\n * import { instrumentBigQuery } from 'autotel-plugins/bigquery';\n *\n * init({ service: 'my-app' });\n *\n * const bigquery = new BigQuery({ projectId: 'my-project' });\n * instrumentBigQuery(bigquery);\n *\n * // All operations are automatically traced\n * const [rows] = await bigquery.query('SELECT * FROM my_dataset.users');\n * ```\n *\n * @example\n * ```typescript\n * // With configuration\n * instrumentBigQuery(bigquery, {\n * captureQueryText: 'sanitized',\n * includeQueryHash: true,\n * instrumentAdminOps: true,\n * });\n * ```\n */\nexport function instrumentBigQuery(\n bigquery: BigQuery,\n config?: BigQueryInstrumentationConfig,\n): BigQuery {\n if (!bigquery) {\n return bigquery;\n }\n\n // Use any for internal storage and prototype patching; public API remains BigQuery-typed\n const bq = bigquery as any;\n\n // Check if already instrumented\n if (bq[INSTRUMENTED_FLAG]) {\n return bigquery;\n }\n\n const finalConfig: Required<BigQueryInstrumentationConfig> = {\n projectId: config?.projectId || '',\n location: config?.location || '',\n tracerName: config?.tracerName || DEFAULT_TRACER_NAME,\n captureQueryText: config?.captureQueryText || 'summary',\n maxQueryTextLength: config?.maxQueryTextLength || 1000,\n includeQueryHash: config?.includeQueryHash ?? true,\n instrumentAdminOps: config?.instrumentAdminOps ?? false,\n instrumentBqmlOps: config?.instrumentBqmlOps ?? false,\n instrumentRoutineOps: config?.instrumentRoutineOps ?? false,\n };\n\n const tracer = trace.getTracer(finalConfig.tracerName);\n\n // Store config and tracer on this instance for per-instance customization\n bq[CONFIG_STORAGE_KEY] = finalConfig;\n bq[TRACER_STORAGE_KEY] = tracer;\n\n // Get the BigQuery class constructor\n const BigQuery = bq.constructor;\n\n // Only patch prototypes once globally (prevent double-wrapping)\n if (!BigQuery[PROTOTYPE_INSTRUMENTED_FLAG]) {\n // Instrument core query methods\n instrumentQueryMethod(BigQuery);\n instrumentCreateQueryJob(BigQuery);\n instrumentBigQueryCreateDataset(BigQuery);\n\n // Instrument Dataset operations (always patch, check config at runtime)\n if (bq.dataset) {\n try {\n // Get Dataset class from a temporary instance\n const tempDataset = bq.dataset('__temp__');\n const Dataset = tempDataset.constructor;\n\n instrumentDatasetCreate(Dataset);\n instrumentDatasetDelete(Dataset);\n\n // Clean up temporary reference\n tempDataset.dataset = null;\n } catch {\n // Ignore errors in getting Dataset class\n }\n }\n\n // Instrument Table operations\n if (bq.dataset) {\n try {\n const tempDataset = bq.dataset('__temp__');\n const tempTable = tempDataset.table('__temp__');\n const Table = tempTable.constructor;\n\n // Core data operations (always instrumented)\n instrumentTableInsert(Table);\n instrumentTableGetRows(Table);\n instrumentTableCreateLoadJob(Table);\n instrumentTableCreateCopyJob(Table);\n instrumentTableCreateExtractJob(Table);\n\n // Admin operations (always patch, check config at runtime)\n instrumentTableCreate(Table);\n instrumentTableDelete(Table);\n\n // Clean up temporary references\n tempTable.table = null;\n tempDataset.dataset = null;\n } catch {\n // Ignore errors in getting Table class\n }\n }\n\n // Instrument Job operations\n if (bq.job) {\n try {\n const tempJob = bq.job('__temp__');\n const Job = tempJob.constructor;\n\n instrumentJobGetQueryResults(Job);\n\n // Clean up temporary reference\n tempJob.job = null;\n } catch {\n // Ignore errors in getting Job class\n }\n }\n\n // Mark prototypes as instrumented globally\n BigQuery[PROTOTYPE_INSTRUMENTED_FLAG] = true;\n }\n\n // Mark this instance as instrumented\n bq[INSTRUMENTED_FLAG] = true;\n\n return bigquery;\n}\n\n/**\n * Legacy export for backwards compatibility.\n * @deprecated Use `instrumentBigQuery` instead.\n */\nexport class BigQueryInstrumentation {\n constructor(private config?: BigQueryInstrumentationConfig) {}\n\n enable(bigquery: BigQuery): void {\n instrumentBigQuery(bigquery, this.config);\n }\n}\n"]}
|