1 #ifndef LIAISON_UPGRADE_H
2 #define LIAISON_UPGRADE_H
4 #include <Wt/Http/Response>
5 #include <Wt/WFileResource>
10 #include <boost/asio/io_service.hpp>
11 #include <boost/process.hpp>
12 #include <boost/process/pipe.hpp>
14 #include <goby/util/thirdparty/nlohmann/json.hpp>
15 #include <goby/zeromq/liaison/liaison_container.h>
17 #include "config.pb.h"
24 LiaisonUpgrade(
const goby::apps::zeromq::protobuf::LiaisonConfig& cfg,
25 Wt::WContainerWidget* parent = 0);
28 class LogFileResource :
public Wt::WResource
33 void set_last_log(
const std::string& log) { last_log_ = log; }
35 void handleRequest(
const Wt::Http::Request& request, Wt::Http::Response& response)
override
37 suggestFileName(
"jaiabot_upgrade_ansible_log_ " + goby::time::file_str() +
".json");
38 response.addHeader(
"Content-Type",
"text/plain");
39 response.out() << last_log_;
43 std::string last_log_;
55 Wt::WGroupBox* group_box;
56 Wt::WContainerWidget* group_div;
57 Wt::WContainerWidget* iv_group_div;
58 Wt::WContainerWidget* run_button_div;
59 Wt::WPushButton* run_button;
60 Wt::WContainerWidget* log_button_div;
61 Wt::WPushButton* log_button;
62 Wt::WContainerWidget* result_div;
63 Wt::WText* result_text;
64 Wt::WTable* result_table;
65 std::vector<std::string>::const_iterator run_text_it;
67 std::map<std::string, std::string> input_var;
69 std::map<std::string, std::string> output_var;
70 std::vector<std::string> output_var_order;
74 ProcessData(
const protobuf::UpgradeConfig& cfg,
const std::string& playbook_file,
75 const jaiabot::protobuf::UpgradeConfig::AnsiblePlaybook& pb_playbook,
76 const std::string& input_vars);
79 boost::asio::io_service
io;
85 std::unique_ptr<ProcessData> pdata;
87 std::shared_ptr<LogFileResource> log_resource;
88 const jaiabot::protobuf::UpgradeConfig::AnsiblePlaybook& pb_playbook;
100 ResultType result{SUCCESS};
101 std::map<std::string, std::string> output_vars;
104 void run_ansible_playbook(std::size_t playbook_index);
105 void set_input_var(
int selection_index, Wt::WComboBox* selection, std::string name,
106 std::size_t playbook_index);
111 void focus()
override { timer_.start(); }
112 void unfocus()
override { timer_.stop(); }
115 const protobuf::UpgradeConfig& cfg_;
116 std::vector<AnsiblePlaybookConfig> playbooks_;
118 static const std::vector<std::string> running_;
119 static const Wt::WColor color_success_;
120 static const Wt::WColor color_failure_;