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

Unified Diff: appengine_apps/chromium_status/static/js/status_viewer/stats_view.js

Issue 778533003: Moved chromium_status 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/chromium_status/static/js/status_viewer/stats_view.js
diff --git a/appengine_apps/chromium_status/static/js/status_viewer/stats_view.js b/appengine_apps/chromium_status/static/js/status_viewer/stats_view.js
deleted file mode 100644
index 61375ff0858cb47af6f4d5c40f8d15d30688fdbb..0000000000000000000000000000000000000000
--- a/appengine_apps/chromium_status/static/js/status_viewer/stats_view.js
+++ /dev/null
@@ -1,266 +0,0 @@
-// Copyright (c) 2009 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.
-
-/**
- * Factory function to create a View for statistics.
- *
- * The statistics view shows some aggregate totals like how many total hours the
- * tree remained closed in the time range.
- */
-var CreateStatsView;
-
-// -----------------------------------------------------------------------------
-// Private implementation
-// -----------------------------------------------------------------------------
-
-(function() {
-
-CreateStatsView = function(timeRange, entries) {
- return new StatsView(timeRange, entries);
-}
-
-function StatsView(timeRange, entries) {
- DrawStatsView(timeRange, entries);
-}
-
-StatsView.prototype.Show = function(visible) {
- gViewerApp.ShowViewContentAndTabArea('stats', visible);
-}
-
-/**
- * Helper that does |map[key] += increment| (lazy-initializing to 0).
- */
-function IncrementProperty(map, key, increment) {
- var prevValue = map[key];
- if (prevValue == undefined)
- prevValue = 0;
- map[key] = prevValue + increment;
-}
-
-/**
- * Transforms a map from values --> counts to a list of
- * (value, count). This list is sorted by count.
- *
- * @param {Object} map
- * @param {Object} topCount How many of the top items to keep.
- * @return {array<Object>}
- */
-function GetTopItems(map, topCount) {
- var topItems = [];
-
- for (var key in map) {
- topItems.push({key: key, value: map[key]});
- }
-
- var sortFunc = function(a, b) {
- return b.value - a.value;
- };
-
- topItems.sort(sortFunc);
-
- if (topItems.length > topCount) {
- topItems.length = topCount;
- }
-
- return topItems;
-}
-
-/**
- * These are words we don't want to count as being "top" words.
- * They are fairly common, but not particularly useful.
- */
-var SKIP_WORDS = {
- "": true,
- "a": true,
- "and": true,
- "at": true,
- "be": true,
- "chromium": true,
- "closed": true,
- "com": true,
- "for": true,
- "from": true,
- "go": true,
- "google": true,
- "green": true,
- "if": true,
- "in": true,
- "is": true,
- "it": true,
- "on": true,
- "open": true,
- "org": true,
- "tests": true,
- "the": true,
- "throttled": true,
- "to": true,
- "too": true,
- "tree": true,
- "will": true
-};
-
-/**
- * Splits |str| into an array of words. Excludes any of the words in
- * |SKIP_WORDS|.
- *
- * @param {string} str
- * @return {array<string>}
- */
-function GetKeyWords(str) {
- var rawWords = str.split(/\W+/);
-
- var words = [];
-
- for (var i = 0; i < rawWords.length; ++i) {
- var word = rawWords[i].toLowerCase();
- if (!SKIP_WORDS[word]) {
- words.push(word);
- }
- }
-
- return words;
-}
-
-/**
- * Calculates a bunch of statistics for |runs| and returns it in
- * an object.
- *
- * @param {array<Run>} runs
- * @param {int} topN How may of the top words/authors to track.
- * @return {Object}
- */
-function CalculateStatistics(runs, topN) {
- var authors = {};
- var words = {};
-
- // Total times (in seconds) for all the statuses.
- var statusTotalsSeconds = new StatusTotals();
-
- // First we iterate through all the entries, and build a map from
- // word --> count.
- for (var i = 0; i < runs.length; ++i) {
- var run = runs[i];
-
- // Don't count our bogus entry, as it will mess up the top words/authors.
- if (run.entry.IsOracle())
- continue;
-
- IncrementProperty(authors, run.entry.author.toLowerCase(), 1);
-
- var durationSeconds = DateUtil.MillisToSeconds(run.duration);
- var state = run.entry.GetTreeState();
- statusTotalsSeconds.Increment(state, durationSeconds);
-
- // Split the message into keywords, and tally each of them up.
- var keywords = GetKeyWords(run.entry.message);
- for (var j = 0; j < keywords.length; ++j) {
- IncrementProperty(words, keywords[j], 1);
- }
- }
-
- return {
- topAuthors: GetTopItems(authors, topN),
- topWords: GetTopItems(words, topN),
- statusTotalsSeconds: statusTotalsSeconds
- };
-}
-
-function DrawTimeTotal(parent, title, x, total) {
- var text = title + ": " +
- FormatSeconds(x) + " of " + FormatSeconds(total) + " (" +
- ((x / total) * 100).toFixed(2) + "%)";
- DomUtil.AddText(parent, text);
- DomUtil.AddNode(parent, "br");
-}
-
-function DrawStatsView(timeRange, allEntries) {
- // Calculate the statistics we care about.
- var topN = 10;
- var stats = CalculateStatistics(MakeRuns(allEntries, timeRange), topN);
-
- var timeClosedDiv = document.getElementById("timeClosed");
- var topAuthorsDiv = document.getElementById("topAuthors");
- var topWordsDiv = document.getElementById("topWords");
-
- // Clear any existing gank from the HTML.
- timeClosedDiv.innerHTML = "";
- topAuthors.innerHTML = "";
- topWords.innerHTML = "";
-
- // Time open.
- var timeOpen = stats.statusTotalsSeconds.GetOpen();
-
- // Time closed due to maintenance.
- var timeMaintenance = stats.statusTotalsSeconds.GetClosedForMaintenance();
-
- // Time throttled.
- var timeThrottled = stats.statusTotalsSeconds.GetThrottled();
-
- // Total time.
- var total = stats.statusTotalsSeconds.GetTotalKnown();
-
- // Draw time totals.
- DrawTimeTotal(timeClosedDiv, "Total time open", timeOpen, total);
-
- DrawTimeTotal(timeClosedDiv, "Total time open (excluding maintenance)",
- timeOpen + timeMaintenance, total - timeMaintenance);
-
- DrawTimeTotal(timeClosedDiv, "Total time closed for maintenance",
- timeMaintenance, total);
-
- DrawTimeTotal(timeClosedDiv, "Total time throttled",
- timeThrottled, total);
-
- // Draw the top authors/words.
- DrawTopList(topAuthorsDiv, stats.topAuthors);
- DrawTopList(topWordsDiv, stats.topWords);
-}
-
-/**
- * Converts |t| which is a duration in seconds, into a human readable string.
- *
- * @param {int} t
- * @return {string}
- */
-function FormatSeconds(t) {
- var minutes = t / 60;
-
- if (minutes > 60) {
- var hours = minutes / 60;
- var precision = 1;
- if (hours > 50)
- precision = 0;
- return (hours).toFixed(precision) + " hours";
- }
-
- return minutes.toFixed(0) + " minutes";
-}
-
-/**
- * Draws a UL or OL to |parent|, populating it with |items|.
- * TODO(eroman): move this to DomUtil.
- *
- * @param {DOMNode} parent
- * @param {array<string>} items
- * @param {string} name Either "ul" or "ol".
- */
-function DrawList(parent, items, name) {
- var ul = DomUtil.AddNode(parent, name);
-
- for (var i = 0; i < items.length; ++i) {
- var li = DomUtil.AddNode(ul, "li");
- DomUtil.AddText(li, items[i]);
- }
-}
-
-function DrawTopList(parent, topList) {
- var items = [];
- for (var i = 0; i < topList.length; ++i) {
- var str = "[" + topList[i].value + "] " + topList[i].key;
- items.push(str);
- }
- DrawList(parent, items, "ol");
-}
-
-})(); // Private implementation.

Powered by Google App Engine
This is Rietveld 408576698