[jboss-user] [Beginners Corner] - Re: How to reliably count active sessions (re-post)

mrgordonz do-not-reply at jboss.com
Mon Sep 8 22:17:03 EDT 2008


Hi Peter,

I have finally managed to achieve my goal of extracting the number of active sessions into a log file.  Your clue regarding the actual MBean was the clincher (jboss.web:host=localhost,path=YYY,type=Manager).  I guessed that I should be able to see the info in the JMX console (http://localhost:8180/jmx-console/), and then I just searched for "path=/MyApp,type=Manager", lo and behold - there it was!  So I examined the URL (http://localhost:8180/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.web:host=localhost,path=/MyApp,type=Manager) and concluded that there was nothing special about it (ie: I could re-use it without breaking it).

The next tricky part was extracting just the activeSessions attribute from the resulting HTML stream, so I wrote a little VBScript batch file which does just that:

' Author: phobbs 
  | ' Date: 2008/09/09
  | ' Revision: 1.0
  | ' Name: getSessions.vbs
  | ' Purpose: Queries the MBean to retrieve active session count
  | ' MBean Name:      Domain Name:    jboss.web
  | '                  type:           Manager
  | '                  host:           localhost
  | '                  path:           /MyApp
  | 
  | 'Usage:
  | ' getSessions.vbs
  | ' activeSessions is output to log file D:\MyApp\log\session_count.log
  | ' if there is an error, output to log file D:\MyApp\log\session_count_errors.log
  | 
  | '========================================================================================
  | 
  | Function GetActiveSessionCount()
  | 
  |     On Error Resume Next
  | 
  |     Const ForWriting = 2
  | 
  |     Dim strURL
  |     Dim log_file
  |     Dim error_log
  |     Dim fso_write
  |     Dim WriteFile
  |     Dim intStart
  |     Dim intEnd
  |     Dim htmlStream
  |     Dim activeSessionsBlock
  |     Dim sessionCount
  |     
  |     strURL = "http://localhost:8180/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.web:host=localhost,path=/MyApp,type=Manager"
  |     log_file  = "D:\MyApp\log\session_count.log"
  |     error_log  = "D:\MyApp\log\session_count_errors.log"
  |     Set fso_write = CreateObject("Scripting.FileSystemObject")
  | 
  |     'get the HTML response from the URL
  |     htmlStream = GetHtml(strURL)
  | 
  |     'get rid of all the text between <td>activeSessions</td> and <td>Number of active sessions at this moment</td>
  |     intStart = InStr(htmlStream, "<td>activeSessions</td>")
  |     intEnd   = InStr(htmlStream, "<td>Number of active sessions at this moment</td>")
  |     activeSessionsBlock = Mid(htmlStream, intStart, intEnd - intStart)
  | 
  |     'replace all carriage returns, line breaks, tabs and spaces
  |     activeSessionsBlock = Replace(activeSessionsBlock,Chr(10),"")
  |     activeSessionsBlock = Replace(activeSessionsBlock,Chr(13),"")
  |     activeSessionsBlock = Replace(activeSessionsBlock,Chr(9),"")
  |     activeSessionsBlock = Replace(activeSessionsBlock," ","")
  | 
  |     'get rid of everything except the session count number
  |     activeSessionsBlock = Replace(activeSessionsBlock,"<td>activeSessions</td>","")
  |     activeSessionsBlock = Replace(activeSessionsBlock,"<td>int</td>","")
  |     activeSessionsBlock = Replace(activeSessionsBlock,"<td>R</td>","")
  |     activeSessionsBlock = Replace(activeSessionsBlock,"<td>","")
  |     activeSessionsBlock = Replace(activeSessionsBlock,"</td>","")
  |     sessionCount = activeSessionsBlock
  |     
  |     If IsNumeric(sessionCount) Then
  |         Set WriteFile = fso_write.OpenTextFile(log_file, ForWriting, True)
  |         WriteFile.WriteLine "active_sessions=" & sessionCount
  |     Else
  |         Set WriteFile = fso_write.OpenTextFile(error_log, ForWriting, True)
  |         WriteFile.WriteLine "There was an error"
  |         WriteFile.WriteLine "active_sessions=" & sessionCount
  |     End If
  |     
  |     Set strURL = Nothing
  |     Set log_file = Nothing
  |     Set error_log = Nothing
  |     Set fso_write = Nothing
  |     Set WriteFile = Nothing
  |     Set intStart = Nothing
  |     Set intEnd = Nothing
  |     Set htmlStream = Nothing
  |     Set activeSessionsBlock = Nothing
  |     Set sessionCount = Nothing
  | 
  | End Function
  | 
  | '========================================================================================
  | 
  | Function GetHtml(sURL)
  | 
  |     On Error Resume Next
  | 
  |     Set oHTML = CreateObject("Microsoft.XMLHTTP")
  |     'Set oHTTP = Createobject("WinHttp.WinHttpRequest.5.1")
  |     Set oWeb = CreateObject("InternetExplorer.Application")
  |     oWeb.navigate (sURL)
  |     oHTML.open "GET" , sURL, false
  |     oHTML.send
  |     GetHtml = oHTML.responseText
  | 
  | End Function
  | 
  | '========================================================================================
  | 
  | GetActiveSessionCount

I found that twiddle just wasn't working, but knowing the specific MBean made all the difference.  Thanks heaps for your help.

Cheers,

Paul


View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4175194#4175194

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4175194



More information about the jboss-user mailing list