from_ptop.in 1.59 KB
Newer Older
1 2 3
#!/usr/bin/perl 
#
# EMULAB-COPYRIGHT
4
# Copyright (c) 2009 University of Utah and the Flux Group.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
# All rights reserved.
#
use English;
use Getopt::Std;
use POSIX qw(strftime floor ceil);
use Data::Dumper;
use Carp;

use strict;
use warnings;

#
# Turn off line buffering on output
#
$| = 1; 

# Load the Testbed support stuff.
22
use lib "@prefix@/lib";
23 24 25
use libdb;
use libtestbed;

26
chdir "@prefix@/data/node_usage";
27 28 29 30 31 32 33 34 35 36 37

my $qr = DBQueryFatal("select t.idx,action,t.exptidx,eid,pid,UNIX_TIMESTAMP(start_time), UNIX_TIMESTAMP(end_time) from testbed_stats as t left join experiment_stats as e on t.exptidx = e.exptidx where (t.action='swapin' or t.action='start') and exitcode=0 and start_time >= '2005-09-03' order by t.idx");


while (my ($idx,$action,$exptidx,$eid,$pid,$start,$stop) = $qr->fetchrow()) {

    unless (defined $pid) {
	print "xxx $exptidx\n";
	next;
    }

38
    my $dir = "/usr/testbed/expinfo/$pid/$eid/$exptidx";
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72

    my @res;
    foreach my $fn (<$dir/*.ptop>) {
	next if $fn =~ /-empty.ptop$/;
	my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
	    $atime,$mtime,$ctime,$blksize,$blocks) = stat("$fn") or die;
	next unless $start <= $mtime && $mtime <= $stop;
	push @res, [$fn,$mtime];
    }
    
    next unless @res == 1;

    my %tally;

    my $fn = $res[0][0];
    my $mtime = $res[0][1];

    open F, $fn or die;
    while (<F>) {
	next unless /^node pc\d+/;
	if (/^node (pc\d+) (pc[\d\w]+):1/) {
	    $tally{$2}++;
	} else {
	    print STDERR "SKIPPING: $idx $fn $.: $_";
	}
    }

    print "$mtime $idx $fn ::";
    foreach my $k (sort keys %tally) {
	print " $k: $tally{$k}";
    }
    print "\n";
    
}