]> andersk Git - moira.git/blob - incremental/afs_nightly.pl
After synchronizing with opssrc as it was on 8/4/92.
[moira.git] / incremental / afs_nightly.pl
1 #!/afs/athena/contrib/perl/perl
2
3 require "/moira/bin/afs_utils.pl";
4
5 #
6 # Nightly reaper - Recompute all usages/allocations.
7 #
8
9 local ($key, @vos, %used,%alloc,%total, %a);
10 local ($c,$as,$ap,$total,$used,$alloc);
11
12 if (open(TMP,"/afs/athena.mit.edu/service/afs_data")) {
13     @new_data = <TMP>;
14     close(TMP);
15 }
16
17 chop(@new_data);
18 for (@new_data) {
19     $as = $ap = 0;
20     if ($_ !~ /^\#/) {
21         ($c,$as,$ap,$type) = split(/\s+/,$_);
22         ($as) = gethostbyname($as);
23         $c =~ tr/a-z/A-Z/;
24         $as =~ tr/a-z/A-Z/;
25         $ap =~ s:^([^/]):/vicep\1:;
26     }
27     next unless ($as && $ap);
28     
29     &afs_lock;
30     truncate(SRV, 0);
31     for (@afs_data) {
32         ($c2,$as2,$ap2) = split(/\s+/,$_);
33         print SRV $_ unless ($c eq $c2 && $as eq $as2 && $ap eq $ap2);
34     }
35     &afs_unlock;
36     
37     open(VOS,"$vos partinfo $as $ap -cell $c -noauth|");
38     chop(@vos = <VOS>);
39     close(VOS);
40     next if ($?);
41     @vos = split(/\s+/,$vos[0]);
42     $total = pop(@vos);
43     $used = $total-$vos[5];
44     $alloc = 0;
45     
46     open(VOS,"$vos listvol $as $ap -cell $c -long -noauth|");
47     @vos = <VOS>;
48     close(VOS);
49     next if ($?);
50     
51     while ($_ = shift(@vos)) {
52         next unless /On-line/;
53         local($vn,$id) = split(/\s+/, $_);
54         shift(@vos);
55         local($p,$p,$p) = split(/\s+/, shift(@vos));
56         local($q,$q,$q) = split(/\s+/, shift(@vos));
57         if ($id==$p || !$a{$p}) {
58             $a{$p} = $q;
59         }
60     }
61     for $p (keys %a) { $alloc += $a{$p}; delete $a{$p}; }
62
63     &afs_lock;
64     seek(SRV, 0, 2);
65     print SRV "$c $as $ap $type $total $used $alloc\n";
66     &afs_unlock;
67 }
This page took 0.050287 seconds and 5 git commands to generate.