#!/usr/bin/perl use strict; use DBI; my $dbh; my $sth; my $status; my $check; my $login; my $sql; my $pidm; my $location; 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"; my $count = 0; ############################## # Get hostname from system open OUTPUT, "/bin/hostname |" or die "can't fork: $!"; $location = ; chomp($location); ############################ # 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"; $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; ############################ # 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: $!"; ######################### # 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"; while () { if("\n" eq $_){ last; } ($username, $where, $trash, $mon, $day, $time, $trash,) = split(/ +/, $_ , 7); $date = "$mon $day"; ############################# # 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')){ next; } ############################# # get pidm for username $sql = "SELECT pidm FROM person P WHERE P.username = '$username'"; $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"; while ($pidm = $sth->fetchrow) { $count++; } if($count ==0){ next; } $time =~ s/\s/^/; ############################# # input row to the database from here $check = system("/clients/users/chip/srsem/insert.pl $pidm $location $time"); } $sth->finish; $dbh->disconnect(); exit;