diff options
Diffstat (limited to 'client/scireclient.pl')
-rwxr-xr-x | client/scireclient.pl | 74 |
1 files changed, 55 insertions, 19 deletions
diff --git a/client/scireclient.pl b/client/scireclient.pl index 47fd7b9..d027d59 100755 --- a/client/scireclient.pl +++ b/client/scireclient.pl @@ -1,16 +1,21 @@ #!/usr/bin/perl +# $Id$ + use strict; use warnings; use IPC::Open2; +use Getopt::Long; +use Data::Dumper; -my $SCIRE_CONFIG_FILE = '../etc/scire.conf'; +my $SCIRE_CONFIG_FILE = '../etc/scire.conf'; #will be /etc/scire.conf when released. my %conf; my ($SERVER_STDOUT, $SERVER_STDIN); parse_command_line(); -read_config(); +my $conf_file = (defined($conf{config})) ? $conf{config} : $SCIRE_CONFIG_FILE; +read_config($conf_file); # Build the connection command. # This will eventually be something like "ssh scire@${scireserver} /usr/bin/scireserver.pl" @@ -20,14 +25,15 @@ if(defined($conf{port})) { } $connection_command .= "$conf{user}\@$conf{host} $conf{server_script}"; -if(-d ".svn") { +if (-d ".svn") { # Overwrite $connection_command in the case of a dev environment for now $connection_command = "../server/scireserver.pl"; } -if(! -d $conf{job_dir}) { - print "WARNING! $conf{job_dir} does not exist...creating\n"; - mkdir $conf{job_dir}, 0660; +if (! -d $conf{job_dir}) { + print "WARNING! $conf{job_dir} does not exist...creating\n"; + mkdir -p $conf{job_dir}, 0660 + or die("Couldn't make $conf{job_dir} w/ perms 0660: $!"); } run_main(); @@ -35,11 +41,14 @@ run_main(); sub run_main { #ok folks so here's how this thang goes down. #1. Connect. + create_connection(); + #2. Register with the DB. (only it knows if you're allowed to be active) + register_client(); + #3. Scan the jobs directory. If there are done/failed jobs, report them. Note jobs in running or queue. #4. Fetch the jobs list #5. ? - create_connection(); run_test(); } @@ -52,15 +61,28 @@ sub run_test { } sub parse_command_line { - # XXX: Anyone know how to use getopt? I've never bothered figuring it out :P - while($#ARGV > -1) { - my $foo = shift @ARGV; - if($foo eq "-f") { - $SCIRE_CONFIG_FILE = shift @ARGV; - } else { - print "Unrecognized command line option: ${foo}\n"; - } + GetOptions( + 'verbose|D' => \$conf{debug}, + 'dry-run' => \$conf{dry_run}, + 'help|h' => \$conf{help}, + 'config|c=s' => \$conf{config}, + 'threads|t=i' => \$conf{max_threads}, + + #config overrides. + 'host=s' => \$conf{host}, + 'port=i' => \$conf{port}, + 'user|u=s' => \$conf{user}, + 'server_script=s' => \$conf{server_script}, + 'job_dir' => \$conf{job_dir}, + ); + if ($conf{help}) { + print "\nusage: scireclient.pl [--verbose or -D]\n\t [--dry-run]" + ."\t [--config=CONF or -c] \n\t [--threads=# or -t] \t [--help or -h] \n" + ."\t [[--host=HOST] \t [--port=PORT] \t [--user=USER or -u] \n\t" + ." [--server_script=foo.pl] \t [--job_dir=/tmp/jobs] \n"; + exit 0; } + } sub send_command { @@ -76,7 +98,7 @@ sub send_command { $tosend .= " \"${arg}\""; } } - print "Sending: ${tosend}\n"; + print "Sending: ${tosend}\n" if $conf{debug}; print SERVER_STDIN "${tosend}\n"; } @@ -92,13 +114,27 @@ sub create_connection { } sub read_config { - open(FH, "< ${SCIRE_CONFIG_FILE}") or die("Couldn't open the config file ${SCIRE_CONFIG_FILE}: $!"); + my $conf_file = shift; + open(FH, "< ${conf_file}") or die("Couldn't open the config file ${conf_file}: $!"); while (<FH>) { chomp; next if /^\s*(?:#|$)/; if(/^\s*(.+?)\s*=\s*(.+?)\s*(?:#.*)?$/) { - $conf{lc($1)} = $2; + unless(defined($conf{lc($1)})) { #Don't overwrite anything specified in cmdline + $conf{lc($1)} = $2; + } } } - close(FH) or die("Couldn't close the config file ${SCIRE_CONFIG_FILE}: $!"); + close(FH) or die("Couldn't close the config file ${conf_file}: $!"); +} + +sub register_client { + my $fingerprint = "AA:BB:CC:DD:EE:FF:GG:HH... this is a digest."; + my $cmd = "IDENTIFY $fingerprint"; + send_command($cmd); + my $response = get_response(); + $response =~ /IDENTIFIED\ CLIENT\ (\d+)/ + or die("Couldn't register client. Response was $response"); + $conf{client_id} = $1; + print "Registered client $conf{client_id}\n" if $conf{debug}; } |