|
@@ -1,243 +0,0 @@
|
|
|
-/*
|
|
|
|
|
- * Copyright (c) 2006-2008 Hyperic, Inc.
|
|
|
|
|
- * Copyright (c) 2010 VMware, Inc.
|
|
|
|
|
- *
|
|
|
|
|
- * Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
|
- * you may not use this file except in compliance with the License.
|
|
|
|
|
- * You may obtain a copy of the License at
|
|
|
|
|
- *
|
|
|
|
|
- * http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
- *
|
|
|
|
|
- * Unless required by applicable law or agreed to in writing, software
|
|
|
|
|
- * distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
|
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
|
- * See the License for the specific language governing permissions and
|
|
|
|
|
- * limitations under the License.
|
|
|
|
|
- */
|
|
|
|
|
-
|
|
|
|
|
-package com.x.program.center.test.examples;
|
|
|
|
|
-
|
|
|
|
|
-import java.io.File;
|
|
|
|
|
-import java.io.IOException;
|
|
|
|
|
-import java.lang.reflect.Constructor;
|
|
|
|
|
-
|
|
|
|
|
-import org.hyperic.sigar.Sigar;
|
|
|
|
|
-import org.hyperic.sigar.SigarException;
|
|
|
|
|
-import org.hyperic.sigar.SigarLoader;
|
|
|
|
|
-import org.hyperic.sigar.SigarPermissionDeniedException;
|
|
|
|
|
-import org.hyperic.sigar.SigarProxy;
|
|
|
|
|
-import org.hyperic.sigar.SigarProxyCache;
|
|
|
|
|
-import org.hyperic.sigar.ptql.ProcessFinder;
|
|
|
|
|
-import org.hyperic.sigar.shell.ShellBase;
|
|
|
|
|
-import org.hyperic.sigar.shell.ShellCommandExecException;
|
|
|
|
|
-import org.hyperic.sigar.shell.ShellCommandHandler;
|
|
|
|
|
-import org.hyperic.sigar.shell.ShellCommandInitException;
|
|
|
|
|
-import org.hyperic.sigar.shell.ShellCommandUsageException;
|
|
|
|
|
-import org.hyperic.sigar.util.Getline;
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * The Sigar Shell provides a command shell for running the example
|
|
|
|
|
- * commands and Sigar tests.
|
|
|
|
|
- */
|
|
|
|
|
-public class Shell extends ShellBase {
|
|
|
|
|
-
|
|
|
|
|
- public static final String RCFILE_NAME = ".sigar_shellrc";
|
|
|
|
|
- private static final String CLEAR_SCREEN = "\033[2J";
|
|
|
|
|
-
|
|
|
|
|
- private Sigar sigar = new Sigar();
|
|
|
|
|
- private SigarProxy proxy = SigarProxyCache.newInstance(this.sigar);
|
|
|
|
|
- private long[] foundPids = new long[0];
|
|
|
|
|
- private boolean isInteractive = false;
|
|
|
|
|
-
|
|
|
|
|
- public Shell() {
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public static void clearScreen() {
|
|
|
|
|
- System.out.print(CLEAR_SCREEN);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public SigarProxy getSigarProxy() {
|
|
|
|
|
- return this.proxy;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public Sigar getSigar() {
|
|
|
|
|
- return this.sigar;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public boolean isInteractive() {
|
|
|
|
|
- return this.isInteractive;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void setInteractive(boolean value) {
|
|
|
|
|
- this.isInteractive = value;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void registerCommands() throws ShellCommandInitException {
|
|
|
|
|
- registerCommandHandler("df", new Df(this));
|
|
|
|
|
- registerCommandHandler("du", new Du(this));
|
|
|
|
|
- registerCommandHandler("ls", new Ls(this));
|
|
|
|
|
- registerCommandHandler("iostat", new Iostat(this));
|
|
|
|
|
- registerCommandHandler("free", new Free(this));
|
|
|
|
|
- registerCommandHandler("pargs", new ShowArgs(this));
|
|
|
|
|
- registerCommandHandler("penv", new ShowEnv(this));
|
|
|
|
|
- registerCommandHandler("pfile", new ProcFileInfo(this));
|
|
|
|
|
- registerCommandHandler("pmodules", new ProcModuleInfo(this));
|
|
|
|
|
- registerCommandHandler("pinfo", new ProcInfo(this));
|
|
|
|
|
- registerCommandHandler("cpuinfo", new CpuInfo(this));
|
|
|
|
|
- registerCommandHandler("ifconfig", new Ifconfig(this));
|
|
|
|
|
- registerCommandHandler("uptime", new Uptime(this));
|
|
|
|
|
- registerCommandHandler("ps", new Ps(this));
|
|
|
|
|
- registerCommandHandler("pidof", new Pidof(this));
|
|
|
|
|
- registerCommandHandler("kill", new Kill(this));
|
|
|
|
|
- registerCommandHandler("netstat", new Netstat(this));
|
|
|
|
|
- registerCommandHandler("netinfo", new NetInfo(this));
|
|
|
|
|
- registerCommandHandler("nfsstat", new Nfsstat(this));
|
|
|
|
|
- registerCommandHandler("route", new Route(this));
|
|
|
|
|
- registerCommandHandler("version", new Version(this));
|
|
|
|
|
- registerCommandHandler("mps", new MultiPs(this));
|
|
|
|
|
- registerCommandHandler("sysinfo", new SysInfo(this));
|
|
|
|
|
- registerCommandHandler("time", new Time(this));
|
|
|
|
|
- registerCommandHandler("ulimit", new Ulimit(this));
|
|
|
|
|
- registerCommandHandler("who", new Who(this));
|
|
|
|
|
- if (SigarLoader.IS_WIN32) {
|
|
|
|
|
- registerCommandHandler("service", new Win32Service(this));
|
|
|
|
|
- registerCommandHandler("fversion", new FileVersionInfo(this));
|
|
|
|
|
- }
|
|
|
|
|
- try {
|
|
|
|
|
- //requires junit.jar
|
|
|
|
|
- registerCommandHandler("test", "org.hyperic.sigar.test.SigarTestRunner");
|
|
|
|
|
- } catch (NoClassDefFoundError e) { }
|
|
|
|
|
- catch (Exception e) { }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- private void registerCommandHandler(String name, String className) throws Exception {
|
|
|
|
|
- Class cls = Class.forName(className);
|
|
|
|
|
- Constructor con = cls.getConstructor(new Class[] { this.getClass() });
|
|
|
|
|
- registerCommandHandler(name, (ShellCommandHandler)con.newInstance(new Object[] { this }));
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void processCommand(ShellCommandHandler handler, String args[])
|
|
|
|
|
- throws ShellCommandUsageException, ShellCommandExecException
|
|
|
|
|
- {
|
|
|
|
|
- try {
|
|
|
|
|
- super.processCommand(handler, args);
|
|
|
|
|
- if (handler instanceof SigarCommandBase) {
|
|
|
|
|
- ((SigarCommandBase)handler).flush();
|
|
|
|
|
- }
|
|
|
|
|
- } finally {
|
|
|
|
|
- SigarProxyCache.clear(this.proxy);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public static long[] getPids(SigarProxy sigar, String[] args)
|
|
|
|
|
- throws SigarException {
|
|
|
|
|
-
|
|
|
|
|
- long[] pids;
|
|
|
|
|
-
|
|
|
|
|
- switch (args.length) {
|
|
|
|
|
- case 0:
|
|
|
|
|
- pids = new long[] { sigar.getPid() };
|
|
|
|
|
- break;
|
|
|
|
|
- case 1:
|
|
|
|
|
- if (args[0].indexOf("=") > 0) {
|
|
|
|
|
- pids = ProcessFinder.find(sigar, args[0]);
|
|
|
|
|
- }
|
|
|
|
|
- else if (args[0].equals("$$")) {
|
|
|
|
|
- pids = new long[] { sigar.getPid() };
|
|
|
|
|
- }
|
|
|
|
|
- else {
|
|
|
|
|
- pids = new long[] {
|
|
|
|
|
- Long.parseLong(args[0])
|
|
|
|
|
- };
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- default:
|
|
|
|
|
- pids = new long[args.length];
|
|
|
|
|
- for (int i=0; i<args.length; i++) {
|
|
|
|
|
- pids[i] = Long.parseLong(args[i]);
|
|
|
|
|
- }
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return pids;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public long[] findPids(String[] args) throws SigarException {
|
|
|
|
|
-
|
|
|
|
|
- if ((args.length == 1) && args[0].equals("-")) {
|
|
|
|
|
- return this.foundPids;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- this.foundPids = getPids(this.proxy, args);
|
|
|
|
|
-
|
|
|
|
|
- return this.foundPids;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public long[] findPids(String query) throws SigarException {
|
|
|
|
|
- return findPids(new String[] { query });
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void readCommandFile(String dir) {
|
|
|
|
|
- try {
|
|
|
|
|
- File rc = new File(dir, RCFILE_NAME);
|
|
|
|
|
- readRCFile(rc, false);
|
|
|
|
|
- if (this.isInteractive && Getline.isTTY()) {
|
|
|
|
|
- this.out.println("Loaded rc file: " + rc);
|
|
|
|
|
- }
|
|
|
|
|
- } catch (IOException e) { }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public String getUserDeniedMessage(long pid) {
|
|
|
|
|
- return
|
|
|
|
|
- SigarPermissionDeniedException.getUserDeniedMessage(this.proxy,
|
|
|
|
|
- pid);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public void shutdown() {
|
|
|
|
|
- this.sigar.close();
|
|
|
|
|
- //cleanup for dmalloc
|
|
|
|
|
- //using reflection incase junit.jar is not present
|
|
|
|
|
- try {
|
|
|
|
|
- //SigarTestCase.closeSigar();
|
|
|
|
|
- Class.forName("org.hyperic.sigar.test.SigarTestCase").
|
|
|
|
|
- getMethod("closeSigar", new Class[0]).invoke(null, new Object[0]);
|
|
|
|
|
- } catch (ClassNotFoundException e) {
|
|
|
|
|
- //SigarTestCase.java not compiled w/o junit.jar
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- e.printStackTrace();
|
|
|
|
|
- } catch (NoClassDefFoundError e) {
|
|
|
|
|
- //avoiding possible Class Not Found: junit/framework/TestCase
|
|
|
|
|
- }
|
|
|
|
|
- super.shutdown();
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- public static void main(String[] args) {
|
|
|
|
|
- Shell shell = new Shell();
|
|
|
|
|
-
|
|
|
|
|
- try {
|
|
|
|
|
- if (args.length == 0) {
|
|
|
|
|
- shell.isInteractive = true;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- shell.init("sigar", System.out, System.err);
|
|
|
|
|
- shell.registerCommands();
|
|
|
|
|
-
|
|
|
|
|
- shell.readCommandFile(System.getProperty("user.home"));
|
|
|
|
|
- shell.readCommandFile(".");
|
|
|
|
|
- shell.readCommandFile(SigarLoader.getLocation());
|
|
|
|
|
-
|
|
|
|
|
- if (shell.isInteractive) {
|
|
|
|
|
- shell.initHistory();
|
|
|
|
|
- Getline.setCompleter(shell);
|
|
|
|
|
- shell.run();
|
|
|
|
|
- }
|
|
|
|
|
- else {
|
|
|
|
|
- shell.handleCommand(null, args);
|
|
|
|
|
- }
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- System.err.println("Unexpected exception: " + e);
|
|
|
|
|
- } finally {
|
|
|
|
|
- shell.shutdown();
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|