#!/usr/bin/perl use strict; use DBI; my $dbh; my $sth; my $status; my $login; my $sql; my $pidm; my $location = 'acl14'; # hard code per machine my $where; my $time; my $mon; my $day; my $date; my $trash; my $timestamp; my $year = "2002"; my $username; my $dbname = "chipdb"; my $hostname = "quark.cs.earlham.edu"; ############################ # Get timestamp $sql = "SELECT last FROM last_read WHERE location = '$location'"; $dbh = DBI->connect("dbi:Pg:dbname=$dbname;host=$hostname") || die "login_get.pl - Can't connect, $DBI::errstr"; print "Connected\n"; $sth = $dbh->prepare($sql) || die "login_get.pl - prepare error: ($sql) $DBI::errstr"; $status = $sth->execute || die "login_get.pl - execute error: ($sql) status=$status $DBI::errstr"; $timestamp = $sth->fetchrow_array; print "timestamp=$timestamp\n"; ############################ # getting last output and parsing into variables # using the -a flag makes it possible to get the remote host in the last column open OUTPUT, "last -a |" or die "can't fork: $!"; while () { print "$_"; # ' +' gives any number of spaces if("\n" eq $_){ print"end of input\n"; last; } ($username, $where, $trash, $mon, $day, $time, $trash,) = split(/ +/, $_ , 7); $date = "$mon $day"; print "usr=$username whr=$where tr=$trash dt=$date tm=$time tr=$trash\n"; ############################# # format time and location correctly $time = "$year $date $time"; ################## # make time look like timestamp for compare $sql = "DELETE FROM newtime"; $sth = $dbh->prepare($sql) || die "login_get.pl - prepare error: ($sql) $DBI::errstr"; $status = $sth->execute || die "login_get.pl - execute error: ($sql) status=$status $DBI::errstr"; $sql = "INSERT INTO newtime VALUES('$time')"; $sth = $dbh->prepare($sql) || die "login_get.pl - prepare error: ($sql) $DBI::errstr"; $status = $sth->execute || die "login_get.pl - execute error: ($sql) status=$status $DBI::errstr"; $sql = "SELECT new_t FROM newtime"; $sth = $dbh->prepare($sql) || die "login_get.pl - prepare error: ($sql) $DBI::errstr"; $status = $sth->execute || die "login_get.pl - execute error: ($sql) status=$status $DBI::errstr"; $time = $sth->fetchrow_array; ############################# # get only records we care about, by comparing to the timestamp and where if(($timestamp ge $time)||($where ne ':0')){ print "continuing\n"; next; } print "needs entering\n"; ############################# # get pidm for username $sql = "SELECT pidm FROM person P WHERE P.username = '$username'"; #$dbh = DBI->connect("dbi:Pg:dbname=$dbname;host=$hostname") || # die "login_get.pl - Can't connect, $DBI::errstr"; #print "Connected\n"; $sth = $dbh->prepare($sql) || die "login_get.pl - prepare error: ($sql) $DBI::errstr"; $status = $sth->execute || die "login_get.pl - execute error: ($sql) status=$status $DBI::errstr"; $pidm = $sth->fetchrow_array; print"pidm = $pidm loc = $location time = $time\n"; ############################# # input row to the database from here system("./insert.pl $pidm $location $time"); } ######################### # reset timestamp to now $sql = "DELETE FROM last_read WHERE location = '$location'"; $sth = $dbh->prepare($sql) || die "login_get.pl - prepare error: ($sql) $DBI::errstr"; $status = $sth->execute || die "login_get.pl - execute error: ($sql) status=$status $DBI::errstr"; $sql = "INSERT INTO last_read VALUES('now', '$location')"; $sth = $dbh->prepare($sql) || die "login_get.pl - prepare error: ($sql) $DBI::errstr"; $status = $sth->execute || die "login_get.pl - execute error: ($sql) status=$status $DBI::errstr"; $dbh->disconnect(); exit;