@Override protected void launch(EC2Computer computer, TaskListener listener, Instance inst) throws AmazonClientException, IOException, InterruptedException { int processedTime = 0; JIException exception = null; // TODO 自動生成されたメソッド・スタブ this.host = getHostName(computer); while (TIMEOUT > processedTime) { try { wmiLaunch(computer, listener); return; } catch (JIException e) { listener.getLogger().println("Waiting for DCOM to come up. Sleeping " + WAIT); Thread.sleep(WAIT * 1000); processedTime += WAIT * 1000; exception = e; } } // if not return, then print error. if (exception.getErrorCode() == 5) { // access denied error exception.printStackTrace( listener.error(Messages.ManagedWindowsServiceLauncher_AccessDenied())); } else { exception.printStackTrace(listener.error(exception.getMessage())); } }
public void connect() throws IllegalArgumentException, UnknownHostException, AlreadyConnectedException { try { // connect to server server.connect(); } catch (final JIException e) { System.out.println( String.format("%08X: %s", e.getErrorCode(), server.getErrorMessage(e.getErrorCode()))); } }
@Override public void afterDisconnect(SlaveComputer computer, TaskListener listener) { try { JIDefaultAuthInfoImpl auth = createAuth(); JISession session = JISession.createSession(auth); session.setGlobalSocketTimeout(60000); SWbemServices services = WMI.connect(session, computer.getName()); Win32Service slaveService = services.getService("jenkinsslave"); if (slaveService != null) { listener.getLogger().println(Messages.ManagedWindowsServiceLauncher_StoppingService()); slaveService.StopService(); } // destroy session to free the socket JISession.destroySession(session); } catch (UnknownHostException e) { e.printStackTrace(listener.error(e.getMessage())); } catch (JIException e) { e.printStackTrace(listener.error(e.getMessage())); } }
/** * Gets an item of the set. * * @param itemName The name of the item to get. * @return The item with the specified name. * @throws Exception When an error occurs. */ public T getItem(final String itemName) throws Exception { try { // Invoke the Item method. Object[] inParams = new Object[] {new JIString(itemName), new Integer(0)}; final JIVariant[] results = super.objectDispatcher.callMethodA("Item", inParams); final IJIComObject prop = results[0].getObjectAsComObject(); final IJIDispatch dispatch = (IJIDispatch) JIObjectFactory.narrowObject(prop); // Create a new SWbemSetItem from the result. final Constructor<T> ctor = this.clazz.getConstructor(IJIDispatch.class, SWbemServices.class); final T item = ctor.newInstance(dispatch, this.service); // Return the SWbemSetItem. return item; } catch (JIException e) { if (e.getErrorCode() == 0x80020009) { return null; } else { throw e; } } }
public static void main(String[] args) { // default values String host = ""; String domain = ""; String user = ""; String passwd = ""; int timeout = 5000; int n_measures = 1; int delay = 1000; boolean cpu = false; int cpu_warning = 85; int cpu_critical = 95; boolean memory = false; int mem_warning = 85; int mem_critical = 95; boolean disk = false; int disk_warning = 85; int disk_critical = 95; boolean service = false; String exclude = ""; int serv_critical = 1; int verbose = 1; Level logging = Level.OFF; // create a new parser and add all possible options CmdLineParser parser = new CmdLineParser(); Option host_op = parser.addStringOption('t', "targethost"); Option domain_op = parser.addStringOption('d', "domain"); Option user_op = parser.addStringOption('u', "user"); Option passwd_op = parser.addStringOption('p', "password"); Option timeout_op = parser.addIntegerOption("timeout"); Option n_measures_op = parser.addIntegerOption('n', "number_of_measures"); Option delay_op = parser.addIntegerOption("delay"); Option cpu_op = parser.addBooleanOption("cpu"); Option cpu_warning_op = parser.addIntegerOption("cpu_warning"); Option cpu_critical_op = parser.addIntegerOption("cpu_critical"); Option memory_op = parser.addBooleanOption("memory"); Option mem_warning_op = parser.addIntegerOption("mem_warning"); Option mem_critical_op = parser.addIntegerOption("mem_critical"); Option disk_op = parser.addBooleanOption("disk"); Option disk_warning_op = parser.addIntegerOption("disk_warning"); Option disk_critical_op = parser.addIntegerOption("disk_critical"); Option service_op = parser.addBooleanOption("services"); Option exclude_op = parser.addStringOption('x', "exclude"); Option help_op = parser.addBooleanOption('h', "help"); Option verbose_op = parser.addBooleanOption('v', "verbose"); Option version_op = parser.addBooleanOption('V', "version"); try { // parse the arguments parser.parse(args); } catch (Exception e) { fail(e.getMessage()); } // -h or --help option was given just print helpmessage and exit if ((Boolean) parser.getOptionValue(help_op, false)) { System.out.println(helpmessage); System.exit(0); } // -V or --version option was given just print version information and exit if ((Boolean) parser.getOptionValue(version_op, false)) { System.out.println(version); System.exit(0); } // check if a settingsfile was given and check if it exists if (args.length == 0) fail("Please provide a settingsfile"); String settingsFile = args[0]; if (!new File(settingsFile).exists()) fail("Settingsfile '" + settingsFile + "' not found"); if (parser.getRemainingArgs().length != 1) fail("Syntax error"); // Properties properties = new Properties(); try { properties.load(new FileInputStream(settingsFile)); } catch (IOException e) { fail(e.getMessage()); } try { // get all values host = (String) getValue(parser, properties, host_op, host); domain = (String) getValue(parser, properties, domain_op, domain); user = (String) getValue(parser, properties, user_op, user); passwd = (String) getValue(parser, properties, passwd_op, passwd); timeout = (Integer) getValue(parser, properties, timeout_op, timeout); n_measures = (Integer) getValue(parser, properties, n_measures_op, n_measures); delay = (Integer) getValue(parser, properties, delay_op, delay); cpu = (Boolean) getValue(parser, properties, cpu_op, cpu); cpu_warning = getPercentage((Integer) getValue(parser, properties, cpu_warning_op, cpu_warning)); cpu_critical = getPercentage((Integer) getValue(parser, properties, cpu_critical_op, cpu_critical)); memory = (Boolean) getValue(parser, properties, memory_op, memory); mem_warning = getPercentage((Integer) getValue(parser, properties, mem_warning_op, mem_warning)); mem_critical = getPercentage((Integer) getValue(parser, properties, mem_critical_op, mem_critical)); disk = (Boolean) getValue(parser, properties, disk_op, disk); disk_warning = getPercentage((Integer) getValue(parser, properties, disk_warning_op, disk_warning)); disk_critical = getPercentage((Integer) getValue(parser, properties, disk_critical_op, disk_critical)); service = (Boolean) getValue(parser, properties, service_op, service); exclude = (String) getValue(parser, properties, exclude_op, service); verbose += parser.getOptionValues(verbose_op).size(); } catch (NumberFormatException e) { fail(e.getMessage()); } catch (IllegalOptionValueException e) { fail(e.getMessage()); } catch (IllegalArgumentException e) { fail(e.getMessage()); } // check if all necessary values were given if (host.isEmpty() || domain.isEmpty() || user.isEmpty() || passwd.isEmpty()) { String message = "Following values are missing: "; if (host.isEmpty()) message += "targethost, "; if (domain.isEmpty()) message += "domain, "; if (user.isEmpty()) message += "user, "; if (passwd.isEmpty()) message += "password, "; message = message.substring(0, message.length() - 2); fail(message); } // if the password is a asterisk ask the user for the password if (passwd.equals("*")) { Console cons = System.console(); if (cons == null) fail("must use a console"); System.out.print("Password: "******"getting password failed"); passwd = ""; for (char z : password) passwd += z; java.util.Arrays.fill(password, ' '); } // all warnings and criticals are added to this lists LinkedList<String> warnings = new LinkedList<String>(); LinkedList<String> criticals = new LinkedList<String>(); try { try { // disable console logging JISystem.setInBuiltLogHandler(false); Handler inbuildloghandler = JISystem.getLogger().getHandlers()[0]; JISystem.getLogger().removeHandler(inbuildloghandler); inbuildloghandler.close(); } catch (IOException e) { } catch (SecurityException e) { } JISystem.getLogger().setLevel(logging); if (logging != Level.OFF) { // enable file logging Random r = new Random(); // create a random string with a length of 12 - 13 characters String token = Long.toString(Math.abs(r.nextLong()), 36); try { String tmpdir = System.getProperty("java.io.tmpdir"); // on windows java.io.tmpdir ends with a slash on unix not if (!tmpdir.endsWith(File.separator)) tmpdir = tmpdir + File.separator; FileHandler logFile = new FileHandler(tmpdir + "j-Interop-" + token + ".log"); logFile.setFormatter(new SimpleFormatter()); JISystem.getLogger().addHandler(logFile); } catch (FileNotFoundException e) { System.out.println("ERROR: Failed to open log file: " + e.getMessage()); } catch (SecurityException e) { fail(e, verbose); } catch (IOException e) { fail(e, verbose); } } JISystem.setAutoRegisteration(true); WindowsHealth monitor = new WindowsHealth(host, domain, user, passwd, timeout, verbose > 2); boolean print; if (cpu) monitor.getCPUUsage(); // first measure gives no result for (int i = 0; i < n_measures; i++) { try { Thread.sleep(delay); } catch (InterruptedException e) { break; } if (verbose > 0 && i != 0) { System.out.println(); } if (verbose > 1 && n_measures > 1) System.out.println(" - Measure " + (i + 1) + " -"); // cpu load measure if (cpu) { print = false; int percent_cpu = monitor.getCPUUsage(); if (percent_cpu >= cpu_critical) { criticals.add("CPU (" + percent_cpu + "%)"); print = true; if (verbose > 0) System.out.print("CRITICAL: "); } else if (percent_cpu >= cpu_warning) { warnings.add("CPU (" + percent_cpu + "%)"); print = true; if (verbose > 0) System.out.print("WARNING: "); } if ((print && verbose > 0) || verbose > 1) System.out.println("CPU usage: " + percent_cpu + " %"); } // memory space measure if (memory) { print = false; long mem_size = monitor.getTotalMemorySize(); long mem_free = monitor.getFreeMemorySpace(); long mem_used = mem_size - mem_free; double percent_mem = (double) mem_used / (double) mem_size * 100; if (percent_mem >= mem_critical) { criticals.add("Memory (" + round(percent_mem, 1) + "%)"); print = true; if (verbose > 0) System.out.print("CRITICAL: "); } else if (percent_mem >= mem_warning) { warnings.add("Memory (" + round(percent_mem, 1) + "%)"); print = true; if (verbose > 0) System.out.print("WARNING: "); } if ((print && verbose > 0) || verbose > 1) System.out.println( "Memory: " + round(percent_mem, 2) + " % used (" + mem_used + " KB)"); } // disk space measure if (disk) { LinkedList<IJIDispatch> drives = monitor.getDiskDrives(); for (IJIDispatch drive : drives) { print = false; String name = drive.get("Name").getObjectAsString2(); double disk_free = Long.parseLong(drive.get("FreeSpace").getObjectAsString().getString()); double disk_size = Long.parseLong(drive.get("Size").getObjectAsString().getString()); double disk_used = disk_size - disk_free; double percent_disk = 0; if (disk_size != 0) percent_disk = disk_used / disk_size * 100; else { if (verbose > 1) System.out.println(name); continue; } if (percent_disk >= disk_critical) { criticals.add(name + " (" + round(percent_disk, 1) + "%)"); print = true; if (verbose > 0) System.out.print("CRITICAL: "); } else if (percent_disk >= disk_warning) { warnings.add(name + " (" + round(percent_disk, 1) + "%)"); print = true; if (verbose > 0) System.out.print("WARNING: "); } if ((print && verbose > 0) || verbose > 1) System.out.println( name + " " + round(percent_disk, 3) + " % used (" + getSizeRepresentation(disk_used, 3) + ")"); } } // find services if (service) { LinkedList<IJIDispatch> services = monitor.getServices(); LinkedList<IJIDispatch> services_final = new LinkedList<IJIDispatch>(); Scanner scanner = new Scanner(exclude); scanner.useDelimiter("\\s*,\\s*"); LinkedList<String> exclusions = new LinkedList<String>(); while (scanner.hasNext()) exclusions.add(scanner.next()); for (IJIDispatch service_dispatch : services) { String name = service_dispatch.get("DisplayName").getObjectAsString2(); if (!exclusions.contains(name)) services_final.add(service_dispatch); } int size = services_final.size(); String name; String serv = "services ("; for (IJIDispatch service_dispatch : services_final) { name = service_dispatch.get("DisplayName").getObjectAsString2(); serv += name + ";"; } serv += ")"; if (size >= serv_critical) { criticals.add(serv); } else if (verbose == 1) continue; if (verbose >= 1) { if (size >= serv_critical) System.out.print("CRITICAL: "); if (verbose == 1) { System.out.print(size + " service(s) ("); for (IJIDispatch service_dispatch : services_final) { name = service_dispatch.get("DisplayName").getObjectAsString2(); System.out.print(name + ";"); } System.out.println(") are/is not running"); } else { System.out.print(size + " problem(s) with services"); if (services_final.size() == 0) System.out.println("."); else System.out.println(":"); for (IJIDispatch service_dispatch : services_final) { name = service_dispatch.get("DisplayName").getObjectAsString2(); System.out.println(" service '" + name + "' is not running"); } } } } } // output a summary if (verbose < 1) { if (warnings.size() > 0) { System.out.print("WARNINGS:"); for (String w : warnings) { System.out.print(" " + w + ";"); } } if (criticals.size() > 0) { System.out.print(" CRITICALS:"); for (String c : criticals) { System.out.print(" " + c + ";"); } } if (warnings.size() == 0 && criticals.size() == 0) System.out.print("ALL OK"); System.out.println(); } else { if (warnings.size() == 0 && criticals.size() == 0) System.out.println("ALL OK"); else { System.out.println(); System.out.print("" + warnings.size() + " warnings and "); System.out.println("" + criticals.size() + " criticals."); } } } catch (UnknownHostException e) { fail("Unknown host: " + host, e, verbose); } catch (JIAutomationException e) { JIExcepInfo f = e.getExcepInfo(); fail(f.getExcepDesc() + "0x" + Integer.toHexString(f.getErrorCode()) + " ]", e, verbose); } catch (JIException e) { if (e.getCause().getClass().equals(SocketTimeoutException.class)) fail("Timeout error", e, verbose); else fail(e, verbose); } // if there are one or more criticals exit with exit status 2 if (criticals.size() != 0) System.exit(2); // if there are one or more warnings exit with exit status 1 if (warnings.size() != 0) System.exit(1); // otherwise exit with exit status 0 System.exit(0); }
private void readPacket(NetworkDataRepresentation ndr, boolean fromCallback) { if (session == null) { throw new IllegalStateException( "Programming Error ! Session not attached with this call ! ... Please rectify ! "); } int index = 0; outparams = outParams.toArray(); if (JISystem.getLogger().isLoggable(Level.FINEST)) { String str = ""; for (int i = 0; i < outparams.length; i++) { str = str + "Out Param:[" + i + "]" + outparams[i] + "\n"; } JISystem.getLogger().finest(str); } ArrayList comObjects = new ArrayList(); Map additionalData = new HashMap(); additionalData.put(CURRENTSESSION, session); additionalData.put(COMOBJECTS, comObjects); ArrayList results = new ArrayList(); // user has nothing to return. if (outparams != null && outparams.length > 0) { while (index < outparams.length) { List listOfDefferedPointers = new ArrayList(); results.add( JIMarshalUnMarshalHelper.deSerialize( ndr, outparams[index], listOfDefferedPointers, ((Integer) outparamFlags.get(index)).intValue(), additionalData)); int x = 0; while (x < listOfDefferedPointers.size()) { ArrayList newList = new ArrayList(); JIPointer replacement = (JIPointer) JIMarshalUnMarshalHelper.deSerialize( ndr, (JIPointer) listOfDefferedPointers.get(x), newList, ((Integer) outparamFlags.get(index)).intValue(), additionalData); ((JIPointer) listOfDefferedPointers.get(x)) .replaceSelfWithNewPointer( replacement); // this should replace the value in the original place. x++; listOfDefferedPointers.addAll(x, newList); } index++; } // now create the right COM Objects, it is required here only and no place else. for (int i = 0; i < comObjects.size(); i++) { JIComObjectImpl comObjectImpl = (JIComObjectImpl) comObjects.get(i); try { IJIComObject comObject = null; if (fromCallback) { // this is a new IP , so make a new JIComServer for this. JISession newsession = JISession.createSession(session); newsession.setGlobalSocketTimeout(session.getGlobalSocketTimeout()); newsession.useSessionSecurity(session.isSessionSecurityEnabled()); newsession.useNTLMv2(session.isNTLMv2Enabled()); JIComServer comServer = new JIComServer(newsession, comObjectImpl.internal_getInterfacePointer(), null); comObject = comServer.getInstance(); JIFrameworkHelper.link2Sessions(session, newsession); } else { if (comObjectImpl.internal_getInterfacePointer().isCustomObjRef()) { continue; } comObject = JIFrameworkHelper.instantiateComObject2( session, comObjectImpl.internal_getInterfacePointer()); } comObjectImpl.replaceMembers(comObject); JIFrameworkHelper.addComObjectToSession( comObjectImpl.getAssociatedSession(), comObjectImpl); // Why did I put this here. We should do an addRef regardless of whether we give a pointer // to COM or it gives us one. // if (!fromCallback) { comObjectImpl.addRef(); } } catch (JIException e) { JISystem.getLogger().throwing("JICallBuilder", "readPacket", e); throw new JIRuntimeException(e.getErrorCode()); } // replace the members of the original com objects by the completed ones. } comObjects.clear(); } outparams = results.toArray(); executed = true; }