diff options
| author | Brian Potchik <brian@vector35.com> | 2025-04-27 10:29:51 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2025-04-27 10:29:51 -0400 |
| commit | 54990215c2ad8bda17de857a7fe97d9a7559364f (patch) | |
| tree | c48f5215c7b9bc4b70391dc8aea48bf72193e9ca /workflow.cpp | |
| parent | af87287534221d6c5b0e3425dfcbc84800b7c2f0 (diff) | |
Add initial Workflow Monitor UI and support for nested subflows.
Diffstat (limited to 'workflow.cpp')
| -rw-r--r-- | workflow.cpp | 102 |
1 files changed, 54 insertions, 48 deletions
diff --git a/workflow.cpp b/workflow.cpp index 8146e923..d4b94eb4 100644 --- a/workflow.cpp +++ b/workflow.cpp @@ -164,87 +164,93 @@ bool WorkflowMachine::PostJsonRequest(const std::string& request) } -bool WorkflowMachine::Run() +void WorkflowMachine::ShowTopology() { - return PostRequest("run"); + if (m_function) + BNShowWorkflowReportForFunction(m_function->GetObject(), "topology"); + else + BNShowWorkflowReportForBinaryView(m_view->GetObject(), "topology"); } -bool WorkflowMachine::Halt() +WorkflowMachine::Status WorkflowMachine::GetStatus() { - return PostRequest("halt"); + WorkflowMachine::Status status; + rapidjson::Document request(rapidjson::kObjectType); + rapidjson::Document::AllocatorType& allocator = request.GetAllocator(); + request.AddMember("command", "status", allocator); + rapidjson::StringBuffer buffer; + rapidjson::Writer<rapidjson::StringBuffer> writer(buffer); + request.Accept(writer); + + string jsonResult; + if (m_function) + jsonResult = BNPostWorkflowRequestForFunction(m_function->GetObject(), buffer.GetString()); + else + jsonResult = BNPostWorkflowRequestForBinaryView(m_view->GetObject(), buffer.GetString()); + + rapidjson::Document response(rapidjson::kObjectType); + response.Parse(jsonResult.c_str()); + if (response.HasMember("machineState") && response["machineState"].HasMember("state") && response["machineState"].HasMember("activity")) + { + status.state = response["machineState"]["state"].GetString(); + status.activity = response["machineState"]["activity"].GetString(); + } + if (response.HasMember("logStatus") && response["logStatus"].HasMember("local") && response["logStatus"].HasMember("global")) + { + status.localLogEnabled = response["logStatus"]["local"].GetBool(); + status.globalLogEnabled = response["logStatus"]["global"].GetBool(); + } + + return status; } -bool WorkflowMachine::Reset() +bool WorkflowMachine::Resume() { - return PostRequest("reset"); + return PostRequest("resume"); } -bool WorkflowMachine::Enable() +bool WorkflowMachine::Run() { - return PostRequest("enable"); + return PostRequest("run"); } -bool WorkflowMachine::Disable() +bool WorkflowMachine::Configure() { - return PostRequest("disable"); + return PostRequest("configure"); } -bool WorkflowMachine::Step() +bool WorkflowMachine::Halt() { - return PostRequest("step"); + return PostRequest("halt"); } -string WorkflowMachine::GetState() +bool WorkflowMachine::Reset() { - rapidjson::Document request(rapidjson::kObjectType); - rapidjson::Document::AllocatorType& allocator = request.GetAllocator(); - request.AddMember("command", "status", allocator); - rapidjson::StringBuffer buffer; - rapidjson::Writer<rapidjson::StringBuffer> writer(buffer); - request.Accept(writer); - - string jsonResult; - if (m_function) - jsonResult = BNPostWorkflowRequestForFunction(m_function->GetObject(), buffer.GetString()); - else - jsonResult = BNPostWorkflowRequestForBinaryView(m_view->GetObject(), buffer.GetString()); + return PostRequest("reset"); +} - rapidjson::Document response(rapidjson::kObjectType); - response.Parse(jsonResult.c_str()); - if (response.HasMember("machineState") && response["machineState"].HasMember("state")) - return response["machineState"]["state"].GetString(); - return "Invalid"; +bool WorkflowMachine::Enable() +{ + return PostRequest("enable"); } -std::pair<bool, bool> WorkflowMachine::GetLogStatus() +bool WorkflowMachine::Disable() { - rapidjson::Document request(rapidjson::kObjectType); - rapidjson::Document::AllocatorType& allocator = request.GetAllocator(); - request.AddMember("command", "status", allocator); - rapidjson::StringBuffer buffer; - rapidjson::Writer<rapidjson::StringBuffer> writer(buffer); - request.Accept(writer); - - string jsonResult; - if (m_function) - jsonResult = BNPostWorkflowRequestForFunction(m_function->GetObject(), buffer.GetString()); - else - jsonResult = BNPostWorkflowRequestForBinaryView(m_view->GetObject(), buffer.GetString()); + return PostRequest("disable"); +} - rapidjson::Document response(rapidjson::kObjectType); - response.Parse(jsonResult.c_str()); - if (response.HasMember("logStatus") && response["logStatus"].HasMember("local") && response["logStatus"].HasMember("global")) - return {response["logStatus"]["local"].GetBool(), response["logStatus"]["global"].GetBool()}; - return {false, false}; +bool WorkflowMachine::Step() +{ + return PostRequest("step"); } |
