#!/usr/bin/perl
use strict; use POSIX; use URI; use File::stat; use Net::hostent; use HTTP::Request; use LWP::UserAgent;
opendir (DIR, "/tmp/globus/");
my @files = grep {m/\.gramaudit$/} readdir(DIR);
my $record; my @record_entries;
closedir (DIR);
foreach my $file (@files) {
open(F, "); $record =~ s/^"//; $record =~ s/"$//;
@record_entries = split(/"[^"]"/, $record);
close(F);
my $ua_stellaris = LWP::UserAgent->new();
my $res_stellaris = $ua_stellaris->get("http://Kerr:Einstein\@mintaka.aip.de:8080/volist/vomembers?print_id=1");
if ($res_stellaris->content !~ @record_entries[2]) {next;}
my $t = stat("/tmp/globus/".$file)->mtime; my @now = localtime($t);
my $now_ = sprintf("%.4d-%.2d-%.2dT%.2d:%.2d:%.2d",
1900+@now[5],1+@now[4],@now[3],@now[2],@now[1],@now[0]);
my $job_grid_id = URI->new(@record_entries[0]);
my $id = unpack("H*", $job_grid_id->path());
my $host = gethost($job_grid_id->host())->name();
my $status = ""; my $exe = ""; my $end_time = "", my $duration = ""; my $tq = "";
my @ct = localtime(HTTP::Date::str2time(@record_entries[5]));
my $tc = sprintf ("%.4d-%.2d-%.2dT%.2d:%.2d:%.2d",
1900+@ct[5],1+@ct[4],@ct[3],@ct[2],@ct[1],@ct[0]);
if ( @record_entries[14] eq "true" && @record_entries[6] ne "" ) {
my $queued_time = HTTP::Date::str2time(@record_entries[6]);
my @qt = localtime($queued_time);
$tq = sprintf ("%.4d-%.2d-%.2dT%.2d:%.2d:%.2d",
1900+@qt[5],1+@qt[4],@qt[3],@qt[2],@qt[1],@qt[0]);
$end_time = $now_;
$duration = sprintf("%.4f",($t-$queued_time)/3600.);}
if ( @record_entries[14] eq "false") {
if ( @record_entries[6] eq "" ) { $status = "queued"; }
else { $status = "started"; }}
else { if ( @record_entries[13] eq "false") { $status = "failed"; }
else { $status = "completed"; } }
if (index(@record_entries[12], "executable") > 0) {
$exe = @record_entries[12];
$exe =~ s/.*executable\"\; = \"\;//; $exe =~ s/\"\;.*//;}
my $usage_record = <<"EOF";
@record_entries[1]
@record_entries[0]
@record_entries[3]
@record_entries[2]
$exe
$status
$tc
$tq
$end_time
$duration
$host
@record_entries[11]
computer
@record_entries[13]
@record_entries[14]
EOF
if (@record_entries[1] eq "") {$usage_record =~ s/.*<\/LocalJobId>//;}
if ($tq eq "") {$usage_record =~ s/.*<\/StartTime>//;}
if ($exe eq "") {$usage_record =~ s/.*<\/JobName>//;}
if ($duration eq "") {$usage_record =~ s/.*<\/WallDuration>//;}
my $req = HTTP::Request->new("PUT",
sprintf ("http://stellaris.zib.de:24020/files/UsageRecords/%s/%.4i/%.2i/%s\n",
$host, 1900+@ct[5], 1+@ct[4], $id),
HTTP::Headers->new(Content_Length => length($usage_record)), $usage_record);
my $ua = LWP::UserAgent->new(); my $res = $ua->request($req);
if ($res->is_error) {print STDERR "ERROR: ".$res->status_line."\n";}
unlink ("/tmp/globus/".$file);
}