#!/usr/local/bin/kermit + # # c a l l s t a t s # # Modem call statistics script. Works in UNIX, Windows, VMS, etc, with # minor adjustments. Collects data on modem pool answer/busy performance. # # F. da Cruz, Columbia University, April 2000 # # Dials one, two, or more different modem pools repeatedly and logs results # of each call to a file, one record per call. Numbers are dialed randomly # with a distribution based on how many modems are in each pool. Each phone # number is assumed to reach a separate modem pool with no overlap or hunting # between pools. # # Runs forever, with a chance to exit after each call by pressing a key. # # Log file format: # # yyyymmdd hh:mm:ss x phonenum ds Dialresult (Modem message) # 20000404 10:26:37 2 519-3900 0 CONNECT 50000 V42bis # 20000404 10:28:53 2 519-3900 22 BUSY # # x = numeric day of week (0 = Sunday) # ds = Dial status code (usually 0 = CONNECT, 22 = BUSY) # # These can be fed into a statistical package like SAS or SPSS to provide # modem availability statistics per pool or aggregate by time of day and/or # day of week. define badversion echo C-Kermit 7.0 or K95 1.1.19 required, exit 1 if LLT \v(version) 70000 badversion # &n and &p are parallel arrays and should be initialized with the phone # numbers and corresponding number of modems, as many pairs as you like. # Lines marked (*) should be adjusted for your calling platform. .logfile = C:/K95/TMP/CALLS.LOG ; (*) Logfile name set modem type usrobotics ; (*) Change as needed set port 1 ; (*) Change as needed if fail stop 1 {Device not available} set speed 57600 ; (*) Set the desired speed set flow rts/cts ; (*) and flow control # The next two lines define the phone numbers and pool size for each. dcl \&n[] = 555-1234 555-4321 ; (*) Replace by real phone numbers dcl \&p[] = 184 460 ; (*) How many modems in each pool # No changes needed from here down. .\%n := \fdim(&n) ; Number of phone numbers if ( != \%n \fdim(&p) ) stop 1 Arrays not parallel dcl \&r[\%n] ; Phone-number ranges (histogram) .\&r[0] = 0 ; Fill in the ranges... for ( \%i 1 \%n 1 ) { .\&r[\%i] ::= \&r[\%i-1] + \&p[\%i] } .\%t := \&r[\%n] ; \%t = total number of modems .\%m = 0 ; \%m = total calls .\%a = 0 ; \%a = total answers set dial retries 0 ; No redialing set dial speed-matching off ; No speed changing set exit warning off ; In case of misconfigured modem set bell off ; Silence please set modem speaker off set dial display off ; Minimal screen display set quiet on set dial hangup off ; Hang up after rather than before set modem hangup rs232 ; Fast hangup method hangup ; Hang up before starting ; After each call we save the dial status, then hang up immediately ; (so as not to keep the line open, which could prevent real callers from ; getting in). The saved dial status is because the HANGUP command sets ; the dialstatus variable too. Then we append a record to the log, and ; then wait 2 minutes before dialing again (if we didn't wait, then BUSYs ; might be overrepresented since they happen faster than CONNECTs). set command interruption off ; Require graceful exit while true { ; Loop forever .\%x := \frandom(\%t) ; Pick number to dial at random for ( \%i 1 \%n 1 ) { ; but weighted by size of each pool if ( <= \%x \&r[\%i] ) break } increment \%m ; Count the call clear dial-status xecho \flpad(\%m,6): \&n[\%i]... dial \&n[\%i] .callstatus := \v(dialstatus) ; Save DIAL status hangup ; Hang up immediately fopen /append \%c \m(logfile) ; Write log record if fail stop 1 LOG OPEN ERROR: \f_errmsg() fwrite /line \%c - \v(ndate) \v(time) \v(nday) \&n[\%i] \flpad(\m(callstatus),2) \v(dialresult) if fail stop 1 LOG WRITE ERROR: \f_errmsg() fclose \%c if fail stop 1 LOG CLOSE ERROR: \f_errmsg() clear device if ( = \m(callstatus) 0 ) { ; If call anwered increment \%a ; count it. } echo \v(dialresult) set ask-timer 120 ; Wait two minutes getc \%u {>>> Press a key to quit: } ; Let user break the loop set ask-timer 0 if not asktimeout break echo } echo ; Loop broken echo Stopping. ; Print summary close ; Close and release dialout device echo Calls: \flpad(\%m,5) echo Answers: \flpad(\%a,5) echo end 0