Package org.apache.helix.mock.participant

Source Code of org.apache.helix.mock.participant.MockHealthReportParticipant$MockHealthReportProvider

package org.apache.helix.mock.participant;

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you 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.
*/

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.helix.HelixManager;
import org.apache.helix.healthcheck.HealthReportProvider;
import org.apache.log4j.Logger;


public class MockHealthReportParticipant
{
  private static final Logger LOG      =
                                           Logger.getLogger(MockHealthReportParticipant.class);
  public static final String  zkServer = "zkSvr";
  public static final String  cluster  = "cluster";
  public static final String  host     = "host";
  public static final String  port     = "port";
  public static final String  help     = "help";

  static class MockHealthReportProvider extends HealthReportProvider
  {
    private final String                           _reportName = "MockRestQueryStats";
    private final Map<String, Map<String, String>> _mockHealthReport;

    public MockHealthReportProvider()
    {
      _mockHealthReport = new HashMap<String, Map<String, String>>();

      Map<String, String> reportMap = new HashMap<String, String>();
      _mockHealthReport.put("MockRestQueryStats@DBName=BizProfile", reportMap);

      reportMap.put("MeanMysqlLatency", "2.132700625");
      reportMap.put("95PercentileLatencyLucene", "108.40825525");
      reportMap.put("99PercentileLatencyMysql", "9.369827");
      reportMap.put("99PercentileLatencyServer", "167.714208");
      reportMap.put("95PercentileLatencyMysqlPool", "8.03621375");
      reportMap.put("95PercentileLatencyServer", "164.68374265");
      reportMap.put("MinLuceneLatency", "1.765908");
      reportMap.put("MaxServerLatency", "167.714208");
      reportMap.put("MeanLuceneLatency", "16.107599458333336");
      reportMap.put("CollectorName", "RestQueryStats");
      reportMap.put("MeanLucenePoolLatency", "8.120545333333332");
      reportMap.put("99PercentileLatencyLucenePool", "65.930564");
      reportMap.put("MinServerLatency", "0.425272");
      reportMap.put("IndexStoreMismatchCount", "0");
      reportMap.put("ErrorCount", "0");
      reportMap.put("MeanMysqlPoolLatency", "1.0704102916666667");
      reportMap.put("MinLucenePoolLatency", "0.008189");
      reportMap.put("MinMysqlLatency", "0.709691");
      reportMap.put("MaxMysqlPoolLatency", "8.606973");
      reportMap.put("99PercentileLatencyMysqlPool", "8.606973");
      reportMap.put("MinMysqlPoolLatency", "0.091883");
      reportMap.put("MaxLucenePoolLatency", "65.930564");
      reportMap.put("99PercentileLatencyLucene", "111.78799");
      reportMap.put("MaxMysqlLatency", "9.369827");
      reportMap.put("TimeStamp", "1332895048143");
      reportMap.put("MeanConcurrencyLevel", "1.9");
      reportMap.put("95PercentileLatencyMysql", "8.96594875");
      reportMap.put("QueryStartCount", "0");
      reportMap.put("95PercentileLatencyLucenePool", "63.518656500000006");
      reportMap.put("MeanServerLatency", "39.5451532");
      reportMap.put("MaxLuceneLatency", "111.78799");
      reportMap.put("QuerySuccessCount", "0");
    }

    @Override
    public Map<String, String> getRecentHealthReport()
    {
      // TODO Auto-generated method stub
      return null;
    }

    @Override
    public void resetStats()
    {
      // TODO Auto-generated method stub

    }

    @Override
    public Map<String, Map<String, String>> getRecentPartitionHealthReport()
    {
      // tweak: randomly change the last digit
      for (String key1 : _mockHealthReport.keySet())
      {
        Map<String, String> reportMap = _mockHealthReport.get(key1);
        for (String key2 : reportMap.keySet())
        {
          String value = reportMap.get(key2);
          String lastDigit = "" + new Random().nextInt(10);
          value = value.substring(0, value.length() - 1) + lastDigit;
          reportMap.put(key2, value);
        }
      }

      return _mockHealthReport;
    }

    @Override
    public String getReportName()
    {
      return _reportName;
    }
  }

  static class MockHealthReportJob implements MockJobIntf
  {

    @Override
    public void doPreConnectJob(HelixManager manager)
    {
      // TODO Auto-generated method stub

    }

    @Override
    public void doPostConnectJob(HelixManager manager)
    {
      // TODO Auto-generated method stub
      manager.getHealthReportCollector()
             .addHealthReportProvider(new MockHealthReportProvider());

//      // set property store path for perf test
//      final String setPath = "/TEST_PERF/set";
//      final String updatePath = "/TEST_PERF/update";
//      manager.getHelixPropertyStore().create(setPath, new ZNRecord(setPath), BaseDataAccessor.Option.PERSISTENT);
//      manager.getHelixPropertyStore().set(updatePath, new ZNRecord(updatePath), BaseDataAccessor.Option.PERSISTENT);
    }

  }

  // hack OptionBuilder is not thread safe
  @SuppressWarnings("static-access")
  synchronized private static Options constructCommandLineOptions()
  {
    Option helpOption =
        OptionBuilder.withLongOpt(help)
                     .withDescription("Prints command-line options info")
                     .create();

    Option clusterOption =
        OptionBuilder.withLongOpt(cluster)
                     .withDescription("Provide cluster name")
                     .create();
    clusterOption.setArgs(1);
    clusterOption.setRequired(true);
    clusterOption.setArgName("Cluster name (Required)");

    Option hostOption =
        OptionBuilder.withLongOpt(host).withDescription("Provide host name").create();
    hostOption.setArgs(1);
    hostOption.setRequired(true);
    hostOption.setArgName("Host name (Required)");

    Option portOption =
        OptionBuilder.withLongOpt(port).withDescription("Provide host port").create();
    portOption.setArgs(1);
    portOption.setRequired(true);
    portOption.setArgName("Host port (Required)");

    Option zkServerOption =
        OptionBuilder.withLongOpt(zkServer)
                     .withDescription("Provide zookeeper address")
                     .create();
    zkServerOption.setArgs(1);
    zkServerOption.setRequired(true);
    zkServerOption.setArgName("Zookeeper server address(Required)");

    Options options = new Options();
    options.addOption(helpOption);
    options.addOption(clusterOption);
    options.addOption(hostOption);
    options.addOption(portOption);
    options.addOption(zkServerOption);

    return options;
  }

  public static void printUsage(Options cliOptions)
  {
    HelpFormatter helpFormatter = new HelpFormatter();
    helpFormatter.printHelp("java " + MockHealthReportParticipant.class.getName(),
                            cliOptions);
  }

  public static CommandLine processCommandLineArgs(String[] cliArgs) throws Exception
  {
    CommandLineParser cliParser = new GnuParser();
    Options cliOptions = constructCommandLineOptions();

    try
    {

      return cliParser.parse(cliOptions, cliArgs);
    }
    catch (ParseException pe)
    {
      System.err.println("CommandLineClient: failed to parse command-line options: "
          + pe.toString());
      printUsage(cliOptions);
      System.exit(1);
    }
    return null;
  }

  // NOT working for kill -9, working for kill -2/-15
  static class MockHealthReportParticipantShutdownHook extends Thread
  {
    final MockParticipant _participant;

    MockHealthReportParticipantShutdownHook(MockParticipant participant)
    {
      _participant = participant;
    }

    @Override
    public void run()
    {
      LOG.info("MockHealthReportParticipantShutdownHook invoked");
      _participant.syncStop();
    }
  }

  public static void main(String[] args) throws Exception
  {
    CommandLine cmd = processCommandLineArgs(args);
    String zkConnectStr = cmd.getOptionValue(zkServer);
    String clusterName = cmd.getOptionValue(cluster);
    String hostStr = cmd.getOptionValue(host);
    String portStr = cmd.getOptionValue(port);

    String instanceName = hostStr + "_" + portStr;

    MockParticipant participant =
        new MockParticipant(clusterName,
                            instanceName,
                            zkConnectStr,
                            null,   // new StoreAccessDiffNodeTransition(), // new StoreAccessOneNodeTransition(),
                            new MockHealthReportJob());
    Runtime.getRuntime()
           .addShutdownHook(new MockHealthReportParticipantShutdownHook(participant));

    // Espresso_driver.py will consume this
    System.out.println("MockHealthReportParticipant process started, instanceName: "
        + instanceName);

    participant.run();
  }
}
TOP

Related Classes of org.apache.helix.mock.participant.MockHealthReportParticipant$MockHealthReportProvider

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.