Overview
The NMIS event system consists of two main components:- NMISNG::Events - High-level event management operations
- NMISNG::Event - Individual event object operations
lib/NMISNG/Events.pm and lib/NMISNG/Event.pm
NMISNG::Events
The Events manager provides high-level operations for event management.Constructor
Event Operations
eventAdd()
Add a new event or update an existing stateless event.Node object
Event name (e.g., “Node Down”, “Interface Down”)
Event level: Normal, Warning, Minor, Major, Critical, Fatal
Event element (e.g., interface name)
Event details/description
Whether event is stateless (resets after dampening time)
Additional context information
Returns undef on success, error message on failure
eventExist()
Check if an event exists and is active.Node object
Event name
Event element (optional)
Returns 1 if event exists and is active, 0 otherwise
Only considers events that are both active (active=1) and non-historic (historic=0).
eventLoad()
Load detailed information for an event.Node UUID
Event name
Event element
Filter by active status (0 or 1)
Filter by historic status
Returns (error, event_object)
eventUpdate()
Update an existing event or create if missing.Event data hash
Create event if it doesn’t exist
Returns undef on success, error message on failure
eventDelete()
Delete an event.Event identification hash
Returns undef on success, error message on failure
If
keep_event_history is enabled, marks event as historic instead of deleting.Event Queries
get_events_model()
Query events with filtering.Filter criteria
Direct MongoDB query (overrides filter)
Sort criteria
Maximum records to return
Records to skip (pagination)
ModelData object with event records
node_uuid(string) - Node UUIDevent(string) - Event nameelement(string) - Event elementlevel(string) - Event levelactive(0/1) - Active statushistoric(0/1) - Historic statusstateless(0/1) - Stateless eventack(0/1) - Acknowledged statusescalate(integer) - Escalation level
Event Logging
logEvent()
Write event to event log file.Node name
Event name
Event level
Event element
Event details
Returns undef on success, error message on failure
Utility Methods
cleanNodeEvents()
Remove all active events for a node.Node object
Caller identifier for logging
Returns undef on success, error message on failure
Marks all events as inactive and historic. Logs closure if event had logging enabled.
NMISNG::Event Object
The Event object represents a single event instance.Constructor
event()
Create event object (usually via node->event() or events->event()).Event Properties
Core Properties
All properties have getter/setter methods:event(string) - Event nameelement(string) - Event elementlevel(string) - Event leveldetails(string) - Event detailsnode_uuid(string) - Node UUIDnode_name(string) - Node namecluster_id(string) - Cluster IDactive(0/1) - Active statushistoric(0/1) - Historic statusstateless(0/1) - Stateless flagack(0/1) - Acknowledgeduser(string) - User who acknowledgedescalate(integer) - Escalation level (-1 = not escalated)notify(string) - Notification statusstartdate(integer) - Start timestamplastupdate(integer) - Last update timestampcontext(hash) - Additional contextinventory_id(ObjectId) - Related inventory ID
Event Operations
save()
Save event to database.Set to 1 when just updating (skips eventAdd logic)
Returns undef on success, error message on failure
load()
Load event from database.Force reload even if already loaded
Only populate fields that don’t already have values
Returns undef on success, error message on failure
delete()
Delete event or mark as historic.Returns undef on success, error message on failure
If
keep_event_history is enabled, marks as historic with expire_at. Otherwise permanently deletes.acknowledge()
Acknowledge or un-acknowledge an event.Acknowledge (1) or un-acknowledge (0)
Username performing acknowledgment
Returns undef on success, error message on failure
Only active (non-historic) events can be acknowledged. TRAP events are deleted when acknowledged.
check()
Check if event should be closed (thing came back up).Sys object for the node
Override event details
Override event level
Override up event name (otherwise heuristic is used)
Current value (for threshold events)
Reset value (for threshold events)
Automatically converts down events to up events (e.g., “Node Down” → “Node Up”, “Interface Down” → “Interface Up”). Includes dampening for threshold events.
Event Status Methods
exists()
Check if event exists in database.Returns 1 if exists, 0 otherwise
Ignores active status - finds event whether active or inactive.
is_new()
Check if event is new (not yet saved).Returns 1 if new, 0 if exists in database
is_alert()
Check if event is a custom alert.Returns 1 if event name contains “Alert:”, 0 otherwise
is_proactive()
Check if event is a proactive/threshold event.Returns 1 if event name contains “Proactive”, 0 otherwise
Logging Methods
log()
Log event to event log file.Override node name
Override event name
Override level
Override element
Override details
Returns undef on success, error message on failure
getLogLevel()
Get event log level from model configuration.Sys object
Event name (uses event’s own if not provided)
Current level (uses event’s own if not provided)
Returns (level, log_enabled, syslog_enabled)
Event Levels
NMIS uses the following event levels:- Normal - Normal operation, used for “up” events
- Warning - Warning condition
- Minor - Minor issue
- Major - Major issue (most down events)
- Critical - Critical issue
- Fatal - Fatal/catastrophic issue
Common Event Names
Node Events
Node Down/Node UpSNMP DownWMI DownNode Polling FailoverBackup Host Down
Interface Events
Interface Down/Interface UpHigh Input UtilizationHigh Output UtilizationInput ErrorsOutput Errors
Threshold Events
Proactive Disk Space(and variations)Proactive CPUProactive Memory- Custom proactive events
Custom Events
Alert: <custom name>TRAP
Configuration
Event behavior is controlled by:-
Events.nmis - Event configuration table
- Controls logging, notification, status inclusion per event
- Located in
conf/Events.nmis
-
Model files - Event levels and policies
- Per node role/type event levels
- Located in
models/directory
-
Configuration settings
keep_event_history- Keep events historic vs deletepurge_event_after- Time before historic events expirestateless_event_dampening- Stateless event reset time (default 900s)syslog_events- Enable syslog loggingevents_strip_non_ascii_characters- Strip non-ASCII from logs
See Also
- NMISNG - Core NMISNG library
- NMISNG::Node - Node operations
- NMISNG::Notify - Notification system