source: trunk/third/moira/incremental/afs/afs_nightly.pl @ 23095

Revision 23095, 1.7 KB checked in by ghudson, 16 years ago (diff)
Import the moira package from SIPB Debathena.
Line 
1#!/afs/athena/contrib/perl/perl
2
3require "/moira/bin/afs_utils.pl";
4
5#
6# Nightly reaper - Recompute all usages/allocations.
7#
8
9local ($key, @vos, %used,%alloc,%total, %a);
10local ($c,$as,$ap,$total,$used,$alloc);
11
12if (open(TMP,"/afs/athena.mit.edu/service/afs_data")) {
13    @new_data = <TMP>;
14    close(TMP);
15}
16
17chop(@new_data);
18
19for (@new_data) {
20    ($c,$as,$ap) = split(/\s+/,$_);
21    ($as) = gethostbyname($as) unless ($c =~ /^\#/);
22    $c =~ tr/a-z/A-Z/;
23    $as =~ tr/a-z/A-Z/;
24    $ap =~ s:^([^/]):/vicep\1:;
25    $ok{"$c $as $ap"} = 1;
26}
27for (@new_data) {
28    $as = $ap = 0;
29    if ($_ !~ /^\#/) {
30        ($c,$as,$ap,$type) = split(/\s+/,$_);
31        ($as) = gethostbyname($as);
32        $c =~ tr/a-z/A-Z/;
33        $as =~ tr/a-z/A-Z/;
34        $ap =~ s:^([^/]):/vicep\1:;
35    }
36    next unless ($as && $ap);
37
38    &afs_lock;
39    truncate(SRV, 0);
40    for (@afs_data) {
41        ($c2,$as2,$ap2) = split(/\s+/,$_);
42        next unless ($c2 =~ /^\#/ || $ok{"$c2 $as2 $ap2"});
43        print SRV $_ unless ($c eq $c2 && $as eq $as2 && $ap eq $ap2);
44    }
45    &afs_unlock;
46
47    open(VOS,"$vos partinfo $as $ap -cell $c -noauth|");
48    chop(@vos = <VOS>);
49    close(VOS);
50    next if ($?);
51    @vos = split(/\s+/,$vos[0]);
52    $total = pop(@vos);
53    $used = $total-$vos[5];
54    $alloc = 0;
55
56    open(VOS,"$vos listvol $as $ap -cell $c -long -noauth|");
57    @vos = <VOS>;
58    close(VOS);
59    next if ($?);
60
61    while ($_ = shift(@vos)) {
62        next unless /On-line/;
63        local($vn,$id) = split(/\s+/, $_);
64        shift(@vos);
65        local($p,$p,$p) = split(/\s+/, shift(@vos));
66        local($q,$q,$q) = split(/\s+/, shift(@vos));
67        if ($id==$p || !$a{$p}) {
68            $a{$p} = $q;
69        }
70    }
71    for $p (keys %a) { $alloc += $a{$p}; delete $a{$p}; }
72
73    &afs_lock;
74    seek(SRV, 0, 2);
75    print SRV "$c $as $ap $type $total $used $alloc\n";
76    &afs_unlock;
77}
Note: See TracBrowser for help on using the repository browser.