diff --git a/common/changes/@microsoft/rush/cobuild-telemetry-skew_2024-05-30-20-57.json b/common/changes/@microsoft/rush/cobuild-telemetry-skew_2024-05-30-20-57.json new file mode 100644 index 00000000000..a01b63f97bc --- /dev/null +++ b/common/changes/@microsoft/rush/cobuild-telemetry-skew_2024-05-30-20-57.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/rush", + "comment": "Adds a new `wasExecutedOnThisMachine` property to operation telemetry events, to simplify reporting about cobuilt operations.", + "type": "none" + } + ], + "packageName": "@microsoft/rush" +} \ No newline at end of file diff --git a/common/reviews/api/rush-lib.api.md b/common/reviews/api/rush-lib.api.md index fb531f2d946..454ac3daa07 100644 --- a/common/reviews/api/rush-lib.api.md +++ b/common/reviews/api/rush-lib.api.md @@ -885,6 +885,7 @@ export interface ITelemetryOperationResult { nonCachedDurationMs?: number; result: string; startTimestampMs?: number; + wasExecutedOnThisMachine?: boolean; } // @public diff --git a/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts b/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts index c70ded04928..6eed33d9d00 100644 --- a/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts +++ b/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts @@ -804,7 +804,7 @@ export class PhasedScriptAction extends BaseScriptAction { executionManagerOptions ); - const { isInitial, isWatch } = options.executeOperationsContext; + const { isInitial, isWatch, cobuildConfiguration } = options.executeOperationsContext; let success: boolean = false; let result: IExecutionResult | undefined; @@ -902,6 +902,9 @@ export class PhasedScriptAction extends BaseScriptAction { startTimestampMs: startTime, endTimestampMs: endTime, nonCachedDurationMs: operationResult.nonCachedDurationMs, + wasExecutedOnThisMachine: + !operationResult.cobuildRunnerId || + operationResult.cobuildRunnerId === cobuildConfiguration?.cobuildRunnerId, result: operationResult.status, dependencies: Array.from(getNonSilentDependencies(operation)).sort() }; diff --git a/libraries/rush-lib/src/logic/Telemetry.ts b/libraries/rush-lib/src/logic/Telemetry.ts index 761638499a6..76b94020abe 100644 --- a/libraries/rush-lib/src/logic/Telemetry.ts +++ b/libraries/rush-lib/src/logic/Telemetry.ts @@ -71,6 +71,12 @@ export interface ITelemetryOperationResult { * Duration in milliseconds when the operation does not hit cache */ nonCachedDurationMs?: number; + + /** + * Was this operation built on this machine? If so, the duration can be calculated from `startTimestampMs` and `endTimestampMs`. + * If not, you should use the metrics from the machine that built it. + */ + wasExecutedOnThisMachine?: boolean; } /**