(kernel: KernelConnectionMetadata)
| 934 | |
| 935 | const capturedTelemetry = new Set<string>(); |
| 936 | function sendKernelTelemetry(kernel: KernelConnectionMetadata) { |
| 937 | if (capturedTelemetry.has(kernel.id)) { |
| 938 | return; |
| 939 | } |
| 940 | capturedTelemetry.add(kernel.id); |
| 941 | const kernelSpec = 'kernelSpec' in kernel ? kernel.kernelSpec : undefined; |
| 942 | const language = |
| 943 | kernelSpec?.language || (kernel.kind === 'startUsingPythonInterpreter' ? PYTHON_LANGUAGE : undefined); |
| 944 | let argv0 = ''; |
| 945 | let argv = ''; |
| 946 | const interpreter = 'interpreter' in kernel ? kernel.interpreter : undefined; |
| 947 | const separator = `<#>`; |
| 948 | let isArgv0SameAsInterpreter: undefined | boolean = undefined; |
| 949 | if (kernelSpec && Array.isArray(kernelSpec.argv) && kernelSpec.argv.length > 0) { |
| 950 | argv0 = kernelSpec.argv[0]; |
| 951 | // eslint-disable-next-line local-rules/dont-use-fspath |
| 952 | isArgv0SameAsInterpreter = argv0.toLowerCase() === interpreter?.uri?.fsPath?.toLowerCase(); |
| 953 | if (path.basename(argv0) !== argv0) { |
| 954 | argv0 = `<P>${path.basename(argv0)}`; |
| 955 | } |
| 956 | argv = kernelSpec.argv |
| 957 | .map((arg) => { |
| 958 | if (arg.includes('/') || arg.includes('\\')) { |
| 959 | return `<P>${path.basename(arg)}`; |
| 960 | } |
| 961 | return arg; |
| 962 | }) |
| 963 | .join(separator); |
| 964 | } |
| 965 | |
| 966 | const kernelSpecHashPromise = |
| 967 | 'kernelSpec' in kernel && kernel.kernelSpec.specFile |
| 968 | ? getTelemetrySafeHashedString(kernel.kernelSpec.specFile) |
| 969 | : Promise.resolve(''); |
| 970 | const kernelIdHash = getTelemetrySafeHashedString(kernel.id); |
| 971 | const serverIdHashPromise = isRemoteConnection(kernel) |
| 972 | ? getTelemetrySafeHashedString(generateIdFromRemoteProvider(kernel.serverProviderHandle)) |
| 973 | : Promise.resolve(''); |
| 974 | const providerExtensionId = isRemoteConnection(kernel) |
| 975 | ? kernel.serverProviderHandle.extensionId |
| 976 | : JVSC_EXTENSION_ID; |
| 977 | const baseUrlHashPromise = isRemoteConnection(kernel) |
| 978 | ? getTelemetrySafeHashedString(kernel.baseUrl.toLowerCase()) |
| 979 | : Promise.resolve(''); |
| 980 | Promise.all([kernelSpecHashPromise, kernelIdHash, serverIdHashPromise, baseUrlHashPromise]) |
| 981 | .then(([kernelSpecHash, kernelId, serverIdHash, baseUrlHash]) => |
| 982 | sendTelemetryEvent(Telemetry.KernelSpec, undefined, { |
| 983 | kernelId, |
| 984 | serverIdHash, |
| 985 | kernelSpecHash, |
| 986 | baseUrlHash, |
| 987 | providerExtensionId, |
| 988 | kernelConnectionType: kernel.kind, |
| 989 | kernelLanguage: language, |
| 990 | envType: interpreter && getEnvironmentType(interpreter), |
| 991 | isArgv0SameAsInterpreter, |
| 992 | argv0, |
| 993 | argv |
no test coverage detected