1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
"""
Send all events to a DB function.
"""
import skytools
from londiste.handler import BaseHandler
__all__ = ['ApplyFuncHandler']
class ApplyFuncHandler(BaseHandler):
"""Call DB function to apply event.
Parameters:
func_name=NAME - database function name
func_conf=CONF - database function conf
"""
handler_name = 'applyfn'
def prepare_batch(self, batch_info, dst_curs):
self.cur_tick = batch_info['tick_id']
def process_event(self, ev, sql_queue_func, qfunc_arg):
"""Ignore events for this table"""
fn = self.args.get('func_name')
fnconf = self.args.get('func_conf', '')
args = [fnconf, self.cur_tick,
ev.ev_id, ev.ev_time,
ev.ev_txid, ev.ev_retry,
ev.ev_type, ev.ev_data,
ev.ev_extra1, ev.ev_extra2,
ev.ev_extra3, ev.ev_extra4]
qfn = skytools.quote_fqident(fn)
qargs = [skytools.quote_literal(a) for a in args]
sql = "select %s(%s);" % (qfn, ', '.join(qargs))
self.log.debug('applyfn.sql: %s', sql)
sql_queue_func(sql, qfunc_arg)
#------------------------------------------------------------------------------
# register handler class
#------------------------------------------------------------------------------
__londiste_handlers__ = [ApplyFuncHandler]
|