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