diff options
Diffstat (limited to 'appc-config/appc-config-adaptor')
2 files changed, 245 insertions, 427 deletions
diff --git a/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/SshJcraftWrapper.java b/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/SshJcraftWrapper.java index 7494f4395..70b762bc7 100644 --- a/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/SshJcraftWrapper.java +++ b/appc-config/appc-config-adaptor/provider/src/main/java/org/onap/appc/ccadaptor/SshJcraftWrapper.java @@ -24,6 +24,8 @@ package org.onap.appc.ccadaptor; +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.ChannelShell; @@ -42,7 +44,6 @@ import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; -import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; @@ -54,17 +55,18 @@ import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.StringTokenizer; +import java.util.concurrent.TimeUnit; import javax.annotation.Nonnull; import org.apache.commons.lang.StringUtils; public class SshJcraftWrapper { + private static final EELFLogger log = EELFManager.getInstance().getLogger(SshJcraftWrapper.class); + private static final int BUFFER_SIZE = 512000; private InputStream inputStream = null; - private String debugLogFileName = "/tmp/sshJcraftWrapperDebug"; private TelnetListener listener = null; private String routerLogFileName = null; - private String host = null; private String routerName = null; private char[] charBuffer = new char[BUFFER_SIZE]; private DataInputStream dis = null; @@ -75,7 +77,6 @@ public class SshJcraftWrapper { private Session session = null; private Channel channel = null; private String aggregatedReceivedString = ""; - private File extraDebugFile = new File("/tmp/sshJcraftWrapperDEBUG"); private String routerCmdType = "XML"; private String routerFileName = null; private File jcraftReadSwConfigFileFromDisk = new File("/tmp/jcraftReadSwConfigFileFromDisk"); @@ -84,23 +85,12 @@ public class SshJcraftWrapper { private String userName = null; private String passWord = null; private Runtime runtime = Runtime.getRuntime(); - private DebugLog dbLog = new DebugLog(); - - public void SshJcraftWrapper() { - String fn = "SshJcraftWrapper.SshJcraftWrapper"; - DebugLog.printRTAriDebug(fn, "SshJcraftWrapper has been instantated"); - routerLogFileName = "/tmp/" + host; - this.host = host; - } public void connect(String hostname, String username, String password, String prompt, int timeOut) throws IOException { - String fn = "SshJcraftWrapper.connect"; jsch = new JSch(); - DebugLog.printRTAriDebug(fn, - "Attempting to connect to " + hostname + " username=" + username + " password=" + password + " prompt='" - + prompt + "' timeOut=" + timeOut); - DebugLog.printRTAriDebug(fn, "Trace A"); + log.debug("Attempting to connect to {0} username={1} prompt='{2}' timeOut={3}", + hostname, username, prompt, timeOut); routerName = hostname; hostName = hostname; userName = username; @@ -119,16 +109,14 @@ public class SshJcraftWrapper { dis = new DataInputStream(inputStream); reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE); channel.connect(); - DebugLog.printRTAriDebug(fn, "Successfully connected."); - DebugLog.printRTAriDebug(fn, "Flushing input buffer"); + log.info("Successfully connected. Flushing input buffer."); try { receiveUntil(prompt, 3000, "No cmd was sent, just waiting"); } catch (Exception e) { - DebugLog.printRTAriDebug(fn, "Caught an Exception: Nothing to flush out."); + log.warn("Caught an Exception: Nothing to flush out.", e); } } catch (Exception e) { - DebugLog.printRTAriDebug(fn, "Caught an Exception. e=" + e); - // dbLog.storeData("ErrorMsg= Exception trying to connect to "+hostname +" "+e); + log.error("Could not connect to host=" + hostname, e); throw new IOException(e.toString()); } } @@ -136,15 +124,12 @@ public class SshJcraftWrapper { // User specifies the port number. public void connect(String hostname, String username, String password, String prompt, int timeOut, int portNum) throws IOException { - String fn = "SshJcraftWrapper.connect"; - DebugLog.printRTAriDebug(fn, - ":Attempting to connect to " + hostname + " username=" + username + " password=" + password + " prompt='" - + prompt + "' timeOut=" + timeOut + " portNum=" + portNum); + log.debug("Attempting to connect to {0} username={1} prompt='{2}' timeOut={3} portNum={4}", + hostname, username, prompt, timeOut, portNum); routerName = hostname; hostName = hostname; userName = username; passWord = password; - routerName = hostname; jsch = new JSch(); try { session = jsch.getSession(username, hostname, portNum); @@ -152,7 +137,7 @@ public class SshJcraftWrapper { session.setPassword(password); session.setUserInfo(ui); session.setConfig("StrictHostKeyChecking", "no"); - DebugLog.printRTAriDebug(fn, ":StrictHostKeyChecking set to 'no'"); + log.debug("StrictHostKeyChecking set to 'no'"); session.connect(timeOut); session.setServerAliveCountMax( @@ -163,38 +148,29 @@ public class SshJcraftWrapper { dis = new DataInputStream(inputStream); reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE); channel.connect(); - DebugLog.printRTAriDebug(fn, ":Successfully connected."); - DebugLog.printRTAriDebug(fn, ":Flushing input buffer"); + log.info("Successfully connected. Flushing input buffer."); try { - if (prompt.equals("]]>]]>")) { + if ("]]>]]>".equals(prompt)) { receiveUntil("]]>]]>", 10000, "No cmd was sent, just waiting"); } else { receiveUntil(":~#", 5000, "No cmd was sent, just waiting"); } } catch (Exception e) { - DebugLog.printRTAriDebug(fn, "Caught an Exception::: Nothing to flush out."); + log.warn("Caught an Exception: Nothing to flush out.", e); } } catch (Exception e) { - DebugLog.printRTAriDebug(fn, ":Caught an Exception. e=" + e); - dbLog.outputStackTrace(e); - - // dbLog.storeData("ErrorMsg= Exception trying to connect to "+hostname +" "+e); + log.error("Could not connect to host=" + hostname, e); throw new IOException(e.toString()); } } public String receiveUntil(String delimeters, int timeout, String cmdThatWasSent) throws IOException { - String fn = "SshJcraftWrapper.receiveUntil"; boolean match = false; boolean cliPromptCmd = false; - StringBuffer sb2 = new StringBuffer(); - StringBuffer sbReceive = new StringBuffer(); - DebugLog.printRTAriDebug(fn, - "delimeters='" + delimeters + "' timeout=" + timeout + " cmdThatWasSent='" + cmdThatWasSent + "'"); - appendToFile(debugLogFileName, - fn + " delimeters='" + delimeters + "' timeout=" + timeout + " cmdThatWasSent='" + cmdThatWasSent + "'\n"); - String CmdThatWasSent = removeWhiteSpaceAndNewLineCharactersAroundString(cmdThatWasSent); + StringBuilder sb = new StringBuilder(); + StringBuilder sbReceive = new StringBuilder(); + log.debug("delimeters='{0}' timeout={1} cmdThatWasSent='{2}'", delimeters, timeout, cmdThatWasSent); int readCounts = 0; aggregatedReceivedString = ""; FileWriter fileWriter = null; @@ -204,21 +180,19 @@ public class SshJcraftWrapper { session.setTimeout(timeout); // This is the socket timeout value. while (!match) { if (new Date().getTime() > deadline) { - DebugLog.printRTAriDebug(fn, - "Throwing a TimedOutException: time in routine has exceed our deadline: routerName:" - + routerName + " CmdThatWasSent=" + CmdThatWasSent); - throw new TimedOutException("Timeout: time in routine has exceed our deadline"); + String formattedCmd = removeWhiteSpaceAndNewLineCharactersAroundString(cmdThatWasSent); + log.error("Routine has timed out: routerName={0} CmdThatWasSent={1}", routerName, formattedCmd); + throw new TimedOutException("Routine has timed out"); } try { Thread.sleep(500); } catch (java.lang.InterruptedException ee) { - boolean ignore = true; + Thread.currentThread().interrupt(); } int len = reader.read(charBuffer, 0, BUFFER_SIZE); - appendToFile(debugLogFileName, fn + " After reader.read cmd: len=" + len + "\n"); + log.trace("After reader. Read command len={0}", len); if (len <= 0) { - DebugLog.printRTAriDebug(fn, - "Reader read " + len + " bytes. Looks like we timed out, router=" + routerName); + log.error("Reader failed to read any bytes. Suspected socket timeout, router={0}", routerName); throw new TimedOutException("Received a SocketTimeoutException router=" + routerName); } if (!cliPromptCmd) { @@ -227,7 +201,7 @@ public class SshJcraftWrapper { // This is a IOS XR sw config file. We will write it to the disk. timeout = timeout * 2; deadline = new Date().getTime() + timeout; - DebugLog.printRTAriDebug(fn, "IOS XR upload for software config: timeout=" + timeout); + log.debug("IOS XR upload for software config: timeout={0}", timeout); StringTokenizer st = new StringTokenizer(cmdThatWasSent); st.nextToken(); routerFileName = st.nextToken(); @@ -235,18 +209,16 @@ public class SshJcraftWrapper { out = new BufferedWriter(fileWriter); routerLogFileName = "/tmp/" + routerName; tmpFile = new File(routerLogFileName); - DebugLog.printRTAriDebug(fn, - "Will write the swConfigFile to disk, routerFileName=" + routerFileName); + log.debug("Prepared for writing swConfigFile to disk, routerFileName=" + routerFileName); } - int c; out.write(charBuffer, 0, len); out.flush(); - appendToFile(debugLogFileName, fn + " Wrote " + len + " bytes to the disk\n"); + log.debug("{0} bytes has been written to the disk", len); if (tmpFile.exists()) { appendToRouterFile(routerLogFileName, len); } match = checkIfReceivedStringMatchesDelimeter(len, "\nXML>"); - if (match == true) { + if (match) { out.flush(); out.close(); out = null; @@ -254,93 +226,81 @@ public class SshJcraftWrapper { } } else { readCounts++; - appendToFile(debugLogFileName, - fn + " readCounts=" + readCounts + " Reader read " + len + " of data\n"); + log.debug("Reader read {0} of data within {1} read iteration", len, readCounts); int c; - sb2.setLength(0); + sb.setLength(0); for (int i = 0; i < len; i++) { c = charBuffer[i]; if ((c != 7) && (c != 13) && (c != 0) && (c != 27)) { - sbReceive.append((char) charBuffer[i]); - sb2.append((char) charBuffer[i]); + sbReceive.append(charBuffer[i]); + sb.append(charBuffer[i]); } } appendToRouterFile("/tmp/" + routerName, len); if (listener != null) { - listener.receivedString(sb2.toString()); + listener.receivedString(sb.toString()); } - - appendToFile(debugLogFileName, fn + " Trace 1\n"); - match = checkIfReceivedStringMatchesDelimeter(delimeters, sb2.toString(), cmdThatWasSent); - appendToFile(debugLogFileName, fn + " Trace 2\n"); - if (match == true) { - appendToFile(debugLogFileName, fn + " Match was true, breaking...\n"); + match = checkIfReceivedStringMatchesDelimeter(delimeters, sb.toString(), cmdThatWasSent); + if (match) { + log.trace("Match was true, breaking the loop."); break; } } } else { - DebugLog.printRTAriDebug(fn, "cliPromptCmd, Trace 2"); - sb2.setLength(0); + log.trace("cliPromptCmd"); + sb.setLength(0); for (int i = 0; i < len; i++) { - sbReceive.append((char) charBuffer[i]); - sb2.append((char) charBuffer[i]); + sbReceive.append(charBuffer[i]); + sb.append(charBuffer[i]); } - appendToRouterFile("/tmp/" + routerName, sb2); + appendToRouterFile("/tmp/" + routerName, sb); if (listener != null) { - listener.receivedString(sb2.toString()); + listener.receivedString(sb.toString()); } - DebugLog.printRTAriDebug(fn, "sb2='" + sb2.toString() + "' delimeters='" + delimeters + "'"); - if (sb2.toString().indexOf("\nariPrompt>") != -1) { - DebugLog.printRTAriDebug(fn, "Found our prompt"); - match = true; + log.debug("sb2={0} delimiters={1}", sb.toString(), delimeters); + if (sb.toString().contains("\nariPrompt>")) { + log.debug("Found ari prompt"); break; } } } } catch (JSchException e) { - DebugLog.printRTAriDebug(fn, "Caught an JSchException e=" + e.toString()); - dbLog.outputStackTrace(e); - throw new TimedOutException(e.toString()); - } catch (IOException ee) { - DebugLog.printRTAriDebug(fn, "Caught an IOException: ee=" + ee.toString()); - dbLog.outputStackTrace(ee); - throw new TimedOutException(ee.toString()); + log.error("JSchException occurred", e); + throw new TimedOutException(e.getMessage()); + } catch (IOException e) { + log.error("IOException occurred", e); + throw new TimedOutException(e.getMessage()); } finally { try { if (fileWriter != null) { fileWriter.close(); } } catch (IOException ex) { - DebugLog.printRTAriDebug(fn, "Failed to close fileWriter output stream: ex=" + ex); + log.warn("Failed to close fileWriter output stream", ex); } } - String result = stripOffCmdFromRouterResponse(sbReceive.toString()); - DebugLog.printRTAriDebug(fn, "Leaving method successfully"); - return result; + return stripOffCmdFromRouterResponse(sbReceive.toString()); } public boolean checkIfReceivedStringMatchesDelimeter(String delimeters, String receivedString, String cmdThatWasSent) { // The delimeters are in a '|' seperated string. Return true on the first match. - String fn = "SshJcraftWrapper.checkIfReceivedStringMatchesDelimeter"; - appendToFile(debugLogFileName, - fn + " Entered: delimeters='" + delimeters + " cmdThatWasSent='" + cmdThatWasSent + "' receivedString='" - + receivedString + "'\n"); + log.debug("Entered checkIfReceivedStringMatchesDelimeter: delimeters={0} cmdThatWasSent={1} receivedString={2}", + delimeters, cmdThatWasSent, receivedString); StringTokenizer st = new StringTokenizer(delimeters, "|"); - if ((delimeters.indexOf("#$") != -1) || (routerCmdType.equals("CLI"))) // This would be an IOS XR, CLI command. + if ((delimeters.contains("#$")) || ("CLI".equals(routerCmdType))) // This would be an IOS XR, CLI command. { - int x = receivedString.lastIndexOf("#"); + int x = receivedString.lastIndexOf('#'); int y = receivedString.length() - 1; - appendToFile(debugLogFileName, fn + " IOS XR, CLI command\n"); - if (extraDebugFile.exists()) { - appendToFile(debugLogFileName, - fn + " :::cmdThatWasSent='" + cmdThatWasSent + "' x=" + x + " y=" + y + "\n"); + log.debug("IOS XR, CLI command"); + if (log.isTraceEnabled()) { + log.trace("cmdThatWasSent={0}, lastIndexOf hash delimiter={1}, maxIndexNum={2}", cmdThatWasSent, x, y); } return (x != -1) && (y == x); } - if (cmdThatWasSent.indexOf("show config") != -1) { - appendToFile(debugLogFileName, fn + "In the block for 'show config'\n"); + if (cmdThatWasSent.contains("show config")) { + log.trace("In the block for 'show config'"); while (st.hasMoreTokens()) { String delimeter = st.nextToken(); // Make sure we don't get faked out by a response of " #". @@ -349,97 +309,73 @@ public class SshJcraftWrapper { // LAAR2# int x = receivedString.lastIndexOf(delimeter); if ((receivedString.lastIndexOf(delimeter) != -1) && (receivedString.lastIndexOf(" #") != x - 1)) { - appendToFile(debugLogFileName, fn + "receivedString=\n'" + receivedString + "'\n"); - appendToFile(debugLogFileName, - fn + "Returning true for the 'show config' command. We found our real delmeter. \n\n"); - return (true); + log.debug("receivedString={0}", receivedString); + log.trace("Found ending for 'show config' command, exiting."); + return true; } } } else { aggregatedReceivedString = aggregatedReceivedString + receivedString; - _appendToFile("/tmp/aggregatedReceivedString.debug", aggregatedReceivedString); + appendToFile("/tmp/aggregatedReceivedString.debug", aggregatedReceivedString); + log.debug("receivedString={0}", receivedString); while (st.hasMoreTokens()) { String delimeter = st.nextToken(); - appendToFile(debugLogFileName, fn + " Looking for an delimeter of:'" + delimeter + "'\n"); - appendToFile(debugLogFileName, fn + " receivedString='" + receivedString); + log.debug("Looking for an delimiter of:{0}", delimeter); if (aggregatedReceivedString.indexOf(delimeter) != -1) { - DebugLog.printRTAriDebug(fn, "Found our delimeter, which was: '" + delimeter + "'"); + log.debug("Found delimiter={0}, exiting", delimeter); aggregatedReceivedString = ""; - return (true); + return true; } } } - return (false); + return false; } public boolean checkIfReceivedStringMatchesDelimeter(int len, String delimeter) { - String fnName = "SshJcraftWrapper.checkIfReceivedStringMatchesDelimeter:::"; int x; int c; String str = StringUtils.EMPTY; if (jcraftReadSwConfigFileFromDisk()) { - DebugLog.printAriDebug(fnName, "jcraftReadSwConfigFileFromDisk block"); + log.trace("jcraftReadSwConfigFileFromDisk block"); File fileName = new File(routerFileName); - appendToFile(debugLogFileName, - fnName + " jcraftReadSwConfigFileFromDisk::: Will read the tail end of the file from the disk"); + log.debug("jcraftReadSwConfigFileFromDisk::: Will read the tail end of the file from the disk"); try { str = getLastFewLinesOfFile(fileName, 3); } catch (IOException e) { - DebugLog.printAriDebug(fnName, "Caught an Exception, e=" + e); - dbLog.outputStackTrace(e); - e.printStackTrace(); + log.warn("IOException occurred, while reading file=" + fileName, e); } } else { - // DebugLog.printAriDebug(fnName, "TRACE 1: ******************************"); // When looking at the end of the charBuffer, don't include any linefeeds or spaces. We only want to make the smallest string possible. for (x = len - 1; x >= 0; x--) { c = charBuffer[x]; - if (extraDebugFile.exists()) { - appendToFile(debugLogFileName, fnName + " x=" + x + " c=" + c + "\n"); - } if ((c != 10) && (c != 32)) // Not a line feed nor a space. { break; } } if ((x + 1 - 13) >= 0) { - str = new String(charBuffer, (x + 1 - 13), 13); - appendToFile(debugLogFileName, fnName + " str:'" + str + "'\n"); + str = new String(charBuffer, x + 1 - 13, 13); + log.debug("str:{0}", str); } else { File fileName = new File(routerFileName); - appendToFile(debugLogFileName, - fnName + " Will read the tail end of the file from the disk, x=" + x + " len=" + len + " str::'" - + str + "' routerFileName='" + routerFileName + "'\n"); - DebugLog.printAriDebug(fnName, - "Will read the tail end of the file from the disk, x=" + x + " len=" + len + " str::'" + str - + "' routerFileName='" + routerFileName + "'"); + log.debug("Will read the tail end of the file from the disk, x={0} len={1} str={2} routerFileName={3}", + x, len, str, routerFileName); try { str = getLastFewLinesOfFile(fileName, 3); } catch (IOException e) { - DebugLog.printAriDebug(fnName, "Caught an Exception, e=" + e); - dbLog.outputStackTrace(e); - e.printStackTrace(); + log.warn("IOException occurred, while reading file=" + fileName, e); } } } - if (str.indexOf(delimeter) != -1) { - DebugLog.printAriDebug(fnName, "str in break is:'" + str + "'" + " delimeter='" + delimeter + "'"); - appendToFile(debugLogFileName, - fnName + " str in break is:'" + str + " delimeter='" + delimeter + "'" + "'\n"); - return (true); - } else { - appendToFile(debugLogFileName, fnName + " Returning false"); - return (false); - } - + log.debug("Parsed string was str='{0}', searched delimiter was {1}"); + return str.contains(delimeter); } public void closeConnection() { - String fn = "SshJcraftWrapper.closeConnection"; - DebugLog.printRTAriDebug(fn, "Executing the closeConnection...."); + log.info("Closing connection"); inputStream = null; dis = null; charBuffer = null; @@ -448,76 +384,76 @@ public class SshJcraftWrapper { } public void send(String cmd) throws IOException { - String fn = "SshJcraftWrapper.send"; - try (OutputStream os = channel.getOutputStream(); DataOutputStream dos = new DataOutputStream(os)) { sendSshCommand(cmd, dos); } catch (IOException e) { - DebugLog.printRTAriDebug(fn, "Caught an IOException. e=" + e); - dbLog.outputStackTrace(e); - throw new IOException(e.toString()); + log.error("IOException occurred while sending command=" + cmd, e); + throw e; } } - public void sendChar(int v) throws IOException { - String fn = "SshJcraftWrapper.sendChar"; - OutputStream out = channel.getOutputStream(); - DataOutputStream dos = new DataOutputStream(out); - try { - DebugLog.printRTAriDebug(fn, "Sending: '" + v + "'"); + try (OutputStream os = channel.getOutputStream(); DataOutputStream dos = new DataOutputStream(os)) { + if (log.isTraceEnabled()) { + log.trace("Sending charCode: {0}", v); + } dos.writeChar(v); dos.flush(); } catch (IOException e) { - DebugLog.printRTAriDebug(fn, "Caught an IOException. e=" + e); - throw new IOException(e.toString()); + log.error("IOException occurred while writing char to channel output stream", e); + throw e; } } public void send(byte[] b, int off, int len) throws IOException { - String fn = "SshJcraftWrapper.send:byte[]"; - OutputStream out = channel.getOutputStream(); - DataOutputStream dos = new DataOutputStream(out); - try { + try (OutputStream os = channel.getOutputStream(); DataOutputStream dos = new DataOutputStream(os)) { dos.write(b, off, len); dos.flush(); } catch (IOException e) { - DebugLog.printRTAriDebug(fn, "Caught an IOException. e=" + e); - throw new IOException(e.toString()); + log.error("IOException occurred while writing bytes to channel output stream", e); + throw e; } } public static class MyUserInfo implements UserInfo, UIKeyboardInteractive { + @Override public String getPassword() { return null; } + @Override public boolean promptYesNo(String str) { return false; } + @Override public String getPassphrase() { return null; } + @Override public boolean promptPassphrase(String message) { return false; } + @Override public boolean promptPassword(String message) { return false; } + @Override public void showMessage(String message) { + //stub } + @Override public String[] promptKeyboardInteractive(String destination, String name, String instruction, String[] prompt, boolean[] echo) { - return null; + return new String[0]; } } @@ -525,144 +461,77 @@ public class SshJcraftWrapper { this.listener = listener; } - public void appendToFile(String fileName, String dataToWrite) { - String fn = "SshJcraftWrapper.appendToFile"; - - try { - // First check to see if a file 'fileName' exist, if it does - // write to it. If it does not exist, don't write to it. - File tmpFile = new File(fileName); - if (tmpFile.exists()) { - BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true)); - // out.write(dataToWrite); - // out.write(getTheDate() +": " +Thread.currentThread().getName() +": "+dataToWrite); - String tId = ""; - out.write(getTheDate() + ": " + tId + ": " + dataToWrite); - out.close(); - } - } catch (IOException e) { - DebugLog.printRTAriDebug(fn, "Caught an IOException: e=" + e); - } catch (Exception e) { - DebugLog.printRTAriDebug(fn, "Caught an Exception: e=" + e); - } - } - - public void _appendToFile(String fileName, String dataToWrite) { - String fn = "SshJcraftWrapper.appendToFile"; - - try { - // First check to see if a file 'fileName' exist, if it does - // write to it. If it does not exist, don't write to it. - File tmpFile = new File(fileName); - if (tmpFile.exists()) { - BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true)); - out.write(dataToWrite); - out.close(); + private void appendToFile(String fileName, String dataToWrite) { + File outputFile = new File(fileName); + if (outputFile.exists()) { + try (FileWriter fw = new FileWriter(fileName, true); BufferedWriter ow = new BufferedWriter(fw)) { + ow.write(dataToWrite); + ow.close(); + } catch (IOException e) { + log.error("IOException occurred while writing to file=" + fileName, e); } - } catch (IOException e) { - DebugLog.printRTAriDebug(fn, "Caught an IOException: e=" + e); - } catch (Exception e) { - DebugLog.printRTAriDebug(fn, "Caught an Exception: e=" + e); } } - public String getTheDate() { - Calendar cal = Calendar.getInstance(); - java.util.Date today = cal.getTime(); - DateFormat df1 = DateFormat.getDateInstance(); - DateFormat df3 = new SimpleDateFormat("MM/dd/yyyy H:mm:ss "); - return (df3.format(today)); + DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy H:mm:ss "); + return dateFormat.format(Calendar.getInstance().getTime()); } - public void appendToRouterFile(String fileName, StringBuffer dataToWrite) { - String fnName = "SshJcraftWrapper.appendToRouterFile"; - DebugLog.printRTAriDebug(fnName, "Entered.... "); - try { - // First check to see if a file 'fileName' exist, if it does - // write to it. If it does not exist, don't write to it. - File tmpFile = new File(fileName); - { - // if ((tmpFile.exists()) && (tmpFile.setWritable(true, true))) - if (tmpFile.exists()) { - BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true)); - // out.write("<!-- "+getTheDate() +": " +tId +" -->\n"); - out.write(dataToWrite.toString()); - out.close(); - } - } - } catch (IOException e) { - System.err.println("writeToFile() exception: " + e); - e.printStackTrace(); - } + public void appendToRouterFile(String fileName, StringBuilder dataToWrite) { + appendToFile(fileName, dataToWrite.toString()); } public void appendToRouterFile(String fileName, int len) { - String fnName = "SshJcraftWrapper.appendToFile"; - // DebugLog.printRTAriDebug (fnName, "Entered.... len="+len); - try { - // First check to see if a file 'fileName' exist, if it does - // write to it. If it does not exist, don't write to it. - File tmpFile = new File(fileName); - // if ((tmpFile.exists()) && (tmpFile.setWritable(true, true))) - if (tmpFile.exists()) { - BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true)); - // out.write("<!-- "+getTheDate() +": " +tId +" -->\n"); - out.write(charBuffer, 0, len); - out.close(); + File outputFile = new File(fileName); + if (outputFile.exists()) { + try (FileWriter fw = new FileWriter(fileName, true); BufferedWriter ow = new BufferedWriter(fw)) { + ow.write(charBuffer, 0, len); + ow.close(); + } catch (IOException e) { + log.error("IOException occurred while writing to router file=" + fileName, e); } - } catch (IOException e) { - System.err.println("writeToFile() exception: " + e); - e.printStackTrace(); } } public String removeWhiteSpaceAndNewLineCharactersAroundString(String str) { - if (str != null) { + if (str != null && !StringUtils.EMPTY.equals(str)) { StringTokenizer strTok = new StringTokenizer(str, "\n"); - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); while (strTok.hasMoreTokens()) { String line = strTok.nextToken(); sb.append(line); } - return (sb.toString().trim()); - } else { - return (str); + return sb.toString().trim(); } + return StringUtils.EMPTY; } public String stripOffCmdFromRouterResponse(String routerResponse) { - String fn = "SshJcraftWrapper.stripOffCmdFromRouterResponse"; - // appendToFile(debugLogFileName, fn+": routerResponse='"+routerResponse +"'\n"); - // The session of SSH will echo the command sent to the router, in the router's response. // Since all our commands are terminated by a '\n', strip off the first line // of the response from the router. This first line contains the orginal command. - StringTokenizer rr = new StringTokenizer(routerResponse, "\n"); - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); int numTokens = rr.countTokens(); - // DebugLog.printRTAriDebug (fn, "Number of lines in the response from the router is:" +numTokens); if (numTokens > 1) { rr.nextToken(); //Skip the first line. while (rr.hasMoreTokens()) { - sb.append(rr.nextToken() + '\n'); + sb.append(rr.nextToken()).append("\n"); } } - return (sb.toString()); + return sb.toString(); } public void setRouterCommandType(String type) { - String fn = "SshJcraftWrapper.setRouterCommandType"; this.routerCmdType = type; - DebugLog.printRTAriDebug(fn, "Setting routerCmdType to a value of '" + type + "'"); + log.debug("Router command type is set to: {0}", type); } - public String getLastFewLinesOfFile(File file, int linesToRead) throws FileNotFoundException, IOException { - String fn = "SshJcraftWrapper.getLastFewLinesOfFile"; + public String getLastFewLinesOfFile(File file, int linesToRead) throws IOException { RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r"); int lines = 0; StringBuilder builder = new StringBuilder(); @@ -676,7 +545,6 @@ public class SshJcraftWrapper { builder.append(c); if (c == '\n') { builder = builder.reverse(); - // System.out.println(builder.toString()); tail = builder.toString() + tail; lines++; builder.setLength(0); @@ -686,24 +554,18 @@ public class SshJcraftWrapper { } } randomAccessFile.close(); - if (!jcraftReadSwConfigFileFromDisk()) { - DebugLog.printRTAriDebug(fn, "tail='" + tail + "'"); + if (log.isDebugEnabled()) { + log.debug("Content read from file={0} was tail={1}", file.getName(), tail); } - appendToFile(debugLogFileName, "tail='" + tail + "'\n"); return tail; } public boolean jcraftReadSwConfigFileFromDisk() { - if (jcraftReadSwConfigFileFromDisk.exists()) { - return (true); - } else { - return (false); - } + return jcraftReadSwConfigFileFromDisk.exists(); } public String getEquipNameCode() { - return (equipNameCode); - + return equipNameCode; } public void setEquipNameCode(String equipNameCode) { @@ -711,19 +573,14 @@ public class SshJcraftWrapper { } public String getRouterName() { - return (routerName); + return routerName; } // Routine does reads until it has read 'nchars' or times out. - public void receiveUntilBufferFlush(int ncharsSent, int timeout, String message) - throws TimedOutException, IOException { - String fn = "SshJcraftWrapper.receiveUntilBufferFlush"; - StringBuffer sb2 = new StringBuffer(); - StringBuffer sbReceive = new StringBuffer(); - DebugLog.printRTAriDebug(fn, "ncharsSent=" + ncharsSent + " timeout=" + timeout + " " + message); + public void receiveUntilBufferFlush(int ncharsSent, int timeout, String message) throws IOException { + log.debug("ncharsSent={0}, timeout={1}, message={2}", ncharsSent, timeout, message); int ncharsTotalReceived = 0; int ncharsRead = 0; - boolean flag = false; long deadline = new Date().getTime() + timeout; logMemoryUsage(); @@ -731,11 +588,9 @@ public class SshJcraftWrapper { session.setTimeout(timeout); // This is the socket timeout value. while (true) { if (new Date().getTime() > deadline) { - DebugLog.printRTAriDebug(fn, - "Throwing a TimedOutException: time in routine has exceed our deadline: ncharsSent=" - + ncharsSent + " ncharsTotalReceived=" + ncharsTotalReceived); - flag = true; - throw new TimedOutException("Timeout: time in routine has exceed our deadline"); + log.error("Routine has timed out: ncharsSent={0}, ncharsTotalReceived={1}", ncharsSent, + ncharsTotalReceived); + throw new TimedOutException("Routine has timed out"); } ncharsRead = reader.read(charBuffer, 0, BUFFER_SIZE); if (listener != null) { @@ -743,106 +598,97 @@ public class SshJcraftWrapper { } appendToRouterFile("/tmp/" + routerName, ncharsRead); ncharsTotalReceived = ncharsTotalReceived + ncharsRead; - // DebugLog.printRTAriDebug (fn, "::ncharsSent="+ncharsSent+" ncharsTotalReceived="+ncharsTotalReceived +" ncharsRead="+ncharsRead); if (ncharsTotalReceived >= ncharsSent) { - DebugLog.printRTAriDebug(fn, - "Received the correct number of characters, ncharsSent=" + ncharsSent + " ncharsTotalReceived=" - + ncharsTotalReceived); + log.debug("Received the correct number of characters, ncharsSent={0}, ncharsTotalReceived={1}", + ncharsSent, ncharsTotalReceived); logMemoryUsage(); return; } } } catch (JSchException e) { - DebugLog.printRTAriDebug(fn, "Caught an JSchException e=" + e); - DebugLog.printRTAriDebug(fn, - "ncharsSent=" + ncharsSent + " ncharsTotalReceived=" + ncharsTotalReceived + " ncharsRead=" - + ncharsRead); - throw new TimedOutException(e.toString()); + log.error("JSchException occurred while command sending", e); + log.debug("ncharsSent={0}, ncharsTotalReceived={1}, ncharsRead={2} until error occurred", + ncharsSent, ncharsTotalReceived, ncharsRead); + throw new TimedOutException(e.getMessage()); } } public String getHostName() { - return (hostName); + return hostName; } public String getUserName() { - return (userName); + return userName; } public String getPassWord() { - return (passWord); + return passWord; } - public void sftpPut(String sourcePath, String destDirectory) throws IOException { - String fn = "SshJcraftWrapper.sftp"; + public void sftpPutFile(String sourcePath, String destDirectory) throws IOException { try { Session sftpSession = jsch.getSession(userName, hostName, 22); UserInfo ui = new MyUserInfo(); sftpSession.setPassword(passWord); sftpSession.setUserInfo(ui); sftpSession.connect(30 * 1000); - DebugLog.printRTAriDebug(fn, "Opening up an sftp channel...."); ChannelSftp sftp = (ChannelSftp) sftpSession.openChannel("sftp"); - DebugLog.printRTAriDebug(fn, "Connecting...."); sftp.connect(); - DebugLog.printRTAriDebug(fn, "Sending " + sourcePath + " --> " + destDirectory); + log.debug("Sending via sftp from source: {0} to destination: {1}", sourcePath, destDirectory); sftp.put(sourcePath, destDirectory, ChannelSftp.OVERWRITE); - DebugLog.printRTAriDebug(fn, "Sent successfully"); sftpSession.disconnect(); - } catch (Exception e) { - DebugLog.printRTAriDebug(fn, "Caught an Exception, e=" + e); - // dbLog.storeData("ErrorMsg= sftp threw an Exception. error is:"+e); - throw new IOException(e.toString()); + } catch (JSchException ex) { + log.error("JSchException occurred while handling sftp session", ex); + throw new IOException(ex.getMessage()); + } catch (SftpException ex) { + log.error("SftpException occurred during file transfer", ex); + throw new IOException(ex.getMessage()); } } - - public void SftpPut(String stringOfData, String fullPathDest) throws IOException { - String fn = "SshJcraftWrapper.Sftp"; + public void sftpPutStringData(String stringOfData, String fullPathDest) throws IOException { try { Session sftpSession = jsch.getSession(userName, hostName, 22); UserInfo ui = new MyUserInfo(); sftpSession.setPassword(passWord); sftpSession.setUserInfo(ui); sftpSession.connect(30 * 1000); - DebugLog.printRTAriDebug(fn, "Opening up an sftp channel...."); ChannelSftp sftp = (ChannelSftp) sftpSession.openChannel("sftp"); - DebugLog.printRTAriDebug(fn, "Connecting...."); sftp.connect(); InputStream is = new ByteArrayInputStream(stringOfData.getBytes()); - DebugLog.printRTAriDebug(fn, "Sending stringOfData --> " + fullPathDest); + log.debug("Sending via sftp stringOfData to destination: {0}", fullPathDest); sftp.put(is, fullPathDest, ChannelSftp.OVERWRITE); - DebugLog.printRTAriDebug(fn, "Sent successfully"); sftpSession.disconnect(); - } catch (Exception e) { - DebugLog.printRTAriDebug(fn, "Caught an Exception, e=" + e); - // dbLog.storeData("ErrorMsg= sftp threw an Exception. error is:"+e); - throw new IOException(e.toString()); + } catch (JSchException ex) { + log.error("JSchException occurred while handling sftp session", ex); + throw new IOException(ex.getMessage()); + } catch (SftpException ex) { + log.error("SftpException occurred during data transfer", ex); + throw new IOException(ex.getMessage()); } } public String sftpGet(String fullFilePathName) throws IOException { - String fn = "SshJcraftWrapper.Sftp"; try { Session sftpSession = jsch.getSession(userName, hostName, 22); UserInfo ui = new MyUserInfo(); sftpSession.setPassword(passWord); sftpSession.setUserInfo(ui); sftpSession.connect(30 * 1000); - DebugLog.printRTAriDebug(fn, "Opening up an sftp channel...."); ChannelSftp sftp = (ChannelSftp) sftpSession.openChannel("sftp"); - DebugLog.printRTAriDebug(fn, "Connecting...."); sftp.connect(); - InputStream in = null; - in = sftp.get(fullFilePathName); + InputStream in = sftp.get(fullFilePathName); String sftpFileString = readInputStreamAsString(in); - DebugLog.printRTAriDebug(fn, "Retreived successfully"); - // DebugLog.printRTAriDebug (fn, "sftpFileString="+sftpFileString); + log.debug("Received data via sftp connection sftpFileString={0} from fullFilePathName={1}", + sftpFileString, fullFilePathName); sftpSession.disconnect(); - return (sftpFileString); - } catch (Exception e) { - DebugLog.printRTAriDebug(fn, "Caught an Exception, e=" + e); - throw new IOException(e.toString()); + return sftpFileString; + } catch (JSchException ex) { + log.error("JSchException occurred while handling sftp session", ex); + throw new IOException(ex.getMessage()); + } catch (SftpException ex) { + log.error("SftpException occurred during data transfer", ex); + throw new IOException(ex.getMessage()); } } @@ -860,27 +706,26 @@ public class SshJcraftWrapper { public void logMemoryUsage() { - String fn = "SshJcraftWrapper.logMemoryUsage"; int mb = 1024 * 1024; long usedMemory; - long maxMemoryAdvailable; - long memoryLetfOnHeap; - maxMemoryAdvailable = (runtime.maxMemory() / mb); - usedMemory = ((runtime.totalMemory() / mb) - (runtime.freeMemory() / mb)); - memoryLetfOnHeap = maxMemoryAdvailable - usedMemory; - DebugLog.printAriDebug(fn, - "maxMemoryAdvailable=" + maxMemoryAdvailable + " usedMemory=" + usedMemory + " memoryLetfOnHeap=" - + memoryLetfOnHeap); + long maxMemoryAvailable; + long memoryLeftOnHeap; + maxMemoryAvailable =runtime.maxMemory() / mb; + usedMemory = (runtime.totalMemory() / mb) - (runtime.freeMemory() / mb); + memoryLeftOnHeap = maxMemoryAvailable - usedMemory; + log.info("Memory usage: maxMemoryAvailable={0}, usedMemory={1}, memoryLeftOnHeap={2}", + maxMemoryAvailable, usedMemory, memoryLeftOnHeap); } // User specifies the port number, and the subsystem public void connect(String hostname, String username, String password, String prompt, int timeOut, int portNum, String subsystem) throws IOException { - String fn = "SshJcraftWrapper.connect"; - DebugLog.printRTAriDebug(fn, - ":::Attempting to connect to " + hostname + " username=" + username + " password=" + password + " prompt='" - + prompt + "' timeOut=" + timeOut + " portNum=" + portNum + " subsystem=" + subsystem); + if (log.isDebugEnabled()) { + log.debug( + "Attempting to connect to {0} username={1} prompt='{2}' timeOut={3} portNum={4} subsystem={5}", + hostname, username, prompt, timeOut, portNum, subsystem); + } routerName = hostname; jsch = new JSch(); try { @@ -894,33 +739,24 @@ public class SshJcraftWrapper { 0); // If this is not set to '0', then socket timeout on all reads will not work!!!! channel = session.openChannel("subsystem"); ((ChannelSubsystem) channel).setSubsystem(subsystem); - // ((ChannelSubsystem)channel).setPtyType("vt102"); - ((ChannelSubsystem) channel).setPty(true); + ((ChannelSubsystem) channel).setPty(true); //expected ptyType vt102 inputStream = channel.getInputStream(); dis = new DataInputStream(inputStream); reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE); - channel.connect(); - DebugLog.printRTAriDebug(fn, "Successfully connected."); - DebugLog.printRTAriDebug(fn, "Five second sleep...."); - try { - Thread.sleep(5000); - } catch (java.lang.InterruptedException ee) { - boolean ignore = true; - } - } catch (Exception e) { - DebugLog.printRTAriDebug(fn, "Caught an Exception. e=" + e); - throw new IOException(e.toString()); + channel.connect(5000); + } catch (JSchException e) { + log.error("JschException occurred ", e); + throw new IOException(e.getMessage()); + } catch (TimedOutException e) { + log.error("TimedOutException occurred", e); + throw new IOException(e.getMessage()); } } public void connect(String hostName, String username, String password, int portNumber) throws IOException { - String fn = "SshJcraftWrapper.connect"; jsch = new JSch(); - DebugLog.printRTAriDebug(fn, - "::Attempting to connect to " + hostName + " username=" + username + " password=" + password - + " portNumber=" + portNumber); - DebugLog.printRTAriDebug(fn, "Trace C"); + log.debug("Attempting to connect to {0} username={1} portNumber={2}", hostName, username, portNumber); routerName = hostName; this.hostName = hostName; userName = username; @@ -942,51 +778,46 @@ public class SshJcraftWrapper { dis = new DataInputStream(inputStream); reader = new BufferedReader(new InputStreamReader(dis), BUFFER_SIZE); channel.connect(); - DebugLog.printRTAriDebug(fn, "::Successfully connected."); - DebugLog.printRTAriDebug(fn, "::Flushing input buffer"); try { receiveUntil(":~#", 9000, "No cmd was sent, just waiting, but we can stop on a '~#'"); } catch (Exception e) { - DebugLog.printRTAriDebug(fn, "Caught an Exception::: Nothing to flush out."); + log.warn("Caught an Exception: Nothing to flush out.", e); } - } catch (Exception e) { - DebugLog.printRTAriDebug(fn, "Caught an Exception. e=" + e); - // dbLog.storeData("ErrorMsg= Exception trying to connect to "+hostName +" "+e); - throw new IOException(e.toString()); + } catch (JSchException e) { + log.error("JschException occurred ", e); + throw new IOException(e.getMessage()); } } public void put(String sourcePath, String destDirectory) throws IOException { - String fn = "SshJcraftWrapper.sftp"; try { Session sftpSession = jsch.getSession(userName, hostName, 22); UserInfo ui = new MyUserInfo(); sftpSession.setPassword(passWord); sftpSession.setUserInfo(ui); sftpSession.connect(30 * 1000); - DebugLog.printRTAriDebug(fn, "Opening up an sftp channel...."); ChannelSftp sftp = (ChannelSftp) sftpSession.openChannel("sftp"); - DebugLog.printRTAriDebug(fn, "Connecting...."); sftp.connect(); - DebugLog.printRTAriDebug(fn, "Sending " + sourcePath + " --> " + destDirectory); + log.debug("Sending via sftp from source: {0} to destination: {1}", sourcePath, destDirectory); sftp.put(sourcePath, destDirectory, ChannelSftp.OVERWRITE); - DebugLog.printRTAriDebug(fn, "Sent successfully"); sftpSession.disconnect(); - } catch (Exception e) { - DebugLog.printRTAriDebug(fn, "Caught an Exception, e=" + e); - // dbLog.storeData("ErrorMsg= sftp threw an Exception. error is:"+e); - throw new IOException(e.toString()); + } catch (JSchException ex) { + log.error("JSchException occurred while handling sftp session", ex); + throw new IOException(ex.getMessage()); + } catch (SftpException ex) { + log.error("SftpException occurred during file transfer", ex); + throw new IOException(ex.getMessage()); } } public void put(InputStream is, String fullPathDest, String hostName, String userName, String passWord) throws IOException { - String fn = "SshJcraftWrapper.put"; Session sftpSession = null; try { - DebugLog.printRTAriDebug(fn, "userName=" + userName + " hostName=" + hostName + " passWord=" + passWord); + log.debug("Sftp put invoked, connection details: username={1} hostname={2}", + userName, hostName); jsch = new JSch(); java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); @@ -996,30 +827,29 @@ public class SshJcraftWrapper { sftpSession.setUserInfo(ui); sftpSession.setConfig(config); sftpSession.connect(30 * 1000); - DebugLog.printRTAriDebug(fn, "Opening up an sftp channel...."); ChannelSftp sftp = (ChannelSftp) sftpSession.openChannel("sftp"); - DebugLog.printRTAriDebug(fn, "Connecting...."); sftp.connect(); String oldFiles = fullPathDest + "*"; - DebugLog.printRTAriDebug(fn, "Deleting old files --> " + oldFiles); + log.debug("Deleting old files: {0}", oldFiles); try { sftp.rm(oldFiles); - DebugLog.printRTAriDebug(fn, "Sending stringOfData --> " + fullPathDest); - } catch (SftpException sft) { + } catch (SftpException ex) { String exp = "No such file"; - if (sft.getMessage() != null && sft.getMessage().contains(exp)) { - DebugLog.printRTAriDebug(fn, "No files found -- Continue"); + if (ex.getMessage() != null && ex.getMessage().contains(exp)) { + log.warn("No files found, continue"); } else { - DebugLog.printRTAriDebug(fn, "Exception while sftp.rm " + sft.getMessage()); - sft.printStackTrace(); - throw sft; + log.error("SftpException while invoking rm command over sftp", ex); + throw ex; } } + log.debug("Sending stringOfData to destination {0}", fullPathDest); sftp.put(is, fullPathDest, ChannelSftp.OVERWRITE); - DebugLog.printRTAriDebug(fn, "Sent successfully"); - } catch (Exception e) { - DebugLog.printRTAriDebug(fn, "Caught an Exception, e=" + e); - throw new IOException(e.toString()); + } catch (JSchException ex) { + log.error("JSchException occurred while handling sftp session", ex); + throw new IOException(ex.getMessage()); + } catch (SftpException ex) { + log.error("SftpException occurred during file transfer", ex); + throw new IOException(ex.getMessage()); } finally { if (sftpSession != null) { sftpSession.disconnect(); @@ -1029,10 +859,10 @@ public class SshJcraftWrapper { public String get(String fullFilePathName, String hostName, String userName, String passWord) throws IOException { - String fn = "SshJcraftWrapper.get"; Session sftpSession = null; try { - DebugLog.printRTAriDebug(fn, "userName=" + userName + " hostName=" + hostName + " passWord=" + passWord); + log.debug("Sftp get invoked, connection details: username={1} hostname={2}", + userName, hostName); jsch = new JSch(); sftpSession = jsch.getSession(userName, hostName, 22); java.util.Properties config = new java.util.Properties(); @@ -1042,17 +872,16 @@ public class SshJcraftWrapper { sftpSession.setUserInfo(ui); sftpSession.setConfig(config); sftpSession.connect(30 * 1000); - DebugLog.printRTAriDebug(fn, "Opening up an sftp channel...."); ChannelSftp sftp = (ChannelSftp) sftpSession.openChannel("sftp"); - DebugLog.printRTAriDebug(fn, "Connecting...."); sftp.connect(); InputStream in = sftp.get(fullFilePathName); - String sftpFileString = readInputStreamAsString(in); - DebugLog.printRTAriDebug(fn, "Retreived successfully"); - return sftpFileString; - } catch (Exception e) { - DebugLog.printRTAriDebug(fn, "Caught an Exception, e=" + e); - throw new IOException(e.toString()); + return readInputStreamAsString(in); + } catch (JSchException ex) { + log.error("JSchException occurred while handling sftp session", ex); + throw new IOException(ex.getMessage()); + } catch (SftpException ex) { + log.error("SftpException occurred during file transfer", ex); + throw new IOException(ex.getMessage()); } finally { if (sftpSession != null) { sftpSession.disconnect(); @@ -1061,58 +890,47 @@ public class SshJcraftWrapper { } public String send(String cmd, String delimiter) throws IOException { - String fn = "SshJcraftWrapper.send"; - try (OutputStream os = channel.getOutputStream(); DataOutputStream dos = new DataOutputStream(os)) { sendSshCommand(cmd, dos); - String response = receiveUntil(delimiter, 300000, cmd); - DebugLog.printRTAriDebug(fn, "Leaving method"); - return response; - } catch (IOException e) { - DebugLog.printRTAriDebug(fn, "Caught an IOException. e=" + e); - dbLog.outputStackTrace(e); - throw new IOException(e.toString()); + return receiveUntil(delimiter, 300000, cmd); + } catch (IOException ex) { + log.error("IOException occurred", ex); + throw new IOException(ex.getMessage()); } } private void sendSshCommand(@Nonnull String originalCommand, @Nonnull DataOutputStream channelOutputStream) throws IOException { - String fn = "SshJcraftWrapper.sendSshCommand"; String command = enhanceCommandWithEOL(originalCommand); - int length = command.length(); + int length = command.length(); // 2,937,706 int charsChunkSize = 300000; int charsTotalSent = 0; - appendToFile(debugLogFileName, fn + ": Sending: '" + command); - DebugLog.printRTAriDebug(fn, "Length of command is:" + length); // 2,937,706 + log.debug("Sending ssh command: length={0}, payload: {1}", length, command); if (isCmdLengthEnoughToSendInChunks(length, charsChunkSize)) { int timeout = 9000; for (int i = 0; i < length; i += charsChunkSize) { String commandChunk = command.substring(i, Math.min(length, i + charsChunkSize)); int numCharsSentInChunk = commandChunk.length(); charsTotalSent = charsTotalSent + commandChunk.length(); - DebugLog.printRTAriDebug(fn, "i=" + i + " Sending command: ncharsSent=" + numCharsSentInChunk); + log.debug("Iteration nr:{0}, sending command chunk: {1}", i, numCharsSentInChunk); channelOutputStream.writeBytes(commandChunk); channelOutputStream.flush(); try { - DebugLog.printRTAriDebug(fn, ":::i=" + i + " length=" + length); if (numCharsSentInChunk < length) { receiveUntilBufferFlush(numCharsSentInChunk, timeout, "buffer flush i=" + i); } else { - DebugLog.printRTAriDebug(fn, "i=" + i + " No Waiting this time...."); + log.trace("i={0}, flush immediately", i); channelOutputStream.flush(); } - } catch (Exception e) { - DebugLog.printRTAriDebug(fn, "Caught an Exception: Nothing to flush out."); + } catch (IOException ex) { + log.warn("IOException occurred: nothing to flush out", ex); } } } else { - DebugLog.printRTAriDebug(fn, "Before executing the channelOutputStream.writeBytes"); channelOutputStream.writeBytes(command); } channelOutputStream.flush(); - DebugLog.printRTAriDebug(fn, "Leaving method"); - appendToFile(debugLogFileName, fn + ": Leaving method\n"); } private boolean isCmdLengthEnoughToSendInChunks(int length, int chunkSize) { diff --git a/appc-config/appc-config-adaptor/provider/src/test/java/org/onap/appc/ccadaptor/SshJcraftWrapperTest.java b/appc-config/appc-config-adaptor/provider/src/test/java/org/onap/appc/ccadaptor/SshJcraftWrapperTest.java index ef1bf7d7f..305017c56 100644 --- a/appc-config/appc-config-adaptor/provider/src/test/java/org/onap/appc/ccadaptor/SshJcraftWrapperTest.java +++ b/appc-config/appc-config-adaptor/provider/src/test/java/org/onap/appc/ccadaptor/SshJcraftWrapperTest.java @@ -91,9 +91,9 @@ public class SshJcraftWrapperTest { public void testSetRouterCommandType2() throws IOException{ SshJcraftWrapper wrapper = new SshJcraftWrapper(); wrapper.appendToRouterFile("test", 2); - StringBuffer buffer = new StringBuffer(); - buffer.append("test"); - wrapper.appendToRouterFile("Test.txt", buffer); + StringBuilder sb = new StringBuilder(); + sb.append("test"); + wrapper.appendToRouterFile("Test.txt", sb); wrapper.receiveUntilBufferFlush(3, 4, "test"); } |