home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / apps / bbs / smp_awk / logstat.awk < prev    next >
Text File  |  1995-01-01  |  7KB  |  206 lines

  1. # Semper log statistics creator
  2. # =============================
  3. # (c) 28.12.1994 BoLuSoft, Borek Lupomesky
  4. # E-mail: 2:423/71@fidonet.org
  5. #         90:1200/1@nest.ftn
  6. #         borek@leo1.zlin.vutbr.cz
  7.  
  8. function app(strg,arr,curr) {
  9.   for(i=0;i<curr;i++) { if(arr[i]==strg) return i }
  10.   return -1;
  11. }
  12.  
  13. function cmpadr(adr1,adr2) {
  14.   gsub("/",".",adr1);
  15.   gsub(":",".",adr1);
  16.   gsub("@",".",adr1);
  17.   gsub("/",".",adr2);
  18.   gsub(":",".",adr2);
  19.   gsub("@",".",adr2);
  20.   split(adr1,a1,".");
  21.   split(adr2,a2,".");
  22.   a1[5]=a1[5] "." a1[6];
  23.   a2[5]=a2[5] "." a2[6];
  24.   if(a2[5] < a1[5]) return 1; else if(a2[5] > a1[5]) return 0;
  25.   if(a2[1]+0 < a1[1]+0) return 2; else if(a2[1]+0 > a1[1]+0) return 0;
  26.   if(a2[2]+0 < a1[2]+0) return 3; else if(a2[2]+0 > a1[2]+0) return 0;
  27.   if(a2[3]+0 < a1[3]+0) return 4; else if(a2[3]+0 > a1[3]+0) return 0;
  28.   if(a2[4]+0 < a1[4]+0) return 5; else if(a2[4]+0 > a1[4]+0) return 0;
  29.   return 0
  30. }
  31.  
  32. function getnum(s) {
  33.   a=length(s);
  34.   b="0";
  35.   for(i=1;i<=a;i++) {
  36.     c=substr(s,i,1);
  37.     if(c>="0" && c<="9") b=b c;
  38.   }
  39.   return b+0;
  40. }
  41.  
  42. function gettime(s) {
  43.   a=length(s);
  44.   b=index(s,":"); d="0";
  45.   for(i=1;i<=b;i++) {
  46.     c=substr(s,i,1);
  47.     if(c>="0" && c<="9") d=d c;
  48.   }
  49.   ret=(d+0)*60;
  50.   i++;
  51.   d="0";
  52.   for(;i<=a;i++) {
  53.     c=substr(s,i,1);
  54.     if(d>="0" && d<="9") d=d c;
  55.   }
  56.   return ret+d;
  57. }
  58.  
  59. function iosize(i,o) {
  60.   if(i<1024) { si=""; }
  61.   else { i/=1024; si="K"; }
  62.   if(o<1024) { so=""; }
  63.   else { o/=1024; so="K"; }
  64.   ti=sprintf("%d%s",i,si);
  65.   to=sprintf("%d%s",o,so);
  66.   return sprintf("%6s/%6s",ti,to);
  67. }
  68.  
  69. BEGIN { 
  70.   ring=0; addr="-failed-"; failed=0; conns=0; online=0; inb=0; outb=0;
  71.   foutb=0; finb=0; curr=0; valid=0; bbscalls=0; files=0;
  72.   sfbytes=0; rfbytes=0; sfiles=0; rfiles=0;
  73.   t_if=0; t_of=0; t_ib=0; t_ob=0; 
  74. }
  75. /Dialing/ { ring=0 }
  76. /NO CARRIER/ { ring=0 }
  77. /Ring$/ { ring=1 }
  78. / Connect /,/Duration of connect/ {
  79.   if($6 == "Connect") {
  80.     split($7,constrg,"/");
  81.     time=$2 " " $3 " " $4;
  82.   }
  83.   if($0 ~ "branch to BBS") {
  84.     addr="BBS caller"
  85.   }
  86.   if($0 ~ "Remote Address") {
  87.     addr=$8;
  88.     valid=1;
  89.     if(DOMAIN != "") {
  90.       if($8 !~ DOMAIN) valid=0;
  91.     }
  92.   }
  93.   if($6 == "Rcvd") {
  94.     rfbytes+=getnum($9);
  95.     rftime+=gettime($10);
  96.     rfiles++;
  97.   }
  98.   if($6 == "Sent") {
  99.     sfbytes+=getnum($9);
  100.     sftime+=gettime($10);
  101.     sfiles++;
  102.   }
  103.   if($0 ~ "System  :") {
  104.     sysname=""
  105.     for(i=8;i<=NF;i++) sysname=sysname " " $i;
  106.   }
  107.   if($0 ~ "Duration of connect") {
  108.     if(addr=="BBS caller") {
  109.       bbscalls+=1;
  110.       if(DOMAIN!="") {
  111.         ring=0;
  112.         addr="-failed-"
  113.         next;
  114.       }
  115.     }
  116.     if(valid) {
  117.       conns++;
  118.       split($9,durarr,":");
  119.       duration=(durarr[1]*60)+durarr[2];
  120.       online+=duration;
  121.       if(NF==11) {
  122.         toll=$11;
  123.         sub(/\(/," ",toll);
  124.       } else toll=0;
  125.       tbill+=toll;
  126.       if((addr!="-failed-")||(DOMAIN=="")) {
  127.         iobytes=iosize(rfbytes,sfbytes);
  128.         if(ring) { 
  129.           printf("%s  %5s  %3s  %-28s  %2d/%2d  %12s  %3d:%02d\n", \
  130.             time,constrg[1],"IN",addr,rfiles,sfiles,iobytes,durarr[1],durarr[2]);
  131.         } else {
  132.           printf("%s  %5s  %3s  %-28s  %2d/%2d  %12s  %3d:%02d  %.2f\n", \
  133.             time,constrg[1],"OUT",addr,rfiles,sfiles,iobytes,durarr[1],durarr[2],toll);
  134.         }
  135.       }
  136.       if(addr=="-failed-") {
  137.         finb+=ring ? 1:0;
  138.         foutb+=ring ? 0:1;
  139.       } else if(addr!="BBS caller") {
  140.         i=app(addr,aar,curr);
  141.         if(i>=0) {
  142.           iar[i]+=ring ? 1:0; oar[i]+=ring ? 0:1;
  143.           bill[i]+=toll; odur[i]+=ring ? 0:duration;
  144.           rfbar[i]+=rfbytes; sfbar[i]+=sfbytes;
  145.           rfar[i]+=rfiles; sfar[i]+=sfiles;
  146.         } else { 
  147.           i=curr++;
  148.           aar[i]=addr;
  149.           iar[i]=ring ? 1:0; oar[i]=ring ? 0:1; snar[i]=sysname;
  150.           bill[i]=toll; odur[i]=ring ? 0:duration;
  151.           rfbar[i]=rfbytes; sfbar[i]=sfbytes;
  152.           rfar[i]=rfiles; sfar[i]=sfiles;
  153.         }
  154.         inb+=ring ? 1:0;
  155.         outb+=ring ? 0:1;
  156.         t_if+=rfiles; t_of+=sfiles;
  157.         t_ib+=rfbytes;  t_ob+=sfbytes;
  158.       }
  159.     }
  160.     ring=0; addr="-failed-";
  161.     sfiles=0; sfbytes=0; sftime=0;
  162.     rfiles=0; rfbytes=0; rftime=0;
  163.   }
  164. }
  165. END {
  166.   for(i=0;i<curr;i++) {
  167.     for(j=i;j<curr;j++) {
  168.       if(cmpadr(aar[i],aar[j])) {
  169.         taar=aar[i]; tsnar=snar[i]; tiar=iar[i]; toar=oar[i]; tb=bill[i]; todur=odur[i];
  170.           trfbar=rfbar[i]; tsfbar=sfbar[i]; trfar=rfar[i]; tsfar=sfar[i];
  171.         aar[i]=aar[j]; snar[i]=snar[j]; iar[i]=iar[j]; oar[i]=oar[j]; bill[i]=bill[j]; odur[i]=odur[j];
  172.           rfbar[i]=rfbar[j]; sfbar[i]=sfbar[j]; rfar[i]=rfar[j]; sfar[i]=sfar[j]; 
  173.         aar[j]=taar; snar[j]=tsnar; iar[j]=tiar; oar[j]=toar; bill[j]=tb; odur[j]=todur;
  174.           rfbar[j]=trfbar; sfbar[j]=tsfbar; rfar[j]=trfar; sfar[j]=tsfar; 
  175.       }
  176.     }
  177.   }
  178.   print("===========================================================================================================");
  179.   print("Address                    | System                  |  Calls  |  Files  |     Bytes    |  DOC   |  Bill   ");
  180.   print("                           |                         |  I |  O |  I |  O |   I   |   O  |        |         ");
  181.   print("---------------------------+-------------------------+----+----+----+----+-------+------+--------+---------");
  182.   for(i=0;i<curr;i++) {
  183.     iobytes=iosize(rfbar[i],sfbar[i]);
  184.     printf("%-26s |%-24.24s |%3d |%3d |%3d |%3d |%12s | %3d:%02d | %4.2f\n",aar[i],snar[i],iar[i],oar[i],rfar[i],sfar[i],iobytes,odur[i]/60,odur[i]%60,bill[i]);
  185.   }
  186.   print("===========================================================================================================");
  187.   if(DOMAIN=="") {
  188.     printf("     Total connections: %d (failed %d, %.2f%%)\n",conns,foutb+finb,(foutb+finb)/conns*100);
  189.     printf("         Inbound calls: %d, %.2f%% (failed %d,%.2f%%)\n",inb,(conns ? inb/conns*100:0),finb,(inb ? finb/inb*100:0));
  190.     printf("        Outbound calls: %d, %.2f%% (failed %d, %.2f%%)\n",outb,(conns ? outb/conns*100:0),foutb,(outb ? foutb/outb*100:0));
  191.   } else {
  192.     printf("     Total connections: %d\n",conns);
  193.     printf("         Inbound calls: %d\n",inb);
  194.     printf("        Outbound calls: %d\n",outb);
  195.   }
  196.   printf("  Total files (in/out): %d / %d\n",t_if,t_of);
  197.   printf("  Total bytes (in/out): %dK / %dK\n",t_ib/1024,t_ob/1024);
  198.   if(DOMAIN=="")
  199.     printf("           BBS callers: %d\n",bbscalls);
  200.   printf(" Total connection time: %d:%02d\n",online/60,online%60);
  201.   printf("            Total bill: %.2f\n",tbill);
  202.   td=strftime("%H:%M %d.%m.%y");
  203.   printf("\nStatistics created: %s",td);
  204. }
  205.