public static void action() throws IOException, InterruptedException { // Connect to remote site String response = fetchTask(); System.out.println("JSON: " + response.trim()); JSONObject json = JSONObject.fromObject(response); int code = json.getInt("code"); String desc = json.getString("desc"); if (code != 0) { System.out.println("Code: " + code + " Desc: " + desc); } JSONObject task = json.getJSONObject("task"); String jar = task.getString("jar"); String cmd = task.getString("cmd"); // Create temporary directory File dir = createTempDirectory(); System.out.println("Temporary directory: " + dir.getAbsolutePath()); // Download current version System.out.println("Downloading: " + jar); String fileName = download(jar, dir); System.out.println("Unzipping: " + fileName); UnZip.unzip(dir.getAbsolutePath() + File.separator + fileName, dir.getAbsolutePath()); System.out.println("Executing: "); System.out.println(cmd); long startTime = System.currentTimeMillis(); Runtime rt = Runtime.getRuntime(); Process pr = rt.exec(cmd, null, dir); StreamWrapper errorStream = StreamWrapper.createStreamWrapper(pr.getErrorStream()); StreamWrapper inputStream = StreamWrapper.createStreamWrapper(pr.getInputStream()); int errorCode = pr.waitFor(); System.out.println(errorCode); System.out.println(errorStream); if (!ECHO) { System.out.println(inputStream); } long duration = System.currentTimeMillis() - startTime; task.put("duration", duration); String result = inputStream.toString() + errorStream.toString(); task.put("result", result); System.out.println("Sending results"); String status = sendResults(task); System.out.println(status.trim()); System.out.println("Cleaning up..."); deleteDirectory(dir); System.out.println("Done."); }
private static String fetchTask() throws IOException, InterruptedException { String[] paramsNames = {"os.name", "os.arch", "os.version", "java.vendor", "java.version"}; StringBuffer params = new StringBuffer(); int max = paramsNames.length; for (String p : paramsNames) { params.append(p.replace('.', '_')); params.append('='); params.append(URLEncoder.encode(System.getProperty(p), "utf-8")); if (--max > 0) params.append('&'); } String urlParameters = params.toString(); // System.out.println(urlParameters); String request = FETCH_REQUEST_URL + FETCH_REQUEST_URL_EXT; URL url = new URL(request); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setDoInput(true); connection.setInstanceFollowRedirects(false); connection.setRequestMethod("POST"); connection.setRequestProperty("charset", "utf-8"); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestProperty( "Content-Length", Integer.toString(urlParameters.getBytes().length)); connection.setUseCaches(false); connection.getOutputStream().write(urlParameters.getBytes()); connection.getOutputStream().close(); StreamWrapper requestStream = StreamWrapper.createStreamWrapper(connection.getInputStream(), false); requestStream.join(); String response = requestStream.toString(); return response; }
private static String sendResults(JSONObject task) throws IOException, InterruptedException { String body = "t=" + task.toString(); String request = RESULTS_REQUEST_URL; URL url = new URL(request); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setDoInput(true); connection.setInstanceFollowRedirects(false); connection.setRequestMethod("POST"); connection.setRequestProperty("charset", "utf-8"); connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.setRequestProperty("Content-Length", String.valueOf(body.getBytes().length)); connection.setUseCaches(false); connection.getOutputStream().write(body.getBytes()); connection.getOutputStream().close(); StreamWrapper requestStream = StreamWrapper.createStreamWrapper(connection.getInputStream(), false); requestStream.join(); String response = requestStream.toString(); return response; }