!@RRL: 3-FEB-2000 - Initial coding. !@RRL:10-OCT-2000 - Elapsed time computation. ! DELETE RAD_ACC; DEFINE DOMAIN RAD_ACC USING RAD_ACC_RECORD ON RADIUS_ACCOUNTING; DELETE RAD_ACC_RECORD; DEFINE RECORD RAD_ACC_RECORD 01 ACR. 05 HDR. 10 ACR$W_TYPE USAGE UNSIGNED WORD. 10 ACR$W_LENGTH USAGE UNSIGNED WORD. 10 ACR$Q_SYSTIME USAGE DATE QUERY_NAME END_TIME QUERY_HEADER "Session-End-Time" EDIT_STRING X(23). 10 EBIN REDEFINES ACR$Q_SYSTIME. 20 EQUAD USAGE QUAD. 05 ACR$ID. 10 ACR$ID_ACR$W_TYPE USAGE IS UNSIGNED WORD. 10 ACR$ID_ACR$W_LENGTH USAGE IS UNSIGNED WORD. 10 ACR$L_PID USAGE IS UNSIGNED LONG QUERY_NAME SESS_ID QUERY_HEADER "Acct-Session-id" EDIT_STRING 9(8). 10 FILLER PIC X(4). !ACR$L_OWNER 10 ACR$L_GRP USAGE IS UNSIGNED WORD. 10 ACR$W_MEM USAGE IS UNSIGNED WORD. 10 FILLER PIC X(8). !ACR$Q_PRIV 10 FILLER PIC X(1). !ACR$B_PRI 10 FILLER PIC X(1). !ACR$B_IDFLGS 10 FILLER PIC X(2). !ACR$W_USERNAME 10 FILLER PIC X(2). !ACR$W_ACCOUNT 10 FILLER PIC X(2). !ACR$W_NODENAME 10 FILLER PIC X(2). !ACR$W_TERMINAL 10 FILLER PIC X(2). !ACR$W_JOBNAME 10 ACR$L_JOBID USAGE IS UNSIGNED LONG QUERY_NAME PORT_NUM QUERY_HEADER "NAS-Port". 10 FILLER PIC X(2). !ACR$W_QUEUE 10 FILLER PIC X(2). !ACR$W_NODEADDR 10 FILLER PIC X(2). !ACR$W_REMOTEID 10 FILLER PIC X(2). !ACR$W_FULLADDR 10 FILLER PIC X(2). !ACR$W_FULLNAME !- !++ ! Variable part of ID packet, really every field allocated ! a fixed storage area. !-- ! 10 ASCIC_USERNAME. 15 LEN USAGE IS BYTE. 15 USERNAME PIC X(12) QUERY_HEADER IS "Username". 10 ASCIC_ACCOUNT. 15 LEN USAGE IS BYTE. 15 ACCOUNT PIC X(8) QUERY_HEADER IS "Account". 10 ASCIC_TERMINAL. 15 LEN USAGE IS BYTE. 15 PORT_TYPE PIC X(8) QUERY_HEADER "NAS-Port-Type". 10 ASCIC_JOBNAME. 15 LEN USAGE IS BYTE. 15 PROTOCOL PIC X(16) QUERY_HEADER "Frammed-IP-Protocol"/"Login-Service". 10 ASCIC_QUEUE. 15 LEN USAGE IS BYTE. 15 CLIENT PIC X(32) QUERY_HEADER "Client". 10 ASCIC_FULLNAME. 15 LEN USAGE IS WORD. 15 FRAMMED_IP PIC X(128) QUERY_HEADER "Frammed-IP-Adrress"/"Login-IP-Host" EDIT_STRING T(15). 05 ACR$RESOURCE. 10 FILLER PIC X(2). !ACR$W_TYPE 10 FILLER PIC X(2). !ACR$W_LENGTH 10 ACR$Q_LOGIN USAGE IS DATE QUERY_NAME START_TIME QUERY_HEADER "Session-Start-Time" EDIT_STRING X(23). 10 SBIN REDEFINES ACR$Q_LOGIN. 20 SQUAD USAGE QUAD. 10 ACR$L_STATUS USAGE IS UNSIGNED LONG QUERY_NAME STATUS QUERY_HEADER "Termination-Status". 10 FILLER PIC X(4). !ACR$L_IMGCNT 10 FILLER PIC X(4). !ACR$L_CPUTIME 10 FILLER PIC X(4). !ACR$L_FAULTS 10 FILLER PIC X(4). !ACR$L_FAULTIO 10 FILLER PIC X(4). !ACR$L_WSPEAK 10 ACR$L_PAGEFL USAGE IS UNSIGNED LONG QUERY_NAME SPEED QUERY_HEADER "Connection-Speed". 10 ACR$L_DIOCNT USAGE IS UNSIGNED LONG QUERY_NAME INP_OCTS QUERY_HEADER "Acct-Input-Octets". 10 ACR$L_BIOCNT USAGE IS UNSIGNED LONG QUERY_NAME OUT_OCTS QUERY_HEADER "Acct-Output-Octets". 10 FILLER PIC X(8). !ACR$L_VOLUMES 05 ELAPSED_TIME COMPUTED (EQUAD - SQUAD) QUERY_HEADER "Elapsed Time" EDIT_STRING ZZ,ZZ9.99. ; !++ !------------------------------------------------------------------------------ ! ! ! !-- READY RAD_ACC AS A READ REPORT A WITH (INP_OCTS ne OUT_OCTS) - SORTED BY ACCOUNT,USERNAME,INP_OCTS,OUT_OCTS - ON RADIUS_ACCOUNTING.LIS SET COLUMNS_PAGE = 80 SET LINES_PAGE = 66 SET REPORT_NAME = "A RADIUS statistic usage" AT BOTTOM OF USERNAME PRINT COL 1,ACCOUNT, SPACE 1,"Total for user:",SPACE 1,USERNAME, COL 15, "Input traffic (bytes) :",SPACE 1,FORMAT(TOTAL (INP_OCTS)) USING ZZZ,ZZZ,ZZZ, COL 15, "Output traffic (bytes):",SPACE 1,FORMAT(TOTAL (OUT_OCTS)) USING ZZZ,ZZZ,ZZZ, COL 15, "Elapsed time :",SPACE 1,FORMAT((ELAPSED_TIME/1000000/(3600*24))) USING Z9, SPACE 1,FORMAT(FN$TIME(TOTAL (ELAPSED_TIME))) END_REPORT FINISH