Zero  0.1.0
command.h
Go to the documentation of this file.
1 #ifndef __COMMAND_H
2 #define __COMMAND_H
3 
4 #include "sm_base.h"
5 
6 #include "basethread.h"
7 #include "handler.h"
8 #include "scanner.h"
9 #include <boost/program_options.hpp>
10 #include <boost/program_options/errors.hpp>
11 
12 namespace po = boost::program_options;
13 
14 class Command : public basethread_t {
15 public:
16  virtual void run() = 0;
17 
18  virtual void setupOptions() = 0;
19 
20  static Command* parse(int argc, char** argv);
21 
22  static void init();
23 
24  po::options_description& getOptions() {
25  return options;
26  }
27 
28  void setCommandString(string s) {
29  commandString = s;
30  }
31 
32  void setOptionValues(po::variables_map& vm) {
33  optionValues = vm;
34  }
35 
37  static void setupSMOptions(po::options_description& options);
38 
39  static void setSMOptions(sm_options& sm_opt, const po::variables_map& values);
40 
41 protected:
42  po::options_description options;
43 
44  po::variables_map optionValues;
45 
46  string commandString;
47 
49  void setupCommonOptions();
50 
51  void helpOption();
52 
53 private:
54  typedef map<string, Command* (*)()> ConstructorMap;
55 
56  static ConstructorMap constructorMap;
57 
58  static void showCommands();
59 
60  template<typename T>
61  static auto check_range(const T& min, const T& max, const std::string& opt_name) {
62  return [min, max, opt_name](const T& value) {
63  if (value < min || value > max) {
64  throw po::validation_error(po::validation_error::invalid_option_value, opt_name, std::to_string(value));
65  }
66  };
67  }
68 };
69 
70 class LogScannerCommand : public Command {
71 public:
72  static size_t BLOCK_SIZE;
73 
74  virtual void setupOptions();
75 
76 protected:
77  BaseScanner* getScanner(bitset<logrec_t::t_max_logrec>* filter = nullptr);
78 
79  BaseScanner* getMergeScanner();
80 
81  BaseScanner* getLogArchiveScanner();
82 
83  string logdir;
84 
85  bool isArchive;
86 
87  bool merge;
88 
89  string filename;
90 
91  int level;
92 
94 
95 private:
96  size_t limit;
97 };
98 
99 #endif // __COMMAND_H
Definition: scanner.h:17
void helpOption()
Definition: command.cpp:284
static Command * parse(int argc, char **argv)
Definition: command.cpp:85
bool merge
Definition: command.h:87
void setupCommonOptions()
Options common to all commands (e.g., help and config)
Definition: command.cpp:64
Start-up parameters for the storage engine. See OPTIONS.
Definition: sm_options.h:24
Definition: command.h:14
map< string, Command *(*)()> ConstructorMap
Definition: command.h:54
void setOptionValues(po::variables_map &vm)
Definition: command.h:32
virtual void setupOptions()=0
po::variables_map optionValues
Definition: command.h:44
PageID scan_pid
Definition: command.h:93
string logdir
Definition: command.h:83
static auto check_range(const T &min, const T &max, const std::string &opt_name)
Definition: command.h:61
uint32_t PageID
Definition: basics.h:45
const T max(const T x, const T y)
Definition: w_minmax.h:45
Definition: command.h:70
int level
Definition: command.h:91
Definition: basethread.h:15
void setCommandString(string s)
Definition: command.h:28
string commandString
Definition: command.h:46
static void showCommands()
Definition: command.cpp:72
static void setupSMOptions(po::options_description &options)
Options passed down to the storage manager.
Definition: command.cpp:118
static ConstructorMap constructorMap
Definition: command.h:56
string filename
Definition: command.h:89
static void setSMOptions(sm_options &sm_opt, const po::variables_map &values)
Definition: command.cpp:338
size_t limit
Definition: command.h:96
po::options_description options
Definition: command.h:42
static size_t BLOCK_SIZE
Definition: command.h:72
bool isArchive
Definition: command.h:85
static void init()
Definition: command.cpp:40
const T min(const T x, const T y)
Definition: w_minmax.h:52
po::options_description & getOptions()
Definition: command.h:24
#define T
Definition: w_okvl_inl.h:45
virtual void run()=0