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

Unified Diff: appengine_apps/trooper_o_matic/appengine_module/trooper_o_matic/alerts.py

Issue 774323002: Moved trooper_o_matic to appengine/ (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Created 6 years 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 side-by-side diff with in-line comments
Download patch
Index: appengine_apps/trooper_o_matic/appengine_module/trooper_o_matic/alerts.py
diff --git a/appengine_apps/trooper_o_matic/appengine_module/trooper_o_matic/alerts.py b/appengine_apps/trooper_o_matic/appengine_module/trooper_o_matic/alerts.py
deleted file mode 100644
index 0a8d4d05331f5ef7464be4f194704e2ab9d8ed86..0000000000000000000000000000000000000000
--- a/appengine_apps/trooper_o_matic/appengine_module/trooper_o_matic/alerts.py
+++ /dev/null
@@ -1,115 +0,0 @@
-# Copyright (c) 2014 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.
-
-import jinja2
-import json
-import os
-import webapp2
-
-from google.appengine.ext import ndb
-
-from appengine_module.trooper_o_matic import models
-
-
-JINJA_ENVIRONMENT = jinja2.Environment(
- loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__),
- 'templates')),
- extensions=['jinja2.ext.autoescape'],
- autoescape=True)
-
-
-def GetTreeStatusDict(project): # pragma: no cover
- stat = models.TreeOpenStat.query(
- models.TreeOpenStat.num_days == 7, ancestor=project).order(
- -models.TreeOpenStat.timestamp).get()
- if not stat:
- return {}
- return {
- 'should_alert': stat.percent_open < 80.0,
- 'percent_open': stat.percent_open,
- 'details': ('Tree %.2f%% open over last 7 days (must be > 80.0)' %
- stat.percent_open),
- 'url': ('https://trooper-o-matic.appspot.com/tree-status/%s' %
- project.id()),
- }
-
-def GetCqLatencyDict(project): # pragma: no cover
- stat = models.CqStat.query(ancestor=project).order(
- -models.CqStat.timestamp).get()
- if not stat:
- return {}
- if not stat.p50:
- return {
- 'should_alert': False,
- 'p50': None,
- 'p90': None,
- 'length': stat.length,
- 'details': 'No CQ jobs in last hour',
- 'url': 'https://trooper-o-matic.appspot.com/cq/%s' % project.id(),
- }
- return {
- 'should_alert': stat.p50 > 60 or stat.p90 > 180,
- 'p50': stat.p50,
- 'p90': stat.p90,
- 'length': stat.length,
- 'details': ('CQ latency is median %dm and 90th %dm '
- '(must be less than median 60m and 90th 180m' % (
- stat.p50, stat.p90)),
- 'url': 'https://trooper-o-matic.appspot.com/cq/%s' % project.id(),
- }
-
-def _GetPercent(numerator, denominator): # pragma: no cover
- if denominator == 0:
- return "0%"
- else:
- return "%.2f%%" % (float(numerator) / float(denominator) * 100)
-
-def GetCycleTimeDict(tree): # pragma: no cover
- stat = models.BuildTimeStat.query(ancestor=tree).order(
- -models.BuildTimeStat.timestamp).get()
- if not stat:
- return {}
- # TODO(sullivan): Make this account for clobber time.
- return {
- 'should_alert': (stat.num_over_max_slo > 0 or
- stat.num_over_median_slo > (stat.num_builds / 2)),
- 'num_builds': stat.num_builds,
- 'num_over_median_slo': stat.num_over_median_slo,
- 'percent_over_median_slo': _GetPercent(stat.num_over_median_slo,
- stat.num_builds),
- 'num_over_max_slo': stat.num_over_max_slo,
- 'percent_over_max_slo': _GetPercent(stat.num_over_max_slo,
- stat.num_builds),
- 'details': ('%d builds over their max, %d builds over their median' % (
- stat.num_over_max_slo, stat.num_over_median_slo)),
- 'url': 'https://trooper-o-matic.appspot.com/tree/%s' % tree.id()
- }
-
-def UpdateJsonForProject(name, status_dict): # pragma: no cover
- project = ndb.Key(models.Project, name)
- tree = ndb.Key(models.Tree, name)
- status_dict.setdefault('tree_status', {})[name] = GetTreeStatusDict(project)
- status_dict.setdefault('cq_latency', {})[name] = GetCqLatencyDict(project)
- status_dict.setdefault('cycle_time', {})[name] = GetCycleTimeDict(tree)
-
-
-class AlertsHandler(webapp2.RequestHandler): # pragma: no cover
-
- def get(self):
- status_dict = {}
- UpdateJsonForProject('blink', status_dict)
- UpdateJsonForProject('chromium', status_dict)
- self.response.headers.add_header('Access-Control-Allow-Origin', '*')
- self.response.write(json.dumps(status_dict))
-
-
-class OverviewHandler(webapp2.RequestHandler): # pragma: no cover
-
- def get(self):
- status_dict = {}
- UpdateJsonForProject('blink', status_dict)
- UpdateJsonForProject('chromium', status_dict)
-
- template = JINJA_ENVIRONMENT.get_template('overview.html')
- self.response.write(template.render(status_dict))

Powered by Google App Engine
This is Rietveld 408576698