The script :
import com.jcraft.jsch.JSch
import com.santaba.agent.util.Settings
import java.text.SimpleDateFormat
import static groovy.io.FileType.FILES
import static groovy.io.FileVisitResult.*
import groovy.time.TimeCategory
import groovy.json.*
host = hostProps.get("system.hostname")
user = hostProps.get("ssh.user")
pass = hostProps.get("ssh.pass")
port = hostProps.get("ssh.port")?.toInteger() ?: 22
cert = hostProps.get("ssh.cert") ?: '~/.ssh/id_rsa'
timeout = 15000 // timeout in milliseconds
def date = new Date() //Get Current date stamp
def sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") //format the date for later use in the event generation
def _outArray = []
command = ("ps H -u mqm | wc -l")
def command_output = getCommandOutput(command) //run the command on the host
command_output = command_output.trim() //the output is in string format and has multiple blnk lines, clean up blanks
command_output.eachLine //for each of the lines in the command output
{ line ->
int _line = line as int //convert output to integer, this is the file count of older files if any exists
if (_line>19000){ //if there are older files
println _line
}
else{
println _line
}
}
return 0;
///////////////////////////////////////////
////////////////////////////////////////////
// DO NOT Change anything below this line
///////////////////////////////////////////
////////////////////////////////////////////
/**
* Helper method which handles creating JSCH session and executing commands
* @return
*/
def getCommandOutput(String input_command) {
try {
// instantiate JSCH object.
jsch = new JSch()
// do we have an user and no pass ?
if (user && !pass) {
// Yes, so lets try connecting via cert.
jsch.addIdentity(cert)
}
// create session.
session = jsch.getSession(user, host, port)
// given we are running non-interactively, we will automatically accept new host keys.
session.setConfig("StrictHostKeyChecking", "no");
String authMethod = Settings.getSetting(Settings.SSH_PREFEREDAUTHENTICATION, Settings.DEFAULT_SSH_PREFEREDAUTHENTICATION);
session.setConfig("PreferredAuthentications", authMethod);
// set session timeout, in milliseconds.
session.setTimeout(timeout)
// is host configured with a user & password?
if (pass) {
// set password.
session.setPassword(pass);
}
// connect
session.connect()
// execute command.
channel = session.openChannel("exec")
channel.setCommand(input_command)
// collect command output.
def commandOutput = channel.getInputStream()
channel.connect()
def output = commandOutput.text;
// disconnect
channel.disconnect()
return output
}
catch (Exception e) {
e.printStackTrace()
}
// ensure we disconnect the session.
finally {
session.disconnect()
}
}
the error in debug mode:
$ !groovy
Error when executing the script -
output:
exception:Cannot invoke method trim() on null object
java.lang.NullPointerException: Cannot invoke method trim() on null object
at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:91)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:47)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.NullCallSite.call(NullCallSite.java:34)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
at Script759.run(Script759.groovy:20)
at com.santaba.agent.util.GroovyScriptShell.execute(GroovyScriptShell.java:126)
at com.santaba.agent.util.GroovyScriptExecutor.execute(GroovyScriptExecutor.java:129)
at com.santaba.agent.debugger.GroovyTask._executeInAgent(GroovyTask.java:207)
at com.santaba.agent.debugger.GroovyTask._handle(GroovyTask.java:186)
at com.santaba.agent.debugger.DebugTask.run(DebugTask.java:165)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)