Monitoring AP/Pro - Part I

By Nathan Rector

Natec Systems

Last January I was one of the first people to jump on the band wagon and get AP/Pro. With all the extras that Advanced Pick had I was ecstatic and really looking forward to working with the Advanced Pick.

Although I lost some of the functions that I had on my Old Mini computer, AP/Pro presented me with more way and better way to deal with the problems I was having on my old system.

One of them was due to old and bad wiring. Because of the environment in which I had my terminals and how old they were, every once and a while a wire would break loose in the connecters and cause feed back into the computer.

One the old system, this feedback would start chomping away at the CPU and soon bring the computer to halt. Although, on AP/Pro I am using Digiboards which don't use the CPU to manage the display of the terminals connected to it, but the feedback would start eating away at the processing of the Digiboard and bring all the terminals connected to that board to a halt. Once the irate coworkers got a hold of me, I would have to spend 30min trying to find what terminal is causing the problem; a little hard to do with close to 50 cables to search through.

After doing some investigating, I found how the Digiboard works and was able to come up with a little program to help me monitor and insolate the terminal that would cause this problem.

The Digiboard, and most all other Intelligent Serial Boards, you a small section of memory to help manage the display. By reading this area of memory you can tell which terminals are demanding all the processing of the Serial Board.

The program is rather simple in that it will automaticly know if you have installed another Intelligent Serial Board with out you having to change the program. How this is done is by reading the configuration of the system, and then checking for any new cards.

The Intelligent ports that this program will work with leaves a reference of which ports are being used the most in memory. These port addresses are stored in Hex and are the port on the concentrators, not the port numbers that Pick uses. For example, Pick Port number 3 can actually be the first port on the first concentrator, or Pick Port number 19 may actually be the third port on the second concentrator.

The example in Figure #1 is the display of this program. You will notice that it displays which concentrator and the port number on the concentrator and the referencing Pick Port number (Pid). It also show the active on that port. Under the label 'Activ' is the number of times the port was found in memory, and the percentage next to it displays the percentage of the total memory this board has the port is using.

The next peace of data would tell your if the port is logged on and who is currently logged onto that port. This helps you find the physical location of the terminal in the building, which a lot of the time is the most challenging.

This program can be a life save for any MIS department or System Administrator by locating and display where feedback is occurring.

 

LOOK-PORT

001 * Display active ports on intelligent boards (Digiboard CX, Xem, ClusterPort, Comstax)

002 * WARNING: this program uses USER-EXITs. Do NOT alter the syntex this program uses to

aceess them

003 equ readmem to 'UB0BA'

004 equ readsystemconfig to 'U5D'

005 equ inqry.cmd to 0

006 equ cmd.sconfig to 20

007 equ maxportno to 16

008 equ am to char(254), vm to char(253), svm to char(252)

009 *

010 * Serial card typs

011 * 26- CX/Exm/Cluster/COMStax

012 *

013 * Data definitions - Memory read displayed in Hex

014 * concentrator ports '00' thru '0f' are on the 1st concentrator

015 * concentrator ports '10' thru '1f' are on the 2nd concentrator

016 * concentrator ports '20' thru '2f' are on the 3rd concentrator

017 * concentrator ports '30' thru '3f' are on the 4th concentrator

018 *

019 * Ex: Port #34 is the 4th port on the 3rd concentrator

020 * Port #37 is the *th port on the 4th concentrotor

021 *

022 crt @(-1): ;* clears screen

023 TIMES = 0 ; options = SYSTEM(15)

024 *

025 BOARDS = "" ;* base memory :vm: memory address :vm: first Port# :vm: last Port#

026 systemconfig = oconv(inqury.cmd :am: cmd.sconfig,readsystemconfig)

027 no.serial.installed = dcount(systemconfig,am) - 1

028 first.port = 1

029 if no.serial.installed > 0 then

030 for board = 2 to no.serial.installed + 1

031 last.port = first.port + xtd(systemconfig<board,5>) - 1

032 boardID = xtd(systemconfig<board,2>)

033 *

034 *** checks to see if this is an Intelligent Board or not. If so, then Add

035 *

036 if boardID = 26 then ;* intelligent Board

037 BOARDS<-1> = systemconfig<board,3> :vm: systemconfig<board,4> :vm:

first.port :vm: last.port

038 end

039 first.port = last.port + 1

040 next board

041 *

042 if BOARDS = "" then goto 50

043 end else

044 50*

045 crt "No Digiboard CX, Xem, ClusterPort, COMStax Intelligent Boards Installed."

046 goto 900

047 end

048 *

049 *** Reads the memory Location for each board

050 *

051 100*

052 for board = 1 to board + 1 until BOARDS<board> = ""

053 *setup memory address to read *WARNING* do not alter this information

054 var = ""

055 var<1> = BOARDS<board,2> ;* memory addres

056 var<2> = '0800' ;* offset of port events queue

057 var<3> = 0 ;* this will be replaced by byte from memory

058 * Reads and saves the display information

060 active = ""

061 for i = 1 to 16

062 for j = 1 to 16

063 portnum = oconv(var,readmem)<3>

064 active<board,xtd(portnum) + 1> = active<board,xtd(portnum)> + 1

065 var<2> = dtx(xtd(var<2>)+4) 'r%4" ;* offset inc by 1

066 next j

067 next i

068 next board

069 *

070 *** Display results

071 *

080 TIMES = TIMES + 1 ; row = 1

081 crt @(0,0) : "(Type 'X' to exit) Snapshot of active ports on Intelligent Board: ": TIMES

082 for board = 1 to board + 1 until BOARDS<board> = ""

083 crt @(0,row) : "Intelligent Board # ": board :" Ports: ": BOARDS<board,3> :" - ":

BOARDS<board,4> :

084 crt @(0,row + 1) : "Pid. Con Port Activ Date Time Who":

085 row = row + 2

086 *

087 num = dcount(active<board>,vm)

088 for i = 1 to num

089 if not(active<board,i> = "") then

090 begin case

091 case i >= 1 and i <= max.port.no ; concentrator = 1 ;

port = i

092 case i >= (max.port.no + 1) and i <= (max.port.no * 2) ; concentrator = 2 ;

port = i - max.port.no

093 case i >= (max.port.no * 2) + 1 and i <= (max.port.no * 3) ; concentrator = 3

; port = i - (max.port.no * 2)

094 case i >= (max.port.no * 3) + 1 and i <= (max.port.no * 4) ; concentrator = 4

; port = i - (max.port.no * 3)

095 end case

096 pid = BOARDS<board,3> + i - 1 ;* Finds the Pick port#

097 *

098 execute \LIST PIBS "\: pid :\" md-date md-time location (icb\ capturing output

099 display = pid 'r#4' :" ": concentrator 'r#3' :" ": port 'r#8'

100 display = display :" ": active<board,1> 'r#5'

101 display = display :" ": (int(active<board,i> / 256) * 100) :"%") 'r#5'

102 display = display :" ": output[1,40]

103 crt @(0,row) : display 'L#79' :

104 row = row + 1

105 end

106 next i

107 next board

108 crt @(0,row) : @(-4) :

109 *

110 begin case

111 case index(options,"s",1)

112 stop

113 case system(14) ;* any key pressed

114 input junk,1 :

115 if junk = "X" then stop

116 end case

117 goto 100

118 900*

119 end

fig #1 (This is and example of the Finished Screen)

:LOOK-PORT (S

(Type 'X' to exit) Snapshot of active ports on intelligent board: 1

Intelligent board #1 Ports: 3 - 66

Pid. Con Port Activ Date Time Who

14 1 12 65 25% 10/02 7:52 Staci Frick Register

15 1 13 191 74% 10/03 19:28 Nate Rector Modem - 839-9602