C целью упрощения дебага было бы полезно иметь возможность сериализовать  ивент например в json. В таком виде его можно будет целиком залогировать функцией trace.
				
			This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Show posts Menusub main() {
	key="IF_UNEXP_UP_".$event->parameters[1]."_".d2x($event->id);
	trace(1, "Checking key ".key);
	if	(FindAlarmByKey(key) == null) {
		trace(1, "key" .key." Not found. disable event rule");
		return false;
	}
	return true;
}
				Quote
Не генерировать UP/EXPECTED DOWN события если интерфейс выходит из состояния UNKNOWN. Единственная возможная проблема которую я вижу - если интерфейс был например UP, пропала связь с SNMP агентом, интерфейс стал UNKNOWN. Потом связь восстановилась, но интерфейс уже DOWN к этому моменту. Тогда не будет события, которое на самом деле информативно.
QuoteЭту проблему можно было бы решить галкой типа "suppress event if key not found" - то есть если ключ IF_UNEXP_UP_%i_%1 при обработке SYS_IF_EXPECTED_DOWN не найден, то подавлять ивент. С помощью такой фичи можно было бы подавлять ивенты о нормализации чего либо, если до этого не было ивента о аларме.А почему не возможен этот вариант? Мне кажется это было бы более гибко.
(gdb) bt full
#0  0x00007f131fad5107 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
        resultvar = 0
        pid = 18657
        selftid = 14171
#1  0x00007f131fad64e8 in __GI_abort () at abort.c:89
        save_stage = 2
        act = {__sigaction_handler = {sa_handler = 0x7f129db39cb0, sa_sigaction = 0x7f129db39cb0}, sa_mask = {__val = {139717931932848, 139717931932848, 139717931932848, 139717931932868, 
              139717931933032, 139717931932848, 139717931933032, 0, 0, 0, 0, 0, 0, 139720112802416, 139720112802192, 139720112801952}}, sa_flags = 531695712, 
          sa_restorer = 0x7f131fb10880 <do_always_noconv>}
        sigs = {__val = {32, 0 <repeats 15 times>}}
#2  0x00007f131fb13204 in __libc_message (do_abort=do_abort@entry=1, fmt=fmt@entry=0x7f131fc05fe0 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c:175
        ap = {{gp_offset = 40, fp_offset = 0, overflow_arg_area = 0x7f128f56fdf0, reg_save_area = 0x7f128f56fd80}}
        fd = 2
        on_2 = <optimized out>
        list = <optimized out>
        nlist = <optimized out>
        cp = <optimized out>
        written = <optimized out>
#3  0x00007f131fb189de in malloc_printerr (action=1, str=0x7f131fc063a8 "malloc(): smallbin double linked list corrupted", ptr=<optimized out>) at malloc.c:4996
        buf = "00007f129dcdbaa0"
        cp = <optimized out>
#4  0x00007f131fb1ad7b in _int_malloc (av=0x7f129c000020, bytes=56) at malloc.c:3359
        p = 0x0
        fb = <optimized out>
        pp = <optimized out>
        nb = 64
        idx = <optimized out>
        bin = <optimized out>
        victim = <optimized out>
        size = <optimized out>
        victim_index = <optimized out>
        remainder = <optimized out>
        remainder_size = <optimized out>
        block = <optimized out>
        bit = <optimized out>
        map = <optimized out>
        fwd = <optimized out>
        bck = <optimized out>
        errstr = <optimized out>
        __func__ = "_int_malloc"
#5  0x00007f131fb1c070 in __GI___libc_malloc (bytes=56) at malloc.c:2891
        ar_ptr = 0x7f129c000020
        victim = 0x6
        __func__ = "__libc_malloc"
#6  0x00007f13203bf2e8 in operator new (sz=sz@entry=56) at ../../../../src/libstdc++-v3/libsupc++/new_op.cc:49
        p = <optimized out>
#7  0x00007f1322d0b4dc in SNMP_PDU::SNMP_PDU (this=0x7f129dd60ad0) at pdu.cpp:69
No locals.
#8  0x00007f1322d0f75e in SNMP_UDPTransport::readMessage (this=0x7f129c4cb380, ppData=0x7f128f56fff8, dwTimeout=2000, pSender=<optimized out>, piAddrSize=0x0, contextFinder=0x0)
    at transport.cpp:493
        bytes = <optimized out>
        pduLength = 57
#9  0x00007f1322d0ed3f in SNMP_Transport::doRequest (this=this@entry=0x7f129c4cb380, request=request@entry=0x7f129c492160, response=response@entry=0x7f128f56fff8, timeout=2000, 
    numRetries=2, numRetries@entry=3) at transport.cpp:125
---Type <return> to continue, or q <return> to quit---
        timeSyncRetries = 3
        rc = 0
        bytes = <optimized out>
#10 0x00007f1322d0f958 in SnmpGetEx (pTransport=0x7f129c4cb380, szOidStr=<optimized out>, oidBinary=0x0, dwOidLen=<optimized out>, pValue=0x7f128f57029c, bufferSize=4, dwFlags=0, 
    dataLen=0x0) at util.cpp:140
        pRqPDU = 0x7f129c492160
        dwResult = 0
        pRespPDU = 0x0
        pdwVarName = {1, 3, 6, 1, 2, 1, 2, 2, 1, 7, 1024, 0, 2404843400, 32530, 0, 0, 535044768, 32531, 2625787216, 32530, 2617245768, 32530, 531752261, 32531, 4222451712, 
          0 <repeats 17 times>, 2617245728, 32530, 96, 0, 570826864, 32531, 2404843936, 32530, 2404845936, 32530, 2622272384, 32530, 531742832, 32531, 0, 0, 586364584, 32531, 96, 0, 
          531870622, 32531, 2404843312, 32530, 1024, 0, 2625787216, 32530, 2625787216, 32530, 25, 0, 256, 0, 2404843936, 32530, 2404845936, 32530, 2622272384, 32530, 570780968, 32531, 0, 
          0, 1024, 0, 2404844704, 32530, 2404844188, 32530, 2404845940, 32530, 570781135, 32531, 32, 48, 2404844160, 32530, 2404843968, 32530, 3995704064, 2748014655, 0, 0, 2404844064, 
          32530, 2404844400, 32530, 1024, 0, 1024, 0, 0, 0, 2404844416, 32530, 2404844416, 32530, 2404846268, 32530, 2637931120, 32530, 2404845024, 32530, 1, 0}
        nameLength = 11
#11 0x00007f1322f266fc in NetworkDeviceDriver::getInterfaceState (this=0x48e1, snmp=0x7f129c4cb380, attributes=0x6, driverData=0xffffffffffffffff, ifIndex=1024, 
    ifTableSuffixLen=1679847017, ifTableSuffix=0x206, adminState=0x7f128f570970, operState=0x7f128f570974) at ndd.cpp:559
        state = 0
        oid = L".1.3.6.1.2.1.2.2.1.7.1024\000\x9c000020缒\020\000\x22062070缓\x8f5705e0缒Ā\000\x9c8cd4e0缒\x1fb1c070缓\000\000\x22d113e0缓\020\000\x1fb3b39e缓\x9d04b850缒\027\000\x8f570abc缒\x9d3ba270缒\002\000é\000\x8f5705e0缒\000\000\000\000\x1fb1e225缓\x9e136927缒\027\000\n\000\x8f570a60缒\n\000\x22056dcf缓 0\000\000\000\000\x1fb1e225缓ߐ\004\000\000\000\000\x1fb1e225缓\004\000\x9ce55030缒\000缒?\000\000\001\000\000ߐ\000\x8f570748缒\000缒\x9d3bca50缒\000缒\x9d3bca50缒\x9c95c8d0缒\000\000\000\001\x8f570770缒\001\000\x9c23fe50缒\000\001\000\000\x9c90f550缒\x9d4cb0d0缒\x9c23fe50缒\x9cb41770缒\x9c90f550缒\x9d4cb0d0缒\000\000\x9cb41770缒\x9c90f550缒\x8f570770缒\001\000\x22d0fa29缓\000\000\x8f570a60缒Ѐ\000\000\000\000\000\x9cb41770缒\000\000\x2203bf85缓\x2354b660缓\x2204a918缓\001\003\006\001\002\001\001\002\000YEX\x232ae3c0缓\x8f5708a0缒\000\000\x9c000020缒"...
        suffix = L"\x1fb10a70缓\x1fb10990缓\x1fb108a0缓\x1fb10860缓\x1fb10880缓\x1fb10b70缓\x1fb10890缓\001\000\x1fe428a0缓\000\000\000\000\001\000\001\000\x8f570288缒\000\000\000\000\001\000\x1fe42820缓\000\000\000\000\001\000\001\000\x8f570288缒\000\000\x1fe422a0缓\x9c000020缒\x1fe41ee0缓\x8f570428缒\xfbad8000缒", '\000' <repeats 26 times>, "\x9c90f550\f\x22d104f7缓\x9cff0000缒\000\000\xffffffff\xffffffff\x8f570298缒\x8f570230缒\000\000\x9cb41770缒\x1fb1c070缓\001缒\x9c537b20缒\x9c90f550缒\x1fe41ee0缓\000\000\x9c90f550缒\x9e136939缒\x22d0d2eb缓3\000\034\000\x8f5704e0缒\x8f5704c4缒"
#12 0x00007f13231f46d0 in Node::getInterfaceStatusFromSNMP (this=<optimized out>, pTransport=<optimized out>, index=<optimized out>, ifTableSuffixLen=<optimized out>, ifTableSuffix=0x0, 
    adminState=<optimized out>, operState=0x7f128f570974) at node.cpp:4818
No locals.
#13 0x00007f13231d4750 in Interface::statusPoll (this=0x64acd80, session=0x375b, rqId=0, eventQueue=0xffffffffffffffff, cluster=0x0, snmpTransport=0x7f129c4cb380, nodeIcmpProxy=0)
    at interface.cpp:498
        adminState = IF_ADMIN_STATE_UNKNOWN
        operState = IF_OPER_STATE_UNKNOWN
        requiredPolls = -1672694912
        pNode = 0x330b680
        newStatus = 0
#14 0x00007f1323200562 in Node::statusPoll (this=0x330b680, pSession=0x375b, dwRqId=6, poller=0xffffffffffffffff) at node.cpp:1414
No locals.
#15 0x00007f1323201279 in Node::statusPoll (this=0x330b680, poller=0x7f12a00a80f0) at node.cpp:1190
        unreachableDeleteDays = <optimized out>
#16 0x00007f13231e09b1 in __ThreadPoolExecute_Wrapper<Node, PollerInfo*> (arg=0x7f12a0069540) at ../../../include/nms_threads.h:956
        wd = 0x7f12a0069540
#17 0x00007f1322054206 in WorkerThread (arg=0x7f12a00aac30) at tp.cpp:154
        rq = 0x7f12a0005140
        p = 0x7f12a0004c40
        q = 0x7f12a0004cb0
#18 0x00007f1320a6e0a4 in start_thread (arg=0x7f128f571700) at pthread_create.c:309
        __res = <optimized out>
        pd = 0x7f128f571700
        now = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {139717690988288, -3470916291618989052, 0, 139720176160864, 139719415303616, 139717690988288, 3598880416769973252, 3599103188696112132}, 
              mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = <optimized out>
        pagesize_m1 = <optimized out>
---Type <return> to continue, or q <return> to quit---
        sp = <optimized out>
        freesize = <optimized out>
        __PRETTY_FUNCTION__ = "start_thread"
#19 0x00007f131fb8604d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
No locals.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/bin/netxmsd -d'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  __GI___pthread_mutex_lock (mutex=0x0) at ../nptl/pthread_mutex_lock.c:66
66      ../nptl/pthread_mutex_lock.c: No such file or directory.
(gdb) bt
#0  __GI___pthread_mutex_lock (mutex=0x0) at ../nptl/pthread_mutex_lock.c:66
#1  0x00007ff37547ecb9 in ClientSession::sendAllObjects(NXCPMessage*) () from /usr/lib/x86_64-linux-gnu/libnxcore.so.2
#2  0x00007ff37549f4dd in ClientSession::processingThread() () from /usr/lib/x86_64-linux-gnu/libnxcore.so.2
#3  0x00007ff37549f5f9 in ClientSession::processingThreadStarter(void*) () from /usr/lib/x86_64-linux-gnu/libnxcore.so.2
#4  0x00007ff372ccb0a4 in start_thread (arg=0x7ff2e72ae700) at pthread_create.c:309
#5  0x00007ff371de304d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111