Xixuan Wu | 27a61f8 | 2017-09-14 11:42:37 -0700 | [diff] [blame] | 1 | # Copyright 2017 The Chromium OS Authors. All rights reserved. |
| 2 | # Use of this source code is governed by a BSD-style license that can be |
| 3 | # found in the LICENSE file. |
| 4 | |
| 5 | """Module for cron jobs kicked off by suite scheduler.""" |
| 6 | # pylint: disable=g-bad-import-order |
| 7 | |
| 8 | import jinja2 |
| 9 | import os |
| 10 | import webapp2 |
| 11 | |
| 12 | import constants |
Xixuan Wu | 8c173c3 | 2017-11-06 11:23:06 -0800 | [diff] [blame] | 13 | import rest_client |
| 14 | import stackdriver_lib |
Xixuan Wu | 27a61f8 | 2017-09-14 11:42:37 -0700 | [diff] [blame] | 15 | |
| 16 | |
| 17 | # jinja environment for embedding website. |
| 18 | _JINJA_ENVIRONMENT = jinja2.Environment( |
| 19 | loader=jinja2.FileSystemLoader(os.path.dirname(__file__)), |
| 20 | extensions=['jinja2.ext.autoescape'], |
| 21 | autoescape=True) |
| 22 | |
| 23 | |
| 24 | class MainDashboard(webapp2.RequestHandler): |
| 25 | """Main page for suite scheduler.""" |
| 26 | |
| 27 | def get(self): |
| 28 | template_values = {'app_id': constants.application_id()} |
| 29 | template = _JINJA_ENVIRONMENT.get_template('www/index.html') |
| 30 | self.response.write(template.render(template_values)) |
| 31 | |
| 32 | |
Xixuan Wu | 69a5e78 | 2017-11-06 14:32:05 -0800 | [diff] [blame] | 33 | class Logger(webapp2.RequestHandler): |
| 34 | """Log page for suite scheduler's jobs.""" |
Xixuan Wu | 8c173c3 | 2017-11-06 11:23:06 -0800 | [diff] [blame] | 35 | |
| 36 | def get(self): |
| 37 | self.response.headers['Content-Type'] = 'text/plain' |
| 38 | start_time = self.request.get('start_time') |
| 39 | end_time = self.request.get('end_time') |
| 40 | app_id = self.request.get('app_id') |
| 41 | resource = self.request.get('resource') |
| 42 | if not app_id: |
| 43 | app_id = constants.application_id(parse=False) |
| 44 | |
| 45 | # In local development server |
| 46 | if app_id is None: |
| 47 | self.response.write('Local development server is probably running, ' |
| 48 | 'please specify app_id.') |
| 49 | |
| 50 | if not (start_time and end_time and resource): |
| 51 | self.response.write('Invalid input parameters \nstart_time: %s\n' |
| 52 | 'end_time: %s\nresource: %s\n' % ( |
| 53 | start_time, end_time, resource)) |
| 54 | |
| 55 | stackdriver_logging_client = rest_client.StackdriverRestClient( |
| 56 | rest_client.BaseRestClient( |
| 57 | constants.RestClient.STACKDRIVER_CLIENT.scopes, |
| 58 | constants.RestClient.STACKDRIVER_CLIENT.service_name, |
| 59 | constants.RestClient.STACKDRIVER_CLIENT.service_version)) |
| 60 | request = stackdriver_lib.form_logging_client_request( |
| 61 | app_id, |
| 62 | start_time, |
| 63 | end_time, |
| 64 | resource) |
| 65 | logs = stackdriver_logging_client.read_logs(request) |
| 66 | self.response.write(stackdriver_lib.parse_logging_client_response(logs)) |
| 67 | |
| 68 | |
Xixuan Wu | 27a61f8 | 2017-09-14 11:42:37 -0700 | [diff] [blame] | 69 | app = webapp2.WSGIApplication([ |
| 70 | ('/', MainDashboard), |
Xixuan Wu | 69a5e78 | 2017-11-06 14:32:05 -0800 | [diff] [blame] | 71 | ('/logger', Logger), |
Xixuan Wu | 27a61f8 | 2017-09-14 11:42:37 -0700 | [diff] [blame] | 72 | ], debug=True) |