def __init__(self):
        super(EventForwarderToKafkaAction, self).__init__()

        self.sec_drop = global_conf.get('evtf-seconds-drop-flagsec', '900')
        self.msg_drop_flagsec = global_conf.get('evtf-msg-drop-flagsec', '')
        if self.msg_drop_flagsec.lower() == "true":
            self.msg_drop_flagsec = True
        else:
            self.msg_drop_flagsec = ''

        try:
            self.zKafka = KafkaHandler()
            self.kafkaAvailable = True
        except:
            #log.error(traceback.format_exc().splitlines()[-1])
            self.kafkaAvailable = False
class EventForwarderToKafkaAction(IActionBase):
    implements(IAction)

    id = 'eventForwarderToKafka'
    name = 'Event Forwarder To Kafka'
    actionContentInfo = IEventForwarderToKafkaActionContentInfo

    global_conf = getGlobalConfiguration()

    def __init__(self):
        super(EventForwarderToKafkaAction, self).__init__()

        self.sec_drop = global_conf.get('evtf-seconds-drop-flagsec', '900')
        self.msg_drop_flagsec = global_conf.get('evtf-msg-drop-flagsec', '')
        if self.msg_drop_flagsec.lower() == "true":
            self.msg_drop_flagsec = True
        else:
            self.msg_drop_flagsec = ''

        try:
            self.zKafka = KafkaHandler()
            self.kafkaAvailable = True
        except:
            #log.error(traceback.format_exc().splitlines()[-1])
            self.kafkaAvailable = False

    def setupAction(self, dmd):
        self.guidManager = GUIDManager(dmd)

    def execute(self, notification, signal):
        data = _signalToContextDict(signal, self.options.get('zopeurl'), notification, self.guidManager)
        if signal.clear and data['clearEventSummary'].uuid:
            event = data['clearEventSummary']
        else:
            event = data['eventSummary']

        actor = getattr(event, "actor", None)
        details = event.details
        fields = {
           'created_time' :                 ( 0, event),
           'uuid' :                         ( 1, event),
           'fingerprint' :                  ( 2, event),
           'element_identifier' :           ( 3, actor),
           'element_sub_identifier' :       ( 4, actor),
           'event_class' :                  ( 5, event),
           'event_key' :                    ( 6, event),
           'summary' :                      ( 7, event),
           'message' :                      ( 8, event),
           'severity' :                     ( 9, event),
           'status' :                       (10, event),
           'event_class_key' :              (11, event),
           'event_group' :                  (12, event),
           'status_change_time' :           (13, event),
           'first_seen_time' :              (14, event),
           'last_seen_time' :               (15, event),
           'count' :                        (16, event),
           'zenoss.device.production_state':(17, details),
           'monitor':                       (18, event),
           'manager':                       (19, details),
           'agent':                         (20, event),
           'zenoss.device.device_class':    (21, details),
           'zenoss.device.location' :       (22, details),
           'zenoss.device.systems' :        (23, details),
           'zenoss.device.groups' :         (24, details),
           'zenoss.device.ip_address':      (25, details),
           'syslog_facility' :              (26, event),
           'syslog_priority' :              (27, event),
           'nt_event_code' :                (28, event),
           'current_user_name' :            (29, event),
           'cleared_by_event_uuid' :        (31, event),
           'zenoss.device.priority' :       (32, details),
           'event_class_mapping_uuid':      (33, event),
           'element_title':                 (34, actor),
           'element_sub_title':             (35, actor),
           'originalTime':                  (36, details)
        }

        eventDict = self.createEventDict(fields, event)

        self.eventForwarderToKafkaAction(notification, data, eventDict)

    def eventForwarderToKafkaAction(self, notification, data, eventDict):
        """
        Forward events to Kafka.
        """
        log.info('Processing event forwarder action.')

        self.processEventDict(eventDict, data, notification.dmd)

        try:
            if self.kafkaAvailable:
                cur_time = time.time()
                created_time = eventDict['created_time'] / 1000.0
                forwarderLagSeconds = float(cur_time - created_time)
                if self.msg_drop_flagsec and forwarderLagSeconds > float(self.sec_drop):
                    log.warn("Dropping event ('%s') with forwarderLagSeconds > %s (%s)." % \
                             (eventDict['fingerprint'], self.sec_drop, forwarderLagSeconds))
                    return

                msg_evt = generate_evt_data(eventDict, 'zeneventforwardertokafka')
                log.debug("KAFKA Message: %s" % msg_evt)
                log.debug("Sending to kafkaTopic: %s" % notification.content['kafkaTopic'])
                fail_send = self.zKafka.send(msg_evt, notification.content['kafkaTopic'])
                if fail_send:
                    log.error("Problem sending to Kafka. Return Code: %s" % fail_send)
            else:
                log.error("Kafka is NOT available.")
        except:
            log.error(traceback.format_exc().splitlines()[-1])

    def createEventDict(self, fields, event):
        """
        Create an event dictionary suitable for Python evaluation.
        """
        eventDict = {}
        for field, oidspec in fields.items():
            i, source = oidspec
            if source is event.details:
                val = source.get(field, '')
            else:
                val = getattr(source, field, '')
            eventDict[field] = val
        return eventDict

    def processEventDict(self, eventDict, data, dmd):
        """
        Integration hook
        """
        pass


    def updateContent(self, content=None, data=None):
        updates = dict()
        updates['kafkaTopic'] = data.get('kafkaTopic', 'ie_zenoss')

        content.update(updates)