Skip to content

[rush] Enhance performance data in telemetry payload #5269

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

dmichon-msft
Copy link
Contributor

@dmichon-msft dmichon-msft commented Jul 3, 2025

Summary

Adds enhanced performance monitoring data to the Rush telemetry payloads.

Note that the Rush telemetry subsystem by default only writes to a file (if enabled by the telemetryEnabled: true flag in rush.json) and does not get uploaded anywhere without custom plugins.

Details

Adds performance measures around various critical pieces of Rush, paying particular attention to phased commands.

Updates the telemetry subsystem to extract all performance measures since the last payload (if any) and record them as a performanceEntries array in the telemetry payload.

Note that these values are not present during the beforeLog hook and are only available in flushTelemetry.

How it was tested

rush build -o tree-pattern in rushstack repository

[
  {
    "name": "build",
    "durationInSeconds": 0.21093514500000005,
    "result": "Failed",
    "extraData": {
      "command_from": "false",
      "command_impactedBy": "false",
      "command_impactedByExcept": "false",
      "command_only": "true",
      "command_to": "false",
      "command_toExcept": "false",
      "command_fromVersionPolicy": "false",
      "command_toVersionPolicy": "false",
      "--timeline": "false",
      "--log-cobuild-plan": "false",
      "--to": "",
      "--to-except": "",
      "--from": "",
      "--only": "tree-pattern",
      "--impacted-by": "",
      "--impacted-by-except": "",
      "--to-version-policy": "",
      "--from-version-policy": "",
      "--verbose": "false",
      "--include-phase-deps": "false",
      "--changed-projects-only": false,
      "--ignore-hooks": "false",
      "--debug-build-cache-ids": "false",
      "--no-color": "false",
      "--production": "false",
      "--fix": "false",
      "isWatch": false,
      "isInitial": true,
      "countAll": 1,
      "countSuccess": 0,
      "countSuccessWithWarnings": 0,
      "countFailure": 1,
      "countBlocked": 0,
      "countFromCache": 0,
      "countSkipped": 0,
      "countNoOp": 0
    },
    "operationResults": {
      "@rushstack/tree-pattern (build)": {
        "startTimestampMs": 1004.183634,
        "endTimestampMs": 1018.802925,
        "nonCachedDurationMs": 4720.420041,
        "wasExecutedOnThisMachine": true,
        "result": "FAILURE",
        "dependencies": []
      }
    },
    "performanceEntries": [
      {
        "name": "rush:initializeUnassociatedPlugins",
        "entryType": "measure",
        "startTime": 648.06951,
        "duration": 143.649452,
        "detail": null
      },
      {
        "name": "rush:action:initializePluginsAsync",
        "entryType": "measure",
        "startTime": 798.356563,
        "duration": 0.07410799999991013,
        "detail": null
      },
      {
        "name": "rush:action:initializePlugins",
        "entryType": "measure",
        "startTime": 798.445248,
        "duration": 0.8410710000000563,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:checkInstallFlag",
        "entryType": "measure",
        "startTime": 810.56529,
        "duration": 16.51464199999998,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:doBeforeTask",
        "entryType": "measure",
        "startTime": 827.12677,
        "duration": 0.44064300000002277,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:applyStandardPlugins",
        "entryType": "measure",
        "startTime": 827.708677,
        "duration": 0.38100100000008297,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:configureBuildCache",
        "entryType": "measure",
        "startTime": 828.119253,
        "duration": 23.40427299999999,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:getSelectedProjects",
        "entryType": "measure",
        "startTime": 851.551488,
        "duration": 0.7206470000000991,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:applySituationalPlugins",
        "entryType": "measure",
        "startTime": 852.287904,
        "duration": 1.0280309999999417,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:loadProjectConfigurations",
        "entryType": "measure",
        "startTime": 862.261596,
        "duration": 16.415706999999998,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:createOperations",
        "entryType": "measure",
        "startTime": 878.852461,
        "duration": 1.196866,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:analyzeRepoState",
        "entryType": "measure",
        "startTime": 880.058784,
        "duration": 118.88852800000006,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:executeOperationsInner",
        "entryType": "measure",
        "startTime": 1001.113829,
        "duration": 19.61600599999997,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:beforeExecuteOperations",
        "entryType": "measure",
        "startTime": 1001.464535,
        "duration": 1.1921470000000909,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:afterExecuteOperations",
        "entryType": "measure",
        "startTime": 1020.744743,
        "duration": 0.7373069999999871,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:doAfterTask",
        "entryType": "measure",
        "startTime": 1021.520773,
        "duration": 0.05005300000004809,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:prepareTelemetry",
        "entryType": "measure",
        "startTime": 1021.576747,
        "duration": 0.4743470000000798,
        "detail": null
      },
      {
        "name": "rush:phasedScriptAction:beforeLog",
        "entryType": "measure",
        "startTime": 1022.057706,
        "duration": 0.07577099999991788,
        "detail": null
      }
    ],
    "machineInfo": {
      "machineArchitecture": "x64",
      "machineCpu": "AMD EPYC 7763 64-Core Processor",
      "machineCores": 16,
      "machineTotalMemoryMiB": 64298,
      "machineFreeMemoryMiB": 59146
    },
    "timestampMs": 1751581013669,
    "platform": "linux",
    "rushVersion": "5.155.1"
  }
]

Impacted documentation

Documentation about the telemetry payload.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Needs triage
Development

Successfully merging this pull request may close these issues.

3 participants