OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2011 The Chromium 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 var SocketPoolWrapper = (function() { |
| 6 'use strict'; |
| 7 |
| 8 /** |
| 9 * SocketPoolWrapper is a wrapper around socket pools entries. It's |
| 10 * used by the log and sockets view to print tables containing both |
| 11 * a synopsis of the state of all pools, and listing the groups within |
| 12 * individual pools. |
| 13 * |
| 14 * The constructor takes a socket pool and its parent, and generates a |
| 15 * unique name from the two, which is stored as |fullName|. |parent| |
| 16 * must itself be a SocketPoolWrapper. |
| 17 * |
| 18 * @constructor |
| 19 */ |
| 20 function SocketPoolWrapper(socketPool, parent) { |
| 21 this.origPool = socketPool; |
| 22 this.fullName = socketPool.name; |
| 23 if (this.fullName != socketPool.type) |
| 24 this.fullName += ' (' + socketPool.type + ')'; |
| 25 if (parent) |
| 26 this.fullName = parent.fullName + '->' + this.fullName; |
| 27 } |
| 28 |
| 29 /** |
| 30 * Returns an array of SocketPoolWrappers created from each of the socket |
| 31 * pools in |socketPoolInfo|. Nested socket pools appear immediately after |
| 32 * their parent, and groups of nodes from trees with root nodes with the same |
| 33 * id are placed adjacent to each other. |
| 34 */ |
| 35 SocketPoolWrapper.createArrayFrom = function(socketPoolInfo) { |
| 36 // Create SocketPoolWrappers for each socket pool and separate socket pools |
| 37 // them into different arrays based on root node name. |
| 38 var socketPoolGroups = []; |
| 39 var socketPoolNameLists = {}; |
| 40 for (var i = 0; i < socketPoolInfo.length; ++i) { |
| 41 var name = socketPoolInfo[i].name; |
| 42 if (!socketPoolNameLists[name]) { |
| 43 socketPoolNameLists[name] = []; |
| 44 socketPoolGroups.push(socketPoolNameLists[name]); |
| 45 } |
| 46 addSocketPoolsToList(socketPoolNameLists[name], socketPoolInfo[i], null); |
| 47 } |
| 48 |
| 49 // Merge the arrays. |
| 50 var socketPoolList = []; |
| 51 for (var i = 0; i < socketPoolGroups.length; ++i) { |
| 52 socketPoolList = socketPoolList.concat(socketPoolGroups[i]); |
| 53 } |
| 54 return socketPoolList; |
| 55 }; |
| 56 |
| 57 /** |
| 58 * Recursively creates SocketPoolWrappers from |origPool| and all its |
| 59 * children and adds them all to |socketPoolList|. |parent| is the |
| 60 * SocketPoolWrapper for the parent of |origPool|, or null, if it's |
| 61 * a top level socket pool. |
| 62 */ |
| 63 function addSocketPoolsToList(socketPoolList, origPool, parent) { |
| 64 var socketPool = new SocketPoolWrapper(origPool, parent); |
| 65 socketPoolList.push(socketPool); |
| 66 if (origPool.nested_pools) { |
| 67 for (var i = 0; i < origPool.nested_pools.length; ++i) { |
| 68 addSocketPoolsToList(socketPoolList, |
| 69 origPool.nested_pools[i], |
| 70 socketPool); |
| 71 } |
| 72 } |
| 73 } |
| 74 |
| 75 /** |
| 76 * Returns a table printer containing information on each |
| 77 * SocketPoolWrapper in |socketPools|. |
| 78 */ |
| 79 SocketPoolWrapper.createTablePrinter = function(socketPools) { |
| 80 var tablePrinter = new TablePrinter(); |
| 81 tablePrinter.addHeaderCell('Name'); |
| 82 tablePrinter.addHeaderCell('Handed Out'); |
| 83 tablePrinter.addHeaderCell('Idle'); |
| 84 tablePrinter.addHeaderCell('Connecting'); |
| 85 tablePrinter.addHeaderCell('Max'); |
| 86 tablePrinter.addHeaderCell('Max Per Group'); |
| 87 tablePrinter.addHeaderCell('Generation'); |
| 88 |
| 89 for (var i = 0; i < socketPools.length; i++) { |
| 90 var origPool = socketPools[i].origPool; |
| 91 |
| 92 tablePrinter.addRow(); |
| 93 tablePrinter.addCell(socketPools[i].fullName); |
| 94 |
| 95 tablePrinter.addCell(origPool.handed_out_socket_count); |
| 96 var idleCell = tablePrinter.addCell(origPool.idle_socket_count); |
| 97 var connectingCell = |
| 98 tablePrinter.addCell(origPool.connecting_socket_count); |
| 99 |
| 100 if (origPool.groups) { |
| 101 var idleSources = []; |
| 102 var connectingSources = []; |
| 103 for (var groupName in origPool.groups) { |
| 104 var group = origPool.groups[groupName]; |
| 105 idleSources = idleSources.concat(group.idle_sockets); |
| 106 connectingSources = connectingSources.concat(group.connect_jobs); |
| 107 } |
| 108 idleCell.link = sourceListLink(idleSources); |
| 109 connectingCell.link = sourceListLink(connectingSources); |
| 110 } |
| 111 |
| 112 tablePrinter.addCell(origPool.max_socket_count); |
| 113 tablePrinter.addCell(origPool.max_sockets_per_group); |
| 114 tablePrinter.addCell(origPool.pool_generation_number); |
| 115 } |
| 116 return tablePrinter; |
| 117 }; |
| 118 |
| 119 SocketPoolWrapper.prototype = { |
| 120 /** |
| 121 * Returns a table printer containing information on all a |
| 122 * socket pool's groups. |
| 123 */ |
| 124 createGroupTablePrinter: function() { |
| 125 var tablePrinter = new TablePrinter(); |
| 126 tablePrinter.setTitle(this.fullName); |
| 127 |
| 128 tablePrinter.addHeaderCell('Name'); |
| 129 tablePrinter.addHeaderCell('Pending'); |
| 130 tablePrinter.addHeaderCell('Top Priority'); |
| 131 tablePrinter.addHeaderCell('Active'); |
| 132 tablePrinter.addHeaderCell('Idle'); |
| 133 tablePrinter.addHeaderCell('Connect Jobs'); |
| 134 tablePrinter.addHeaderCell('Backup Timer'); |
| 135 tablePrinter.addHeaderCell('Stalled'); |
| 136 |
| 137 for (var groupName in this.origPool.groups) { |
| 138 var group = this.origPool.groups[groupName]; |
| 139 |
| 140 tablePrinter.addRow(); |
| 141 tablePrinter.addCell(groupName); |
| 142 tablePrinter.addCell(group.pending_request_count); |
| 143 if (group.top_pending_priority != undefined) |
| 144 tablePrinter.addCell(group.top_pending_priority); |
| 145 else |
| 146 tablePrinter.addCell('-'); |
| 147 |
| 148 tablePrinter.addCell(group.active_socket_count); |
| 149 var idleCell = tablePrinter.addCell(group.idle_sockets.length); |
| 150 var connectingCell = tablePrinter.addCell(group.connect_jobs.length); |
| 151 |
| 152 idleCell.link = sourceListLink(group.idle_sockets); |
| 153 connectingCell.link = sourceListLink(group.connect_jobs); |
| 154 |
| 155 tablePrinter.addCell( |
| 156 group.backup_job_timer_is_running ? 'started' : 'stopped'); |
| 157 tablePrinter.addCell(group.is_stalled); |
| 158 } |
| 159 return tablePrinter; |
| 160 } |
| 161 }; |
| 162 |
| 163 /** |
| 164 * Takes in a list of source IDs and returns a link that will select the |
| 165 * specified sources. |
| 166 */ |
| 167 function sourceListLink(sources) { |
| 168 if (!sources.length) |
| 169 return null; |
| 170 return '#events&q=id:' + sources.join(','); |
| 171 } |
| 172 |
| 173 return SocketPoolWrapper; |
| 174 })(); |
| 175 |
OLD | NEW |