Skip to content

Commit 73d9466

Browse files
committed
feat: Add global flag for tracking runtime performance in a metric
1 parent c6d3a1d commit 73d9466

File tree

6 files changed

+35
-8
lines changed

6 files changed

+35
-8
lines changed

telemetry/telemetrySchema.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@
6565
"passive": {
6666
"type": "boolean",
6767
"description": "Set as true if the metric is emitted without any explicit user action."
68+
},
69+
"performanceTracking": {
70+
"type": "boolean",
71+
"description": "Set as true if the metric should track run-time performance information."
6872
}
6973
},
7074
"required": ["name", "description"]

telemetry/telemetryformat.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ result: Result
8989
passive: boolean
9090
// Value based on unit and call type
9191
value: number
92+
// Indicates that the metric should track run-time performance information
93+
trackPerformance: boolean
9294
```
9395

9496
If not specified `createTime` defaults to UTC now, `value` defaults to `1.0`.

telemetry/vscode/src/generate.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,15 @@ const passive: PropertySignatureStructure = {
153153
kind: StructureKind.PropertySignature,
154154
}
155155

156+
const trackPerformance: PropertySignatureStructure = {
157+
isReadonly: true,
158+
hasQuestionToken: true,
159+
name: 'trackPerformance',
160+
type: 'boolean',
161+
docs: ['A flag indicating that the metric should track run-time performance information'],
162+
kind: StructureKind.PropertySignature,
163+
}
164+
156165
const value: PropertySignatureStructure = {
157166
isReadonly: true,
158167
hasQuestionToken: true,
@@ -177,6 +186,11 @@ const runtimeMetricDefinition: InterfaceDeclarationStructure = {
177186
type: 'boolean',
178187
isReadonly: true,
179188
},
189+
{
190+
name: 'trackPerformance',
191+
type: 'boolean',
192+
isReadonly: true,
193+
},
180194
{
181195
name: 'requiredMetadata',
182196
type: 'readonly string[]',
@@ -214,7 +228,7 @@ function generateMetricBase(types: MetadataType[] | undefined): InterfaceDeclara
214228
name: baseName,
215229
isExported: true,
216230
kind: StructureKind.Interface,
217-
properties: commonMetadata.map(toProp).concat(passive, value),
231+
properties: commonMetadata.map(toProp).concat(passive, value, trackPerformance),
218232
}
219233
}
220234

@@ -325,7 +339,7 @@ function generateDefinitions(metrics: Metric[]): VariableStatementStructure {
325339
const metadataTypes = getMetricMetadata(m).filter(m => m.required ?? true).map(m => `'${m.type}'`)
326340
const requiredMetadata = `[${metadataTypes.join(', ')}]`
327341

328-
return `${m.name}: { unit: '${m.unit ?? 'None'}', passive: ${m.passive ?? false}, requiredMetadata: ${requiredMetadata} }`
342+
return `${m.name}: { unit: '${m.unit ?? 'None'}', passive: ${m.passive ?? false}, trackPerformance: ${m.trackPerformance ?? false}, requiredMetadata: ${requiredMetadata} }`
329343
})
330344

331345
return {

telemetry/vscode/src/parser.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export interface Metric {
3434
readonly unit?: string
3535
readonly metadata?: MetricMetadata[]
3636
readonly passive?: boolean
37+
readonly trackPerformance?: boolean
3738
}
3839

3940
export interface MetricDefinitionRoot {

telemetry/vscode/test/resources/generatorOutput.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ export interface MetricBase {
3434
readonly passive?: boolean
3535
/** @deprecated Arbitrary "value" of the metric. */
3636
readonly value?: number
37+
/** A flag indicating that the metric should track run-time performance information */
38+
readonly trackPerformance?: boolean
3739
}
3840

3941
export interface LambdaDelete extends MetricBase {
@@ -93,6 +95,7 @@ export type Runtime =
9395
export interface MetricDefinition {
9496
readonly unit: string
9597
readonly passive: boolean
98+
readonly trackPerformance: boolean
9699
readonly requiredMetadata: readonly string[]
97100
}
98101

@@ -107,11 +110,11 @@ export interface MetricShapes {
107110
export type MetricName = keyof MetricShapes
108111

109112
export const definitions: Record<string, MetricDefinition> = {
110-
lambda_delete: { unit: 'None', passive: false, requiredMetadata: ['isRetry'] },
111-
lambda_create: { unit: 'None', passive: false, requiredMetadata: ['runtime', 'userId'] },
112-
lambda_remoteinvoke: { unit: 'None', passive: false, requiredMetadata: ['successCount'] },
113-
no_metadata: { unit: 'None', passive: false, requiredMetadata: [] },
114-
passive_passive: { unit: 'None', passive: true, requiredMetadata: [] },
113+
lambda_delete: { unit: 'None', passive: false, trackPerformance: false, requiredMetadata: ['isRetry'] },
114+
lambda_create: { unit: 'None', passive: false, trackPerformance: false, requiredMetadata: ['runtime', 'userId'] },
115+
lambda_remoteinvoke: { unit: 'None', passive: false, trackPerformance: false, requiredMetadata: ['successCount'] },
116+
no_metadata: { unit: 'None', passive: false, trackPerformance: false, requiredMetadata: [] },
117+
passive_passive: { unit: 'None', passive: true, trackPerformance: false, requiredMetadata: [] },
115118
}
116119

117120
export type Metadata<T extends MetricBase> = Partial<Omit<T, keyof MetricBase> | Partial<Pick<MetricBase, 'awsRegion'>>>

telemetry/vscode/test/resources/generatorOverrideOutput.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ export interface MetricBase {
3434
readonly passive?: boolean
3535
/** @deprecated Arbitrary "value" of the metric. */
3636
readonly value?: number
37+
/** A flag indicating that the metric should track run-time performance information */
38+
readonly trackPerformance?: boolean
3739
}
3840

3941
export interface MetadataHasResult extends MetricBase {}
@@ -72,6 +74,7 @@ export type Runtime =
7274
export interface MetricDefinition {
7375
readonly unit: string
7476
readonly passive: boolean
77+
readonly trackPerformance: boolean
7578
readonly requiredMetadata: readonly string[]
7679
}
7780

@@ -82,7 +85,7 @@ export interface MetricShapes {
8285
export type MetricName = keyof MetricShapes
8386

8487
export const definitions: Record<string, MetricDefinition> = {
85-
metadata_hasResult: { unit: 'None', passive: false, requiredMetadata: [] },
88+
metadata_hasResult: { unit: 'None', passive: false, trackPerformance: false, requiredMetadata: [] },
8689
}
8790

8891
export type Metadata<T extends MetricBase> = Partial<Omit<T, keyof MetricBase> | Partial<Pick<MetricBase, 'awsRegion'>>>

0 commit comments

Comments
 (0)