1 /**
2  * Copyright © 2017 IBM Corporation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 /**
18  * This application will check the ActiveState property
19  * on the source unit passed in.  If that state is 'failed',
20  * then it will either stop or start the target unit, depending
21  * on the command line arguments.
22  */
23 #include "monitor.hpp"
24 
25 #include <CLI/CLI.hpp>
26 
27 #include <map>
28 #include <string>
29 
30 using namespace phosphor::unit::failure;
31 
32 static const std::map<std::string, Monitor::Action> actions = {
33     {"start", Monitor::Action::start}, {"stop", Monitor::Action::stop}};
34 
35 int main(int argc, char** argv)
36 {
37     CLI::App app;
38     std::string source;
39     std::string target;
40     Monitor::Action action{Monitor::Action::start};
41 
42     app.add_option("-s,--source", source, "The source unit to monitor")
43         ->required();
44     app.add_option("-t,--target", target, "The target unit to start or stop")
45         ->required();
46     app.add_option("-a,--action", action, "Target unit action - start or stop")
47         ->required()
48         ->transform(CLI::CheckedTransformer(actions, CLI::ignore_space));
49 
50     CLI11_PARSE(app, argc, argv);
51     Monitor monitor{source, target, action};
52 
53     monitor.analyze();
54 
55     return 0;
56 }
57