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