Kbase P130078: How to find the database server PID an appserver agent is connected to?
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  16/10/2008 |
|
Status: Verified
GOAL:
How to match the AppServer agent PID with the database server PID?
GOAL:
How to create a log file for AppServer connections using a startup procedure?
GOAL:
How to get more information about AppServer connections using VST's?
GOAL:
How to find the database server PID an AppServer agent is connected to?
FACT(s) (Environment):
All Supported Operating Systems
Progress 9.x
OpenEdge 10.x
OpenEdge Server Technology Category: AppServer
FIX:
Create a .p with the following code, go to the asbroker1 properties -> Agent -> Advanced Features, and add the name of the program to the startup procedure field.
DEFINE INPUT PARAMETER startup-data AS CHARACTER NO-UNDO.
DEFINE VARIABLE cTableName AS CHARACTER NO-UNDO.
DEFINE VARIABLE qh AS HANDLE NO-UNDO.
DEFINE VARIABLE hBufferHandle AS HANDLE NO-UNDO.
DEFINE VARIABLE hBufferHandle2 AS HANDLE NO-UNDO.
DEFINE VARIABLE hBufferHandle3 AS HANDLE NO-UNDO.
DEFINE VARIABLE hBufferHandle4 AS HANDLE NO-UNDO.
DEFINE VARIABLE hFieldHandle AS HANDLE NO-UNDO.
DEFINE VARIABLE hFieldHandle2 AS HANDLE NO-UNDO.
DEFINE VARIABLE hFieldHandle3 AS HANDLE NO-UNDO.
DEFINE VARIABLE hFieldHandle4 AS HANDLE NO-UNDO.
DEFINE VARIABLE hFieldHandle5 AS HANDLE NO-UNDO.
DEFINE VARIABLE mDb AS CHARACTER NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO.
/* Output results to a file */
OUTPUT TO c:\log.txt APPEND.
/* Repeat loop for each connected database */
REPEAT i = 1 TO NUM-DBS:
mDb = LDBNAME(i).
cTableName = mDb + "._myconnection".
CREATE BUFFER hBufferHandle FOR TABLE cTableName.
cTableName = mDb + "._connect".
CREATE BUFFER hBufferHandle2 FOR TABLE cTableName.
cTableName = mDb + "._servers".
CREATE BUFFER hBufferHandle3 FOR TABLE cTableName.
CREATE QUERY qh.
qh:SET-BUFFERS(hBufferHandle,hBufferHandle2,hBufferhandle3).
qh:QUERY-PREPARE("FOR EACH " + mDb + "._Myconnection NO-LOCK ,
EACH " + mDb + "._connect WHERE " + mDb + "._connect._connect-pid = " + mDb + "._Myconnection._myconn-pid NO-LOCK ,
FIRST " + mDb + "._servers WHERE " + mDb + "._servers._server-num = " + mDb + "._connect._connect-server AND " +
mDb + "._Servers._Server-Type <> 'Inactive' NO-LOCK ").
qh:QUERY-OPEN.
REPEAT:
qh:GET-NEXT().
IF qh:QUERY-OFF-END THEN LEAVE.
hFieldHandle = hBufferHandle:BUFFER-FIELD("_myconn-pid").
hFieldHandle2 = hBufferHandle2:BUFFER-FIELD("_connect-time").
hFieldHandle3 = hBufferHandle2:BUFFER-FIELD("_connect-pid").
hFieldHandle4 = hBufferHandle2:BUFFER-FIELD("_connect-server").
hFieldHandle5 = hBufferHandle3:BUFFER-FIELD("_server-pid").
PUT UNFORMATTED " Date: " + SUBSTRING(hFieldHandle2:BUFFER-VALUE[0],5,6) + " Time: "
&.nbsp; + SUBSTRING(hFieldHandle2:BUFFER-VALUE[0],12,8)
+ " Appserver PID: " + string(hFieldHandle3:BUFFER-VALUE[0])
+ " is connected to database " + mDb
+ ", Server number: " + string(hFieldHandle4:BUFFER-VALUE[0])
+ " Server PID: " + string(hFieldHandle5:BUFFER-VALUE[0])
SKIP.
END.
qh:QUERY-CLOSE().
DELETE OBJECT qh.
END.
.