github.com/GoogleCloudPlatform/testgrid@v0.0.174/pb/config/config.proto (about)

     1  syntax = "proto3";
     2  
     3  package testgrid.config;
     4  
     5  option go_package = "github.com/GoogleCloudPlatform/testgrid/pb/config";
     6  
     7  // Protocol buffer for configuring testgrid.k8s.io
     8  
     9  import "pb/custom_evaluator/custom_evaluator.proto";
    10  
    11  // Specifies the test name, and its source
    12  message TestNameConfig {
    13    // Specifies name elements to be selected from configuration values
    14    message NameElement {
    15      // A space-delimited string of labels
    16      string labels = 1;
    17  
    18      // Configuration value to use.
    19      // Valid choice are:
    20      // 'Tests name': The name of a test case
    21      // 'Commit': The commit number of the build
    22      // 'Context', 'Thread': The info extracted from each junit files:
    23      //    - junit_core-os_01.xml -> Context: core-os, Thread: 01
    24      //    - junit_runner.xml -> Context: runner
    25      //    - junit_01.xml -> Thread: 01
    26      // or any metadata key from finished.json, which is copied from your test
    27      // suite.
    28      //
    29      // A valid sample TestNameConfig looks like:
    30      // test_name_config:
    31      //   name_elements:
    32      //   - target_config: Tests name
    33      //   - target_config: Context
    34      //   name_format: '%s [%s]'
    35      string target_config = 2;
    36      // Whether to use the build-target name
    37      bool build_target = 3;
    38      // A space-delimited string of Bazel build tags.
    39      string tags = 4;
    40      // The key of a test result's property.
    41      string test_property = 5;
    42    }
    43  
    44    // The name elements specifying the target test name for this tab.
    45    repeated NameElement name_elements = 1;
    46  
    47    // Specifies a printf-style format string for name elements. The format
    48    // string should have as many conversions as there are name_elements.
    49    // For example, two name_elements could be used with name_format="%s: %s".
    50    string name_format = 2;
    51  }
    52  
    53  // A single notification.
    54  message Notification {
    55    // Required: Text summary of the issue or notice.
    56    string summary = 1;
    57    // Optional: Link to further information, such as a bug, email, document, etc.
    58    string context_link = 2;
    59  }
    60  
    61  // Specifies a group of tests to gather.
    62  message TestGroup {
    63    // Name of this TestGroup, for mapping dashboard tabs to tests.
    64    string name = 1;
    65  
    66    // Path to the test result stored in gcs (some-bucket/some/optional/path).
    67    string gcs_prefix = 2;
    68  
    69    // Number of days of test results to gather and serve.
    70    int32 days_of_results = 3;
    71  
    72    // Whether to ignore pending (currently running) test results.
    73    bool ignore_pending = 4;
    74  
    75    // Whether to ignore reported build results. It is recommended that tests
    76    // report BUILD_FAIL instead of relying on this being disabled.
    77    bool ignore_built = 5;
    78  
    79    enum TestsName {
    80      TESTS_NAME_UNSPECIFIED = 0;
    81      TESTS_NAME_IGNORE = 1;
    82      TESTS_NAME_REPLACE = 2;
    83      TESTS_NAME_APPEND = 3;
    84    }
    85  
    86    // What to do with the 'Tests name' configuration value. It can replace the
    87    // name of the test, be appended to the name of the test, or ignored. If it is
    88    // ignored, then the name of the tests will be the build target.
    89    TestsName tests_name_policy = 6;
    90  
    91    reserved 7;  // Unused gather_test_properties
    92  
    93    // Tests with names that include these substrings will be removed from the
    94    // table.
    95    repeated string ignore_test_substring = 8;
    96  
    97    // Custom column headers for defining extra column-heading rows from values in
    98    // the test result.
    99    message ColumnHeader {
   100      string label = 1;
   101      string property = 2;
   102      string configuration_value = 3;
   103  
   104      // If true, list all distinct values. Else, list multiple distinct values as
   105      // "*".
   106      bool list_all_values = 4;
   107    }
   108    repeated ColumnHeader column_header = 9;
   109  
   110    enum FallbackGrouping {
   111      FALLBACK_GROUPING_NONE = 0;
   112      FALLBACK_GROUPING_DATE = 1;
   113      FALLBACK_GROUPING_LABELS = 2;
   114      FALLBACK_GROUPING_ID = 3;
   115      FALLBACK_GROUPING_BUILD = 4;
   116  
   117      // When using this, ensure fallback_grouping_configuration_value is
   118      // also set.
   119      FALLBACK_GROUPING_CONFIGURATION_VALUE = 5;
   120    }
   121  
   122    // A test grouping option used if not specified by primary_grouping (#29)
   123    FallbackGrouping fallback_grouping = 10;
   124  
   125    // DEPRECATED: use DashboardTabAlertOptions > alert_stale_result_hours
   126    int32 alert_stale_results_hours = 11 [deprecated = true];
   127  
   128    // DEPRECATED: use DashboardTabAlertOptions > num_failures_to_alert
   129    int32 num_failures_to_alert = 12 [ deprecated = true ];
   130  
   131    // DEPRECATED: use dashboard_tab.beta_autobug_options.beta_autobug_component
   132    // instead.
   133    int32 bug_component = 13 [deprecated = true];
   134  
   135    // Default code search path for searching regressions. Overridden by
   136    // code_search_path in DashboardTab.
   137    string code_search_path = 14;
   138  
   139    // The number of columns to consider "recent" for a variety of purposes.
   140    int32 num_columns_recent = 15;
   141  
   142    // Whether to read test metadata from the test results. Information
   143    // from the test metadata is used to determine where bugs are filed in
   144    // specific cases.
   145    bool use_test_metadata = 16;
   146  
   147    // DEPRECATED: use DashboardTabAlertOptions > alert_mail_to_address instead
   148    string alert_mail_to_addresses = 17 [deprecated = true];
   149  
   150    // DEPRECATED: use DashboardTabAlertOptions > subject
   151    string alert_mail_subject = 18 [deprecated = true];
   152  
   153    // DEPRECATED: use DashboardTabAlertOptions > alert_mail_failure_message
   154    string alert_mail_failure_message = 19 [deprecated = true];
   155  
   156    // DEPRECATED: use DashboardTabAlertOptions > debug_url
   157    string alert_mail_debug_url = 20 [deprecated = true];
   158  
   159    // DEPRECATED: use DashboardTabAlertOptions > wait_minutes_between_emails
   160    int32 min_elapsed_minutes_between_mails = 21 [deprecated = true];
   161  
   162    reserved 22;  // No longer used
   163  
   164    // Whether to treat a combination of passes and failures within one test as a
   165    // flaky status.
   166    bool enable_flaky_status = 23;
   167  
   168    // disable_merged_status will restores deprecated behavior of
   169    // splitting multiple foo rows into foo [2], etc rather a single
   170    // potentially flaky row.
   171    bool disable_merged_status = 60;
   172  
   173    // deprecated - always set to true
   174    bool use_kubernetes_client = 24 [deprecated = true];
   175  
   176    // When use_kubernetes_client is on testgrid expects these results
   177    // to come from prow, which should include a prowjob.json and podinfo.json
   178    // to help debugging. If you do not expect these files to exist, you
   179    // can optionally disable this analysis.
   180    bool disable_prowjob_analysis = 62;
   181  
   182    // deprecated - always set to true
   183    bool is_external = 25;
   184  
   185    // Specifies the test name for a test.
   186    TestNameConfig test_name_config = 26;
   187  
   188    // A list of notifications attached to this test group.
   189    // This is displayed on any dashboard tab backed by this test group.
   190    repeated Notification notifications = 27;
   191  
   192    reserved 28; // Deprecated Field (column_sort_by)
   193  
   194    enum PrimaryGrouping {
   195      PRIMARY_GROUPING_NONE = 0;
   196      PRIMARY_GROUPING_BUILD = 1;
   197    }
   198  
   199    // A primary grouping strategy for grouping test results in columns.
   200    // If a primary grouping is specified, the fallback grouping is ignored.
   201    PrimaryGrouping primary_grouping = 29;
   202  
   203    // Whether to collect pass-fail data for test methods. Additional test cases
   204    // will be added for each test method in a target.
   205    bool enable_test_methods = 30;
   206  
   207    // Associates the presence of a named test property with a custom short text
   208    // displayed over the results. Short text must be <=5 characters long.
   209    message TestAnnotation {
   210      string short_text = 1;
   211      oneof short_text_message_source {
   212        string property_name = 2;
   213      }
   214    }
   215  
   216    // Test annotations to look for. Adds custom icon to results.
   217    repeated TestAnnotation test_annotations = 31;
   218  
   219    // Maximum number of individual test methods to collect for any given test
   220    // row. If a test has more than this many methods, no methods will be
   221    // displayed.
   222    int32 max_test_methods_per_test = 32;
   223  
   224    reserved 33;
   225  
   226    // Default metadata that should be applied for opening bugs, if a given regex
   227    // matches against a test's name.
   228    // Requires 'use_test_metadata = true'.
   229    repeated TestMetadataOptions test_metadata_options = 34;
   230  
   231    // A space-delimited string of tags that are used to filter test targets.
   232    // A leading - before the tag means this tag should not be present
   233    // in the target.
   234    // Example:
   235    //  contains tag1, but not tag2: test_tag_pattern = 'tag1 -tag2'
   236    string test_tag_pattern = 35;
   237  
   238    // DEPRECATED: use dashboard_tab.beta_autobug_options instead.
   239    AutoBugOptions auto_bug_options = 36 [deprecated = true];
   240  
   241    // Max number of days any single test can take.
   242    int32 max_test_runtime_hours = 37;
   243  
   244    // The number of consecutive test passes to close the alert.
   245    int32 num_passes_to_disable_alert = 38;
   246  
   247    // If true, also associate bugs with tests if the test result's overview/group
   248    // ID is in the bug.
   249    bool link_bugs_by_group = 39;
   250  
   251    reserved 40;
   252  
   253    // A string key value pair message
   254    message KeyValue {
   255      string key = 1;
   256      string value = 2;
   257    }
   258  
   259    // Only show test methods with all required properties
   260    repeated KeyValue test_method_properties = 41;
   261  
   262    // If true, allows gathering and associating bugs with targets in the
   263    // dashboard. Required in order to auto-file bugs.
   264    bool gather_bugs = 42;
   265  
   266    // Numeric property metric value to be used for short text. If this property
   267    // is present, it will override all the other short text values.
   268    string short_text_metric = 43;
   269  
   270    // The key of a key-value pair in metadata (a 'configuration value').
   271    // This overrides the default build with the value from the key-value pair.
   272    string build_override_configuration_value = 44;
   273  
   274    // If true, only associate bugs with test methods if that test method is
   275    // mentioned in the bug. If false, bugs will be associated with all test
   276    // methods.
   277    bool link_bugs_by_test_methods = 45;
   278  
   279    // Regex to match test methods. Only test methods with names that match
   280    // this regex will be included in the table.
   281    string test_method_match_regex = 46;
   282  
   283    // Regex to exclude test methods. Test methods with names that match
   284    // this regex will be excluded from the table, even if they match
   285    // test_method_match_regex.
   286    string test_method_unmatch_regex = 61;
   287  
   288    // If true, test method names are printed with the full class names.
   289    bool use_full_method_names = 47;
   290  
   291    reserved 48;
   292  
   293    // A configuration value that is used as a fallback grouping.
   294    // This is useful for cases where there are builds that shared the same
   295    // commit but are run at separate times of day.
   296    string fallback_grouping_configuration_value = 49;
   297  
   298    message ResultSource {
   299      reserved 1, 3 to 5; // Legacy sources
   300  
   301      oneof result_source_config {
   302        // GCS buckets holding junit and json results, typically created by prow.
   303        GCSConfig gcs_config = 2;
   304        // Invocations stored in ResultStore.
   305        ResultStoreConfig resultstore_config = 6;
   306      }
   307    }
   308  
   309    // Configuration type of the result source.
   310    ResultSource result_source = 50;
   311  
   312    // Set of rules that are evaluated with each test result. If an evaluation is
   313    // successful, the status of that test result will be whatever is specified
   314    // for a given rule. For more information, look at RuleSet documention
   315    testgrid.custom_evaluator.RuleSet custom_evaluator_rule_set = 51;
   316  
   317    // If true, instead of updating the group, read the state proto from storage
   318    // and update summary, alerts, etc. from that state.
   319    // This only applies to test group state, not bug state for a test group.
   320    // This assumes that the state proto is updated through other means (another
   321    // updater, manually, etc).
   322    bool read_state_from_storage = 52;
   323  
   324    // If true, only add the most recent result for a test when multiple results
   325    // for a test with the same name are encountered.
   326    bool ignore_old_results = 53;
   327  
   328    // If True, ignore the 'pass with skips' status (show as a blank cell).
   329    bool ignore_skip = 54;
   330  
   331    // A string containing python formatting specifiers that overrides the
   332    // commit with the date formatted according to this string. This is useful
   333    // for aggregating multiple columns that don't have a matching commit.
   334    string build_override_strftime = 55;
   335  
   336    // Specify a property that will be read into state in the user_property field.
   337    // These can be substituted into LinkTemplates.
   338    string user_property = 56;
   339  
   340    reserved 57 to 59;
   341  
   342    // Where to gather linked issues from. (Currently a no-op).
   343    IssueGatherOptions issue_gather_options = 63;
   344  }
   345  
   346  // GCSConfig specifies results stored in GCS, typically created by prow.
   347  //
   348  // Each invocation is stored in a GCS path, containing json metadata files
   349  // as well as junit and other artifacts specifying the result of the run.
   350  //
   351  // More info:
   352  // https://github.com/GoogleCloudPlatform/testgrid/tree/master/metadata
   353  message GCSConfig {
   354    // Path to the test result stored in gcs (some-bucket/some/optional/path).
   355    string gcs_prefix = 1;
   356  
   357    // The GCP project where GCS sends notifications for the above prefix.
   358    string pubsub_project = 2;
   359    // The pubsub subscription ID in the above topic
   360    string pubsub_subscription = 3;
   361  }
   362  
   363  // ResultStoreConfig specifies results stored in ResultStore.
   364  message ResultStoreConfig {
   365    // Google Cloud Platform project ID where ResultStore results are stored.
   366    string project = 1;
   367    // A simple query to filter for particular results.
   368    // Currently, only allows a query in the form of `target:"<target>"`.
   369    string query = 2; 
   370  }
   371  
   372  // Options for where to gather linked issues from.
   373  message IssueGatherOptions {
   374    reserved 1, 2;
   375  }
   376  
   377  // Default metadata to apply when opening bugs.
   378  message TestMetadataOptions {
   379    // Apply the following metadata if this regex matches a test's name.
   380    string test_name_regex = 1;
   381  
   382    // Default bug component to open a bug in.
   383    int32 bug_component = 2;
   384  
   385    // Default owner to assign a bug to.
   386    string owner = 3;
   387  
   388    // List of default users to CC a bug to.
   389    repeated string cc = 4;
   390  
   391    // Apply following metadata if this regex matches a test’s failure message.
   392    string message_regex = 5;
   393  
   394    reserved 6;
   395  }
   396  
   397  message AutoBugOptions {
   398    // [BETA] When specified, file bugs to this component, using the beta AutoBug.
   399    // If you do not want to opt into the beta, specify `bug_component` in your
   400    // TestGroup instead.
   401    // TODO(b/154866134): Rename to autobug_component once we've migrated.
   402    int32 beta_autobug_component = 10;
   403  
   404    // Whether to auto-close auto-filed bugs.
   405    // Alias for "passing_behavior = CLOSE_ON_PASSING";
   406    bool auto_close = 1;
   407  
   408    // A list of hotlist ids attached to auto-filed bugs.
   409    repeated int64 hotlist_ids = 2;
   410  
   411    // Scale of issue priority, used to indicate importance of issue.
   412    enum Priority {
   413      // Unspecified; may not set priority at all
   414      PRIORITY_UNSPECIFIED = 0;
   415      // See https://developers.google.com/issue-tracker/concepts/issues
   416      P0 = 1;
   417      P1 = 2;
   418      P2 = 3;
   419      P3 = 4;
   420      P4 = 5;
   421    }
   422  
   423    // The priority of the auto-filed bug. If provided, this will overwrite the
   424    // priority in the component default template
   425    Priority priority = 3;
   426  
   427    // A list of hotlist id sources
   428    // Corresponds with the list hotlist_ids (#2)
   429    repeated HotlistIdFromSource hotlist_ids_from_source = 4 [deprecated = true];
   430  
   431    // If True, files separate bugs for each failing target, instead of one bug
   432    // for each set of targets failing at the same run.
   433    bool file_individual = 5;
   434  
   435    // If True; keep only one automantic bug per target, regardless of the number
   436    // of separate failures a target gets. Requires `file_individual` to be True.
   437    // Consider setting `num_passes_to_disable_alert` instead if you're tracking
   438    // flaky tests.
   439    bool singleton_autobug = 6;
   440  
   441    // If provided: only raise one bug if the number of failures for a single
   442    // query by testgrid for a single failure group exceeds this value. Requires
   443    // 'file_individual' to be True.
   444    int32 max_allowed_individual_bugs = 7;
   445  
   446    // If True; file issues for the 'Overall' target, even if otherwise invalid.
   447    bool file_overall = 8;
   448  
   449    message DefaultTestMetadata {
   450      int32 bug_component = 1;
   451      string owner = 2;
   452      repeated string cc = 3;
   453    }
   454  
   455    // If provided: supplements `max_allowed_individual_bugs` field to raise a
   456    // single bug if the number of failures for a single query by testgrid exceeds
   457    // the max_allowed_individual_bugs` value, regardless of `TEST_METADATA`
   458    // configurations. This is useful for filing fewer suspected environmental
   459    // failure bugs and routing them to a specific location (i.e. an oncall).
   460    // Requires 'file_individual' to be true and `max_allowed_individual_bugs` to
   461    // not be empty.
   462    DefaultTestMetadata default_test_metadata = 9;
   463  
   464    // [BETA] If True, query the test metadata API to get issue-routing metadata.
   465    // Enables routing issues using structured test failures.
   466    bool advanced_test_metadata = 11;
   467  
   468    // If True, file a bug when the tab goes stale.
   469    // (Requires `alert_stale_results_hours` to be set.)
   470    bool file_stale = 12;
   471  
   472    // If True, ignore overall rows when auto-filing.
   473    bool ignore_overall = 13;
   474  
   475    // [BETA] Extra text displayed in opened bugs. e.g., for including a link to a
   476    // playbook.
   477    string note = 14;
   478  
   479    reserved 15, 16;
   480  }
   481  
   482  message HotlistIdFromSource {
   483    oneof hotlist_id_source {
   484      // ID value of hotlists
   485      int64 value = 1;
   486      // A label prefix
   487      string label = 2;
   488    }
   489  }
   490  
   491  // Specifies a dashboard.
   492  message Dashboard {
   493    // A list of the tabs on the dashboard.
   494    repeated DashboardTab dashboard_tab = 1;
   495  
   496    // A name for the Dashboard.
   497    string name = 2;
   498  
   499    // A list of notifications attached to this dashboard.
   500    // This is displayed on any dashboard tab in this dashboard.
   501    repeated Notification notifications = 3;
   502  
   503    reserved 4;  // Deprecated show_summary_first bool, unused
   504  
   505    // Control which tab is displayed when first opening a dashboard.
   506    // Defaults to Summary
   507    string default_tab = 5;
   508  
   509    // Controls whether to suppress highlighting of failing tabs.
   510    bool downplay_failing_tabs = 8;
   511  
   512    // Deprecated: Invert of 'downplay_failing_tabs'
   513    bool highlight_failing_tabs = 6 [deprecated = true];
   514  
   515    // Controls whether to apply special highlighting to result header columns for
   516    // the current day.
   517    bool highlight_today = 7;
   518  
   519    // A description paragraph to be displayed.
   520    string description = 9;
   521  }
   522  
   523  message LinkTemplate {
   524    // The URL template.
   525    string url = 1;
   526    // The options templates.
   527    repeated LinkOptionsTemplate options = 2;
   528    // An optional name, used for the context menu
   529    string name = 3;
   530  }
   531  
   532  // A simple key/value pair for link options.
   533  message LinkOptionsTemplate {
   534    // The key for the option. This is not expanded.
   535    string key = 1;
   536  
   537    // The value for the option. This is expanded the same as the LinkTemplate.
   538    string value = 2;
   539  }
   540  
   541  // A single tab on a dashboard.
   542  message DashboardTab {
   543    // The name of the dashboard tab to display in the client.
   544    string name = 1;
   545  
   546    // The name of the TestGroup specifying the test results for this tab.
   547    string test_group_name = 2;
   548  
   549    // Default bug component for manually filing bugs from the dashboard
   550    int32 bug_component = 3;
   551  
   552    // Default code search path for searching regressions. This value overrides
   553    // the default in the TestGroup config so that dashboards may be customized
   554    // separately.
   555    string code_search_path = 4;
   556  
   557    // See TestGroup.num_columns_recent. This value overrides the default in the
   558    // TestGroup config so that dashboards may be customized separately.
   559    int32 num_columns_recent = 5;
   560  
   561    // Base options to always include, for example:
   562    // width=20&include-filter-by-regex=level_tests
   563    // This is taken from the #fragment part of the testgrid url.
   564    // Best way to create these is to setup the options on testgrid and then
   565    // copy the #fragment part.
   566    string base_options = 6;
   567  
   568    // The URL template to visit after clicking on a cell.
   569    LinkTemplate open_test_template = 7;
   570  
   571    // The URL template to visit when filing a bug.
   572    LinkTemplate file_bug_template = 8;
   573  
   574    // The URL template to visit when attaching a bug
   575    LinkTemplate attach_bug_template = 9;
   576  
   577    // Text to show in the about menu as a link to another view of the results.
   578    string results_text = 10;
   579  
   580    // The URL template to visit after clicking.
   581    LinkTemplate results_url_template = 11;
   582  
   583    // The URL template to visit when searching for code changes, such as pull
   584    // requests
   585    LinkTemplate code_search_url_template = 12;
   586  
   587    // A description paragraph to be displayed.
   588    string description = 13;
   589  
   590    // A regular expression that uses the named group syntax to specify how to
   591    // show names in a table.
   592    string tabular_names_regex = 14;
   593  
   594    // Configuration options for dashboard tab alerts.
   595    DashboardTabAlertOptions alert_options = 15;
   596  
   597    // Configuration options for dashboard tab flakiness alerts.
   598    DashboardTabFlakinessAlertOptions flakiness_alert_options = 24;
   599  
   600    // Configuration options for customizing dashboard tab status calculation.
   601    DashboardTabStatusCustomizationOptions status_customization_options = 26;
   602  
   603    // A URL for the "About this Dashboard" menu option
   604    string about_dashboard_url = 16;
   605  
   606    // The URL template to visit when viewing an associated bug.
   607    LinkTemplate open_bug_template = 17;
   608  
   609    // If true, auto-file bugs when new alerts occur. This requires that the
   610    // backing test group has `bug_component` set and uses the backing test
   611    // group's `auto_bug_options`.
   612    bool auto_file_bugs = 18;
   613  
   614    // Display user local time on the dashboard when set to true (by default).
   615    // If false, uses Pacific Timezone for this DashboardTab.
   616    bool display_local_time = 19;
   617  
   618    // A set of optional LinkTemplates that will become right-click context menu
   619    // items.
   620    // TODO(b/159042168) in the near future this should be re-implemented as a
   621    // generic list of repeated LinkTemplates which users may specify in their
   622    // reqpective configurations as right-click context menus with names and
   623    // actions upon being clicked.
   624    LinkTemplate context_menu_template = 20;
   625  
   626    // When specified, treat a tab as BROKEN as long as one of the most recent
   627    // columns are "broken" (ratio of failed to total tests exceeds <threshold>).
   628    float broken_column_threshold = 21;
   629  
   630    // Options for auto-filed bugs.
   631    // Using this for a dashboard tab requires specifying `beta_autobug_component`
   632    // and will opt you into the beta AutoBug.
   633    AutoBugOptions beta_autobug_options = 22;
   634  
   635    // Options for the configuration of the flakiness analysis tool, on a per tab
   636    // basis
   637    HealthAnalysisOptions health_analysis_options = 23;
   638  
   639    // A set of optional Link Templates when search for diffs between columns.
   640    repeated LinkTemplate column_diff_link_templates = 25;
   641  }
   642  
   643  // Configuration options for dashboard tab alerts.
   644  message DashboardTabAlertOptions {
   645    // Time in hours before an alert will be added to a test results table if the
   646    // run date of the latest results are older than this time.  If zero, no
   647    // alerts are raised.
   648    int32 alert_stale_results_hours = 1;
   649  
   650    // The number of consecutive test result failures to see before alerting of
   651    // a consistent failure. If zero, no alerts are raised.
   652    int32 num_failures_to_alert = 2;
   653  
   654    // The comma-separated addresses to send mail.
   655    string alert_mail_to_addresses = 3;
   656  
   657    // The number of consecutive test passes to close the alert.
   658    int32 num_passes_to_disable_alert = 4;
   659  
   660    // Custom subject for alert mails.
   661    string subject = 5;
   662  
   663    // Custom link for further help/instructions on debugging this alert.
   664    string debug_url = 6;
   665  
   666    // Custom text to show for the debug link.
   667    string debug_message = 7;
   668  
   669    // Wait time between emails. If unset or zero, an email will be sent only once
   670    // it becomes a consistent failure, and not again until it succeeds.
   671    // TestGrid does not pester about staleness
   672    int32 wait_minutes_between_emails = 8;
   673  
   674    // A custom message
   675    string alert_mail_failure_message = 9;
   676  }
   677  
   678  // Configuration options for dashboard tab flakiness alerts.
   679  message DashboardTabFlakinessAlertOptions {
   680    // The minimum amount of flakiness needed to trigger a flakiness alert.
   681    // 0=Disable alerts
   682    // This is a percentage; expected values go from 0 to 100 (100 = 100% flaky)
   683    float minimum_flakiness_to_alert = 1;
   684  
   685    // The comma-separated addresses to send mail.
   686    string alert_mail_to_addresses = 2;
   687  
   688    // Custom subject for alert mails.
   689    string subject = 3;
   690  
   691    // Minimum time between sending mails.
   692    int32 wait_minutes_between_emails = 4;
   693  
   694    // A custom message
   695    // TODO(RonWeber): This should be a template
   696    string alert_mail_failure_message = 5;
   697  }
   698  
   699  // Configuration options for customizing the tab status calculation.
   700  message DashboardTabStatusCustomizationOptions {
   701    // Maximum amount of flakiness tolerated to categorize tab as acceptable. Will
   702    // supplement dashboard tab status message, and mark the tab as ACCEPTABLE in
   703    // the dashboard group view. Set to "0" to disable. This is configured as a
   704    // percentage of valid (non-ignored) columns; expected values go from 0.0 to
   705    // 100.0 (100% = no passing columns is acceptable)
   706    float max_acceptable_flakiness = 1;
   707  
   708    // Columns which contain cells with any status configure below will be
   709    // ignored. Ignored columns affect the computation of flakiness and
   710    // non-ignored number of runs.
   711    enum IgnoredTestStatus {
   712      TEST_STATUS_UNSPECIFIED = 0;
   713      CATEGORIZED_ABORT = 1;
   714      UNKNOWN = 2;
   715      CANCEL = 3;
   716      BLOCKED = 4;
   717    }
   718  
   719    repeated IgnoredTestStatus ignored_test_statuses = 2;
   720  
   721    // Minimum number of runs required excluding ignored ones.
   722    // If the non-ignored columns is less than this, tab status will be PENDING.
   723    int32 min_acceptable_runs = 3;
   724  }
   725  
   726  // Specifies a dashboard group.
   727  message DashboardGroup {
   728    // The name for the dashboard group.
   729    string name = 1;
   730  
   731    // A list of names specifying dashboards to show links to in a separate tabbed
   732    // bar at the top of the page for each of the given dashboards.
   733    repeated string dashboard_names = 2;
   734  
   735    // A description paragraph to be displayed.
   736    string description = 3;
   737  }
   738  
   739  // A service configuration consisting of multiple test groups and dashboards.
   740  message Configuration {
   741    // A list of groups of tests to gather.
   742    repeated TestGroup test_groups = 1;
   743  
   744    // A list of all of the dashboards for a server.
   745    repeated Dashboard dashboards = 2;
   746  
   747    // A list of all the dashboard groups for a server.
   748    repeated DashboardGroup dashboard_groups = 3;
   749  }
   750  
   751  // A grouping of configuration options for the flakiness analysis tool.
   752  // Later configuration options could include the ability to choose different
   753  // kinds of flakiness and choosing if and who to email a copy of the flakiness
   754  // report.
   755  message HealthAnalysisOptions {
   756    // Defaults to false; flakiness analysis is opt-in
   757    bool enable = 1;
   758  
   759    // Defines the number of days for one interval of analysis.
   760    // i.e. flakiness will be analyzed for the previous N days starting from Now,
   761    // and it will be compared to the calculated N days before that for trend
   762    // analysis.
   763    int32 days_of_analysis = 2;
   764  
   765    // When to send healthiness emails out, uses cron string format.
   766    string email_schedule = 3;
   767  
   768    // A comma-separated list of healthiness email recipients.
   769    string email_recipients = 4;
   770  
   771    // A compilable regex string for grouping tests by name.
   772    // Works the same as the group-by-regex-mask option of base_options:
   773    // go/testgrid/users/dashboard_guide#grouping-tests
   774    // An empty string means no grouping.
   775    // e.g. test name: "//path/to/test - env", regex: ` - \w+`
   776    // The regex will match " - env" in the above test name and give a group of:
   777    // //path/to/test  <- Group Name
   778    //     - env       <- Group Member
   779    string grouping_regex = 5;
   780  }
   781  
   782  // The DefaultConfiguration Proto is deprecated, and will be deleted after Nov
   783  // 1, 2019. For defaulting behavior, use the yamlcfg library instead.
   784  message DefaultConfiguration {
   785    // A default testgroup with default initialization data
   786    TestGroup default_test_group = 1 [deprecated = true];
   787  
   788    // A default dashboard tab with default initialization data
   789    DashboardTab default_dashboard_tab = 2 [deprecated = true];
   790  }