t push origin masterMerge branch 'knnniggett-zmtrigger2' into storageareas

This commit is contained in:
Isaac Connor 2016-02-22 09:15:45 -05:00
commit e12152602b
2 changed files with 51 additions and 45 deletions

View File

@ -197,6 +197,7 @@ my %spawned_connections;
my %monitors; my %monitors;
my $monitor_reload_time = 0; my $monitor_reload_time = 0;
my $needsReload = 0;
$! = undef; $! = undef;
my $rin = ''; my $rin = '';
@ -217,8 +218,8 @@ while( 1 )
if ( $nfound > 0 ) if ( $nfound > 0 )
{ {
Debug( "Got input from $nfound connections\n" ); Debug( "Got input from $nfound connections\n" );
foreach my $connection ( @in_select_connections ) foreach my $connection ( @in_select_connections ) {
{
if ( vec( $rout, $connection->fileno(), 1 ) ) if ( vec( $rout, $connection->fileno(), 1 ) )
{ {
Debug( "Got input from connection " Debug( "Got input from connection "
@ -310,52 +311,56 @@ while( 1 )
# Check for alarms that might have happened # Check for alarms that might have happened
my @out_messages; my @out_messages;
foreach my $monitor ( values(%monitors) ) foreach my $monitor ( values(%monitors) ) {
{
my ( $state, $last_event )
= zmMemRead( $monitor,
[ "shared_data:state",
"shared_data:last_event"
]
);
#print( "$monitor->{Id}: S:$state, LE:$last_event\n" ); my $memVerified = 1;
#print( "$monitor->{Id}: mS:$monitor->{LastState}, mLE:$monitor->{LastEvent}\n" ); if ( !zmMemRead($monitor, "shared_data:valid") ) {
if ( $state == STATE_ALARM zmMemInvalidate($monitor);
|| $state == STATE_ALERT $memVerified = zmMemVerify($monitor);
) # In alarm state }
{
if ( !defined($monitor->{LastEvent}) if ($memVerified) {
|| ($last_event != $monitor->{LastEvent}) my ( $state, $last_event )
) # A new event = zmMemRead( $monitor,
{ [ "shared_data:state",
"shared_data:last_event"
]
);
#print( "$monitor->{Id}: S:$state, LE:$last_event\n" );
#print( "$monitor->{Id}: mS:$monitor->{LastState}, mLE:$monitor->{LastEvent}\n" );
if ( $state == STATE_ALARM
|| $state == STATE_ALERT
) { # In alarm state
if ( !defined($monitor->{LastEvent})
|| ($last_event != $monitor->{LastEvent})
) { # A new event
push( @out_messages, $monitor->{Id}."|on|".time()."|".$last_event );
} else { # The same one as last time, so ignore it
# Do nothing
}
} elsif ( ($state == STATE_IDLE
&& $monitor->{LastState} != STATE_IDLE
)
|| ($state == STATE_TAPE
&& $monitor->{LastState} != STATE_TAPE
)
) { # Out of alarm state
push( @out_messages, $monitor->{Id}."|off|".time()."|".$last_event );
}
elsif ( defined($monitor->{LastEvent})
&& ($last_event != $monitor->{LastEvent})
) { # We've missed a whole event
push( @out_messages, $monitor->{Id}."|on|".time()."|".$last_event ); push( @out_messages, $monitor->{Id}."|on|".time()."|".$last_event );
push( @out_messages, $monitor->{Id}."|off|".time()."|".$last_event );
} }
else # The same one as last time, so ignore it $monitor->{LastState} = $state;
{ $monitor->{LastEvent} = $last_event;
# Do nothing } else { # Our attempt to verify the memory handle failed. We should reload the monitors.
} $needsReload = 1;
} }
elsif ( ($state == STATE_IDLE
&& $monitor->{LastState} != STATE_IDLE
)
|| ($state == STATE_TAPE
&& $monitor->{LastState} != STATE_TAPE
)
) # Out of alarm state
{
push( @out_messages, $monitor->{Id}."|off|".time()."|".$last_event );
}
elsif ( defined($monitor->{LastEvent})
&& ($last_event != $monitor->{LastEvent})
) # We've missed a whole event
{
push( @out_messages, $monitor->{Id}."|on|".time()."|".$last_event );
push( @out_messages, $monitor->{Id}."|off|".time()."|".$last_event );
}
$monitor->{LastState} = $state;
$monitor->{LastEvent} = $last_event;
} }
foreach my $connection ( @out_connections ) foreach my $connection ( @out_connections )
{ {
if ( $connection->canWrite() ) if ( $connection->canWrite() )
@ -412,7 +417,7 @@ while( 1 )
} }
# If necessary reload monitors # If necessary reload monitors
if ( (time() - $monitor_reload_time) > MONITOR_RELOAD_INTERVAL ) if ( $needsReload || ((time() - $monitor_reload_time) > MONITOR_RELOAD_INTERVAL ))
{ {
foreach my $monitor ( values(%monitors) ) foreach my $monitor ( values(%monitors) )
{ {
@ -420,6 +425,7 @@ while( 1 )
zmMemInvalidate( $monitor ); zmMemInvalidate( $monitor );
} }
loadMonitors(); loadMonitors();
$needsReload = 0;
} }
} }
Info( "Trigger daemon exiting\n" ); Info( "Trigger daemon exiting\n" );

View File

@ -1128,7 +1128,7 @@ void EventStream::processCommand( const CmdMsg *msg )
DataMsg status_msg; DataMsg status_msg;
status_msg.msg_type = MSG_DATA_EVENT; status_msg.msg_type = MSG_DATA_EVENT;
memcpy( &status_msg.msg_data, &status_data, sizeof(status_msg.msg_data) ); memcpy( &status_msg.msg_data, &status_data, sizeof(status_data) );
if ( sendto( sd, &status_msg, sizeof(status_msg), MSG_DONTWAIT, (sockaddr *)&rem_addr, sizeof(rem_addr) ) < 0 ) if ( sendto( sd, &status_msg, sizeof(status_msg), MSG_DONTWAIT, (sockaddr *)&rem_addr, sizeof(rem_addr) ) < 0 )
{ {
//if ( errno != EAGAIN ) //if ( errno != EAGAIN )