| OLD | NEW |
| (Empty) | |
| 1 # Copyright 2016 The LUCI Authors. All rights reserved. |
| 2 # Use of this source code is governed under the Apache License, Version 2.0 |
| 3 # that can be found in the LICENSE file. |
| 4 |
| 5 """Front-end UI.""" |
| 6 |
| 7 import logging |
| 8 import os |
| 9 |
| 10 import webapp2 |
| 11 |
| 12 from components import auth |
| 13 from components import datastore_utils |
| 14 from components import template |
| 15 from components import utils |
| 16 |
| 17 import models |
| 18 |
| 19 |
| 20 THIS_DIR = os.path.dirname(os.path.abspath(__file__)) |
| 21 |
| 22 |
| 23 class CatalogHandler(auth.AuthenticatingHandler): |
| 24 """Catalog handler.""" |
| 25 |
| 26 @auth.require(auth.is_admin) |
| 27 def get(self, machine_id=None): |
| 28 params = { |
| 29 'machines': [], |
| 30 'next_page_token': None, |
| 31 } |
| 32 if machine_id: |
| 33 machine = models.CatalogMachineEntry.get_by_id(machine_id) |
| 34 if not machine: |
| 35 self.abort(404) |
| 36 params['machines'] = [machine] |
| 37 else: |
| 38 query = models.CatalogMachineEntry.query().order( |
| 39 models.CatalogMachineEntry.dimensions.hostname) |
| 40 page_token = self.request.get('page_token') or '' |
| 41 params['machines'], params['next_page_token'] = ( |
| 42 datastore_utils.fetch_page(query, 50, page_token)) |
| 43 |
| 44 self.response.write( |
| 45 template.render('templates/catalog.html', params=params)) |
| 46 |
| 47 |
| 48 class LeaseRequestHandler(auth.AuthenticatingHandler): |
| 49 """Lease request handler.""" |
| 50 |
| 51 @auth.require(auth.is_admin) |
| 52 def get(self, lease_id=None): |
| 53 params = { |
| 54 'lease_requests': [], |
| 55 'next_page_token': None, |
| 56 'now_ts': utils.time_time(), |
| 57 } |
| 58 if lease_id: |
| 59 lease_request = models.LeaseRequest.get_by_id(lease_id) |
| 60 if not lease_request: |
| 61 self.abort(404) |
| 62 params['lease_requests'] = [lease_request] |
| 63 else: |
| 64 query = models.LeaseRequest.query().order( |
| 65 -models.LeaseRequest.last_modified_ts) |
| 66 page_token = self.request.get('page_token') or '' |
| 67 params['lease_requests'], params['next_page_token'] = ( |
| 68 datastore_utils.fetch_page(query, 50, page_token)) |
| 69 |
| 70 self.response.write(template.render('templates/leases.html', params=params)) |
| 71 |
| 72 |
| 73 class RootHandler(auth.AuthenticatingHandler): |
| 74 """Root handler.""" |
| 75 |
| 76 @auth.public |
| 77 def get(self): |
| 78 params = { |
| 79 'is_admin': auth.is_admin(), |
| 80 } |
| 81 |
| 82 self.response.write(template.render('templates/root.html', params=params)) |
| 83 |
| 84 |
| 85 def create_frontend_app(): |
| 86 template.bootstrap({ |
| 87 'templates': os.path.join(THIS_DIR, 'templates'), |
| 88 }) |
| 89 |
| 90 return webapp2.WSGIApplication([ |
| 91 webapp2.Route('/', handler=RootHandler), |
| 92 webapp2.Route('/catalog', handler=CatalogHandler), |
| 93 webapp2.Route('/catalog/<machine_id>', handler=CatalogHandler), |
| 94 webapp2.Route('/leases', handler=LeaseRequestHandler), |
| 95 webapp2.Route('/leases/<lease_id>', handler=LeaseRequestHandler), |
| 96 ]) |
| OLD | NEW |