1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 """
23 Feeders tab in the component UI
24 """
25 import gettext
26 import os
27 import time
28
29 import gtk
30
31 from flumotion.common import common
32 from flumotion.common.format import formatStorage, formatTime, formatTimeStamp
33 from flumotion.common.i18n import gettexter
34 from flumotion.component.base.baseadminnode import BaseAdminGtkNode
35 from flumotion.component.base.statewatcher import StateWatcher
36
37 _ = gettext.gettext
38 __version__ = "$Rev: 7089 $"
39 T_ = gettexter()
40
41
43 gladeFile = os.path.join('flumotion', 'component', 'base', 'feeders.glade')
44
46 BaseAdminGtkNode.__init__(self, state, admin, title=_("Feeders"))
47
48
49
50 self.treemodel = None
51 self.treeview = None
52 self.selected = None
53 self.labels = {}
54 self._lastConnect = 0
55 self._lastDisconnect = 0
56
58 if self.selected:
59 self.selected.hide()
60 if watcher:
61 self.selected = watcher
62 self.selected.show()
63 else:
64 self.selected = None
65
67 self.labels['feeder-name'].set_markup(_('Feeder <b>%s</b>') % value)
68
75
77 if not value:
78 self.labels['eater-name'].set_markup(_('<i>select an eater</i>'))
79 return
80 value = self._mungeClientId(value)
81 self.labels['eater-name'].set_markup(_('<b>%s</b>')
82 % (value,))
83
89
97
99 txt = value and (formatStorage(value) + _('Byte')) or ''
100 self.labels['bytes-read-total'].set_text(txt)
101
103 if value is None:
104
105 value = _("Unknown")
106 self.labels['buffers-dropped-total'].set_text(str(value))
107
109 self.labels['connections-total'].set_text(str(value))
110
117
124
129
131 if value == None:
132
133 self._table_connected.hide()
134 self._table_disconnected.show()
135 else:
136 self._table_disconnected.hide()
137 self._table_connected.show()
138
139
141 if self._lastConnect:
142 text = formatTime(time.time() - self._lastConnect)
143 self.labels['connection-time'].set_text(text)
144
145
147 if self._lastDisconnect:
148 text = formatTime(time.time() - self._lastDisconnect)
149 self.labels['disconnection-time'].set_text(text)
150
152 """
153 @param uiState: the component's uiState
154 @param state: the feeder's uiState
155 """
156 feederName = state.get('feederName')
157 i = self.treemodel.append(None)
158 self.treemodel.set(i, 0, feederName, 1, state)
159 w = StateWatcher(state,
160 {'feederName': self.setFeederName},
161 {'clients': self.addFeederClient},
162 {'clients': self.removeFeederClient})
163 self.treemodel.set(i, 2, w, 3, 'feeder')
164 self.treeview.expand_all()
165
166
168 """
169 @param feederState: the component's uiState
170 @param state: the feeder client's uiState
171 """
172
173 printableClientId = self._mungeClientId(state.get('client-id'))
174 for row in self.treemodel:
175 if self.treemodel.get_value(row.iter, 1) == feederState:
176 break
177 i = self.treemodel.append(row.iter)
178 self.treemodel.set(i, 0, printableClientId, 1, state)
179 w = StateWatcher(state, {
180 'client-id': self.setFeederClientName,
181 'bytes-read-current': self.setFeederClientBytesReadCurrent,
182 'buffers-dropped-current': self.setFeederClientBuffersDroppedCurrent,
183 'bytes-read-total': self.setFeederClientBytesReadTotal,
184 'buffers-dropped-total': self.setFeederClientBuffersDroppedTotal,
185 'reconnects': self.setFeederClientReconnects,
186 'last-connect': self.setFeederClientLastConnect,
187 'last-disconnect': self.setFeederClientLastDisconnect,
188 'last-activity': self.setFeederClientLastActivity,
189 'fd': self.setFeederClientFD,
190 }, {}, {})
191 self.treemodel.set(i, 2, w, 3, 'client')
192 self.treeview.expand_all()
193
195 for row in self.treemodel:
196 if self.treemodel.get_value(row.iter, 1) == feederState:
197 break
198 for row in row.iterchildren():
199 if self.treemodel.get_value(row.iter, 1) == state:
200 break
201 state, watcher = self.treemodel.get(row.iter, 1, 2)
202 if watcher == self.selected:
203 self.select(None)
204 watcher.unwatch()
205 self.treemodel.remove(row.iter)
206
216
239
240 sel.connect('changed', sel_changed)
241
242 def set_label(name):
243 self.labels[name] = self.wtree.get_widget('label-' + name)
244
245 self.labels[name].set_text('')
246
247 for name in ('feeder-name', 'eater-name',
248 'bytes-read-current', 'buffers-dropped-current',
249 'connected-since', 'connection-time',
250 'disconnected-since', 'disconnection-time',
251 'bytes-read-total', 'buffers-dropped-total',
252 'connections-total', 'last-activity'):
253 set_label(name)
254
255 self._table_connected = self.wtree.get_widget('table-current-connected')
256 self._table_disconnected = self.wtree.get_widget(
257 'table-current-disconnected')
258 self._table_feedclient = self.wtree.get_widget('table-feedclient')
259 self._table_connected.hide()
260 self._table_disconnected.hide()
261 self._table_feedclient.hide()
262 self.wtree.get_widget('box-right').hide()
263
264 return self.widget
265