#!/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); }