Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright 2014 The LUCI Authors. All rights reserved. | 1 # Copyright 2014 The LUCI Authors. All rights reserved. |
| 2 # Use of this source code is governed under the Apache License, Version 2.0 | 2 # Use of this source code is governed under the Apache License, Version 2.0 |
| 3 # that can be found in the LICENSE file. | 3 # that can be found in the LICENSE file. |
| 4 | 4 |
| 5 """Main entry point for Swarming backend handlers.""" | 5 """Main entry point for Swarming backend handlers.""" |
| 6 | 6 |
| 7 import json | 7 import json |
| 8 import logging | 8 import logging |
| 9 | 9 |
| 10 import webapp2 | 10 import webapp2 |
| 11 from google.appengine.api import app_identity | 11 from google.appengine.api import app_identity |
| 12 from google.appengine.api import datastore_errors | 12 from google.appengine.api import datastore_errors |
| 13 from google.appengine.api import taskqueue | 13 from google.appengine.api import taskqueue |
| 14 | 14 |
| 15 import mapreduce_jobs | 15 import mapreduce_jobs |
| 16 from components import decorators | 16 from components import decorators |
| 17 from components import machine_provider | 17 from components import machine_provider |
| 18 from server import bot_management | |
| 18 from server import config | 19 from server import config |
| 19 from server import lease_management | 20 from server import lease_management |
| 20 from server import stats | 21 from server import stats |
| 21 from server import task_scheduler | 22 from server import task_scheduler |
| 22 | 23 |
| 23 | 24 |
| 24 class CronBotDiedHandler(webapp2.RequestHandler): | 25 class CronBotDiedHandler(webapp2.RequestHandler): |
| 25 @decorators.require_cronjob | 26 @decorators.require_cronjob |
| 26 def get(self): | 27 def get(self): |
| 27 try: | 28 try: |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 89 """Cleans up leftover BotInfo entities.""" | 90 """Cleans up leftover BotInfo entities.""" |
| 90 | 91 |
| 91 @decorators.require_cronjob | 92 @decorators.require_cronjob |
| 92 def get(self): | 93 def get(self): |
| 93 if not config.settings().mp.enabled: | 94 if not config.settings().mp.enabled: |
| 94 logging.info('MP support is disabled') | 95 logging.info('MP support is disabled') |
| 95 return | 96 return |
| 96 | 97 |
| 97 lease_management.clean_up_bots() | 98 lease_management.clean_up_bots() |
| 98 | 99 |
| 100 class CronDimensionAggregationHandler(webapp2.RequestHandler): | |
|
M-A Ruel
2016/08/04 21:01:15
2 lines between file level symbols
kjlubick
2016/08/05 14:17:26
Done.
| |
| 101 """Cleans up leftover BotInfo entities.""" | |
| 102 | |
| 103 @decorators.require_cronjob | |
| 104 def get(self): | |
| 105 q = bot_management.BotInfo.query() | |
|
M-A Ruel
2016/08/04 21:01:15
inline this
kjlubick
2016/08/05 14:17:26
Done.
| |
| 106 seen = {} | |
| 107 for b in q: | |
| 108 for i in b.dimensions_flat: | |
| 109 k, v = i.split(':', 1) | |
|
M-A Ruel
2016/08/04 21:01:15
skip 'id' otherwise this won't scale.
kjlubick
2016/08/05 14:17:26
Done.
| |
| 110 seen.setdefault(k, {})[v] = True | |
|
M-A Ruel
2016/08/04 21:01:15
seen.setdefault(K, set()).add(v)
kjlubick
2016/08/05 14:17:26
Done.
| |
| 111 dims = [] | |
| 112 for k, values in seen.iteritems(): | |
|
M-A Ruel
2016/08/04 21:01:14
sorted()
kjlubick
2016/08/05 14:17:26
Done.
| |
| 113 dims.append(bot_management.DimensionValues( | |
| 114 dimension=k, | |
| 115 values=values.keys())) | |
|
M-A Ruel
2016/08/04 21:01:15
sorted()
kjlubick
2016/08/05 14:17:26
Done.
| |
| 116 logging.info('Saw dimensions %s' % dims) | |
|
M-A Ruel
2016/08/04 21:01:15
s/%/,/
kjlubick
2016/08/05 14:17:26
Done.
| |
| 117 aggregate = bot_management.DimensionAggregation( | |
| 118 id="current", | |
| 119 dimensions=dims) | |
| 120 aggregate.put() | |
| 121 | |
| 99 | 122 |
| 100 class CronMachineProviderPubSubHandler(webapp2.RequestHandler): | 123 class CronMachineProviderPubSubHandler(webapp2.RequestHandler): |
| 101 """Listens for Pub/Sub communication from Machine Provider.""" | 124 """Listens for Pub/Sub communication from Machine Provider.""" |
| 102 | 125 |
| 103 @decorators.require_cronjob | 126 @decorators.require_cronjob |
| 104 def get(self): | 127 def get(self): |
| 105 if not config.settings().mp.enabled: | 128 if not config.settings().mp.enabled: |
| 106 logging.info('MP support is disabled') | 129 logging.info('MP support is disabled') |
| 107 return | 130 return |
| 108 | 131 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 163 # Cron jobs. | 186 # Cron jobs. |
| 164 # TODO(maruel): Rename cron.yaml job url. Doing so is a bit annoying since | 187 # TODO(maruel): Rename cron.yaml job url. Doing so is a bit annoying since |
| 165 # the app version has to be running an already compatible version already. | 188 # the app version has to be running an already compatible version already. |
| 166 ('/internal/cron/abort_bot_died', CronBotDiedHandler), | 189 ('/internal/cron/abort_bot_died', CronBotDiedHandler), |
| 167 ('/internal/cron/handle_bot_died', CronBotDiedHandler), | 190 ('/internal/cron/handle_bot_died', CronBotDiedHandler), |
| 168 ('/internal/cron/abort_expired_task_to_run', | 191 ('/internal/cron/abort_expired_task_to_run', |
| 169 CronAbortExpiredShardToRunHandler), | 192 CronAbortExpiredShardToRunHandler), |
| 170 | 193 |
| 171 ('/internal/cron/stats/update', stats.InternalStatsUpdateHandler), | 194 ('/internal/cron/stats/update', stats.InternalStatsUpdateHandler), |
| 172 ('/internal/cron/trigger_cleanup_data', CronTriggerCleanupDataHandler), | 195 ('/internal/cron/trigger_cleanup_data', CronTriggerCleanupDataHandler), |
| 196 ('/internal/cron/aggregate_dimensions', CronDimensionAggregationHandler), | |
|
M-A Ruel
2016/08/04 21:01:15
include "bot" in the URL to make this clear this i
kjlubick
2016/08/05 14:17:26
Done.
| |
| 173 ('/internal/cron/machine_provider', CronMachineProviderBotHandler), | 197 ('/internal/cron/machine_provider', CronMachineProviderBotHandler), |
| 174 ('/internal/cron/machine_provider_cleanup', | 198 ('/internal/cron/machine_provider_cleanup', |
| 175 CronMachineProviderCleanUpHandler), | 199 CronMachineProviderCleanUpHandler), |
| 176 ('/internal/cron/machine_provider_pubsub', | 200 ('/internal/cron/machine_provider_pubsub', |
| 177 CronMachineProviderPubSubHandler), | 201 CronMachineProviderPubSubHandler), |
| 178 | 202 |
| 179 # Task queues. | 203 # Task queues. |
| 180 ('/internal/taskqueue/cleanup_data', TaskCleanupDataHandler), | 204 ('/internal/taskqueue/cleanup_data', TaskCleanupDataHandler), |
| 181 (r'/internal/taskqueue/pubsub/<task_id:[0-9a-f]+>', TaskSendPubSubMessage), | 205 (r'/internal/taskqueue/pubsub/<task_id:[0-9a-f]+>', TaskSendPubSubMessage), |
| 182 ('/internal/taskqueue/pubsub/machine_provider', | 206 ('/internal/taskqueue/pubsub/machine_provider', |
| 183 TaskMachineProviderPubSubHandler), | 207 TaskMachineProviderPubSubHandler), |
| 184 | 208 |
| 185 # Mapreduce related urls. | 209 # Mapreduce related urls. |
| 186 (r'/internal/taskqueue/mapreduce/launch/<job_id:[^\/]+>', | 210 (r'/internal/taskqueue/mapreduce/launch/<job_id:[^\/]+>', |
| 187 InternalLaunchMapReduceJobWorkerHandler), | 211 InternalLaunchMapReduceJobWorkerHandler), |
| 188 ] | 212 ] |
| 189 return [webapp2.Route(*a) for a in routes] | 213 return [webapp2.Route(*a) for a in routes] |
| OLD | NEW |