]>
Commit | Line | Data |
---|---|---|
6231b320 | 1 | #!/afs/athena/contrib/perl/perl |
2 | ||
3 | require "/moira/bin/afs_utils.pl"; | |
08afe93f | 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 | ||
ea0d6880 | 12 | if (open(TMP,"/afs/athena.mit.edu/service/afs_data")) { |
e9993d7d | 13 | @new_data = <TMP>; |
08afe93f | 14 | close(TMP); |
15 | } | |
16 | ||
e9993d7d | 17 | chop(@new_data); |
71186e53 | 18 | |
19 | for (@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 | } | |
e9993d7d | 27 | for (@new_data) { |
08afe93f | 28 | $as = $ap = 0; |
29 | if ($_ !~ /^\#/) { | |
e9993d7d | 30 | ($c,$as,$ap,$type) = split(/\s+/,$_); |
08afe93f | 31 | ($as) = gethostbyname($as); |
32 | $c =~ tr/a-z/A-Z/; | |
33 | $as =~ tr/a-z/A-Z/; | |
34 | $ap =~ s:^([^/]):/vicep\1:; | |
35 | } | |
e9993d7d | 36 | next unless ($as && $ap); |
5eaef520 | 37 | |
e9993d7d | 38 | &afs_lock; |
39 | truncate(SRV, 0); | |
40 | for (@afs_data) { | |
41 | ($c2,$as2,$ap2) = split(/\s+/,$_); | |
71186e53 | 42 | next unless ($c2 =~ /^\#/ || $ok{"$c2 $as2 $ap2"}); |
e9993d7d | 43 | print SRV $_ unless ($c eq $c2 && $as eq $as2 && $ap eq $ap2); |
44 | } | |
45 | &afs_unlock; | |
5eaef520 | 46 | |
754ef493 | 47 | open(VOS,"$vos partinfo $as $ap -cell $c -noauth|"); |
48 | chop(@vos = <VOS>); | |
49 | close(VOS); | |
08afe93f | 50 | next if ($?); |
754ef493 | 51 | @vos = split(/\s+/,$vos[0]); |
52 | $total = pop(@vos); | |
53 | $used = $total-$vos[5]; | |
e9993d7d | 54 | $alloc = 0; |
5eaef520 | 55 | |
08afe93f | 56 | open(VOS,"$vos listvol $as $ap -cell $c -long -noauth|"); |
57 | @vos = <VOS>; | |
58 | close(VOS); | |
59 | next if ($?); | |
5eaef520 | 60 | |
08afe93f | 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 | } | |
e9993d7d | 71 | for $p (keys %a) { $alloc += $a{$p}; delete $a{$p}; } |
08afe93f | 72 | |
e9993d7d | 73 | &afs_lock; |
74 | seek(SRV, 0, 2); | |
75 | print SRV "$c $as $ap $type $total $used $alloc\n"; | |
76 | &afs_unlock; | |
08afe93f | 77 | } |