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

Side by Side Diff: appengine/swarming/handlers_endpoints.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: trying things 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 2015 The LUCI Authors. All rights reserved. 1 # Copyright 2015 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 """This module defines Swarming Server endpoints handlers.""" 5 """This module defines Swarming Server endpoints handlers."""
6 6
7 import datetime 7 import datetime
8 import logging 8 import logging
9 9
10 from google.appengine.api import datastore_errors 10 from google.appengine.api import datastore_errors
(...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 637
638 @gae_ts_mon.instrument_endpoint() 638 @gae_ts_mon.instrument_endpoint()
639 @auth.endpoints_method( 639 @auth.endpoints_method(
640 swarming_rpcs.BotsRequest, swarming_rpcs.BotsCount, 640 swarming_rpcs.BotsRequest, swarming_rpcs.BotsCount,
641 http_method='GET') 641 http_method='GET')
642 @auth.require(acl.is_privileged_user) 642 @auth.require(acl.is_privileged_user)
643 def count(self, request): 643 def count(self, request):
644 """Counts number of bots with given dimensions.""" 644 """Counts number of bots with given dimensions."""
645 logging.info('%s', request) 645 logging.info('%s', request)
646 now = utils.utcnow() 646 now = utils.utcnow()
647 q = bot_management.BotInfo.query().order() 647 q = bot_management.BotInfo.query()
648 for d in request.dimensions: 648 for d in request.dimensions:
649 parts = d.split(':', 1) 649 parts = d.split(':', 1)
650 if len(parts) != 2 or any(i.strip() != i or not i for i in parts): 650 if len(parts) != 2 or any(i.strip() != i or not i for i in parts):
651 raise endpoints.BadRequestException('Invalid dimensions: %s' % d) 651 raise endpoints.BadRequestException('Invalid dimensions: %s' % d)
652 q = q.filter(bot_management.BotInfo.dimensions_flat == d) 652 q = q.filter(bot_management.BotInfo.dimensions_flat == d)
653 f_count = q.count_async() 653 f_count = q.count_async()
654 dt = datetime.timedelta(seconds=config.settings().bot_death_timeout_secs) 654 dt = datetime.timedelta(seconds=config.settings().bot_death_timeout_secs)
655 timeout = now - dt 655 timeout = now - dt
656 f_dead = q.filter( 656 f_dead = q.filter(
657 bot_management.BotInfo.last_seen_ts < timeout).count_async() 657 bot_management.BotInfo.last_seen_ts < timeout).count_async()
658 f_quarantined = q.filter( 658 f_quarantined = q.filter(
659 bot_management.BotInfo.quarantined == True).count_async() 659 bot_management.BotInfo.quarantined == True).count_async()
660 f_busy = q.filter(bot_management.BotInfo.is_busy == True).count_async() 660 f_busy = q.filter(bot_management.BotInfo.is_busy == True).count_async()
661 return swarming_rpcs.BotsCount( 661 return swarming_rpcs.BotsCount(
662 count=f_count.get_result(), 662 count=f_count.get_result(),
663 quarantined=f_quarantined.get_result(), 663 quarantined=f_quarantined.get_result(),
664 dead=f_dead.get_result(), 664 dead=f_dead.get_result(),
665 busy=f_busy.get_result(), 665 busy=f_busy.get_result(),
666 now=now) 666 now=now)
667 667
668 @gae_ts_mon.instrument_endpoint()
669 @auth.endpoints_method(
670 message_types.VoidMessage, swarming_rpcs.BotsDimensions,
671 http_method='GET')
672 @auth.require(acl.is_privileged_user)
673 def dimensions(self, request):
674 """Returns the cached set of dimensions currently in use in the fleet."""
675 logging.info('%s', request)
676 dims = bot_management.DimensionAggregation.KEY.get()
677 fd = [swarming_rpcs.StringListPair(
678 key=d.dimension,
679 value=d.values) for d in dims.dimensions]
680 return swarming_rpcs.BotsDimensions(
681 fleet_dimensions=fd)
682
668 683
669 def get_routes(): 684 def get_routes():
670 return ( 685 return (
671 endpoints_webapp2.api_routes(SwarmingServerService) + 686 endpoints_webapp2.api_routes(SwarmingServerService) +
672 endpoints_webapp2.api_routes(SwarmingTaskService) + 687 endpoints_webapp2.api_routes(SwarmingTaskService) +
673 endpoints_webapp2.api_routes(SwarmingTasksService) + 688 endpoints_webapp2.api_routes(SwarmingTasksService) +
674 endpoints_webapp2.api_routes(SwarmingBotService) + 689 endpoints_webapp2.api_routes(SwarmingBotService) +
675 endpoints_webapp2.api_routes(SwarmingBotsService) + 690 endpoints_webapp2.api_routes(SwarmingBotsService) +
676 # components.config endpoints for validation and configuring of luci-config 691 # components.config endpoints for validation and configuring of luci-config
677 # service URL. 692 # service URL.
678 endpoints_webapp2.api_routes(config.ConfigApi)) 693 endpoints_webapp2.api_routes(config.ConfigApi))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698