[trigger] Going back to simplified version
This commit is contained in:
parent
8068f057e0
commit
091a2d161e
6 changed files with 287 additions and 292 deletions
|
@ -21,10 +21,10 @@ import itertools
|
|||
import traceback
|
||||
|
||||
import gestion.secrets_new as secrets
|
||||
|
||||
# Trigger features
|
||||
import gestion.config.trigger as trigger_config
|
||||
from gestion.trigger.host import TriggerFactory
|
||||
from gestion.trigger.services.service import BasicService
|
||||
from gestion.trigger.host import TriggerFactory, record_service, record_parser
|
||||
|
||||
# Clogger
|
||||
import cranslib.clogger as clogger
|
||||
|
@ -32,7 +32,7 @@ import cranslib.clogger as clogger
|
|||
# lc_ldap
|
||||
import lc_ldap.attributs
|
||||
|
||||
logger = clogger.CLogger("trigger", "event", "debug", trigger_config.debug)
|
||||
logger = clogger.CLogger("trigger", "event", trigger_config.log_level, trigger_config.debug)
|
||||
|
||||
services = []
|
||||
for config_service in trigger_config.all_services:
|
||||
|
@ -136,63 +136,52 @@ def compare_lists(list1, list2):
|
|||
|
||||
return moins, plus
|
||||
|
||||
class Event(BasicService):
|
||||
"""Event service class. It extends BasicService, but should not implement
|
||||
any change trigger, since it's this service which is designed to call
|
||||
change triggers of other services.
|
||||
|
||||
@record_service
|
||||
def event(body=()):
|
||||
"""When any event arrives on trigger-civet-event, this method is called
|
||||
and designed to transcript the body (ldap data) in something usable for
|
||||
the services. Afterwards, it sends these transcripts on the good way
|
||||
using routing_key.
|
||||
|
||||
body is a 3-tuple, containing LDAP dn, the former state of the object
|
||||
(a simple dict), and the later state. The data are non-binding-dependant.
|
||||
|
||||
A new object has body[1] to None, a deleted one has body[2] to None.
|
||||
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
def get_changes(cls, body, diff):
|
||||
"""Compute changes from diff"""
|
||||
logger.info("Received message %r…", body)
|
||||
|
||||
return [None]
|
||||
diff = diff_o_matic(body)
|
||||
|
||||
@classmethod
|
||||
def regen(cls, body=()):
|
||||
"""When any event arrives on trigger-civet-event, this method is called
|
||||
and designed to transcript the body (ldap data) in something usable for
|
||||
the services. Afterwards, it sends these transcripts on the good way
|
||||
using routing_key.
|
||||
# Now, diff is a dict containing attributes which has been modified.
|
||||
# diff['macAddress'] could look like (['aa:bb:cc:dd:ee:fg'], ['aa:bb:cc:dd:ee:ff']),
|
||||
# where the list on the left is the former value of attributes, and the list on the
|
||||
# right the latter values.
|
||||
|
||||
body is a 3-tuple, containing LDAP dn, the former state of the object
|
||||
(a simple dict), and the later state. The data are non-binding-dependant.
|
||||
# -*- Explain -*-
|
||||
#In [11]: import itertools
|
||||
#
|
||||
#In [12]: a = [[(3, 'lol'), ('7', 3)], [(5, 6), None], [None], [('lol', 'lal')]]
|
||||
#
|
||||
#In [13]: a
|
||||
#Out[13]: [[(3, 'lol'), ('7', 3)], [(5, 6), None], [None], [('lol', 'lal')]]
|
||||
#
|
||||
#In [14]: list(set([message for message in itertools.chain(*a)]))
|
||||
#Out[14]: [('7', 3), (5, 6), None, ('lol', 'lal'), (3, 'lol')] # Only one None from a, since [None, x, y, None] is equivalent for itertools to [x, y]
|
||||
#
|
||||
#In [15]: b = list(set([message for message in itertools.chain(*a) if message is not None]))
|
||||
#
|
||||
#In [16]: b
|
||||
#Out[16]: [('7', 3), (5, 6), ('lol', 'lal'), (3, 'lol')]
|
||||
functions = list(set([function for function in itertools.chain(*[TriggerFactory.get_parser(key) for key in diff])]))
|
||||
msg_to_send = [function(body, diff) for function in functions]
|
||||
|
||||
A new object has body[1] to None, a deleted one has body[2] to None.
|
||||
|
||||
"""
|
||||
|
||||
logger.info("Received message %r…", body)
|
||||
|
||||
diff = diff_o_matic(body)
|
||||
|
||||
# Now, diff is a dict containing attributes which has been modified.
|
||||
# diff['macAddress'] could look like (['aa:bb:cc:dd:ee:fg'], ['aa:bb:cc:dd:ee:ff']),
|
||||
# where the list on the left is the former value of attributes, and the list on the
|
||||
# right the latter values.
|
||||
|
||||
# -*- Explain -*-
|
||||
#In [11]: import itertools
|
||||
#
|
||||
#In [12]: a = [[(3, 'lol'), ('7', 3)], [(5, 6), None], [None], [('lol', 'lal')]]
|
||||
#
|
||||
#In [13]: a
|
||||
#Out[13]: [[(3, 'lol'), ('7', 3)], [(5, 6), None], [None], [('lol', 'lal')]]
|
||||
#
|
||||
#In [14]: list(set([message for message in itertools.chain(*a)]))
|
||||
#Out[14]: [('7', 3), (5, 6), None, ('lol', 'lal'), (3, 'lol')] # Only one None from a, since [None, x, y, None] is equivalent for itertools to [x, y]
|
||||
#
|
||||
#In [15]: b = list(set([message for message in itertools.chain(*a) if message is not None]))
|
||||
#
|
||||
#In [16]: b
|
||||
#Out[16]: [('7', 3), (5, 6), ('lol', 'lal'), (3, 'lol')]
|
||||
msg_to_send = [message for message in itertools.chain(*[service.get_changes(body, diff) for service in TriggerFactory.get_services()]) if message is not None]
|
||||
|
||||
for msg in msg_to_send:
|
||||
logger.info("Sending %r on the road \\o/", msg)
|
||||
# XXX - uncomment this when in production
|
||||
# trigger_send(*msg)
|
||||
for msg in msg_to_send:
|
||||
logger.info("Sending %r on the road \\o/", msg)
|
||||
# XXX - uncomment this when in production
|
||||
trigger_send(*msg)
|
||||
|
||||
def trigger_send(routing_key, body):
|
||||
sender = EventProducer("civet")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue