home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 November / PCO_1198.ISO / filesbbs / os2 / nftp130o.arj / NFTP130O.ZIP / stat.cmd < prev    next >
Encoding:
Text File  |  1998-08-21  |  7.7 KB  |  239 lines

  1. /*
  2.  REXX program to extract statistics from NFTP.FLS file     Version 0.6
  3.  Freely distributable, but copyright by Tóth Ferenc <etus@alarmix.net>
  4.  Please mail any suggestinos and/or bug report to the author.
  5.  
  6.  To do (if I have time :)
  7.  - option to count uploads/downloads separately
  8.  - option to sort sites according to speed or down/upload size
  9.  - option to list only specified time interval or sites
  10.  
  11.  Corrections
  12.  
  13.   0.5
  14.     - corrected a bug, now the first site listed in nftp.fls will be listed
  15.   0.6
  16.     - corrected a small bug in the routine that handles temporary files
  17.     - added progress indicator so the user won't worry that much :)
  18.     - much cleaner source code with more comments
  19.  
  20.  
  21.    Variables used for calculation
  22.    ------------------------------
  23.    files:  number of entries in NFTP log files
  24.    month.: month of entry
  25.    year.:  yaer of entry
  26.    size.:  filesize of entry
  27.    [more to-be added here if I have the time]
  28.    
  29. */
  30.  
  31. Call Rxfuncadd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  32. Call SysLoadFuncs
  33.  
  34. /* Introduce ourselves :) */
  35. Say
  36. Say "NFTP logfile statistics calculator v0.6"
  37. Say
  38.  
  39. /* Pull in the log file names */
  40. Parse Arg inputfiles
  41.  
  42. /* Temporary filename */
  43. tempfile = SysTempFileName('nftplog.???')
  44.  
  45. /* Output filename */
  46. outputfile = "nftp.sta"
  47.  
  48. /* Delete output file */
  49. "@del" outputfile ">nul 2>&1"
  50.  
  51. /* Initialize variables */
  52. call SysCurState 'OFF'
  53. ProgressCounter=1
  54. process="|/-\"
  55.  
  56. /* Check wheter inputfiles were given or not on the command line */
  57. If inputfiles="" Then
  58.   Do
  59.     Say "usage: stat.cmd NFTP_log_filename"
  60.     Say "where NFTP_log_filename is a filemask describing NFTP log files"
  61.     Exit
  62.   End
  63.  
  64. /* get all log files into one big temporary file */
  65. "@copy "inputfiles tempfile "1> nul 2>&1"
  66.  
  67. /* open our outputfile */
  68. noecho = Lineout(outputfile, "Logfile created by NFTP logfile statistics calculator v0.6 on "||Date('L'))
  69. noecho = Lineout(outputfile, "")
  70. noecho = Lineout(outputfile, "Date      Megabyte     average speed (cps)")
  71. noecho = Lineout(outputfile, "------------------------------------------")
  72.  
  73. /* Inform our user what is happening */
  74. noecho = Charout(, "Gathering information from logfiles...")
  75.  
  76. /* Calculate the number of files and store their date/time, size etc. */
  77. files=1
  78. Do While Lines(tempfile) > 0
  79.   Call PROGRESSINDICATOR(files 30)
  80.   entry = Linein(tempfile)
  81.     
  82.   /* month, year and filesize */
  83.   month.files = Substr(entry, 4, 2)
  84.   year.files = Substr(entry, 7, 2)
  85.   size.files = Substr(entry, 16, 9)
  86.  
  87.   /* down or upload */
  88.   dl = Pos(" - ", entry) + 3
  89.   ul = Pos(" + ", entry) + 3
  90.   which = dl
  91.   If which = 3 Then which = ul
  92.  
  93. /* Check if the entry is old style or new style.
  94.    Old style log entries do not log the speed */
  95.   If Pos("B/s) ", entry) = 0 Then
  96.     Do
  97.       speed.files = -1
  98.       site.files = Substr(entry, which, Pos(":", entry, which) - which)
  99.     End
  100.   Else
  101.     Do
  102.       /* new style with speed */
  103.       speed.files = Substr(entry, 26, 7)
  104.       site.files = Substr(entry, which, Pos(":", entry, which) - which)
  105.     End
  106.  
  107. /* If bps = 0 then let it be equal with filesize since in most cases
  108.  it means that the transfer was done in 1 sec. But don't forget that
  109.  there can be 0 long files */
  110.   If speed.files = 0 Then speed.files = size.files
  111.   If speed.files = 0 Then speed.files = 1
  112.   site = site.files
  113.   bytespersite.site=0
  114.   bytespersite2.site=0
  115.   offset=year.files*10000+month.files
  116.   bytespermonth.offset=0
  117.   bytespermonth2.offset=0
  118.   timepersite.site=0
  119.   timepermonth.offset=0
  120.   files=files+1
  121. End
  122. noecho = Lineout(tempfile)
  123. "@del "||tempfile||" 1> nul 2> nul"
  124. files=files-1
  125. time=0
  126. total=0
  127. total2=0
  128. totaltime=0
  129. say " "
  130.  
  131. noecho = Charout(, "Calculating statistics...")
  132.  
  133. /* summary */
  134. Do counter=1 To files
  135. /* Calculate the number of files and store their date/time, size etc. */
  136.   Call PROGRESSINDICATOR(counter 40)
  137.   site = site.counter
  138.   sps = size.counter / speed.counter
  139.   bytespersite.site=bytespersite.site + size.counter
  140.   If speed.counter <> -1 Then bytespersite2.site=bytespersite2.site + size.counter
  141.   If speed.counter <> -1 Then timepersite.site=timepersite.site+sps
  142.   offset = year.counter * 10000 + month.counter
  143.   bytespermonth.offset=bytespermonth.offset+size.counter
  144.   If speed.counter <> -1 Then bytespermonth2.offset = bytespermonth2.offset + size.counter
  145.   If speed.counter <> -1 Then timepermonth.offset = timepermonth.offset + sps
  146.   If speed.counter = -1 Then total2=total2+size.counter
  147.   Else
  148.     Do
  149.       total2 = total2 + size.counter
  150.       total = total + size.counter
  151.       totaltime = totaltime + sps
  152.     End
  153. End
  154.  
  155. kiirt=0
  156. Do numsites=1 To files
  157.   Call PROGRESSINDICATOR(numsites 70)
  158.   offset=year.numsites*10000+month.numsites
  159.   If numsites > 1 Then
  160.     Do
  161.       check = kiirt
  162.       Do While (offset <> honap.check) & (check > 0)
  163.         check = check - 1
  164.       End
  165.     End
  166.  
  167.   If (offset<>honap.check) Then Do
  168.     If timepermonth.offset=0 Then timepermonth.offset=1
  169.     speed=Format(bytespermonth2.offset/timepermonth.offset,16,0)
  170.     If speed > 999999 Then speed=Right(Reverse(Insert(",", Insert(",", Reverse(Strip(speed)), 3), 7)),16)
  171.     Else If speed > 999 Then speed=Right(Reverse(Insert(",", Reverse(Strip(speed)), 3)),16)
  172.     byte=Format(bytespermonth.offset/1024/1024,9,2)
  173.     If speed=0 Then speed=""
  174.     noecho = Lineout(temp2, year.numsites"/"month.numsites||byte||speed)
  175.     honap.kiirt=offset
  176.     kiirt=kiirt+1
  177.   End
  178. End
  179.  
  180. noecho = Lineout(temp2)
  181. "@type temp2 | sort > temp3"
  182. Do While Lines(temp3) > 0
  183.   line = Linein(temp3)
  184.   noecho = Lineout(outputfile, Substr(line,4,2)||"/"||Substr(line,1,2)||Substr(line,6))
  185. End
  186. noecho = Lineout(temp3)
  187. "@del temp2 1> nul 2> nul"
  188. "@del temp3 1> nul 2> nul"
  189.  
  190. noecho = Lineout(outputfile, "")
  191. noecho = Lineout(outputfile, "Site                                      Megabyte     average speed (cps)")
  192. noecho = Lineout(outputfile, "--------------------------------------------------------------------------")
  193. noecho = Lineout(outputfile, "")
  194.  
  195. Do numsites=1 To files
  196.   Call PROGRESSINDICATOR(numsites 15)
  197.   site=site.numsites
  198.   check=0
  199.   If numsites > 1 Then
  200.     Do
  201.       check = numsites -1
  202.       Do While (site.check <> site) & (check > 0)
  203.         check = check - 1
  204.       End
  205.     End
  206.  
  207.   If (site.check<>site) Then Do
  208.     If timepersite.site=0 Then timepersite.site=1
  209.     speed=Format(bytespersite2.site/timepersite.site,16,0)
  210.     If speed > 999999 Then speed=Right(Reverse(Insert(",", Insert(",", Reverse(Strip(speed)), 3), 7)),16)
  211.     Else If speed > 999 Then speed=Right(Reverse(Insert(",", Reverse(Strip(speed)), 3)),16)
  212.     byte=Format(bytespersite.site/1024/1024,9,2)
  213.     If speed=0 Then speed=""
  214.     donotecho = Lineout(outputfile, Overlay(" ", site,38,0)||byte||"    "||speed)
  215.   End
  216. End
  217. say " "
  218. If totaltime>0 Then totalspeed=Format(total/totaltime,16,0)
  219. Else totalspeed = ""
  220. If totalspeed > 999999 Then totalspeed=Right(Reverse(Insert(",", Insert(",", Reverse(Strip(totalspeed)), 3), 7)),16)
  221. Else If totalspeed > 999 Then totalspeed=Right(Reverse(Insert(",", Reverse(Strip(totalspeed)), 3)),16)
  222. noecho = Lineout(outputfile, "--------------------------------------------------------------------------")
  223. noecho = Lineout(outputfile, "Total            " Right(Format(total2/1024/1024,9,2), 31) Right(totalspeed, 19))
  224. say "Done calculating statistics. See file 'nftp.sta'."
  225. Exit
  226.  
  227. /* Show progress indicator */
  228. PROGRESSINDICATOR:
  229. Parse Arg Variable PerCounter
  230. If Variable // PerCounter = 0 Then
  231.   Do
  232.     noecho = Charout(, SubStr(process,ProgressCounter,1))
  233.     parse value SysCurPos() with row col
  234.     rc = SysCurPos(row, col-1)
  235.     ProgressCounter = ProgressCounter+1
  236.     If (ProgressCounter = 5) Then ProgressCounter=1
  237.   End
  238. Return
  239.