OSDN Git Service

move admin/ML-msgs to admin/legacy/ML-msgs
[linuxjf/JF.git] / bin / check-old-reservation
1 #!/usr/bin/perl
2 # $Id: check-old-reservation,v 1.2 2000/02/27 16:23:46 fuku Exp $
3
4 ################################################################
5 # ÀßÄê¹àÌÜ
6 ################################################################
7 # ¼è¤ê¾Ã¤·Æü¿ô: Í½Ì󤷤Ƥ«¤é¤³¤ÎÆü¿ô¤òĶ²á¤·¤¿¤â¤Î¤Ï¼è¤ê¾Ã¤·¸õÊä?
8 $days_fatal = 360;
9 # ·Ù¹ðÆü¿ô: Í½Ì󤷤Ƥ«¤é¤³¤ÎÆü¿ô¤òĶ²á¤·¤¿¤â¤Î¤Ï·Ù¹ð :)
10 $days_warning = 180;
11 # sendmail ¤Î¥Ñ¥¹
12 $sendmail = '/usr/sbin/sendmail';
13
14 ################################################################
15 # º£Æü¤Îǯ·îÆü
16 my ($this_year, $this_month, $this_day) = &today;
17
18 # º£Æü¤Ï UNIX epoch ¤«¤é²¿Æü?
19 $today = &days_from_epoch($this_year, $this_month, $this_day);
20
21 while(@ARGV){
22     my $arg = shift;
23
24     if($arg eq '-v'){
25         $verbose = 1;
26         next;
27     }
28
29     if($arg eq '-h'){
30         &usage;
31         next;
32     }
33
34     if($arg eq '-m'){
35         $mail = 1;
36         next;
37     }
38
39     $list_file = $arg;
40 }
41
42 &usage unless -r $list_file;
43 open(LIST, "nkf -e < $list_file |") || die "Can't open $list_file\n";
44
45 while(<LIST>){
46     chomp;
47
48     if(/^#/){
49        next;
50     }
51
52     # tabs to space
53     s/\t/ /g;
54
55     if(/^([A-Z][A-Z][A-Z][A-Z]):\s+(.*)$/){
56         my ($name, $arg) = ($1, $2);
57         $props{$name} = $arg;
58         next;
59     }
60
61     if(/^\s*$/){
62
63         unless(keys(%props)){
64             # ¤³¤ì¤Ï¤¿¤À¤Î̵³²¤Ê¶õÇò¹Ô¡¢µ¤¤Ë¤·¤Ê¤¤
65             next;
66         }
67
68         if(!length($props{'NAME'}) ||
69            !length($props{'TRNS'}) ||
70            !length($props{'PDAT'}) ||
71            !length($props{'STAT'})){
72             die "Insufficient entry at line $.\n";
73         }
74
75         my($y, $m, $d) = ($props{'PDAT'} =~ m|(\d\d\d\d)/(\d+)/(\d+)|);
76         my $days = sprintf('%05d', $today - &days_from_epoch($y, $m, $d));
77         warn "$props{'NAME'}: $days days\n";
78
79         push @status, join("\t", $days, $props{'NAME'}, $props{'TRNS'},
80                            $props{'PDAT'}, $props{'STAT'}, $props{'NOTE'});
81         %props = ();
82     }
83 }
84 close(LIST);
85
86 # Æü¿ô¤Ç¥½¡¼¥È¤·¤Æ..
87 for(reverse sort @status){
88     my ($days, $name, $trns, $pdat, $stat, $note) = split(/\t/);
89
90     $days += 0;
91
92     if($days > $days_fatal){
93         print "--- FATAL ---------------------------------------------\n";
94         print "| Ê¸½ñ̾: $name\n";
95         print "| Í½ÌóÆü»þ: $pdat\n";
96         print "| Ã´Åö¼Ô: $trns\n";
97         print "| ¥¹¥Æ¡¼¥¿¥¹: $stat\n";
98         print "| Ä¶²áÆü¿ô: $days Æü\n\n";
99         my $msg = &fatal($trns, $name, $pdat, $days);
100         print $msg if $verbose;
101         &mail($msg, $trns) if $mail;
102     }elsif($days > $days_warning){
103         print "--- WARNING -------------------------------------------\n";
104         print "| Ê¸½ñ̾: $name\n";
105         print "| Í½ÌóÆü»þ: $pdat\n";
106         print "| Ã´Åö¼Ô: $trns\n";
107         print "| ¥¹¥Æ¡¼¥¿¥¹: $stat\n";
108         print "| Ä¶²áÆü¿ô: $days Æü\n\n";
109         my $msg = &warning($trns, $name, $pdat, $days);
110         print $msg if $verbose;
111         &mail($msg, $trns) if $mail;
112     }else{
113         print "--- INFO ----------------------------------------------\n";
114         print "| Ê¸½ñ̾: $name\n";
115         print "| Í½ÌóÆü»þ: $pdat\n";
116         print "| Ã´Åö¼Ô: $trns\n";
117         print "| ¥¹¥Æ¡¼¥¿¥¹: $stat\n";
118         print "| Ä¶²áÆü¿ô: $days Æü\n\n";
119     }
120 }
121
122 exit;
123
124 ################################################################
125 sub today{
126     my ($a, $b, $c, $d, $m, $y) = localtime(time);
127     ($y+1900, $m+1, $d);
128 }
129
130 ################################################################
131 sub days_from_epoch{
132     my($y, $m, $d) = @_;
133     my($i);
134
135     for($i=1970; $i<$y; $i++){
136         $d += 365;
137         $d ++ unless $i % 4;
138     }
139
140     for($i=1; $i<$m; $i++){
141         $d += (0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[$i];
142         $d++ if $i==2 && !($y % 4);
143     }
144
145     $d;
146 }
147
148 ################################################################
149 sub usage{
150     die <DATA>;
151 }
152
153 ################################################################
154 sub mail{
155     my($msg, $mail) = @_;
156
157     # `-f sender' ¥ª¥×¥·¥ç¥ó¤Ï¡¢sendmail.cf ¤Ë¤è¤Ã¤Æ¤ÏÅܤé¤ì¤ë¤·¡¢
158     # ¼ÂÁõ¤µ¤ì¤Æ¤Ê¤¤¾ì¹ç¤â¤¢¤ë (qmail ¤Î sendmail ¥é¥Ã¥Ñ¤È¤«)
159     open(OUT, "| nkf -j | $sendmail $mail") || die;
160     print OUT $msg;
161     close(OUT);
162 }
163
164 ################################################################
165 sub warning{
166     my($mail, $name, $date, $days) = @_;
167
168     return << "EOM";
169 To: $mail
170 Subject: status of `$name' ?
171 From: JF-gofer\@linux.or.jp
172 Reply-To: JF\@linux.or.jp
173 Content-Type: text/plain; charset=iso-2022-jp
174
175 (¤³¤Î¥á¡¼¥ë¤Ï¼«Æ°Á÷¿®¤µ¤ì¤Æ¤¤¤Þ¤¹)
176 ¤³¤ó¤Ë¤Á¤Ï. JF-gofer ¥°¥ë¡¼¥×¤Ç¤¹.
177 ͽÌ󤵤ì¤Æ¤¤¤ëʸ½ñ¤ÎËÝÌõ¿Ê¹Ô¾õ¶·¤Ë¤Ä¤¤¤Æ¤ª¿Ò¤Í¤·¤Þ¤¹.
178
179 $mail ¤µ¤ó¤Ï,
180 ʸ½ñ̾ `$name' ¤Î(ËÝÌõ)ºî¶È¤ò $date ¤ËͽÌ󤵤ì¤Æ¤ª¤ê,
181 ¸½ºßͽÌóÆü°Ê¹ß $days Æü¤¬·Ð²á¤·¤Æ¤¤¤Þ¤¹.
182
183 ºî¶È¤Î¾õ¶·¤Ï¤¤¤«¤¬¤Ç¤·¤ç¤¦¤«? ¤â¤·¤ª°ì¿Í¤Ç¤Îºî¶È¤¬ÂçÊѤǤ·¤¿¤é,
184 JF ¥á¥ó¥Ð¤Ëʬô¤·¤Æ¤Îºî¶È¤ò¤ª´«¤á¤·¤Þ¤¹.
185
186 ¤Ê¤ª, ¤³¤Î¥á¡¼¥ë¤¬¥É¥á¥¤¥óÊѹ¹¤Ê¤É¤ÇÆϤ«¤Ê¤«¤Ã¤¿¾ì¹ç,
187 ¤¢¤ë¤¤¤Ï 1 ¥ö·î·Ð¤Ã¤Æ¤â¤³¤Î¥á¡¼¥ë¤Ø¤ÎÊÖÅú¤¬¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï,
188 ºî¶È¤¬Ää»ß¾õÂ֤ˤ¢¤ë¤È¤ß¤Ê¤·, Â¾¤ÎÊý¤¬Í½Ìó¤Ç¤­¤ë¤è¤¦
189 ¤¢¤Ê¤¿¤Î $name ¤Ë´Ø¤¹¤ëºî¶ÈͽÌó¤òËõ¾Ã¤¤¤¿¤·¤Þ¤¹.
190
191 ¤³¤Î¥á¡¼¥ë¤ËÊÖÅú¤¹¤ë¤È JF\@linux.or.jp ¤ËÆϤ¯¤³¤È¤Ë¤Ê¤ê¤Þ¤¹.
192 ¤³¤ì¤Ï, ºî¶È¤Î¿Ê¹Ô¾õ¶·¤ò JF ¥á¥ó¥ÐÁ´°÷¤Çǧ¼±¤¹¤ë¤¿¤á¤Î¤â¤Î¤Ç¤¹.
193
194 ¤½¤ì¤Ç¤Ï,²¼¤Î¶õÇòÉôʬ¤òËä¤á¤¿·Á¤Ç¤ÎÊÖÅú¤ò¤ª¤Í¤¬¤¤¤¤¤¿¤·¤Þ¤¹.
195
196 ͽÌóʸ½ñ̾: $name
197 ͽÌó¼Ô̾: $mail
198 ͽÌó¤ò¤É¤¦¤¹¤ë¤«? : Í½Ìó·Ñ³ / Í½Ìó¼è¤ê¾Ã¤· / ºÆÅÙͽÌó
199 ¸½¾õÊó¹ð:
200   [·Ñ³¤Ç¤ÎÎã - Âèn¾Ï¤Þ¤ÇÌõλ.¤¢¤È¡û¡û¹Ô¤Ê¤Î¤Ç,¢¢¢¢% ½ª¤ï¤Ã¤Æ¤¤¤Þ¤¹]
201   [¼è¤ê¾Ã¤·¤Ç¤ÎÎã - Âèn¾Ï¤Þ¤ÇÌõλ.¤½¤ÎÉôʬ¤Þ¤Ç¤òźÉÕ]
202   [ºÆͽÌó¤Ç¤ÎÎã - Âèn¾Ï¤Þ¤ÇÌõλ.ºÆÅÙͽÌó¤·¤Þ¤¹]
203
204 JF ¤Ï¥Ü¥é¥ó¥¿¥ê¤Ê³èÆ°¤Ç¤¹¤Î¤Ç, ÅÓÃæ¤Çºî¶È¤Ç¤­¤Ê¤¯¤Ê¤ë¾õ¶·¤Ë´Ù¤Ã¤¿¤ê
205 ¤¹¤ë¤³¤È¤ÏÅöÁ³¤¢¤êÆÀ¤Þ¤¹. ¤³¤ì¤Ï²¿¤éÃѤ¸¤ë¤³¤È¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó.
206 ¤·¤«¤·, ¤½¤¦¤¤¤Ã¤¿¾ì¹ç¤Ï, ¤Ê¤ë¤Ù¤¯Áá¤á¤Ë¡Ö¼ê¤ò¾å¤²¤Æ¡×, Â¾¤Î¥á¥ó¥Ð¤Ø¤Î
207 ºî¶È¤Î°Ñ¾ù¤ò¤ª´ê¤¤¤·¤Þ¤¹.
208
209 ¤Þ¤¿, Í½Ìó¤ò¼è¤ê¾Ã¤µ¤ì¤ë¾ì¹ç¤Ï, ¤½¤ì¤Þ¤Ç¤ÎÌõʸ¤ò JF ¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Ë
210 ή¤¹¤Ê¤É¤·¤Æ, ¤Ç¤­¤ë¸Â¤êºî¶È·ë²Ì¤ò¥Õ¥£¡¼¥É¥Ð¥Ã¥¯¤¯¤À¤µ¤ë¤è¤¦¤ª´ê¤¤¤¤¤¿
211 ¤·¤Þ¤¹.
212
213 JF Project ¤Îºî¶È±ß³ê¤Î¤¿¤á, ¤¼¤Ò¤´¶¨ÎϤò¤ª´ê¤¤¤¤¤¿¤·¤Þ¤¹.
214
215 -- 
216 JF-gofer ¥°¥ë¡¼¥×
217
218 EOM
219 }
220
221 ################################################################
222 sub fatal{
223     my($mail, $name, $date, $days) = @_;
224
225     return << "EOM";
226 To: $mail
227 Subject: status of `$name' ?
228 From: JF-gofer\@linux.or.jp
229 Reply-To: JF\@linux.or.jp
230 Content-Type: text/plain; charset=iso-2022-jp
231
232 (¤³¤Î¥á¡¼¥ë¤Ï¼«Æ°Á÷¿®¤µ¤ì¤Æ¤¤¤Þ¤¹)
233 ¤³¤ó¤Ë¤Á¤Ï. JF-gofer ¥°¥ë¡¼¥×¤Ç¤¹.
234 ͽÌ󤵤ì¤Æ¤¤¤ëʸ½ñ¤ÎËÝÌõ¿Ê¹Ô¾õ¶·¤Ë¤Ä¤¤¤Æ¤ª¿Ò¤Í¤·¤Þ¤¹.
235
236 $mail ¤µ¤ó¤Ï,
237 ʸ½ñ̾ `$name' ¤Î(ËÝÌõ)ºî¶È¤ò $date ¤ËͽÌ󤵤ì¤Æ¤ª¤ê,
238 ¸½ºßͽÌóÆü°Ê¹ß $days Æü¤¬·Ð²á¤·¤Æ¤¤¤Þ¤¹.
239
240 ºî¶È¤Î¾õ¶·¤Ï¤¤¤«¤¬¤Ç¤·¤ç¤¦¤«? Í½Ìó¤Î°ìö¼è¤ê¾Ã¤·, ¤Ê¤¤¤·¤ÏͽÌó¤·Ä¾¤·
241 ¤ò¤ª´«¤á¤·¤Þ¤¹.
242
243 ¤Ê¤ª, ¤³¤Î¥á¡¼¥ë¤¬¥É¥á¥¤¥óÊѹ¹¤Ê¤É¤ÇÆϤ«¤Ê¤«¤Ã¤¿¾ì¹ç,
244 ¤¢¤ë¤¤¤Ï 1 ¥ö·î·Ð¤Ã¤Æ¤â¤³¤Î¥á¡¼¥ë¤Ø¤ÎÊÖÅú¤¬¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï,
245 ºî¶È¤¬Ää»ß¾õÂ֤ˤ¢¤ë¤È¤ß¤Ê¤·, Â¾¤ÎÊý¤¬Í½Ìó¤Ç¤­¤ë¤è¤¦
246 ¤¢¤Ê¤¿¤Î $name ¤Ë´Ø¤¹¤ëºî¶ÈͽÌó¤òËõ¾Ã¤¤¤¿¤·¤Þ¤¹.
247
248 ¤³¤Î¥á¡¼¥ë¤ËÊÖÅú¤¹¤ë¤È JF\@linux.or.jp ¤ËÆϤ¯¤³¤È¤Ë¤Ê¤ê¤Þ¤¹.
249 ¤³¤ì¤Ï, ºî¶È¤Î¿Ê¹Ô¾õ¶·¤ò JF ¥á¥ó¥ÐÁ´°÷¤Çǧ¼±¤¹¤ë¤¿¤á¤Î¤â¤Î¤Ç¤¹.
250
251 ¤½¤ì¤Ç¤Ï,²¼¤Î¶õÇòÉôʬ¤òËä¤á¤¿·Á¤Ç¤ÎÊÖÅú¤ò¤ª¤Í¤¬¤¤¤¤¤¿¤·¤Þ¤¹.
252
253 ͽÌóʸ½ñ̾: $name
254 ͽÌó¼Ô̾: $mail
255 ͽÌó¤ò¤É¤¦¤¹¤ë¤«? : Í½Ìó·Ñ³ / Í½Ìó¼è¤ê¾Ã¤· / ºÆÅÙͽÌó
256 ¸½¾õÊó¹ð:
257   [·Ñ³¤Ç¤ÎÎã - Âèn¾Ï¤Þ¤ÇÌõλ.¤¢¤È¡û¡û¹Ô¤Ê¤Î¤Ç,¢¢¢¢% ½ª¤ï¤Ã¤Æ¤¤¤Þ¤¹]
258   [¼è¤ê¾Ã¤·¤Ç¤ÎÎã - Âèn¾Ï¤Þ¤ÇÌõλ.¤½¤ÎÉôʬ¤Þ¤Ç¤òźÉÕ]
259   [ºÆͽÌó¤Ç¤ÎÎã - Âèn¾Ï¤Þ¤ÇÌõλ.ºÆÅÙͽÌó¤·¤Þ¤¹]
260
261 JF ¤Ï¥Ü¥é¥ó¥¿¥ê¤Ê³èÆ°¤Ç¤¹¤Î¤Ç, ÅÓÃæ¤Çºî¶È¤Ç¤­¤Ê¤¯¤Ê¤ë¾õ¶·¤Ë´Ù¤Ã¤¿¤ê
262 ¤¹¤ë¤³¤È¤ÏÅöÁ³¤¢¤êÆÀ¤Þ¤¹. ¤³¤ì¤Ï²¿¤éÃѤ¸¤ë¤³¤È¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó.
263 ¤·¤«¤·, ¤½¤¦¤¤¤Ã¤¿¾ì¹ç¤Ï, ¤Ê¤ë¤Ù¤¯Áá¤á¤Ë¡Ö¼ê¤ò¾å¤²¤Æ¡×, Â¾¤Î¥á¥ó¥Ð¤Ø¤Î
264 ºî¶È¤Î°Ñ¾ù¤ò¤ª´ê¤¤¤·¤Þ¤¹.
265
266 ¤Þ¤¿, Í½Ìó¤ò¼è¤ê¾Ã¤µ¤ì¤ë¾ì¹ç¤Ï, ¤½¤ì¤Þ¤Ç¤ÎÌõʸ¤ò JF ¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Ë
267 ή¤¹¤Ê¤É¤·¤Æ, ¤Ç¤­¤ë¸Â¤êºî¶È·ë²Ì¤ò¥Õ¥£¡¼¥É¥Ð¥Ã¥¯¤¯¤À¤µ¤ë¤è¤¦¤ª´ê¤¤¤¤¤¿
268 ¤·¤Þ¤¹.
269
270 JF Project ¤Îºî¶È±ß³ê¤Î¤¿¤á, ¤¼¤Ò¤´¶¨ÎϤò¤ª´ê¤¤¤¤¤¿¤·¤Þ¤¹.
271
272 -- 
273 JF-gofer ¥°¥ë¡¼¥×
274
275 EOM
276 }
277
278 __END__
279 Usage: check-old-reservation [options] reserved.list
280 Options:
281     -v    verbose: also print generated mail message to stdout
282     -m    do mail the messages
283     -h    show this help