Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(374)

Side by Side Diff: appengine/swarming/handlers_backend.py

Issue 2212073002: Add endpoint and cron job to aggregate all dimensions and values (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/luci-py@master
Patch Set: pull out extra changes Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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]
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698