Exemplo n.º 1
0
  /**
   * Executes the commands and process the results to return the AIX OS memory pm data.
   *
   * @param params the performance metrices to be monitored by this task.
   * @param flags parameter and command flags.
   * @return returns the PMData instance.
   */
  private static PMData getAixPMData(String[] params, boolean[][] flags) {

    if (flags == null) {
      flags = isParamsExists(params);
    }

    boolean[] cmdflag = flags[0];
    boolean[] pflag = flags[1];

    long exectime = System.currentTimeMillis();

    // execute the opc_utl command
    String aixmemoryResult = null;
    if (cmdflag[TOP]) {
      try {
        aixmemoryResult = RunCommand.exec(AIX_AIXMEMORYCMD);
      } catch (Exception e) {
        IsmMonAgentUtil.debug(e.getMessage());
      }
    }

    // execute the swap command
    String swapResult = null;
    if (cmdflag[SWAP]) {
      try {
        swapResult = RunCommand.exec(AIX_SWAPCMD, 10000);
      } catch (Exception e) {
        IsmMonAgentUtil.debug(e.getMessage());
      }
    }

    // process the opc_utl command result
    Vector paramlist = new Vector();
    if (cmdflag[TOP] && (aixmemoryResult != null)) {
      /* output looks like:
      /users/donjiang/opc009/agent/bin>opc_utl -m
      RealMemory:     16384.0M
      FreeMemory:     523.4M
      */
      StringTokenizer rtokenizer = new StringTokenizer(aixmemoryResult, "\n");
      String line = null;
      long realmemory = 0;
      long freememory = 0;
      while (rtokenizer.hasMoreTokens()) {
        line = rtokenizer.nextToken().trim();
        if (line.startsWith("RealMemory")) {
          StringTokenizer ltokenizer = new StringTokenizer(line, " \t");
          ltokenizer.nextToken();
          realmemory = getMemorySize(ltokenizer.nextToken());
        }
        if (line.startsWith("FreeMemory")) {
          StringTokenizer ltokenizer = new StringTokenizer(line, " \t");
          ltokenizer.nextToken();
          freememory = getMemorySize(ltokenizer.nextToken());
        }
      }
      if (realmemory == 0 || freememory == 0) {
        IsmMonAgentUtil.debug(
            "Error: OsMemoryTask, invalid number of lines for opc_utl report." + aixmemoryResult,
            IsmMonAgentUtil.MAJOR);
      }

      if (pflag[REALMEMORY]) {
        paramlist.addElement(
            new PmMeasurement(REALMEMORYNAME, String.valueOf(realmemory), true, null));
      }
      if (pflag[FREEMEMORY]) {
        paramlist.addElement(
            new PmMeasurement(FREEMEMORYNAME, String.valueOf(freememory), true, null));
      }
    }

    // process the swap command
    if (cmdflag[SWAP] && (swapResult != null)) {

      if (pflag[SWAPUSED] || pflag[SWAPFREE]) {

        String swapused = "n/a";
        String swapfree = "n/a";
        long totalpagingspace = 0;
        long percentused = 0;

        StringTokenizer rtokenizer = new StringTokenizer(swapResult, "\n");
        String line = null;
        if (rtokenizer.countTokens() >= 2) {
          line = rtokenizer.nextToken();
          line = rtokenizer.nextToken();
          StringTokenizer ltokenizer = new StringTokenizer(line, " ");

          if (ltokenizer.countTokens() >= 2) {
            totalpagingspace = getMemorySize(ltokenizer.nextToken().trim());
            String temp = ltokenizer.nextToken().trim();
            temp = temp.substring(0, temp.length() - 1); // remove "%" sign
            percentused = (Long.valueOf(temp)).longValue();

            // Figure out swapused & swapfree
            swapused = String.valueOf((totalpagingspace * percentused) / 100);
            swapfree = String.valueOf(totalpagingspace - (Long.valueOf(swapused)).longValue());
          }
        }

        if (pflag[SWAPUSED]) {
          paramlist.addElement(new PmMeasurement(SWAPUSEDNAME, swapused, true, null));
        }

        if (pflag[SWAPFREE]) {
          paramlist.addElement(new PmMeasurement(SWAPFREENAME, swapfree, true, null));
        }
      }
    }

    return getPMData(paramlist, params, pflag, cmdflag, exectime);
  }