in reply to Building a notification system based on MySQL

It might help if you showed relevant bits of your existing code, at least the parts that do not do what you want.

How are your events received? Are they strings? Are they hashes with slot names as keys? Are they database records?

In your existing code, with all the filter values from the DB in a hash, what is your code for checking the slot/value combos against the received events?

  • Comment on Re: Building a notification system based on MySQL

Replies are listed 'Best First'.
Re^2: Building a notification system based on MySQL
by shank098 (Initiate) on Nov 18, 2008 at 14:16 UTC

    here's the main chunk of code from the existing script, which is doing the job just fine

    while (my($gid,$gname) = each %groups) { if ($debug >= 3) { writeLog("I","Check notification group $gna +me");} ##Create an ARRAY with each filter for each group my @gArray = getFilterGroups($gid); foreach my $fGroup (@gArray) { my %fHash = getFilters($fGroup); my $fullMatch = getEntries($fGroup); if ($debug >=3) { writeLog("I","The filter group ($fGroup) + has $fullMatch entries");} my $count = 0; while (my($slot,$value) = each %fHash) { if ($debug >=3) { writeLog("I","Checking event against + FILTER:$slot=>$value");} my $result = checkEvent($slot,$value); if ($result == 1) { if ($debug >=3) {writeLog("I","Tivoli slot and fil +ter slot information match");} $count++; if ($debug >=4) {writeLog("I","Count is at $count +--> fullMatch is $fullMatch")}; if ($count == $fullMatch) { my @memberList = getMembers($gid); foreach my $member(@memberList) { if ($debug >=2) {writeLog("I","Generating +automated notification to $member");} #notifyLog($member); notify($member); } if ($debug >= 1) { writeLog("I","inserting int +o db log");} dblog($gid); $count = 0; } } } } }

    It simply loops through all the groups present in the DB and grabs the filters. It considers a match to be when all the slot/value combination's in the filter DB match with those received from the event.

    Events are received from a BMC product called Impact. It has a built-in rules engine and when certain criteria are satisfied we call the PERL script.

    Details of the events are passed to the script as environment variables, here's a code snippet,

    my $thost = $ENV{mc_host}; my $source = $ENV{source}; my $server_hndl = $ENV{server_handle};