Skip to content

Commit 94902b9

Browse files
committed
reduce duplication across stage implementations
1 parent 3304e99 commit 94902b9

File tree

5 files changed

+28
-29
lines changed

5 files changed

+28
-29
lines changed

packages/core/src/amazonq/lsp/lspClient.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import {
3333
import { Writable } from 'stream'
3434
import { CodeWhispererSettings } from '../../codewhisperer/util/codewhispererSettings'
3535
import { ResourcePaths, fs, getLogger, globals } from '../../shared'
36-
import { telemetry } from '../../shared/telemetry'
36+
import { lspSetupStage } from './util'
3737

3838
const localize = nls.loadMessageBundle()
3939

@@ -174,9 +174,7 @@ export class LspClient {
174174
* This function assumes the LSP server has already been downloaded.
175175
*/
176176
export async function activate(extensionContext: ExtensionContext, resourcePaths: ResourcePaths) {
177-
return await telemetry.languageServer_setup.run(async (span) => {
178-
span.record({ languageServerSetupStage: 'launch' })
179-
const startTime = performance.now()
177+
return await lspSetupStage('launch', async () => {
180178
LspClient.instance
181179
const toDispose = extensionContext.subscriptions
182180

@@ -275,7 +273,6 @@ export async function activate(extensionContext: ExtensionContext, resourcePaths
275273
const disposableFunc = { dispose: () => rangeFormatting?.dispose() as void }
276274
toDispose.push(disposableFunc)
277275
})
278-
span.record({ duration: performance.now() - startTime })
279276
})
280277
}
281278

packages/core/src/amazonq/lsp/lspController.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { isCloud9 } from '../../shared/extensionUtilities'
1515
import globals, { isWeb } from '../../shared/extensionGlobals'
1616
import { isAmazonInternalOs } from '../../shared/vscode/env'
1717
import { WorkspaceLSPResolver } from './workspaceInstaller'
18+
import { lspSetupStage } from './util'
1819

1920
export interface Chunk {
2021
readonly filePath: string
@@ -160,13 +161,10 @@ export class LspController {
160161
}
161162
setImmediate(async () => {
162163
try {
163-
await telemetry.languageServer_setup.run(async (span) => {
164-
const startTime = performance.now()
165-
span.record({ languageServerSetupStage: 'final' })
164+
await lspSetupStage('final', async () => {
166165
const installResult = await new WorkspaceLSPResolver().resolve()
167166
await activateLsp(context, installResult.resourcePaths)
168167
getLogger().info('LspController: LSP activated')
169-
span.record({ duration: performance.now() - startTime })
170168
})
171169
void LspController.instance.buildIndex(buildIndexConfig)
172170
// log the LSP server CPU and Memory usage per 30 minutes.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/*!
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
import { LanguageServerSetupStage, telemetry } from '../../shared/telemetry'
7+
8+
export async function lspSetupStage<T>(stageName: LanguageServerSetupStage, stage: () => Promise<T>) {
9+
return telemetry.languageServer_setup.run(async (span) => {
10+
const startTime = performance.now()
11+
const result = await stage()
12+
span.record({ languageServerSetupStage: stageName })
13+
span.record({ duration: performance.now() - startTime })
14+
return result
15+
})
16+
}

packages/core/src/amazonq/lsp/workspaceInstaller.ts

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { Range } from 'semver'
1111
import { getNodeExecutableName } from '../../shared/lsp/utils/platform'
1212
import { fs } from '../../shared/fs/fs'
1313
import { telemetry } from '../../shared/telemetry'
14+
import { lspSetupStage } from './util'
1415

1516
const manifestUrl = 'https://aws-toolkit-language-servers.amazonaws.com/q-context/manifest.json'
1617
// this LSP client in Q extension is only going to work with these LSP server versions
@@ -19,32 +20,25 @@ const supportedLspServerVersions = '0.1.32'
1920
export class WorkspaceLSPResolver implements LspResolver {
2021
async resolve(): Promise<LspResolution> {
2122
const name = 'AmazonQ-Workspace'
22-
const manifest = await telemetry.languageServer_setup.run(async (span) => {
23-
const startTime = performance.now()
24-
span.record({ languageServerSetupStage: 'getManifest' })
23+
const manifest = await lspSetupStage('getManifest', async () => {
2524
const result = await new ManifestResolver(manifestUrl, name).resolve()
26-
span.record({
27-
languageServerResourceLocation: result.location ?? 'unknown',
25+
telemetry.record({
2826
manifestVersion: result.manifestSchemaVersion,
29-
duration: performance.now() - startTime,
27+
languageServerResourceLocation: result.location ?? 'unknown',
3028
})
3129
return result
3230
})
3331
telemetry.record({
3432
manifestVersion: manifest.manifestSchemaVersion,
3533
})
36-
37-
const installationResult = await telemetry.languageServer_setup.run(async (span) => {
38-
const startTime = performance.now()
39-
span.record({ languageServerSetupStage: 'getServer' })
34+
const installationResult = await lspSetupStage('getServer', async () => {
4035
const result = await new LanguageServerResolver(
4136
manifest,
4237
name,
4338
new Range(supportedLspServerVersions)
4439
).resolve()
45-
span.record({
40+
telemetry.record({
4641
languageServerResourceLocation: result.location ?? 'unknown',
47-
duration: performance.now() - startTime,
4842
})
4943
return result
5044
})

packages/core/src/shared/lsp/lspResolver.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { TargetContent, logger, LspResult, LspVersion, Manifest } from './types'
1313
import { getApplicationSupportFolder } from '../vscode/env'
1414
import { createHash } from '../crypto'
1515
import request from '../request'
16-
import { telemetry } from '../telemetry'
16+
import { lspSetupStage } from '../../amazonq/lsp/util'
1717

1818
export class LanguageServerResolver {
1919
constructor(
@@ -187,13 +187,7 @@ export class LanguageServerResolver {
187187
}
188188
return []
189189
})
190-
const filesToDownload = await telemetry.languageServer_setup.run(async (span) => {
191-
span.record({ languageServerSetupStage: 'validate' })
192-
const startTime = performance.now()
193-
const result = (await Promise.all(verifyTasks)).flat()
194-
span.record({ duration: performance.now() - startTime })
195-
return result
196-
})
190+
const filesToDownload = await lspSetupStage('validate', async () => (await Promise.all(verifyTasks)).flat())
197191

198192
if (filesToDownload.length !== contents.length) {
199193
return false

0 commit comments

Comments
 (0)