1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 """
19 Eaters tab in the component UI
20 """
21
22 import gettext
23 import os
24 import time
25
26 import gtk
27
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', 'eaters.glade')
40
42 BaseAdminGtkNode.__init__(self, state, admin, title=_("Eaters"))
43
44
45 self.treemodel = None
46 self.treeview = None
47 self._selected = None
48 self.labels = {}
49 self._lastConnect = 0
50 self._lastDisconnect = 0
51
53 if self._selected:
54 self._selected.hide()
55 if watcher:
56 self._selected = watcher
57 self._selected.show()
58 else:
59 self._selected = None
60
62 if value is None:
63 self._table_connected.hide()
64 self._table_disconnected.show()
65 else:
66 self._table_disconnected.hide()
67 self._table_connected.show()
68
70 self.labels['eater-name'].set_markup(_('Eater <b>%s</b>') % value)
71
77
79 if key == 'feed-id':
80 self.labels['eating-from'].set_text(str(value))
81
82 elif key == 'count-timestamp-discont':
83 self.labels['timestamp-discont-count-current'].set_text(str(value))
84 if value > 0:
85 self._expander_discont_current.show()
86 elif key == 'time-timestamp-discont':
87 text = formatting.formatTimeStamp(time.localtime(value))
88 self.labels['timestamp-discont-time-current'].set_text(text)
89 if value is not None:
90 self._vbox_timestamp_discont_current.show()
91 elif key == 'last-timestamp-discont':
92 text = formatting.formatTime(value, fractional=9)
93 self.labels['timestamp-discont-last-current'].set_text(text)
94 if value > 0.0:
95 self._vbox_timestamp_discont_current.show()
96 elif key == 'total-timestamp-discont':
97 text = formatting.formatTime(value, fractional=9)
98 self.labels['timestamp-discont-total-current'].set_text(text)
99 if value > 0.0:
100 self._vbox_timestamp_discont_current.show()
101 elif key == 'timestamp-timestamp-discont':
102 if value is None:
103 return
104 text = formatting.formatTime(value, fractional=9)
105 self.labels['timestamp-discont-timestamp-current'].set_text(text)
106
107 elif key == 'count-offset-discont':
108 self.labels['offset-discont-count-current'].set_text(str(value))
109 if value > 0:
110 self._expander_discont_current.show()
111 elif key == 'time-offset-discont':
112 text = formatting.formatTimeStamp(time.localtime(value))
113 self.labels['offset-discont-time-current'].set_text(text)
114 if value is not None:
115 self._vbox_offset_discont_current.show()
116 elif key == 'last-offset-discont':
117 text = _("%d units") % value
118 self.labels['offset-discont-last-current'].set_text(text)
119 if value > 0:
120 self._vbox_offset_discont_current.show()
121 elif key == 'total-offset-discont':
122 text = _("%d units") % value
123 self.labels['offset-discont-total-current'].set_text(text)
124 if value > 0:
125 self._vbox_offset_discont_current.show()
126 elif key == 'offset-offset-discont':
127 if value is None:
128 return
129 text = _("%d units") % value
130 self.labels['offset-discont-offset-current'].set_text(text)
131 if value > 0:
132 self._vbox_offset_discont_current.show()
133
135 if value is None:
136 return
137 self.labels['timestamp-discont-count-total'].set_text(str(value))
138 if value > 0.0:
139 self._expander_discont_total.show()
140
142 if value is None:
143 return
144 text = formatting.formatTime(value, fractional=9)
145 self.labels['timestamp-discont-total'].set_text(text)
146 if value > 0.0:
147 self._vbox_timestamp_discont_total.show()
148
150 if value is None:
151 return
152 self.labels['offset-discont-count-total'].set_text(str(value))
153 if value != 0:
154 self._expander_discont_total.show()
155
157 if value is None:
158 return
159 text = _("%d units") % value
160 self.labels['offset-discont-total'].set_text(text)
161 if value != 0:
162 self._vbox_offset_discont_total.show()
163
172
174 self.labels['connections-total'].set_text(str(value))
175
176
177
178
185
186
187
189 if self._lastConnect:
190 text = formatting.formatTime(time.time() - self._lastConnect)
191 self.labels['connection-time'].set_text(text)
192
193
194
196 if self._lastDisconnect:
197 text = formatting.formatTime(time.time() - self._lastDisconnect)
198 self.labels['disconnection-time'].set_text(text)
199
201 """
202 @param uiState: the component's uiState
203 @param state: the eater's uiState
204 """
205 eaterId = state.get('eater-alias')
206 i = self.treemodel.append(None)
207 self.treemodel.set(i, 0, eaterId, 1, state)
208 w = StateWatcher(state,
209 {
210 'fd': self._setEaterFD,
211 'eater-alias': self._setEaterName,
212 'last-connect': self._setEaterLastConnect,
213 'count-timestamp-discont': self._setEaterCountTimestampDiscont,
214 'total-timestamp-discont': self._setEaterTotalTimestampDiscont,
215 'count-offset-discont': self._setEaterCountOffsetDiscont,
216 'total-offset-discont': self._setEaterTotalOffsetDiscont,
217 'total-connections': self._setEaterTotalConnections,
218
219
220 'connection': self._setEaterConnection,
221 },
222 {},
223 {},
224 setitemers={'connection': self._setEaterConnectionItem,
225 },
226 delitemers={})
227 self.treemodel.set(i, 2, w)
228
235
257
258 for name in (
259 'eater-name', 'connected-since', 'connection-time',
260 'eating-from', 'timestamp-discont-timestamp-current',
261 'offset-discont-offset-current',
262 'timestamp-discont-count-current', 'offset-discont-count-current',
263 'timestamp-discont-total-current', 'offset-discont-total-current',
264 'timestamp-discont-last-current', 'offset-discont-last-current',
265 'timestamp-discont-time-current', 'offset-discont-time-current',
266 'timestamp-discont-count-total', 'offset-discont-count-total',
267 'timestamp-discont-total', 'offset-discont-total',
268 'connections-total',
269 ):
270 set_label(name)
271
272
273
274 def sel_changed(sel):
275 model, i = sel.get_selected()
276 self.select(i and model.get_value(i, 2))
277 self.wtree.get_widget('box-right').show()
278
279 sel.connect('changed', sel_changed)
280
281
282 self._table_connected = self.wtree.get_widget(
283 'table-current-connected')
284 self._table_disconnected = self.wtree.get_widget(
285 'table-current-disconnected')
286 self._table_eater = self.wtree.get_widget('table-eater')
287 self._expander_discont_current = self.wtree.get_widget(
288 'expander-discont-current')
289 self._vbox_timestamp_discont_current = self.wtree.get_widget(
290 'vbox-timestamp-discont-current')
291 self._vbox_offset_discont_current = self.wtree.get_widget(
292 'vbox-offset-discont-current')
293
294 self._expander_discont_total = self.wtree.get_widget(
295 'expander-discont-total')
296 self._vbox_timestamp_discont_total = self.wtree.get_widget(
297 'vbox-timestamp-discont-total')
298 self._vbox_offset_discont_total = self.wtree.get_widget(
299 'vbox-offset-discont-total')
300
301
302 self.wtree.get_widget('scrolledwindow').show_all()
303
304
305 self._expander_discont_current.hide()
306 self._table_connected.hide()
307 self._table_disconnected.hide()
308 self._expander_discont_total.hide()
309
310
311 self.wtree.get_widget('box-right').hide()
312
313
314
315
316 self.widget.show()
317 return self.widget
318