Package flumotion :: Package component :: Package base :: Module componentnode
[hide private]

Source Code for Module flumotion.component.base.componentnode

  1  # -*- Mode: Python; test-case-name: flumotion.test.test_feedcomponent010 -*- 
  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  """ 
 23  Component tab in the component UI 
 24  """ 
 25   
 26  import gettext 
 27  import os 
 28  import time 
 29   
 30  import gtk 
 31   
 32  from flumotion.common.format import formatStorage, formatTime 
 33  from flumotion.common.i18n import gettexter 
 34  from flumotion.component.base.baseadminnode import BaseAdminGtkNode 
 35  from flumotion.extern.log.log import getDebug 
 36  from flumotion.common.planet import AdminFlowState 
 37   
 38   
 39  _ = gettext.gettext 
 40  __version__ = "$Rev: 8560 $" 
 41  T_ = gettexter() 
 42   
 43   
44 -class ComponentAdminGtkNode(BaseAdminGtkNode):
45 gladeFile = os.path.join('flumotion', 'component', 'base', 46 'component.glade') 47
48 - def __init__(self, state, admin):
49 BaseAdminGtkNode.__init__(self, state, admin, title=_("Component")) 50 51 self._startTime = None 52 self._debugging = None 53 self._initialFluMask = '' 54 self._initialGstMask = ''
55
56 - def setDebugEnabled(self, enabled):
57 BaseAdminGtkNode.setDebugEnabled(self, enabled) 58 if self._debugging: 59 self._debugging.set_property('visible', enabled) 60 61 self._initialFluMask = getDebug() 62 self._initialGstMask = os.environ.get('GST_DEBUG', '')
63
64 - def haveWidgetTree(self):
65 self.widget = self.wtree.get_widget('main-vbox') 66 assert self.widget, "No component-widget in %s" % self.gladeFile 67 self.gst_mask = self.wtree.get_widget('gst_mask') 68 self.gst_mask.connect('changed', self._on_gst_mask_changed) 69 self.gst_label = self.wtree.get_widget('gst_label') 70 self.flu_mask = self.wtree.get_widget('flu_mask') 71 self.flu_mask.connect('changed', self._on_flu_mask_changed) 72 self.gst_profile = self.wtree.get_widget('gst_profile') 73 self.gst_profile.connect('changed', self._on_gst_profile_changed) 74 self.flu_profile = self.wtree.get_widget('flu_profile') 75 self.flu_profile.connect('changed', self._on_flu_profile_changed) 76 77 # pid 78 l = self.wtree.get_widget('label-pid') 79 pid = self.state.get('pid') 80 l.set_text(str(pid)) 81 82 # Find the labels which we'll update when we get uiState updates. 83 self._label_start_time = self.wtree.get_widget('label-since') 84 self._label_uptime = self.wtree.get_widget('label-uptime') 85 self._label_cpu = self.wtree.get_widget('label-cpu') 86 self._label_vsize = self.wtree.get_widget('label-vsize') 87 self._label_component_type = self.wtree.get_widget( 88 'label-component-type') 89 90 self._label_resets = self.wtree.get_widget('label-resets') 91 self._label_resets_count = self.wtree.get_widget('label-resets-count') 92 self.widget.show() 93 94 self._prepareDebugging() 95 96 self._debugging = self.wtree.get_widget('debugging') 97 if self._debugEnabled: 98 self._debugging.show() 99 100 componentType = self.state.get('config')['type'] 101 self._label_component_type.set_text(componentType) 102 103 return self.widget
104
105 - def _validateMask(self, mask):
106 if ':' not in mask or mask.count(':') != 1: 107 return False 108 name, level = mask.split(':', 1) 109 try: 110 int(level) 111 except ValueError: 112 return False 113 return True
114
115 - def _on_gst_profile_changed(self, combo):
116 profile = combo.get_selected() 117 if profile is not None: 118 gtk.Entry.set_text(self.gst_mask, profile) 119 self.gst_mask.set_sensitive(profile is None)
120
121 - def _on_flu_profile_changed(self, combo):
122 profile = combo.get_selected() 123 if profile is not None: 124 gtk.Entry.set_text(self.flu_mask, profile) 125 self.flu_mask.set_sensitive(profile is None)
126
127 - def _on_flu_mask_changed(self, entry):
128 debug = entry.get_text() 129 if not self._debugEnabled or not self._validateMask(debug): 130 return 131 self.info('setting flu debug to %s for %s' % ( 132 debug, self.state.get('name'))) 133 self.admin.componentCallRemote(self.state, 'setFluDebug', debug)
134
135 - def _on_gst_mask_changed(self, entry):
136 debug = entry.get_text() 137 if not self._debugEnabled or not self._validateMask(debug): 138 return 139 self.info('setting gst debug to %s for %s' % ( 140 debug, self.state.get('name'))) 141 self.admin.componentCallRemote(self.state, 'setGstDebug', debug)
142
143 - def _prepareDebugging(self):
144 debugEnabled = self._debugEnabled 145 self._debugEnabled = False 146 default = [(_('Nothing'), '*:0'), 147 (_('Everything'), '*:4'), 148 (_('Custom'), None)] 149 self.flu_profile.prefill(default) 150 151 if isinstance(self.state.get('parent'), AdminFlowState): 152 self.gst_profile.prefill(default) 153 else: 154 self.gst_profile.hide() 155 self.gst_label.hide() 156 self.gst_mask.hide() 157 158 self._debugEnabled = debugEnabled
159
160 - def _setStartTime(self, value):
161 self._label_start_time.set_text( 162 time.strftime("%c", time.localtime(value))) 163 self._label_uptime.set_text(formatTime(0)) 164 165 self._startTime = value
166
167 - def _setCurrentTime(self, value):
168 if self._startTime is not None: 169 runtime = value - self._startTime 170 171 self._label_uptime.set_text(formatTime(runtime)) 172 else: 173 self._label_uptime.set_text(_("not available"))
174
175 - def _updateCPU(self, cpu):
176 # given float for cpu, update the label 177 self._label_cpu.set_text('%.2f %%' % (cpu * 100.0))
178
179 - def _updateVSize(self, vsize):
180 # given int for vsize in bytes, update the label 181 if not vsize: 182 self._label_vsize.set_text(_('Unknown')) 183 else: 184 self._label_vsize.set_text('%sB' % formatStorage(vsize))
185
186 - def _updateResets(self, count):
187 if not self._label_resets.get_property('visible'): 188 self._label_resets.show() 189 self._label_resets_count.show() 190 self._label_resets_count.set_text('%d restarts' % count)
191
192 - def setUIState(self, uiState):
193 BaseAdminGtkNode.setUIState(self, uiState) 194 195 # Ick; we don't get these otherwise. 196 for key in uiState.keys(): 197 val = uiState.get(key) 198 if val is not None: 199 self.stateSet(uiState, key, uiState.get(key))
200 201 # IStateListener Interface 202
203 - def stateSet(self, object, key, value):
204 if key == 'cpu-percent': 205 self._updateCPU(value) 206 elif key == 'virtual-size': 207 self._updateVSize(value) 208 elif key == 'start-time': 209 self._setStartTime(value) 210 elif key == 'current-time': 211 self._setCurrentTime(value) 212 elif key == 'reset-count': 213 self._updateResets(value)
214
215 - def stateAppend(self, object, key, value):
216 pass
217
218 - def stateRemove(self, object, key, value):
219 pass
220