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 <iostream>
24 #include <map>
25 #include "argument.hpp"
26 #include "monitor.hpp"
27 
28 using namespace phosphor::unit::failure;
29 
30 /**
31  * Prints usage and exits the program
32  *
33  * @param[in] err - the error message to print
34  * @param[in] argv - argv from main()
35  */
36 void exitWithError(const char* err, char** argv)
37 {
38     std::cerr << "ERROR: " << err << "\n";
39     ArgumentParser::usage(argv);
40     exit(EXIT_FAILURE);
41 }
42 
43 static const std::map<std::string, Monitor::Action> actions =
44 {
45     {"start", Monitor::Action::start},
46     {"stop", Monitor::Action::stop}
47 };
48 
49 int main(int argc, char** argv)
50 {
51     ArgumentParser args(argc, argv);
52 
53     auto source = args["source"];
54     if (source == ArgumentParser::emptyString)
55     {
56         exitWithError("Source not specified", argv);
57     }
58 
59     auto target = args["target"];
60     if (target == ArgumentParser::emptyString)
61     {
62         exitWithError("Target not specified", argv);
63     }
64 
65     auto a = actions.find(args["action"]);
66     if (a == actions.end())
67     {
68         exitWithError("Missing or invalid action specified", argv);
69     }
70 
71     Monitor monitor{source, target, a->second};
72 
73     monitor.analyze();
74 
75     return 0;
76 }
77