1# Datastore Composite Index Configuration. 2# https://developers.google.com/appengine/docs/python/config/indexconfig 3# 4# Below, most indexes come in pairs; one with the internal_only property, 5# one without. This is because all queries when the user is not logged in 6# have the filter internal_only == False. 7# 8# Composite index properties must be listed differently depending on how the 9# properties are used. There are three main ways to use properties in a query: 10# (1) In an equality filter. 11# (2) In an inequality filter. 12# (3) In a sort order. 13# The properties below must be listed in this order. The "direction" only needs 14# to be specified for properties used for sort order. 15# 16# To update the indexes in production after editing them here, you must run 17# appcfg.py vacuum_indexes or appcfg.py update_indexes. 18 19indexes: 20 21# Used in main.py when fetching top improvements/regressions in past N days. 22- kind: Anomaly 23 properties: 24 - name: sheriff 25 - name: timestamp 26- kind: Anomaly 27 properties: 28 - name: internal_only 29 - name: sheriff 30 - name: timestamp 31 32# Used in alerts.py for fetching recent un-triaged regressions for one sheriff. 33- kind: Anomaly 34 properties: 35 - name: bug_id 36 - name: is_improvement 37 - name: recovered 38 - name: sheriff 39 - name: timestamp 40 direction: desc 41- kind: Anomaly 42 properties: 43 - name: internal_only 44 - name: bug_id 45 - name: is_improvement 46 - name: recovered 47 - name: sheriff 48 - name: timestamp 49 direction: desc 50 51# Used in alerts.py for fetching recent un-triaged anomalies, both regressions 52# and improvements, for one sheriff, i.e. when the improvements button is on. 53- kind: Anomaly 54 properties: 55 - name: bug_id 56 - name: recovered 57 - name: sheriff 58 - name: timestamp 59 direction: desc 60- kind: Anomaly 61 properties: 62 - name: internal_only 63 - name: bug_id 64 - name: recovered 65 - name: sheriff 66 - name: timestamp 67 direction: desc 68 69# Used in alerts.py for fetching recent regressions for one sheriff, regardless 70# of triaged vs un-triaged status, i.e. when the triaged button is on. 71- kind: Anomaly 72 properties: 73 - name: is_improvement 74 - name: sheriff 75 - name: timestamp 76 direction: desc 77- kind: Anomaly 78 properties: 79 - name: internal_only 80 - name: is_improvement 81 - name: sheriff 82 - name: timestamp 83 direction: desc 84 85# Used in alerts.py for fetching recent anomalies for one sheriff, including 86# improvements and triaged, i.e. both improvements and triaged buttons are on. 87- kind: Anomaly 88 properties: 89 - name: sheriff 90 - name: timestamp 91 direction: desc 92- kind: Anomaly 93 properties: 94 - name: internal_only 95 - name: sheriff 96 - name: timestamp 97 direction: desc 98 99# Used in group_report.py when querying for anomalies around a revision. 100# No composite index is required without internal_only because then the 101# query uses only one (indexed) property, end_revision. 102- kind: Anomaly 103 properties: 104 - name: internal_only 105 - name: end_revision 106 107# Might be unused! 108# This index would enable querying for points for a particular test, 109# filtering or sorting by revision, and possibly doing a projection 110# query including value. 111- kind: Row 112 properties: 113 - name: parent_test 114 - name: revision 115 - name: value 116 117# Used in find_anomalies.GetRowsToAnalyze when getting latest points, 118# with projection query for properties revision and value. 119- kind: Row 120 properties: 121 - name: parent_test 122 - name: revision 123 direction: desc 124 - name: value 125 126# Used in graph_revisions.py to do a projection query for timestamp, revision 127# and value for points from a particular test. 128- kind: Row 129 properties: 130 - name: parent_test 131 - name: revision 132 - name: timestamp 133 - name: value 134 135# Used in several modules (graph_json.py and graph_csv.py) to fetch the latest 136# points for a test. 137- kind: Row 138 properties: 139 - name: parent_test 140 - name: revision 141 direction: desc 142 143# This composite index enables querying for points for a particular test, 144# filtering or sorting by revision. This may be unused, but it may be useful 145# for queries on the interactive console. 146- kind: Row 147 properties: 148 - name: parent_test 149 - name: revision 150 151# May be unused! 152# Likely used in new_points.py to query newest points for a particular test. 153# However listing the latest points for a test also works when not logged in 154# currently, although there appears to be no index in this file for that. 155- kind: Row 156 properties: 157 - name: parent_test 158 - name: timestamp 159 direction: desc 160 161# May be used in send_stoppage_alert_emails to fetch recent StoppageAlert 162# entities for a particular sheriff, for both internal-only and public alerts. 163- kind: StoppageAlert 164 properties: 165 - name: sheriff 166 - name: mail_sent 167- kind: StoppageAlert 168 properties: 169 - name: internal_only 170 - name: sheriff 171 - name: mail_sent 172 173# Used in alerts to fetch recent StoppageAlert entities for a particular 174# sheriff, for both internal and non-internal users. 175- kind: StoppageAlert 176 properties: 177 - name: sheriff 178 - name: timestamp 179 direction: desc 180- kind: StoppageAlert 181 properties: 182 - name: internal_only 183 - name: sheriff 184 - name: timestamp 185 direction: desc 186 187# Used in /alerts to query for stoppage alerts, for internal and external 188# sheriffs. 189- kind: StoppageAlert 190 properties: 191 - name: bug_id 192 - name: internal_only 193 - name: recovered 194 - name: sheriff 195 - name: timestamp 196 direction: desc 197- kind: StoppageAlert 198 properties: 199 - name: bug_id 200 - name: recovered 201 - name: sheriff 202 - name: timestamp 203 direction: desc 204 205# Used in update_test_suites to query keys of test suites (parent_test == None) 206# with deprecated and description projection. Two separate lists of 207# test suites are kept, one for external and one for internal. 208- kind: Test 209 properties: 210 - name: parent_test 211 - name: deprecated 212 - name: description 213- kind: Test 214 properties: 215 - name: internal_only 216 - name: parent_test 217 - name: deprecated 218 - name: description 219 220# Used in update_test_suites to query keys of test suites (parent_test == None) 221# with monitored projection. Two separate lists of test suites are kept, one for 222# external and one for internal. 223- kind: Test 224 properties: 225 - name: parent_test 226 - name: monitored 227- kind: Test 228 properties: 229 - name: internal_only 230 - name: parent_test 231 - name: monitored 232 233# Used in list_tests.py to query Test by test path pattern. 234- kind: Test 235 properties: 236 - name: master_name 237 - name: bot_name 238 - name: suite_name 239 - name: test_part1_name 240 - name: test_part2_name 241 - name: test_part3_name 242 - name: test_part4_name 243- kind: Test 244 properties: 245 - name: internal_only 246 - name: master_name 247 - name: bot_name 248 - name: suite_name 249 - name: test_part1_name 250 - name: test_part2_name 251 - name: test_part3_name 252 - name: test_part4_name 253