Package org.jrobin.cmd

Source Code of org.jrobin.cmd.RrdCommander

/*******************************************************************************
* Copyright (c) 2001-2005 Sasa Markovic and Ciaran Treanor.
* Copyright (c) 2011 The OpenNMS Group, Inc.
*
* 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.jrobin.cmd;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

import org.jrobin.core.RrdException;

/**
* Class to be used to execute various RRDTool commands (original syntax of RRDTool 1.0.x must be used).
* Currently supported commands are CREATE, UPDATE, LAST, FETCH, DUMP, RESTORE, XPORT, GRAPH, TUNE, INFO
*/
public class RrdCommander {
  private static final RrdToolCmd[] rrdCommands = {
      new RrdCreateCmd(),
      new RrdUpdateCmd(),
      new RrdLastCmd(),
      new RrdFetchCmd(),
      new RrdDumpCmd(),
      new RrdRestoreCmd(),
      new RrdXportCmd(),
      new RrdGraphCmd(),
      new RrdTuneCmd(),
      new RrdInfoCmd()
  };

  /**
   * Checks if the output from any RRDTool command will be visible on the standard output device
   * (console). Default setting is <code>true</code>.
   *
   * @return true, if the output will be visible on the standard output device; false, otherwise.
   */
  public static synchronized boolean isStandardOutUsed() {
    return RrdToolCmd.isStandardOutUsed();
  }

  /**
   * Method used to control access to stdout (System.out, console) for all RRDTool commands. By default,
   * all RRDTool commands are allowed to print results to stdout, in a form used by RRDTool.
   *
   * @param standardOutUsed <code>true</code> if the output should be visible on the
   *                        standard output device, <code>false</code> otherwise.
   */
  public static synchronized void setStandardOutUsed(boolean standardOutUsed) {
    RrdToolCmd.setStandardOutUsed(standardOutUsed);
  }

  /**
   * Checks if the class uses {@link org.jrobin.core.RrdDbPool} internally while executing
   * RRDTool commands.
   *
   * @return true if the pool is used, false otherwise
   */
  public static synchronized boolean isRrdDbPoolUsed() {
    return RrdToolCmd.isRrdDbPoolUsed();
  }

  /**
   * Forces or prohibits {@link org.jrobin.core.RrdDbPool} usage internally while executing
   * RRDTool commands
   *
   * @param rrdDbPoolUsed true, to force pool usage, false otherwise.
   */
  public static synchronized void setRrdDbPoolUsed(boolean rrdDbPoolUsed) {
    RrdToolCmd.setRrdDbPoolUsed(rrdDbPoolUsed);
  }

  /**
   * Executes single RRDTool command. The command string should start with some
   * well known RRDTool command word (create, update, fetch, graph...)<p>
   *
   * @param command RRDTool command like: <p>
   *                <pre>
   *                create test.rrd --start "noon yesterday" --step 300 DS:x:GAUGE:600:U:U RRA:AVERAGE:0.5:5:1000
   *                update test.rrd N:1000
   *                last test.rrd
   *                ...
   *                </pre>
   * @return Result of specific RRDTool command. It is guaranteed that the result of any
   *         successfully executed command will be always different from null.
   *         Unsuccessfully executed commands will always throw
   *         an exception, so you need not check for null results.<p>
   *         Exact type of the result depends from the
   *         type of executed RRDTool command:<p>
   *         <ul>
   *         <li><b>create</b>: returns java.lang.String containing path to the newly created RRD file.
   *         <li><b>last</b>: returns java.lang.Long representing timestamp of the last update.
   *         <li><b>update</b>: returns java.lang.Long representing timestamp of the last update.
   *         <li><b>dump</b>: returns (very long) java.lang.String representing the content of a RRD file
   *         in XML format.
   *         <li><b>fetch</b>: returns {@link org.jrobin.core.FetchData} object representing fetched data.
   *         <li><b>restore</b>: returns path to the restored RRD file.
   *         <li><b>xport</b>: returns java.lang.String containing exported data
   *         <li><b>graph</b>: returns {@link org.jrobin.graph.RrdGraphInfo} object containing graph info
   *         <li><b>tune</b>: returns path to the tuned RRD file
   *         </ul>
   * @throws IOException  thrown in case of I/O error
   * @throws RrdException thrown for all other errors (parsing errors,
   *                      unknown RRDTool syntax/command/option, internal RRD errors...)
   */
  public static synchronized Object execute(String command) throws IOException, RrdException,RrdException {
    String cmd = command.trim(), rrdtool = "rrdtool ";
    if (cmd.startsWith(rrdtool)) {
      cmd = cmd.substring(rrdtool.length());
    }
    for (RrdToolCmd rrdCommand : rrdCommands) {
      if (cmd.startsWith(rrdCommand.getCmdType() + " ")) {
        return rrdCommand.executeCommand(cmd);
      }
    }
    throw new RrdException("Unknown RRDTool command: " + command);
  }

  /**
   * A small demo which allows you to pass arbitrary RRDTool commands to JRobin
   *
   * @param args Not used
   * @throws IOException
   */
  public static void main(String[] args) throws IOException {
    System.out.println("== JRobin's RRDTool commander ==");
    System.out.println("Type a RRDTool command after the dollar sign and press Enter.");
    System.out.println("Start your RRDTool command with 'create', 'update', 'fetch' etc.");
    System.out.println("Start line with 'create', 'update', 'fetch' etc.");
    System.out.println("Enter dot ('.') to bail out");
    System.out.println("Current directory is: " + new File(".").getCanonicalPath());
    System.out.println("================================");
    RrdToolCmd.setRrdDbPoolUsed(false);
    BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
    while (true) {
      try {
        System.out.print("$ ");
        final String line = r.readLine();
        if (line == null) break;
        final String s = line.trim();
        if (s.length() > 0) {
          if (!s.startsWith(".")) {
            execute(s);
          }
          else {
            break;
          }
        }
      }
      catch (Exception e) {
        e.printStackTrace(System.err);
      }
    }
  }
}
TOP

Related Classes of org.jrobin.cmd.RrdCommander

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.