--- lib/PXElator/amt.pm 2009/08/09 19:00:52 181 +++ lib/PXElator/amt.pm 2009/08/30 22:46:57 385 @@ -3,31 +3,75 @@ use warnings; use strict; -use lib '/home/dpavlin/llin/Intel-AMT/lib/'; +use lib '/srv/Intel-AMT/lib/'; use Intel::AMT::RemoteControl; use Intel::AMT::NetworkAdministration; +use Intel::AMT::EventManager; use Data::Dump qw/dump/; +use Regexp::Common qw/net/; use html; +use ping; +use CouchDB; +use Carp qw/confess/; + +sub ip { + my ( $client_ip, $amt ) = @_; + return unless $client_ip; + $amt ||= client::conf( $client_ip => 'amt' ); + my ( $passwd, $ip ) = split(/\s+/, $amt); + ( $ip, $passwd ) = ( $passwd, $ip ) if $passwd =~ m/$RE{net}{IPv4}/; -sub info { - my $amt = shift; - my ( $passwd, $ip ) = split(/\n/, $amt); - warn "amt $ip\n"; + $ip ||= $client_ip; - $ENV{AMT_HOST} = $ip; $ENV{AMT_PASSWORD} = $passwd; + $ENV{AMT_HOST} = $ip; +} - my $out; +sub power_state { + my $state = eval { Intel::AMT::RemoteControl::SystemPowerState }; + CouchDB::audit('SystemPowerState', { ip => $ENV{AMT_HOST}, SystemPowerState => $state }); + return $state; +} + +sub power_on { + ip @_; + my $state = power_state; + defined $state && ( $state & 0x0f ) == 0; +} - $out = qq|power: S| . Intel::AMT::RemoteControl::SystemPowerState - . qq|
| - . qq|amt| - . qq|
| - . html::pre_dump( Intel::AMT::NetworkAdministration::network_settings ) - ; +sub network { + ip @_; + + my $amt = eval { Intel::AMT::NetworkAdministration::network_settings }; + if ( $@ ) { + warn "ERROR $@"; + } else { + $amt->{ip} = $ENV{AMT_HOST}; + CouchDB::audit('log', $amt ); + } + $amt; +} + +sub log { + ip @_; + + my $amt = eval { Intel::AMT::EventManager::ReadEventLogRecords }; + if ( $@ ) { + warn "ERROR $@"; + } else { + $amt->{ip} = $ENV{AMT_HOST}; + CouchDB::audit('log', $amt ); + } + $amt; +} - return $out; +sub RemoteControl { + ip shift; + my $command = shift; + eval { Intel::AMT::RemoteControl::run( $command ) }; + CouchDB::audit( $command, { ip => $ENV{AMT_HOST}, error => $@ } ); + warn "ERROR $@" if $@; } 1;