115 sconfig = Configuration(options=SOURCE_TYPES[sourcetype].options) |
115 sconfig = Configuration(options=SOURCE_TYPES[sourcetype].options) |
116 sconfig.adapter = sourcetype |
116 sconfig.adapter = sourcetype |
117 sconfig.input_config(inputlevel=inputlevel) |
117 sconfig.input_config(inputlevel=inputlevel) |
118 return sconfig |
118 return sconfig |
119 |
119 |
|
120 _MARKER=object() |
|
121 def func_name(func): |
|
122 name = getattr(func, '__name__', _MARKER) |
|
123 if name is _MARKER: |
|
124 name = getattr(func, 'func_name', _MARKER) |
|
125 if name is _MARKER: |
|
126 name = repr(func) |
|
127 return name |
120 |
128 |
121 class LoopTask(object): |
129 class LoopTask(object): |
122 """threaded task restarting itself once executed""" |
130 """threaded task restarting itself once executed""" |
123 def __init__(self, interval, func, args): |
131 def __init__(self, interval, func, args): |
124 if interval <= 0: |
132 if interval <= 0: |
125 raise ValueError('Loop task interval must be > 0 ' |
133 raise ValueError('Loop task interval must be > 0 ' |
126 '(current value: %f for %s)' % \ |
134 '(current value: %f for %s)' % \ |
127 (interval, func.__name__)) |
135 (interval, func_name(func))) |
128 self.interval = interval |
136 self.interval = interval |
129 def auto_restart_func(self=self, func=func, args=args): |
137 def auto_restart_func(self=self, func=func, args=args): |
130 try: |
138 try: |
131 func(*args) |
139 func(*args) |
132 finally: |
140 finally: |
133 self.start() |
141 self.start() |
134 self.func = auto_restart_func |
142 self.func = auto_restart_func |
135 self.name = func.__name__ |
143 self.name = func_name(func) |
136 |
144 |
137 def __str__(self): |
145 def __str__(self): |
138 return '%s (%s seconds)' % (self.name, self.interval) |
146 return '%s (%s seconds)' % (self.name, self.interval) |
139 |
147 |
140 def start(self): |
148 def start(self): |
160 func() |
168 func() |
161 finally: |
169 finally: |
162 self.running_threads.remove(self) |
170 self.running_threads.remove(self) |
163 Thread.__init__(self, target=auto_remove_func) |
171 Thread.__init__(self, target=auto_remove_func) |
164 self.running_threads = running_threads |
172 self.running_threads = running_threads |
165 self._name = target.__name__ |
173 self._name = func_name(target) |
166 |
174 |
167 def start(self): |
175 def start(self): |
168 self.running_threads.append(self) |
176 self.running_threads.append(self) |
169 self.daemon = True |
177 self.daemon = True |
170 Thread.start(self) |
178 Thread.start(self) |