home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / lsmt213c.zip / lsc.cmd < prev    next >
OS/2 REXX Batch file  |  2001-02-23  |  14KB  |  373 lines

  1. /*---------------------------------------------------------------------------*\
  2. |  Check Lan Server Status                    (C) Alain Rykaert - MAR96-APR00 |
  3. \*---------------------------------------------------------------------------*/
  4.     Say '* LSC Version 2.44a (C) AR - JAN2001'
  5.  
  6.     Parse Upper Arg ServerName Option
  7.  
  8.     If Option = '/STAT'                        /* check the statistics flag*/
  9.       Then Stat = 1
  10.       Else Stat = 0
  11.  
  12.     Call Init                                   /* load DLL's & other stuff*/
  13.  
  14.     If ServerName = ''
  15.       Then Do
  16.              Say '*'
  17.              Say '* LAN Server Check & Statistics'
  18.              Say '*'
  19.              Say '* Usage: LSC {*} {ServerName} {/STAT}'
  20.              Say '*'
  21.              Say '* Sample: LSC \\DC02 /STAT'
  22.              Say '*'
  23.              Exit X2D('1600')
  24.            End
  25.       Else Nop
  26.  
  27.     If ServerName = '*'
  28.       Then Do
  29.              RC = NetGetInfo(350, 'WkstaInfo','')
  30.              If RC = 0
  31.                Then ServerName = WkstaInfo.ComputerName
  32.                Else Call ChkError RC
  33.            End
  34.       Else ServerName = ServerName
  35.  
  36.     ServerName = Strip(ServerName,'L','\')
  37.  
  38.     Say '* Server Name:' '\\'ServerName
  39.  
  40.     RC = NetGetInfo(370, 'ServerModalInfo', '\\'ServerName)
  41.     If RC = 0
  42.       Then Do
  43.              LSRFile = '\\'ServerName'\ibmlan$\ibmlan.ini'
  44.              Say Left('*',50,'-')
  45.              Say '* Get Accounts:'
  46.              Say Left('*',50,'-')
  47.              ServerRole = ServerModalInfo.Role
  48.              DCName = ServerModalInfo.Primary
  49.  
  50.              Say '  Server Role:' ServerRole
  51.              If WordPos('Primary', ServerRole) > 0
  52.                Then PDC = 1                                 /* check if PDC*/
  53.                Else PDC = 0
  54.              If WordPos('Primary', ServerRole) > 0 |,
  55.                 WordPos('Backup', ServerRole)  > 0
  56.                Then DCCheck = 1               /* check if Domain Controller*/
  57.                Else DCCheck = 0
  58.              Say '  Domain controller for requester domain: \\'DCName
  59.  
  60.              Say Left('*',50,'-')
  61.              Say '* Get Users & Groups:'
  62.              Say Left('*',50,'-')
  63.              RC1 = WfrxUserEnum('\\'ServerName,'LocalUsers')
  64.              RC2 = NetEnumerate(70,  'LocalGroups', '\\'ServerName)
  65.              PDCUsers  = ''
  66.              PDCGroups = ''
  67.              If PDC = 1
  68.                Then Nop
  69.                Else Do
  70.                       RC = WfrxUserEnum('\\'DCName,'PDCUsers')
  71.                       If RC = 0
  72.                         Then Nop
  73.                         Else Call ChkError RC
  74.                       If PDCUsers.0 > 0
  75.                         Then PDCUsers = 'on \\' || Left(DCName,8) ':' PDCUsers.0
  76.                         ELse PDCUsers = 'on \\' || Left(DCName,8) ': 0'
  77.                       RC = NetEnumerate(70,  'PDCGroups', '\\'DCName)
  78.                       If RC = 0
  79.                         Then Nop
  80.                         Else Call ChkError RC
  81.                       PDCGroups = 'on \\' || Left(DCName,8) ':' PDCGroups.0
  82.                     End
  83.  
  84.              Say '  Users  Local :' Left(LocalUsers.0,4) PDCUsers
  85.              Say '  Groups Local :' Left(LocalGroups.0,4) PDCGroups
  86.            End
  87.       Else Call ChkError RC
  88.  
  89.     Say Left('*',50,'-')
  90.     Say '* Get services:'
  91.     Say Left('*',50,'-')
  92.     Call NetEnumerate 170, 'ServiceInfo', '\\'ServerName
  93.     ServiceInfo = ''
  94.     If ServiceInfo.0 > 5                   /* if more than 5 split the line*/
  95.       Then Do
  96.              Do i = 1 to 5
  97.                ServiceInfo = ServiceInfo ServiceInfo.i
  98.              End
  99.              ServiceInfo = ServiceInfo '0A0D20'x
  100.              Do i = 6 to ServiceInfo.0
  101.                ServiceInfo = ServiceInfo ServiceInfo.i
  102.              End
  103.            End
  104.       Else Do
  105.              Do i = 1 to ServiceInfo.0
  106.                ServiceInfo = ServiceInfo ServiceInfo.i
  107.              End
  108.            End
  109.     Say ' ' || ServiceInfo
  110.  
  111.     If DCCheck = 1                              /* either Primary or Backup*/
  112.       Then Do
  113.               Say Left('*',50,'-')
  114.               Say '* Check DCDB Replicator:'
  115.               Say Left('*',50,'-')
  116.               If WordPos('DCDBREPL', ServiceInfo) > 0
  117.                 Then Say '  DCDB replicator running'
  118.                 Else Do
  119.                         Call Beep 2000,50
  120.                         Say '  DCDB replicator NOT running' Left('<',25,'-')
  121.                      End
  122.               Say '  Checking DCDB tree:'
  123.               Dir.0  = 10
  124.               Dir.1  = 'apps'
  125.               Dir.2  = 'devices'
  126.               Dir.3  = 'data'
  127.               Dir.4  = 'files'
  128.               Dir.5  = 'images'
  129.               Dir.6  = 'lists'
  130.               Dir.7  = 'printers'
  131.               Dir.8  = 'scripts'
  132.               Dir.9  = 'win32app'
  133.               Dir.10 = 'users'
  134.  
  135.               DirCheck = 0                   /* Reset the Dir Check counter*/
  136.  
  137.               Do i = 1 to Dir.0
  138.                 Call SysFileTree '\\'ServerName'\ibmlan$\dcdb\'Dir.i'\*.rp$', 'Stem', 'FO'
  139.                 If Stem.0 = 0
  140.                   Then Status = '-none-'
  141.                   Else Do
  142.                          Parse Upper Value Reverse(Stem.1) With . '.' Status '\' .
  143.                          Status = Reverse(Status)
  144.                        End
  145.                 If Status = 'OK' | Dir.i = 'images'
  146.                   Then Check = ' '
  147.                   Else Do
  148.                          Check = '*'
  149.                          DirCheck = DirCheck + 1
  150.                        End
  151.                 Say ' ' Right(i,2) Left(Translate(Dir.i),9) Check,
  152.                         Left(Status,9) Stream(Stem.1, 'C', QueryDateTime)
  153.               End
  154.  
  155.               Call SysFileTree '\\'ServerName'\ibmlan$\dcdb\users\', 'BDCDirs', 'DO'
  156.               If PDC = 1
  157.                 Then PDCDirectories = ''
  158.                 Else Do
  159.                        Call SysFileTree '\\'DCName'\ibmlan$\dcdb\users\', 'PDCDirs', 'DO'
  160.                        PDCDirectories = 'on \\'DCName ':' PDCDirs.0
  161.                      End
  162.               Say '     +--> Directories :' Left(BDCDirs.0,4) PDCDirectories
  163.            End
  164.       Else Nop
  165.  
  166.     If DirCheck > 0 & DCCheck = 1     /* If the dircheck counter is bad ...*/
  167.       Then Do
  168.              Say
  169.              Say '! Error, number of directories out of sync:' DirCheck
  170.              Exit X2D('1600')
  171.            End
  172.       Else Nop
  173.  
  174.     If Stat = 1
  175.       Then Do
  176.              Say Left('*',50,'-')
  177.              Say '* Statistics:'
  178.              Say Left('*',50,'-')
  179.              Call NetGetInfo 160, 'ServerInfo', '\\'ServerName
  180.              Call NetGetInfo 195, 'StatisticsInfo', '\\'ServerName, 1, 0
  181.              Call NetEnumerate 60, 'FileInfo', '\\'ServerName
  182.              Call NetEnumerate 190, 'Shares', '\\'ServerName
  183.              Call NetEnumerate 180, 'Sessions', '\\'ServerName
  184.  
  185.              Say '  Statistics Time:' Strip(StatisticsInfo.Start,'T','0A'x)
  186.  
  187.              MaxConnections = ServerInfo.Connections
  188.              ActiveConnections = 0
  189.              Do i = 1 to Sessions.0
  190.                ActiveConnections = ActiveConnections + Sessions.i.Num_Conns
  191.              End
  192.  
  193.              Say '  Number of shares:' Shares.0'/'ServerInfo.Shares
  194.              SharesOnDemand = 0
  195.              Do i = 1 to Shares.0
  196.                If WordPos('ADMIN$', Shares.i)    > 0 |,
  197.                   WordPos('DCDBREPL$', Shares.i) > 0 |,
  198.                   WordPos('NETLOGON', Shares.i)  > 0 |,
  199.                   WordPos('IBMLAN$', Shares.i)   > 0 |,
  200.                   WordPos('IPC$', Shares.i)      > 0 |,
  201.                   WordPos('REPL$', Shares.i)     > 0 |,
  202.                   Length(Shares.i) = 2
  203.                   Then Nop
  204.                   Else SharesOnDemand = SharesOnDemand + 1
  205.              End
  206.              Say '  Shares on demand:' SharesOnDemand
  207.  
  208.              Say '  Total of used sessions:' StatisticsInfo.Sopens
  209.              Say '  Number of active sessions:' Sessions.0
  210.              Say '  Auto Disconnect Parameter:' ServerInfo.Disc
  211.              Say '  Auto Disconnects:' StatisticsInfo.Stimedout
  212.              Say '  Closed by Errors:' StatisticsInfo.Serrorout
  213.              Say '  Number of active connections:' ActiveConnections'/'ServerInfo.Connections
  214.              Say '  Password Violations:' StatisticsInfo.PwErrors
  215.              Say '  Permission Errors:' StatisticsInfo.PermErrors
  216.              Say '  System Errors:' StatisticsInfo.SysErrors
  217.              Say '  Number of total opened files:' StatisticsInfo.Fopens
  218.              Say '  Number of current open files:' FileInfo.Count'/'ServerInfo.OpenFiles
  219.              Say '  Total Bytes TX:' StatisticsInfo.BytesSent Trunc((Format(StatisticsInfo.BytesSent,,0,0) / 1000)) 'KB'
  220.              Say '  Total Bytes RX:' StatisticsInfo.BytesRcvd Trunc((Format(StatisticsInfo.BytesRcvd,,0,0) / 1000)) 'KB'
  221.              Say '  Total Bytes TX+RX:' Trunc((Format(StatisticsInfo.BytesSent,,0,0) + Format(StatisticsInfo.BytesRcvd,,0,0)) / 1000) 'KB'
  222.              Say '  Buffers Needed:' StatisticsInfo.ReqBufNeed
  223.              Say '  Large Buffers Needed:' StatisticsInfo.BigBufNeed
  224.              Say '  Total print jobs queued:' StatisticsInfo.Jobsqueued
  225.              Say '  Average response time:' StatisticsInfo.Avresponse
  226.  
  227.              Call GetNBStat ServerName                 /* get NetBIOS stats*/
  228.            End
  229.       Else Nop
  230.  
  231.     Exit X2D('FE00')
  232.  
  233.  INIT:/* --------------------------------------------------------------------*/
  234.  
  235.    '@echo off'
  236.     BootDrive = Left(Value('ComSpec',,'OS2Environment'),2)
  237.  
  238.     If RxFuncQuery('SysLoadFuncs')
  239.       Then Do
  240.              Call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  241.              Call SysLoadFuncs
  242.            End
  243.       Else Nop
  244.  
  245.     LSRDrive = Left(SysSearchPath('PATH', 'NET.EXE'), 2)    /* IBMLAN Drive*/
  246.     If LSRDrive <> ''
  247.       Then Nop
  248.       Else Do
  249.              Say '! Could not determine the Lan Requester path' '07'x
  250.              Exit X2D('1604')
  251.            End
  252.  
  253.     If Stream(LSRDrive'\ibmlan\netlib\lsrxut.dll', 'C', 'Query Exists') <> ''
  254.       Then Do
  255.              If RxFuncQuery('LoadLSRXUTFuncs')
  256.                Then Do
  257.                       Call RxFuncAdd 'LoadLsRxutFuncs', 'LSRXUT', 'LoadLsRxutFuncs'
  258.                       Call LoadLsRxutFuncs
  259.                     End
  260.                Else Nop
  261.            End
  262.       Else Do
  263.              Say '! Could not find' LSRDrive'\IBMLAN\NETLIB\LSRXUT.DLL' '07'x
  264.              Exit X2D('0800')
  265.            End
  266.  
  267.     If Stream(LSRDrive'\ibmlan\netlib\wfrxutil.dll', 'C', 'Query Exists') <> ''
  268.       Then Do
  269.              Call RxFuncAdd 'WfrxLoadFuncs', 'WfrxUtil', 'WfrxLoadFuncs'
  270.              Call WfrxLoadFuncs
  271.            End
  272.       Else Do
  273.              Say '! Could not find' LSRDrive'\IBMLAN\NETLIB\WFRXUTIL.DLL' '07'x
  274.              Exit X2D('0800')
  275.            End
  276.  
  277.    'ver /r >' BootDrive'\os2\lsc.tmp'
  278.     Call SysFileSearch 'Revision', BootDrive'\os2\lsc.tmp', 'Stem'
  279.     Parse Var Stem.1 . Begin '.' Rest
  280.     Select
  281.       When Begin = 8 & Rest > 258
  282.         Then Y2K = 1
  283.       When Begin = 9 & Rest > 29
  284.         Then Y2K = 1
  285.       When Begin = 14
  286.         Then Y2K = 1
  287.       Otherwise Y2K =0
  288.     End
  289.  
  290.     If Y2K = 0
  291.       Then QueryDateTime = 'Query DateTime'
  292.       Else QueryDateTime = 'Query TimeStamp'
  293.  
  294.     Return
  295.  
  296.  CHKERROR:/* ----------------------------------------------------------------*/
  297.  
  298.     Parse Arg RCode
  299.  
  300.     Say '! Error:' RCode '07'x
  301.     Exit X2D('1600')
  302.  
  303.     Return
  304.  
  305.  GETNBSTAT:/* ---------------------------------------------------------------*/
  306.  
  307.     Parse Arg ServerName
  308.  
  309.     LAA         = ''
  310.     UAA         = ''
  311.     FreeNCB     = ''
  312.     MaxNCB      = ''
  313.     PendingSess = ''
  314.     MaxSess     = ''
  315.     UsedNames   = ''
  316.     NumSess     = ''
  317.     NumNCB      = ''
  318.  
  319.     If SysSearchPath('Path','nbjdstat.exe') <> ''
  320.       Then Nop
  321.       Else Do
  322.              Say '* Could not find NBJDSTAT.EXE' '07'x
  323.              Exit X2D('0800')
  324.            End
  325.  
  326.     TempFile = BootDrive'\os2\lsc.tmp'
  327.  
  328.    'nbjdstat' ServerName '/v >' TempFile
  329.     If RC = 0
  330.       Then Do
  331.              Do While Lines(TempFile)
  332.                LLine = LineIn(TempFile)
  333.                Select
  334.                  When Left(LLine,11) = 'MAC Address'
  335.                    Then LAA = Translate(Space(SubStr(LLine, 15),0))
  336.                  When Left(LLine,26) = 'Universal Adapter Address'
  337.                    Then UAA = SubStr(LLine, 27)
  338.                  When Left(LLine,19) = 'Number of Free NCBs'
  339.                    Then FreeNCB = SubStr(LLine, LastPos('.',LLine) +1)
  340.                  When Left(LLine,22) = 'Configured NCB maximum'
  341.                    Then MaxNCB = SubStr(LLine, LastPos('.',LLine) +1)
  342.                  When Left(LLine,26) = 'Number of pending sessions'
  343.                    Then PendingSess = SubStr(LLine, LastPos('.',LLine) +1)
  344.                  When Left(LLine,26) = 'Configured session maximum'
  345.                    Then MaxSess = SubStr(LLine, LastPos('.',LLine) +1)
  346.                  When Left(LLine,24) = 'Number of names in table'
  347.                    Then UsedNames = SubStr(LLine, LastPos('.',LLine) +1)
  348.                  Otherwise Nop
  349.                End
  350.                If PendingSess > 0 & MaxSess > 0
  351.                  Then Do
  352.                         NumSess = PendingSess || '/'MaxSess
  353.                         NumNCB = MaxNCB - FreeNCB || '/'MaxNCB
  354.                       End
  355.                  Else Nop
  356.              End
  357.              Say Left('*',50,'-')
  358.              Say '* NIC:'
  359.              Say Left('*',50,'-')
  360.              Say '  Local Adapter Address:' LAA
  361.              Say '  Universal Adapter Address:' UAA
  362.              Say '  Number of sessions:' NumSess
  363.              Say '  Number of NCBs:' NumNCB
  364.              Say '  Number of names:' UsedNames
  365.            End
  366.       Else Say '! Could not get NetBIOS statistics from' ServerName '07'x
  367.  
  368.     Call Stream TempFile, 'C', 'Close'               /* delete the tmp file*/
  369.     Call SysFileDelete(TempFile)
  370.  
  371.     Return
  372.  
  373.