Package org.jnode.command.common

Source Code of org.jnode.command.common.TimeCommand

/*
* $Id$
*
* Copyright (C) 2003-2014 JNode.org
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; If not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jnode.command.common;

import java.io.PrintWriter;
import org.jnode.shell.AbstractCommand;
import org.jnode.shell.CommandShell;
import org.jnode.shell.ShellException;
import org.jnode.shell.ShellUtils;
import org.jnode.shell.syntax.AliasArgument;
import org.jnode.shell.syntax.Argument;
import org.jnode.shell.syntax.StringArgument;

/**
* Measures the execution time of a simple command.
* <p/>
*
* @author petriai@gmail.com
* @author chris boertien
*/
public class TimeCommand extends AbstractCommand {

    /* for i18n */
    private static final String help_alias = "command to be run";
    private static final String help_args  = "command parameters";
    private static final String help_super = "Measures execution time of commands";
    private static final String fmt_diff   = "time: %s%n";

    private final AliasArgument Alias;
    private final StringArgument Args;
   
    public TimeCommand() {
        super(help_super);
        Alias = new AliasArgument("alias", Argument.MANDATORY, help_alias);
        Args  = new StringArgument("args", Argument.MULTIPLE, help_args);
        registerArguments(Alias, Args);
    }

    public static void main(String[] args) throws Exception {
        new TimeCommand().execute(args);
    }

    public void execute() throws Exception {
        PrintWriter out = getOutput().getPrintWriter();

        StringBuilder sb = new StringBuilder(Alias.getValue());
        for (String arg : Args.getValues()) {
            sb.append(' ');
            sb.append(arg);
        }
       
        CommandShell shell = null;
        int ret = 1;
        try {
            shell = (CommandShell) ShellUtils.getShellManager().getCurrentShell();
            long start = System.currentTimeMillis();
            ret = shell.runCommand(sb.toString());
            long end = System.currentTimeMillis();
            out.format(fmt_diff, getRuntime((int) (end - start)));
        } catch (ShellException ex) {
            throw ex;
        } finally {
            exit(ret);
        }
    }
   
    public String getRuntime(int time) {
        int hours = time / (60 * 60 * 1000);
        int minutes = (time / (60 * 1000)) % 60;
        int seconds = (time / 1000) % 60;
        int millis  = time % 1000;
        if (hours > 0) {
            return String.format("%2d:%2d:%2d.%3ds", hours, minutes, seconds, millis);
        }
        if (minutes > 0) {
            return String.format("%2d:%2d.%3ds", minutes, seconds, millis);
        }
        if (seconds > 0) {
            return String.format("%2d.%3ds", seconds, millis);
        }
        return String.format("%3dms", millis);
    }
}
TOP

Related Classes of org.jnode.command.common.TimeCommand

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.