Chromium Code Reviews| Index: appengine/sheriff_o_matic/monitoring.py |
| diff --git a/appengine/sheriff_o_matic/monitoring.py b/appengine/sheriff_o_matic/monitoring.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..464430576c7ed2d98693aad2aed29d50590ba597 |
| --- /dev/null |
| +++ b/appengine/sheriff_o_matic/monitoring.py |
| @@ -0,0 +1,62 @@ |
| +#!/usr/bin/env python |
|
agable
2015/08/12 22:18:08
This file (appengine module, really) is the meat o
|
| +# Copyright (c) 2015 The Chromium Authors. All rights reserved. |
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| + |
| +"""Send system monitoring data to the timeseries monitoring API.""" |
| + |
| +import logging |
| +import webapp2 |
| + |
| +import gae_ts_mon |
| +import ts_alerts |
| + |
| +from google.appengine.api import app_identity |
| +from google.appengine.api import modules |
| + |
| + |
| +access_count = gae_ts_mon.CounterMetric('gae/access/count') |
| + |
| + |
| +class InitializeMonitoringHandler(webapp2.RequestHandler): |
| + |
| + def get(self): |
| + service = app_identity.get_application_id() |
| + version = modules.get_current_version_name() |
| + instance_id = int(modules.get_current_instance_id()) |
| + endpoint = 'pubsub://chrome-infra-mon-pubsub/monacq' |
| + gae_ts_mon.initialize(job_name=version, instance=instance_id, |
| + service_name=service, endpoint=endpoint) |
| + self.response.set_status(200, 'Initialized instance of ts_mon.') |
| + |
| + |
| +class MonitoringHandler(webapp2.RequestHandler): |
| + |
| + ''' Called by cron jobs every 5 minutes to update metrics. ''' |
| + def get(self, key=None): |
| + if key: |
| + url = app_identity.get_default_version_hostname() |
| + access_count.increment(fields={'url_path': url + '/' + key, |
| + 'request_path': key, |
| + 'request_type': 'GET'}) |
|
agable
2015/08/12 22:18:08
The request type should be supplied by whoever cal
|
| + return |
| + gae_ts_mon.flush() |
| + self.response.write('Sheriff-o-matic metrics updated.') |
| + return |
| + |
| + def post(self): |
|
agable
2015/08/12 22:18:08
This appears to be unreachable / dead code. Sucks
|
| + key = self.request.body['endpoint'] |
| + if key not in self.ACCESS_COUNT.keys(): |
| + self.response.write('Unknown key %s', key) |
| + self.abort(400) |
| + return |
| + self.ACCESS_COUNT[key] += 1 |
| + self.response.write('Post success: ' + key) |
| + |
| + |
| +app = webapp2.WSGIApplication([ |
| + ('/_ah/start', InitializeMonitoringHandler), |
| + ('/monitoring', MonitoringHandler), |
| + ('/monitoring/(.*)', MonitoringHandler) |
| +], debug=True) |
| + |
|
agable
2015/08/12 22:18:08
nit: no empty line
|