Trees | Indices | Help |
---|
|
1 # -*- Mode: Python -*- 2 # vi:si:et:sw=4:sts=4:ts=4 3 # 4 # Flumotion - a streaming media server 5 # Copyright (C) 2004,2005,2006,2007,2008 Fluendo, S.L. (www.fluendo.com). 6 # All rights reserved. 7 8 # This file may be distributed and/or modified under the terms of 9 # the GNU General Public License version 2 as published by 10 # the Free Software Foundation. 11 # This file is distributed without any warranty; without even the implied 12 # warranty of merchantability or fitness for a particular purpose. 13 # See "LICENSE.GPL" in the source distribution for more information. 14 15 # Licensees having purchased or holding a valid Flumotion Advanced 16 # Streaming Server license may use this file in accordance with the 17 # Flumotion Advanced Streaming Server Commercial License Agreement. 18 # See "LICENSE.Flumotion" in the source distribution for more information. 19 20 # Headers in this file shall remain intact. 21 22 import time 23 import gettext 24 import os 25 import webbrowser 26 27 from flumotion.common.i18n import N_ 28 from flumotion.common.format import formatTime, formatStorage, formatTimeStamp 29 from flumotion.component.base.admin_gtk import BaseAdminGtk 30 from flumotion.component.base.baseadminnode import BaseAdminGtkNode 31 from flumotion.ui.linkwidget import LinkWidget 32 33 __version__ = "$Rev: 7618 $" 34 _ = gettext.gettext 35 3638126 12740 BaseAdminGtkNode.__init__(self, *args, **kwargs) 41 self._shown = False 42 self._state = None 43 self._reqStats = {} # {name: (widget, converter, format, default)}44 45 # BaseAdminGtkNode 4648 self._reqStats = {} 49 self.widget = self._initWidgets(self.wtree) 50 if self._state: 51 self._shown = True 52 self._refreshStats(self._state) 53 self.widget.show() 54 else: 55 self._defaultStats() 56 return self.widget57 58 # Public API 5961 """Update the state containing all information used by this 62 interface 63 @param state: 64 @type state: AdminComponentUIState 65 """ 66 # Set _stats regardless of if condition 67 # Used to be a race where _stats was 68 # not set if widget tree was gotten before 69 # ui state 70 self._state = state 71 72 if not self.widget: 73 # widget tree not created yet 74 return 75 76 # Update the statistics 77 self._refreshStats(state) 78 79 self._onStateSet(state) 80 81 if not self._shown: 82 # widget tree created but not yet shown 83 self._shown = True 84 self.widget.show_all()85 86 # Protected 87 90 93 96 99 100 # Private 101103 widget = self.wtree.get_widget('label-' + name) 104 if not widget: 105 self.warning("FIXME: no widget %s" % name) 106 return 107 self._reqStats[name] = (widget, converter, format, default)108110 for name in self._reqStats: 111 widget, converter, format, default = self._reqStats[name] 112 value = state.get(name) 113 if value is not None: 114 widget.set_text(format % converter(value)) 115 else: 116 widget.set_text(format % converter(default))117129 gladeFile = os.path.join('flumotion', 'component', 'misc', 130 'httpserver', 'httpserver.glade') 131201 202133 StatisticsAdminGtkNode.__init__(self, *args, **kwargs) 134 self._uptime = None 135 self._link = None136 137 # StatisticsAdminGtkNode 138140 statistics = wtree.get_widget('main_vbox') 141 self._uptime = wtree.get_widget('label-server-uptime') 142 self._regReqStat('current-request-count', _formatClientCount) 143 self._regReqStat('mean-request-count', _formatClientCount) 144 self._regReqStat('request-count-peak', _formatClientCount) 145 self._regReqStat('request-count-peak-time', _formatTimeStamp, 146 _("at %s")) 147 self._regReqStat('current-request-rate', _formatReqRate) 148 self._regReqStat('mean-request-rate', _formatReqRate) 149 self._regReqStat('request-rate-peak', _formatReqRate) 150 self._regReqStat('request-rate-peak-time', _formatTimeStamp, 151 _("at %s")) 152 self._regReqStat('total-bytes-sent', _formatBytes) 153 self._regReqStat('current-bitrate', _formatBitrate) 154 self._regReqStat('mean-bitrate', _formatBitrate) 155 self._regReqStat('bitrate-peak', _formatBitrate) 156 self._regReqStat('bitrate-peak-time', _formatTimeStamp, _("at %s")) 157 self._regReqStat('mean-file-read-ratio', _formatPercent) 158 return statistics159 160 # BaseAdminGtkNode 161 165 166 # StatisticsAdminGtkNode 167 170172 self._refreshStatistics({})173175 # Update the URI 176 uri = state.get('stream-url') 177 if uri is not None: 178 if not self._link: 179 self._link = self._createLinkWidget(uri) 180 else: 181 self._link.set_uri(uri) 182 183 # Update Server Uptime 184 uptime = state.get('server-uptime') 185 self._uptime.set_text(formatTime(uptime))186 187 # Private 188190 link = LinkWidget(uri) 191 link.set_callback(self._on_link_show_url) 192 link.show_all() 193 holder = self.wtree.get_widget('link-holder') 194 holder.add(link) 195 return link196 197 # Callbacks 198200 webbrowser.open_new(url)204 gladeFile = os.path.join('flumotion', 'component', 'misc', 205 'httpserver', 'httpserver.glade') 206 210 214 215 # StatisticsAdminGtkNode 216247 248218 statistics = wtree.get_widget('cache_vbox') 219 self._regReqStat('cache-usage-estimation', _formatBytes) 220 self._regReqStat('cache-usage-ratio-estimation', _formatPercent) 221 self._regReqStat('cache-hit-count') 222 self._regReqStat('temp-hit-count') 223 self._regReqStat('cache-miss-count') 224 self._regReqStat('cache-outdate-count') 225 self._regReqStat('cache-read-ratio', _formatPercent) 226 self._regReqStat('cleanup-count') 227 self._regReqStat('last-cleanup-time', _formatTimeStamp) 228 self._regReqStat('current-copy-count') 229 self._regReqStat('finished-copy-count') 230 self._regReqStat('cancelled-copy-count') 231 return statistics232 233 234 # BaseAdminGtkNode 235 239 240 # StatisticsAdminGtkNode 241 244246 self._refreshStatistics({})250 if isinstance(value, (int, long)): 251 format = gettext.ngettext(N_("%d client"), N_("%d clients"), value) 252 else: 253 format = gettext.ngettext(N_("%.2f client"), N_("%.2f clients"), value) 254 return format % value255 256258 return time.strftime("%c", time.localtime(value))259 260262 return _("%.2f requests/m") % float(value * 60)263 264 267 268 271 272 275 276278293 #FIXME: Same as for the setup method. 294 #if state: 295 # providerName = None 296 # providerStats = state.get("provider-statistics") 297 # if providerStats: 298 # providerName = providerStats.get("provider-name") 299 # if providerName and providerName.startswith("cached-"): 300 # self.nodes['Cache'].setStats(state) 301 # self.nodes["Cache"].show() 302 # else: 303 # self.nodes["Cache"].hide() 304 305 306 GUIClass = HTTPFileAdminGtk 307280 statistics = ServerStatsAdminGtkNode(self.state, self.admin, 281 _("Statistics")) 282 self.nodes['Statistics'] = statistics 283 #FIXME: We need to figure out how to create or delete 284 # a nodes after receiving the UI State, 285 # so we do not have a cache tab when not using a caching plug. 286 #cache = CacheStatsAdminGtkNode(self.state, self.admin, _("Cache")) 287 #self.nodes["Cache"] = cache 288 # FIXME: maybe make a protocol instead of overriding 289 return BaseAdminGtk.setup(self)290
Trees | Indices | Help |
---|
Generated by Epydoc 3.0.1 on Thu Jan 27 19:57:06 2011 | http://epydoc.sourceforge.net |