Т.е. закрытые алармы - это те, у которых term_by <> 0, и в этом случае дата/время закрытия - last_change_time?
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 Menu
select
name,
message,
timestamp 'epoch' + creation_time * interval '1 second' as begin,
timestamp 'epoch' + last_change_time * interval '1 second' as last_change
from alarms inner join object_properties
on source_object_id = object_id
order by creation_time desc
netxmsd: show queues
Condition poller : 0
Configuration poller : 0
Topology poller : 0
Data collector : 0
Database writer : 4542
Database writer (IData) : 0
Event processor : 0
Network discovery poller : 0
Node poller : 0
Routing table poller : 0
Status poller : 0


#!/usr/bin/groovy
import org.apache.commons.net.util.SubnetUtils
import org.netxms.client.NXCSession
import org.snmp4j.CommunityTarget
import org.snmp4j.PDU
import org.snmp4j.Snmp
import org.snmp4j.mp.SnmpConstants
import org.snmp4j.smi.GenericAddress
import org.snmp4j.smi.OID
import org.snmp4j.smi.OctetString
import org.snmp4j.smi.VariableBinding
import org.snmp4j.transport.DefaultUdpTransportMapping
import org.snmp4j.util.DefaultPDUFactory
import org.snmp4j.util.RetrievalEvent
import org.snmp4j.util.TableUtils
def get(Snmp snmp, CommunityTarget target, String oid) {
PDU pdu = new PDU()
pdu.add(new VariableBinding(new OID(oid)))
pdu.type = PDU.GET
snmp.send(pdu, target, null).response.get(0).variable
}
def routers = [
[ "router1", "udp:192.168.1.1/161", "public" ],
[ "router2", "udp:192.168.1.2/161", "private" ]
]
def subnets = []
routers.each { router ->
def target = new CommunityTarget(
community : new OctetString(router[2]),
address : GenericAddress.parse(router[1]),
version : SnmpConstants.version2c
)
def snmp = new Snmp(new DefaultUdpTransportMapping())
snmp.listen()
def table = new TableUtils(snmp, new DefaultPDUFactory())
OID[] oids = [
new OID(".1.3.6.1.2.1.4.20.1.1"),
new OID(".1.3.6.1.2.1.4.20.1.2")
]
table.getTable(target, oids, null, null).each { event ->
if (event.status == RetrievalEvent.STATUS_OK) {
def columns = event.columns;
def address = columns[0].variable
def index = columns[1].variable
def descr = get(snmp, target, ".1.3.6.1.2.1.2.2.1.2.${index}")
def alias = get(snmp, target, ".1.3.6.1.2.1.31.1.1.1.18.${index}")
subnets << [router[0], "${address}", ("${descr} ${alias}").trim()]
}
}
snmp.close()
}
def session = new NXCSession("monitor", "pusher", "pushpwd")
session.connect()
session.syncObjects()
session.getAllObjects().each { object ->
if (object.getObjectClassName() == "Subnet") {
def desc = []
subnets.each { subnet ->
if (new SubnetUtils(object.getObjectName()).info.isInRange(subnet[1]))
desc << "${subnet[0]} - ${subnet[2]}"
}
if (desc)
session.updateObjectComments(object.getObjectId(), "${desc.unique()}")
}
}
session.disconnect()
Quote from: Victor Kirhenshtein on November 12, 2012, 11:29:45 AM
Вообще-то поля NXCObjectModificationData напрямую изменять нельзя. Они все обьявлены как private, я так понимаю что Groovy это просто игнорирует (а зря!).

Quote from: Victor Kirhenshtein on November 12, 2012, 11:29:45 AM
Что касается комментариев, то это исключение (так исторически сложилось), и через modifyObject поменять их нельзя. Правильный код для изменения комментария ...
NXCSession session = new NXCSession("server", "login", "password")
session.connect()
data = new NXCObjectModificationData(2081)
data.description = "ABC"
session.modifyObject(data)
session.disconnect()
