Annotation of capa/capa51/CapaTools/duration.rpt.pl, revision 1.3

1.1       albertel    1: #!/usr/local/bin/perl
1.2       albertel    2: #  duration statistics for telnet portions of CAPA
                      3: #  Copyright (C) 1992-2000 Michigan State University
                      4: #
                      5: #  The CAPA system is free software; you can redistribute it and/or
1.3     ! albertel    6: #  modify it under the terms of the GNU General Public License as
1.2       albertel    7: #  published by the Free Software Foundation; either version 2 of the
                      8: #  License, or (at your option) any later version.
                      9: #
                     10: #  The CAPA system is distributed in the hope that it will be useful,
                     11: #  but WITHOUT ANY WARRANTY; without even the implied warranty of
                     12: #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1.3     ! albertel   13: #  General Public License for more details.
1.2       albertel   14: #
1.3     ! albertel   15: #  You should have received a copy of the GNU General Public
1.2       albertel   16: #  License along with the CAPA system; see the file COPYING.  If not,
                     17: #  write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
                     18: #  Boston, MA 02111-1307, USA.
                     19: #
                     20: #  As a special exception, you have permission to link this program
                     21: #  with the TtH/TtM library and distribute executables, as long as you
                     22: #  follow the requirements of the GNU GPL in regard to all of the
                     23: #  software in the executable aside from TtH/TtM.
                     24: 
1.1       albertel   25: 
                     26:  require('getopts.pl');
                     27:  
                     28:  sub  S_Enterpath {
                     29:     local($notdone,$path);
                     30:     
                     31:     $notdone = 1;
                     32:     while ($notdone) {
                     33:       print "Please enter the CLASS absolute path:\n";
                     34:       $path = <>; chomp($path);
                     35:       if( $path =~ /\/$/ ) {
                     36:         $Rfullpath = "$path" . "records";
                     37:         $Dfullpath = "$path" . "records/duration.db";
                     38:        
                     39:       } else {
                     40:         $Rfullpath = "$path" . "/records";
                     41:         $Dfullpath = "$path" . "/records/duration.db";
                     42:         
                     43:       }
                     44:       if( -d $path ) {
                     45:         if( -d $Rfullpath ) {
                     46:           if( -f $Dfullpath ) {
                     47:             $notdone = 0;
                     48:           } else {
                     49:             print "File [$Dfullpath] does not exist!\n";
                     50:           }
                     51:         } else {
                     52:           print "Directory [$Rfullpath] does not exist!\n";
                     53:         }
                     54:       } else {
                     55:         print "Directory [$path] does not exist!\n";
                     56:       }
                     57:     
                     58:     }
                     59:     return ($path);
                     60:   }
                     61:   
                     62:   sub S_ScanDB  {
                     63:     local($filename)=@_;
                     64:     local($line_cnt)=0;
                     65:     local($s_num,$tty,$b_date,$e_date);
                     66:     local($hr,$mm,$ss,$ss_cnt);
                     67:     local($i, $j, @S_cnt);
                     68:     local($ylow, $yavg, $yhigh);
                     69:     open(IN, "<$filename") || die "Cannot open $filename file!";
                     70:     open(OUT, ">$Out_file") || die "Cannot open $Out_file file!";
                     71:     $min_sec = 1000;
                     72:     while (<IN>) {
                     73:       $line_cnt++;
                     74:       chomp();
                     75:       ($s_num,$tty,$b_date,$e_date) = split(/\t/);
                     76:       if( $line_cnt == 1 ) {
                     77:         $start_time = $b_date;
                     78:       }
                     79:       ($hr,$mm,$ss,$ylow)  = S_DiffDate($start_time,$b_date);
                     80:       ($hr,$mm,$ss,$yhigh) = S_DiffDate($start_time,$e_date);
                     81:       $yavg = ($ylow + $yhigh) / 2;
                     82:       $ss_cnt = $yhigh - $ylow;
                     83:       $min_sec = ($min_sec < $ss_cnt ?  $min_sec : $ss_cnt);
                     84:       $s_idx = int($ss_cnt / 100);
                     85:       $S_cnt[$s_idx]++;
                     86:       print OUT "$line_cnt\t$yavg\t$ylow\t$yhigh\n";
                     87:       # print "$s_num,($hr:$mm:$ss,$ss_cnt)\n";
                     88: 
                     89:      }
                     90:      close(IN) || die "Cannot close $filename file!";
                     91:      close(OUT) || die "Cannot close $Out_file file!";
                     92:      
                     93:      print "minimal number of seconds = $min_sec\n";
                     94:      for($i=0;$i<=$#S_cnt;$i++) {
                     95:        $j= $i * 100;
                     96:        print "$j\t$S_cnt[$i]\n" if $S_cnt[$i] > 0;
                     97:      }
                     98:      print "minimal number of seconds = $min_sec\n";
                     99:   }
                    100:   ## 012345678901
                    101:   ## Wed Jan  8 14:38:06 1997
                    102:   ## Fri Jan 17 00:34:30 1997,Fri Jan 17 00:36:25 1997
                    103:   %Mon = ( 'Jan' => 0, 'Feb' => 1, 'Mar' => 2, 'Apr' => 3,  'May' => 4,  'Jun' => 5, 
                    104:            'Jul' => 6, 'Aug' => 7, 'Sep' => 8, 'Oct' => 9,  'Nov' => 10, 'Dec' => 11 );
                    105:   @mdoy = ( 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365);
                    106:   
                    107:   sub  S_DiffDate  {
                    108:     local($a_str,$b_str)=@_;
                    109:     local($hrmmss_astr,$hrmmss_bstr);
                    110:     local($modd_astr,$modd_bstr);
                    111:     local($mo_a,$dd_a,$hr_a,$mm_a,$ss_a);
                    112:     local($mo_b,$dd_b,$hr_b,$mm_b,$ss_b);
                    113:     local($sec_cnt);
                    114:     local($dsec,$dmm,$dmm_cnt,$dhr_cnt);
                    115:     
                    116:     $modd_astr = substr($a_str,4,6);
                    117:     $hrmmss_astr = substr($a_str,11,8);
                    118:     $modd_bstr = substr($b_str,4,6);
                    119:     $hrmmss_bstr = substr($b_str,11,8);
                    120:     $mo_a = substr($modd_astr,0,3); $dd_a = substr($modd_astr,4,2);
                    121:     $mo_b = substr($modd_bstr,0,3); $dd_b = substr($modd_bstr,4,2);
                    122:     ($hr_a,$mm_a,$ss_a) = split(/:/, $hrmmss_astr);
                    123:     ($hr_b,$mm_b,$ss_b) = split(/:/, $hrmmss_bstr);
                    124:     $adoy = $mdoy[$Mon{$mo_a}] + $dd_a;
                    125:     $bdoy = $mdoy[$Mon{$mo_b}] + $dd_b;
                    126:     $sec_cnt = ($bdoy - $adoy)*24*60*60 + ($hr_b - $hr_a)*60*60 + ($mm_b - $mm_a)*60 + ($ss_b-$ss_a);
                    127:     $dsec = $sec_cnt % 60;
                    128:     $dmm_cnt = ($sec_cnt - $dsec) / 60;
                    129:     $dmm = $dmm_cnt % 60;
                    130:     $dhr_cnt = ($dmm_cnt - $dmm) / 60;
                    131:     
                    132:     return ($dhr_cnt,$dmm,$dsec,$sec_cnt);
                    133:   }
                    134:   
                    135:   
                    136:   $Out_file = '/usr/user1/capadvt/CAPA_SRC/4.5/pProj/dur.out';
                    137:   
                    138:   
                    139:   S_Enterpath();
                    140:   
                    141:   S_ScanDB("$Dfullpath");

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>