--- lib/PXElator/amt.pm 2009/08/09 19:26:38 183 +++ lib/PXElator/amt.pm 2009/08/30 16:36:37 380 @@ -3,32 +3,61 @@ 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 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 ) = @_; + $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; +} + +sub power_state { + my $state = eval { Intel::AMT::RemoteControl::SystemPowerState }; + CouchDB::audit('SystemPowerState', { ip => $ENV{AMT_HOST}, SystemPowerState => $state }); + return $state; +} - my $out; +sub power_on { + ip @_; + my $state = power_state; + defined $state && ( $state & 0x0f ) == 0; +} + +sub info { + ip @_; + + my $amt; + eval { + $amt = Intel::AMT::NetworkAdministration::network_settings; + $amt->{power_state} = Intel::AMT::RemoteControl::SystemPowerState; + CouchDB::audit('network', $amt ); + }; + warn "ERROR amt $@" if $@; + $amt; +} - $out = qq|power: S| . Intel::AMT::RemoteControl::SystemPowerState - . qq|
| - . qq| amt| - . qq| ip| - . qq|
| - . html::pre_dump( Intel::AMT::NetworkAdministration::network_settings ) - ; - 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;