Index by: file name | procedure name | procedure call | annotation
getJVMinfo_proc.tcl (annotations | original source)

# 
# Get JVM PMI info for server. 
# NB: server must be running and PMI must be switched on.
#
####################################################################
# Patrick Finnegan 11/11/2005.  V1. 
####################################################################
####################################################################
# proc - get JVM details 
####################################################################

namespace eval getJVMInfo {

    proc setPreparedStatement { ConnectionI schema } {

	set procName [ lindex [ info level 0 ] 0 ]

	putsLog "## proc - $procName"

	foreach i [ info args $procName ]  {

	   upxxvar 0 $i ilocal

	   set propertiesArray($i) $ilocal 

	}

	putsLog "properties are.................."

	foreach { a b } [ array get propertiesArray ] {

	    putsLog [ format "%-35s %s" "$a" "$b" ]

	}

	global AdminConfig 
	global AdminControl
	global null
	global Help

	set statement "insert into $schema.wasperformjvm values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"

	java::try {
	    
	    set StatementI [ $ConnectionI prepareStatement $statement ]

	} catch {SQLException SQLExceptionI } {

	  catchSqlException::catchSqlException $SQLExceptionI 
	      
	} catch {TclException e } {
	    putsLog "TCl Exception to prepare statement $e"
	    return -code error
	}

	java::lock $StatementI

	putsLog " return statement [ $StatementI toString ]"

	return $StatementI

    }
####################################################################
# proc - get JVM details 
####################################################################
    proc getJVMInfo { nodeName serverName ConnectionI StatementI } {

	set procName [ lindex [ info level 0 ] 0 ]

	putsLog "## proc - $procName"

	foreach i [ info args $procName ]  {

	   upvar 0 $i ilocal

	   set propertiesArray($i) $ilocal 

	}

	putsLog "properties are.................."

	foreach { a b } [ array get propertiesArray ] {

	    putsLog [ format "%-35s %s" "$a" "$b" ]

	}

	global AdminConfig 
	global AdminControl
	global null
	global Help

	putsLog "getJVMInfo"

	#putsLog "get the performance mbean for the server - should be just one."

	append queryString "WebSphere:*,node="
	append queryString $nodeName
	append queryString ",process="
	append queryString $serverName
	append queryString ",type=Perf"

	#putsLog " query string is: $queryString "

	set perfMbean [ $AdminControl queryNames $queryString ]

	if { $perfMbean == $null || [ string length $perfMbean] == 0 } {
	    
	    putsLog " $serverName is not running or PMI is not enabled for $serverName. "

	    return 

	} else {

	    set donothing true 

	}

	#putsLog "get the JVM Bean."

	unset queryString 

	append queryString "WebSphere:*,node="
	append queryString $nodeName
	append queryString ",process="
	append queryString $serverName
	append queryString ",type=JVM"

	#putsLog " query string is: $queryString "

	set jvmMbean [ $AdminControl queryNames $queryString ]

	if { $jvmMbean == $null || [ string length $jvmMbean] == 0 } {
	    
	    putsLog " $serverName jvm is not running "

	    return 

	} else {

	    set donothing true 

	}

	set jvmMbeanO [ $AdminControl makeObjectName $jvmMbean ]

	set boolean [ java::new Boolean recursive ]
	# NB: brackets around array object. 
	set parramsArray    [ java::new {Object[]} {2} [ list $jvmMbeanO $boolean ] ]
	set signaturesArray [ java::new {String[]} {2} [ list javax.management.ObjectName java.lang.Boolean ] ]

	set perfMbeanO [ $AdminControl makeObjectName $perfMbean ]

	#get the stats list from the performance bean
	set jvmInfo [ $AdminControl invoke_jmx $perfMbeanO "getStatsString" $parramsArray $signaturesArray   ] 

	set jvmInfoString [ $jvmInfo toString ] 

	lappend valuesList [ $AdminControl getCell ]	
		
	#get PMI data sub list.
	set e4        [ lindex $jvmInfoString 3 ]  
	set dataList  [ lindex $e4 1 ]  
	set dataListL [ llength $dataList ]  

	# sort in id order
	set dataList [ lsort -dictionary -index 0 $dataList ] 

	set topParms [ lindex $dataList 0 ]  

	set width 60

	set descriptorIndex [ lsearch -glob $topParms {*Descriptor*} ]
	set descriptor      [ lindex $topParms $descriptorIndex ]
	set x1 "[ lindex [ lindex [ lindex $descriptor 1 ] 0 ] 0 ]"
	set x2 "[ lindex [ lindex [ lindex $descriptor 1 ] 0 ] 1 ]"
	putsLog    [ format "%-${width}s %s"  $x1 $x2 ]

	lappend valuesList $x2
	   
	set x1 "[ lindex [ lindex [ lindex $descriptor 1 ] 1 ] 0 ]"
	set x2 "[ lindex [ lindex [ lindex $descriptor 1 ] 1 ] 1 ]"
	putsLog    [ format "%-${width}s %s"  $x1 $x2 ]

	lappend valuesList $x2

	set timeIndex [ lsearch -glob $topParms {*Time*} ]
	set time      [ lindex $topParms $timeIndex ]
	set x1        [ lindex [ lindex $topParms $timeIndex ] 0 ]
	set x2        [ clock format [ clock seconds ] -format "%Y-%m-%d %H:%M:%S" ]
	putsLog          [ format "%-${width}s %s"  $x1 $x2 ]

	lappend valuesList $x2

	set valueIndex [ lsearch -glob $topParms {*Value*} ]
	set value      [ lindex $topParms $valueIndex ]
	set x1         [ lindex [ lindex $value 1 ] 0 ]
	set x2         [ lindex [ lindex $value 1 ] 1 ]
	putsLog           [ format "%-${width}s %s"  $x1 $x2 ]

	lappend valuesList $x2

	set x1         [ lindex [ lindex $value 2 ] 0 ]
	set x2         [ lindex [ lindex $value 2 ] 1 ]
	putsLog           [ format "%-${width}s %s"  $x1 $x2 ]

	lappend valuesList $x2

	set x1         [ lindex [ lindex $value 3 ] 0 ]
	set x2         [ lindex [ lindex $value 3 ] 1 ]
	putsLog           [ format "%-${width}s %s"  $x1 $x2 ]

	lappend valuesList $x2

	set x1         [ lindex [ lindex $value 4 ] 0 ]
	set x2         [ lindex [ lindex $value 4 ] 1 ]
	putsLog           [ format "%-${width}s %s"  $x1 $x2 ]

	lappend valuesList $x2
	
	set x 1 

	while { $x < $dataListL } {

	   set e                [ lindex $dataList $x ]

	   set idIndex          [ lsearch -glob $e {*Id*} ]
	   set id               [ lindex $e $idIndex ]

	   set pmiDataInfoIndex [ lsearch -glob $e {*PmiDataInfo*} ]
	   set pmiDataInfo      [ lindex $e $pmiDataInfoIndex ]

	   set nl               [ eval concat [ join $e ] ]
	   set commentIndex     [ lsearch -glob $nl {*Comment*} ]
	   set comment          [ lindex [ lindex $nl $commentIndex ] 1 ]
	   
	   set valueIndex       [ lsearch -glob $e {*Value*} ]
	   set value            [ lindex [ lindex [ lindex $e $valueIndex ] 1 ] 1 ]

	   putsLog [ format "%-${width}s %s"  $comment $value ]

	   lappend valuesList $value

	   incr x 

	}

	# write data to cloudscape. 
	
	writeData $ConnectionI $valuesList $StatementI  

	unset valuesList 
    }
####################################################################
# proc - write data to database. 
####################################################################
    proc writeData { ConnectionI valuesList StatementI } {

	set procName [ lindex [ info level 0 ] 0 ]

	putsLog "## proc - $procName"

	foreach i [ info args $procName ]  {

	   upvar 0 $i ilocal

	   set propertiesArray($i) $ilocal 

	}

	putsLog "properties are.................."

	foreach { a b } [ array get propertiesArray ] {

	    putsLog [ format "%-35s %s" "$a" "$b" ]

	}

       global AdminConfig 
       global AdminControl
       global null

       putsLog "writeData"

       set opt1 [java::field ResultSet TYPE_SCROLL_INSENSITIVE]
       set opt2 [java::field ResultSet CONCUR_READ_ONLY ]

       set x 1

       foreach i $valuesList {

	  $StatementI setString $x $i 

	  incr x

       }

       #putsLog "execute sqlQuery"

       java::try {
	   
	   $StatementI executeUpdate   

       } catch {SQLException SQLExceptionI } {

		 catchSqlException::catchSqlException $SQLExceptionI 
	     
       } catch {TclException e } {
	   putsLog "TCl Exception to prepare statement $e"
	   return -code error
       }

    }

}

Index by: file name | procedure name | procedure call | annotation
File generated 2007-08-07 at 13:42.