Table of Contents
Table of Contents |
---|
...
Code Block | ||||
---|---|---|---|---|
| ||||
package Event_State_Example;
our $VERSION="0.0.0";
use lib "/usr/local/omk/lib";
use strict;
use OMK::Common;
use OMK::opEvents;
use OMK::Log;
# arguments: the line (currently being parsed),
# and reference to the live event properties
# returns: (status-or-error)
#
# zero or undef: parsing for this event is aborted,
# and no event is created.
# 1: indicates success, event is created and changed event
# properties are incorporated.
# any other value: treated as error message, changed event
# properties are NOT incorporated but event parsing continues.
sub parse_enrich
{
my ($line, $event) = @_;
my $confCommon = loadOmkConfTable(conf=> "opCommon", dir=> "/usr/local/omk/conf");
my $logger = OMK::Log->new(level => $confCommon->{"omkd_log_level"} || 'info',
path => $confCommon->{'<omk_logs>'}."/opEvents.log");
my $OPE = OMK::opEvents->new(config => $confCommon,
logprefix => "Plugin::Event_State_Example",
log => $logger);
$OPE->getDb();
$event->{Plugin_Used} = "Event_State_Example";
return 1;
}
1; |
Info |
---|
opEvents-4.4.1 has a new interface to make working with the opEvents object easier, to retain backwards compat with your current plugins set set opevents_parser_plugin_use_events_obj: "true" in opCommon.json |
...
function | description | version | args | returns |
---|---|---|---|---|
create_nmis_event | Creates a new event in nmis | 4.1.1 | node event element details level | event hash and error message or undef |
create_event | Creates a new event in opEvents | 4.1.1 | event (hash) | event id and error message or undef |
update_event | Updates a opEvents event | 4.1.1 | eventid (string) upddates (hash) | 1 or 0 for success / failure and undef or error a error string |
acknowledge_event | Acknowledges an event | 4.1.1 | eventid (string) | 1 or 0 for success / failure and undef or error a error string |
...
Code Block | ||||
---|---|---|---|---|
| ||||
package Event_State_Example;
our $VERSION="0.0.0";
use lib "/usr/local/omk/lib";
use strict;
use OMK::Common;
use OMK::opEvents;
use OMK::Log;
# arguments: the line (currently being parsed),
# and reference to the live event properties
# returns: (status-or-error)
#
# zero or undef: parsing for this event is aborted,
# and no event is created.
# 1: indicates success, event is created and changed event
# properties are incorporated.
# any other value: treated as error message, changed event
# properties are NOT incorporated but event parsing continues.
sub parse_enrich
{
my ($line, $event, $OPE) = @_;
$event->{Plugin_Used} = "Event_State_Example";
return 1;
}
1; |
Much more clean and simple!
...
Code Block | ||
---|---|---|
| ||
'_id' => $arg{id}, 'time' => { '$gte' => $time_start, '$lt' => $time_end }, 'event' => $arg{event}, 'node_uuid' => $arg{node_uuid}, 'type' => $arg{type}, 'element' => $arg{element}, 'details' => $arg{details}, 'eventid' => $arg{event_id}, # only useful in actionlog 'action' => $arg{action}, # only useful in actionlog 'archive' => $arg{archive}, # only useful in archive log 'entry' => $arg{entry}, # only in raw log 'state' => $arg{state}, 'nodeinfo.configuration.location' => {'$regex' => $arg{'nodeinfo.configuration_location'} || $arg{location}}, 'nodeinfo.configuration.group' => {'$regex' => $arg{'nodeinfo.configuration_group'} || $arg{group}}, 'acknowledged' => numify($arg{acknowledged}), 'escalate' => numify($arg{escalate}), 'priority' => numify($arg{priority}), }); |
Creating Events
opEvents object provides an easy way to create an event:
Code Block |
---|
# Tell opEvents object to create the event my ($error, $eventid) = $OPE->createEvent(event => $event); |
...
Code Block |
---|
# Create Event Object my $event = {}; my @maybeprops = grep($_ !~ /^(act|debug|quiet|conf|confdir|baseurl|username|password)$/, keys %$Q); if (@maybeprops) { my @rawinputs; for my $key (@maybeprops) { next if ($Q->{$key} eq ''); # supress empty properties die "argument $key cannt be set multiple times!\n" if (ref($Q->{$key}) eq "ARRAY"); # ensure numeric values for anything numeric, or mongo comparison ops will # fail badly (especially true for time, which breaks the gui) $event->{$key} = numify($Q->{$key}); push @rawinputs, "'$key=$Q->{$key}'"; } $event->{entry} = join(" ", @rawinputs); } |
Updating Events
opEvents object also provides an easy way to update an event. We will need to pass the following arguments:
- _id: for identify the event to be updated
- _constraints: to disable db key munging
Everything else will be recorded as content, as-is, except "status_history" and "trigger_eventids":
- status_history: optional but special: must be array and this array will be ADDED to an existing status_history array.
- trigger_eventids: always saved as array, and a new value is ADDED.
- buttons: always saved as array, and a new value is ADDED.
returns undef if ok, error message otherwise (also logged)
As an example:
Code Block |
---|
my $failure = $OPE->updateEvent( "_id" => $e->{_id}, priority => 5, status_history => [ $now, $thisuser, "priority", 5 ], ); |
...
Code Block | ||
---|---|---|
| ||
package Event_State_Example;
our $VERSION="0.0.0";
use lib "/usr/local/omk/lib";
use strict;
#use func;
use OMK::Common;
use Data::Dumper;
use OMK::opEvents;
use OMK::Log;
# arguments: the line (currently being parsed),
# and reference to the live event properties
# returns: (status-or-error)
#
# zero or undef: parsing for this event is aborted,
# and no event is created.
# 1: indicates success, event is created and changed event
# properties are incorporated.
# any other value: treated as error message, changed event
# properties are NOT incorporated but event parsing continues.
sub parse_enrich
{
my ($line, $event) = @_;
my $confCommon = loadOmkConfTable(conf=> "opCommon", dir=> "/usr/local/omk/conf");
my $logger = OMK::Log->new(level => $confCommon->{"omkd_log_level"} || 'info',
path => $confCommon->{'<omk_logs>'}."/opEvents.log");
my $OPE = OMK::opEvents->new(config => $confCommon,
logprefix => "Plugin::Event_State_Example",
log => $logger);
$OPE->getDb();
#We can get an event with an id
my $modelData = $OPE->getEventLogsModel(log_name => "events", id => '60516246c6c2b17094225a9c');
my $otherEvent = $modelData->[0];
$event->{other_event_ack} = [];
my $thisuser = "Plugin::Event_State_Example";
#lets get an event by name and mark them acknowledged
#you must pass time start and end if we are looking for events and not and event by an id
#lets ack them
foreach my $e (@{$toBeAcknowledged}){
my $now = time;
my $failure = $OPE->updateEvent( "_id" => $e->{_id},
acknowledged => 1,
status_history => [ $now, $thisuser, "acknowledged", 1 ], );
push @{$event->{other_event_ack}}, $e->{_id}->to_string;
#TODO better error handling
return if($failure);
}
$event->{Plugin_Used} = "Event_State_Example";
$event->{node} = "fulla-localhost";
$event->{host} = "127.0.0.1";
$event->{other_event} = $otherEvent->{_id}->to_string;
return 1;
}
1; |
Lookup node by node name
The first option, Build up a search hash and pass this to getEventLogsModel
...