95 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/**
 | 
						|
 * Copyright (c) 2021 OceanBase
 | 
						|
 * OceanBase CE is licensed under Mulan PubL v2.
 | 
						|
 * You can use this software according to the terms and conditions of the Mulan PubL v2.
 | 
						|
 * You may obtain a copy of Mulan PubL v2 at:
 | 
						|
 *          http://license.coscl.org.cn/MulanPubL-2.0
 | 
						|
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 | 
						|
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 | 
						|
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 | 
						|
 * See the Mulan PubL v2 for more details.
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef _OBADMIN_ROUTINE_H_
 | 
						|
#define _OBADMIN_ROUTINE_H_
 | 
						|
 | 
						|
#include <stdint.h>
 | 
						|
#include <string>
 | 
						|
#include <vector>
 | 
						|
#include "lib/net/ob_addr.h"
 | 
						|
#include "share/ob_srv_rpc_proxy.h"
 | 
						|
#include "rpc/obrpc/ob_net_client.h"
 | 
						|
#include "share/ob_rpc_struct.h"
 | 
						|
 | 
						|
using std::string;
 | 
						|
 | 
						|
namespace oceanbase {
 | 
						|
using namespace common;
 | 
						|
namespace tools {
 | 
						|
class ObAdminRoutine
 | 
						|
{
 | 
						|
public:
 | 
						|
  ObAdminRoutine(const string &action_name, int version = 1, const string &args = "");
 | 
						|
  virtual ~ObAdminRoutine();
 | 
						|
 | 
						|
  virtual int process() = 0;
 | 
						|
 | 
						|
  bool match(const string &cmd) const;
 | 
						|
  void set_command(const string &cmd)
 | 
						|
  {
 | 
						|
    cmd_ = cmd;
 | 
						|
  }
 | 
						|
  void set_timeout(int64_t timeout)
 | 
						|
  {
 | 
						|
    timeout_ = timeout;
 | 
						|
  }
 | 
						|
 | 
						|
  const string& action_name() const
 | 
						|
  {
 | 
						|
    return action_name_;
 | 
						|
  }
 | 
						|
 | 
						|
  const string& target() const
 | 
						|
  {
 | 
						|
    return target_;
 | 
						|
  }
 | 
						|
 | 
						|
  const string usage() const
 | 
						|
  {
 | 
						|
    return action_name_ + " " + args_;
 | 
						|
  }
 | 
						|
 | 
						|
  void set_client(obrpc::ObSrvRpcProxy* client) { client_ = client; }
 | 
						|
protected:
 | 
						|
  const string action_name_;
 | 
						|
  string args_;
 | 
						|
  string cmd_;
 | 
						|
  const int version_;
 | 
						|
  int64_t timeout_;
 | 
						|
  string target_;
 | 
						|
  obrpc::ObSrvRpcProxy* client_;
 | 
						|
}; /* end of class ObAdminRoutine */
 | 
						|
 | 
						|
 | 
						|
class RoutineComparer
 | 
						|
{
 | 
						|
public:
 | 
						|
  RoutineComparer(const string &cmd)
 | 
						|
      : cmd_(cmd)
 | 
						|
  {}
 | 
						|
 | 
						|
  bool operator ()(ObAdminRoutine *routine)
 | 
						|
  {
 | 
						|
    return routine->match(cmd_);
 | 
						|
  }
 | 
						|
private:
 | 
						|
  const string &cmd_;
 | 
						|
}; /* end of class RoutineComparer */
 | 
						|
 | 
						|
extern std::vector<ObAdminRoutine*> g_routines;
 | 
						|
 | 
						|
} /* end of namespace tools */
 | 
						|
} /* end of namespace oceanbase */
 | 
						|
 | 
						|
#endif /* _OBADMIN_ROUTINE_H_ */
 |