benchalerts API documentation¶
- class benchalerts.AlertPipeline(steps, error_handlers=None)¶
Bases:
objectA structure for running a sequence of configurable
AlertPipelineStepinstances.- Parameters:
steps (
List[AlertPipelineStep]) – A list ofAlertPipelineStepinstances.error_handlers (
Optional[List[AlertPipelineErrorHandler]]) – An optional list ofAlertPipelineErrorHandlerinstances to handle any errors that may arise before raising them.
- run_pipeline()¶
Run the pipeline.
- Returns:
All steps’ outputs, keyed by step name.
- Return type:
Dict[str, Any]
- class benchalerts.Alerter¶
Bases:
objectA class to generate default messages and statuses for alerting. You can override any methods for your project’s custom settings.
- static clean(text)¶
A small helper: clean block text so it displays nicely as GitHub Markdown.
- Return type:
str
- github_check_details(full_comparison)¶
Generate Markdown details of what happened regarding regressions.
- Return type:
Optional[str]
- github_check_status(full_comparison)¶
Return a different status based on errors and regressions.
- Return type:
CheckStatus
- github_check_summary(full_comparison, build_url)¶
Generate a Markdown summary of what happened regarding errors and regressions.
- Return type:
str
- github_pr_comment(full_comparison, check_link)¶
Generate a GitHub PR comment that summarizes and links to a GitHub Check.
- Return type:
str
- intro_sentence(full_comparison)¶
Generate a Markdown sentence to introduce a message.
- Return type:
str
- slack_message(full_comparison, check_details, comment_details)¶
Generate a Slack message that links to a GitHub Check.
- Return type:
str
benchalerts.pipeline_steps subpackage¶
- class benchalerts.pipeline_steps.BaselineRunCandidates(value)¶
Bases:
EnumTypes of baselines available from /api/runs/{run_id} in the candidate_baseline_runs field.
- class benchalerts.pipeline_steps.GetConbenchZComparisonForRunsStep(run_ids, baseline_run_type, z_score_threshold=None, conbench_client=None, step_name=None)¶
Bases:
AlertPipelineStepAn
AlertPipelinestep to get information from Conbench comparing run(s) to their baselines, using a z-score threshold. This is always the first step of the pipeline.- Parameters:
run_ids (
List[str]) – A list of Conbench run IDs of the runs to compare. There must be at least one, and they must all be from the same commit.baseline_run_type (
BaselineRunCandidates) – The type of baseline to use. SeeBaselineRunCandidatesfor options.z_score_threshold (
Optional[float]) – The (positive) z-score threshold to send to the Conbench compare endpoint. Benchmarks with a z-score more extreme than this threshold will be marked as regressions or improvements in the result. Default is to use whatever Conbench uses for default (at the time of writing, this is 5).conbench_client (
Optional[ConbenchClient]) – A ConbenchClient instance. If not given, one will be created using the standard environment variables.step_name (
Optional[str]) – The name for this step. If not given, will default to this class’s name.
- Returns:
Information about each run associated with the contender commit, and a comparison to its baseline run if that exists.
- Return type:
FullComparisonInfo
Notes
Environment variables¶
CONBENCH_URLThe URL of the Conbench server. Only required if
conbench_clientis not provided.CONBENCH_EMAILThe email to use for Conbench login. Only required if
conbench_clientis not provided and the server is private.CONBENCH_PASSWORDThe password to use for Conbench login. Only required if
conbench_clientis not provided and the server is private.
- run_step(previous_outputs)¶
Run this step.
- Parameters:
previous_outputs (
Dict[str,Any]) – A dict of previous steps’ outputs in the pipeline, keyed by step name.- Returns:
Anything (sent to subsequent steps via the
previous_outputsdict).- Return type:
Any
- class benchalerts.pipeline_steps.GetConbenchZComparisonStep(commit_hash, baseline_run_type, z_score_threshold=None, conbench_client=None, step_name=None)¶
Bases:
GetConbenchZComparisonForRunsStepAn
AlertPipelinestep to get information from Conbench comparing the runs on a contender commit to their baselines, using a z-score threshold. This is always the first step of the pipeline.- Parameters:
commit_hash (
str) – The commit hash of the contender commit to compare. Needs to match EXACTLY what Conbench has stored; typically 40 characters. It can’t be a shortened version of the hash.baseline_run_type (
BaselineRunCandidates) – The type of baseline to use. SeeBaselineCandidatesfor options.z_score_threshold (
Optional[float]) – The (positive) z-score threshold to send to the Conbench compare endpoint. Benchmarks with a z-score more extreme than this threshold will be marked as regressions or improvements in the result. Default is to use whatever Conbench uses for default (at the time of writing, this is 5).conbench_client (
Optional[ConbenchClient]) – A ConbenchClient instance. If not given, one will be created using the standard environment variables.step_name (
Optional[str]) – The name for this step. If not given, will default to this class’s name.
- Returns:
Information about each run associated with the contender commit, and a comparison to its baseline run if that exists.
- Return type:
FullComparisonInfo
Notes
Environment variables¶
CONBENCH_URLThe URL of the Conbench server. Only required if
conbench_clientis not provided.CONBENCH_EMAILThe email to use for Conbench login. Only required if
conbench_clientis not provided and the server is private.CONBENCH_PASSWORDThe password to use for Conbench login. Only required if
conbench_clientis not provided and the server is private.
- run_step(previous_outputs)¶
Run this step.
- Parameters:
previous_outputs (
Dict[str,Any]) – A dict of previous steps’ outputs in the pipeline, keyed by step name.- Returns:
Anything (sent to subsequent steps via the
previous_outputsdict).- Return type:
Any
- class benchalerts.pipeline_steps.GitHubCheckErrorHandler(commit_hash, repo=None, github_client=None, build_url=None)¶
Bases:
AlertPipelineErrorHandlerHandle errors in a pipeline by updating a GitHub Check status.
- Parameters:
commit_hash (
str) – The commit hash to update.repo (
Optional[str]) – The repo name to post the status to, in the form “owner/repo”. Either provide this orgithub_client.github_client (
Optional[GitHubRepoClient]) – A GitHubRepoClient instance. Either provide this orrepo.build_url (
Optional[str]) – An optional build URL to include in the GitHub Check.
Notes
Environment variables¶
GITHUB_APP_IDThe ID of a GitHub App that has been set up according to this package’s instructions and installed to your repo. Only required if
repois provided instead ofgithub_client.GITHUB_APP_PRIVATE_KEYThe private key file contents of a GitHub App that has been set up according to this package’s instructions and installed to your repo. Only required if
repois provided instead ofgithub_client.
- handle_error(exc, traceback)¶
Handle an error that may have happened during a pipeline run.
- Parameters:
exc (
BaseException) – The exception that was raised.traceback (
str) – A string of the traceback.
- Return type:
None
- class benchalerts.pipeline_steps.GitHubCheckStep(commit_hash, comparison_step_name, repo=None, github_client=None, step_name=None, external_id=None, build_url=None, alerter=None)¶
Bases:
AlertPipelineStepAn
AlertPipelinestep to update a GitHub Check on a commit on GitHub, based on information collected in a previously-runGetConbenchZComparisonSteporGetConbenchZComparisonForRunsStep.You must use GitHub App authentication to use this step.
- Parameters:
commit_hash (
str) – The commit hash to update.comparison_step_name (
str) – The name of theGetConbenchZComparisonSteporGetConbenchZComparisonForRunsStepthat ran earlier in the pipeline. If unspecified in that step, it defaults to the name of the step class, e.g."GetConbenchZComparisonStep".repo (
Optional[str]) – The repo name to post the status to, in the form “owner/repo”. Either provide this orgithub_client.github_client (
Optional[GitHubRepoClient]) – A GitHubRepoClient instance. Either provide this orrepo.step_name (
Optional[str]) – The name for this step. If not given, will default to this class’s name.external_id (
Optional[str]) – An optional reference to another system. This argument will set the “external_id” property of the posted GitHub Check, but do nothing else.build_url (
Optional[str]) – An optional build URL to include in the GitHub Check.alerter (
Optional[Alerter]) – Advanced usage; should not be necessary in most cases. An optional Alerter instance to use to format the GitHub Check’s status, title, summary, and details. If not provided, will default toAlerter().
- Returns:
dict – The response body from the GitHub HTTP API as a dict.
FullComparisonInfo – The
FullComparisonInfoobject that theGetConbenchZComparisonSteporGetConbenchZComparisonForRunsStepoutput.
Notes
Environment variables¶
GITHUB_APP_IDThe ID of a GitHub App that has been set up according to this package’s instructions and installed to your repo. Only required if
repois provided instead ofgithub_client.GITHUB_APP_PRIVATE_KEYThe private key file contents of a GitHub App that has been set up according to this package’s instructions and installed to your repo. Only required if
repois provided instead ofgithub_client.
- run_step(previous_outputs)¶
Run this step.
- Parameters:
previous_outputs (
Dict[str,Any]) – A dict of previous steps’ outputs in the pipeline, keyed by step name.- Returns:
Anything (sent to subsequent steps via the
previous_outputsdict).- Return type:
Any
- class benchalerts.pipeline_steps.GitHubPRCommentAboutCheckStep(pr_number, repo=None, github_client=None, check_step_name='GitHubCheckStep', step_name=None, alerter=None)¶
Bases:
AlertPipelineStepAn
AlertPipelinestep to make a comment on a PR about a GitHub Check that was created by a previously-runGitHubCheckStep. This is useful if you’re running benchmarks on a merge-commit, and no one is necessarily monitoring the Checks on the default branch. It should be set up to notify the PR that caused the merge-commit, so that the relevant people can take action if necessary.- Parameters:
pr_number (
int) – The number of the PR to make the comment on.repo (
Optional[str]) – The repo name to make the comment on, in the form “owner/repo”. Either provide this orgithub_client.github_client (
Optional[GitHubRepoClient]) – A GitHubRepoClient instance. Either provide this orrepo.check_step_name (
str) – The name of theGitHubCheckStepthat ran earlier in the pipeline. Defaults to “GitHubCheckStep” (which was the default if no name was given to that step).step_name (
Optional[str]) – The name for this step. If not given, will default to this class’s name.alerter (
Optional[Alerter]) – Advanced usage; should not be necessary in most cases. An optional Alerter instance to use to format the comment. If not provided, will default toAlerter().
- Returns:
The response body from the GitHub HTTP API as a dict.
- Return type:
dict
Notes
Environment variables¶
GITHUB_APP_IDThe ID of a GitHub App that has been set up according to this package’s instructions and installed to your repo. Recommended over
GITHUB_API_TOKEN. Only required ifrepois provided instead ofgithub_client.GITHUB_APP_PRIVATE_KEYThe private key file contents of a GitHub App that has been set up according to this package’s instructions and installed to your repo. Recommended over
GITHUB_API_TOKEN. Only required ifrepois provided instead ofgithub_client.GITHUB_API_TOKENA GitHub Personal Access Token with the
repo:statuspermission. Only required if not authenticating with a GitHub App, and ifrepois provided instead ofgithub_client.
- run_step(previous_outputs)¶
Run this step.
- Parameters:
previous_outputs (
Dict[str,Any]) – A dict of previous steps’ outputs in the pipeline, keyed by step name.- Returns:
Anything (sent to subsequent steps via the
previous_outputsdict).- Return type:
Any
- class benchalerts.pipeline_steps.SlackErrorHandler(channel_id, slack_client=None, build_url=None)¶
Bases:
AlertPipelineErrorHandlerHandle errors in a pipeline by posting a Slack message.
- Parameters:
channel_id (
str) – The ID of the Slack channel to post to.slack_client (
Optional[SlackClient]) – A SlackClient instance. If not provided, will default toSlackClient().build_url (
Optional[str]) – An optional build URL to include in the message.
Notes
Environment variables¶
SLACK_TOKENA Slack token; see https://api.slack.com/authentication/token-types. Tokens look like
xoxb-...if they’re bot tokens. Only required ifslack_clientis not provided.
- handle_error(exc, traceback)¶
Handle an error that may have happened during a pipeline run.
- Parameters:
exc (
BaseException) – The exception that was raised.traceback (
str) – A string of the traceback.
- Return type:
None
- class benchalerts.pipeline_steps.SlackMessageAboutBadCheckStep(channel_id, slack_client=None, check_step_name='GitHubCheckStep', pr_comment_step_name=None, step_name=None, alerter=None)¶
Bases:
AlertPipelineStepAn
AlertPipelinestep to post to Slack about a failing GitHub Check that was created by a previously-runGitHubCheckStep. This is useful if you’re running benchmarks on a merge-commit, and no one is necessarily monitoring the Checks on the default branch.- Parameters:
channel_id (
str) – The ID of the Slack channel to post to.slack_client (
Optional[SlackClient]) – A SlackClient instance. If not provided, will default toSlackClient().check_step_name (
str) – The name of theGitHubCheckStepthat ran earlier in the pipeline. Defaults to “GitHubCheckStep” (which was the default if no name was given to that step).pr_comment_step_name (
Optional[str]) – [Optional] The name of theGitHubPRCommentStepthat ran earlier in the pipeline. If provided, will include a link to the comment in the Slack message.step_name (
Optional[str]) – The name for this step. If not given, will default to this class’s name.alerter (
Optional[Alerter]) – Advanced usage; should not be necessary in most cases. An optional Alerter instance to use to format the message. If not provided, will default toAlerter().
- Returns:
The response body from the Slack HTTP API as a dict, or None if no message was posted (e.g. if the check was successful).
- Return type:
dict
Notes
Environment variables¶
SLACK_TOKENA Slack token; see https://api.slack.com/authentication/token-types. Tokens look like
xoxb-...if they’re bot tokens. Only required ifslack_clientis not provided.
- run_step(previous_outputs)¶
Run this step.
- Parameters:
previous_outputs (
Dict[str,Any]) – A dict of previous steps’ outputs in the pipeline, keyed by step name.- Returns:
Anything (sent to subsequent steps via the
previous_outputsdict).- Return type:
Any