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