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$"
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
140
142 if self._lastConnect:
143 text = formatTime(time.time() - self._lastConnect)
144 self.labels['connection-time'].set_text(text)
145
146
147
149 if self._lastDisconnect:
150 text = formatTime(time.time() - self._lastDisconnect)
151 self.labels['disconnection-time'].set_text(text)
152
154 """
155 @param uiState: the component's uiState
156 @param state: the feeder's uiState
157 """
158 feederName = state.get('feederName')
159 i = self.treemodel.append(None)
160 self.treemodel.set(i, 0, feederName, 1, state)
161 w = StateWatcher(state,
162 {'feederName': self.setFeederName},
163 {'clients': self.addFeederClient},
164 {'clients': self.removeFeederClient})
165 self.treemodel.set(i, 2, w, 3, 'feeder')
166 self.treeview.expand_all()
167
168
169
171 """
172 @param feederState: the component's uiState
173 @param state: the feeder client's uiState
174 """
175
176 printableClientId = self._mungeClientId(state.get('client-id'))
177 for row in self.treemodel:
178 if self.treemodel.get_value(row.iter, 1) == feederState:
179 break
180 i = self.treemodel.append(row.iter)
181 self.treemodel.set(i, 0, printableClientId, 1, state)
182 w = StateWatcher(state,
183 {
184 'client-id': self.setFeederClientName,
185 'bytes-read-current': self.setFeederClientBytesReadCurrent,
186 'buffers-dropped-current':
187 self.setFeederClientBuffersDroppedCurrent,
188 'bytes-read-total': self.setFeederClientBytesReadTotal,
189 'buffers-dropped-total': self.setFeederClientBuffersDroppedTotal,
190 'reconnects': self.setFeederClientReconnects,
191 'last-connect': self.setFeederClientLastConnect,
192 'last-disconnect': self.setFeederClientLastDisconnect,
193 'last-activity': self.setFeederClientLastActivity,
194 'fd': self.setFeederClientFD,
195 }, {}, {})
196 self.treemodel.set(i, 2, w, 3, 'client')
197 self.treeview.expand_all()
198
200 for row in self.treemodel:
201 if self.treemodel.get_value(row.iter, 1) == feederState:
202 break
203 for row in row.iterchildren():
204 if self.treemodel.get_value(row.iter, 1) == state:
205 break
206 state, watcher = self.treemodel.get(row.iter, 1, 2)
207 if watcher == self.selected:
208 self.select(None)
209 watcher.unwatch()
210 self.treemodel.remove(row.iter)
211
221
248
249 sel.connect('changed', sel_changed)
250
251 def set_label(name):
252 self.labels[name] = self.wtree.get_widget('label-' + name)
253
254 self.labels[name].set_text('')
255
256 for name in ('feeder-name', 'eater-name',
257 'bytes-read-current', 'buffers-dropped-current',
258 'connected-since', 'connection-time',
259 'disconnected-since', 'disconnection-time',
260 'bytes-read-total', 'buffers-dropped-total',
261 'connections-total', 'last-activity'):
262 set_label(name)
263
264 self._table_connected = self.wtree.get_widget(
265 'table-current-connected')
266 self._table_disconnected = self.wtree.get_widget(
267 'table-current-disconnected')
268 self._table_feedclient = self.wtree.get_widget('table-feedclient')
269 self._table_connected.hide()
270 self._table_disconnected.hide()
271 self._table_feedclient.hide()
272 self.wtree.get_widget('box-right').hide()
273
274 return self.widget
275