如何在Zenoss映射中导入DMD?

时间:2013-06-15 17:25:49

标签: mysql solaris python-2.4 zenoss

我有Solaris 10 + Zenoss 2.7.0 ,如果没有Oracle许可证我无法升级,所以我尝试找到解决方法,这就是我寻求帮助的原因。

我需要阻止事件移动到历史记录表,对于在过去5分钟内收到的同一设备的任何事件,如果计数超过5,则阻止事件。

这就是我尝试做的事情(映射位于 / Unknown / linkUp

try:
    import Globals
    import sys
    from Products.ZenUtils.ZenScriptBase import ZenScriptBase
except Exception as error:
    logging.error('ApplyTestZSB. Cannot import ZenScriptBase: %s\n' % error)
    sys.exit(1)

dmd = None

try:
    dmd = ZenScriptBase(connect=True).dmd
except Exception as error:
    logging.error(
        'ApplyTestDMD. Connection to zenoss dmd failed: %s\n' % error)
    sys.exit(1)

ourMessage = str(getattr(evt, "message"))
ourDevice = str(evt.device)
ourLastTime = float(evt.lastTime)
old_elements = 0

if evt.device and evt.component and evt.eventClass and evt.eventKey:
    ourDedupId = '|'.join(
        [evt.device, evt.component, evt.eventClass, evt.eventKey, ''])

for event in dmd.ZenEventManager.getEventList():
    if (event.lastTime > ourLastTime - 301) and \
        ((ourDedupId in str(event.dedupid) and event.severity > 0) or
         (ourMessage == event.message and ourDevice == event.device)):
        old_elements += event.count

if old_elements > 4:
    evt._action = 'drop'

我在zenhub.log中遇到此错误:

2013-06-15 21:21:11 ERROR zen.Events: Error transforming EventClassInst linkUp (1)
2013-06-15 21:21:20 ERROR root: ApplyTestDMD. Connection to zenoss dmd failed: 2

2013-06-15 21:21:20 ERROR zen.Events: Error transforming EventClassInst linkUp (1)
2013-06-15 21:21:24 ERROR root: ApplyTestDMD. Connection to zenoss dmd failed: 2

2013-06-15 21:21:24 ERROR zen.Events: Error transforming EventClassInst linkUp (1)
2013-06-15 21:21:28 ERROR root: ApplyTestDMD. Connection to zenoss dmd failed: 2

2013-06-15 21:21:28 ERROR zen.Events: Error transforming EventClassInst linkUp (1)

提前谢谢!

1 个答案:

答案 0 :(得分:1)

完全从脚本中删除dmd,它已在执行事件转换期间在locals()中定义。没有必要自己定义它,就像已经定义了evt一样。

要自己查看,请定义以下一行事件转换,然后使用事件控制台添加按钮为刚刚创建转换的事件类添加新事件,以便快速测试:

evt.summary = str(locals()中的'dmd')

您应该在事件的摘要中看到一个True,这意味着已经定义了dmd,并且可以使用了:)