diff --git a/include/villas/queue.hpp b/include/villas/queue.hpp new file mode 100644 index 000000000..7892a41e5 --- /dev/null +++ b/include/villas/queue.hpp @@ -0,0 +1,59 @@ +/** Wrapper around queue that uses POSIX CV's for signalling writes. + * + * @file + * @author Georg Martin Reinke + * @copyright 2017-2018, Institute for Automation of Complex Power Systems, EONERC + * @license GNU General Public License (version 3) + * + * VILLASnode + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + *********************************************************************************/ + +#pragma once + +#include +#include +#include + +namespace villas { + +template +class Queue { + +protected: + std::queue queue; + +public: + void push(T p) + { + queue.push(p); + } + + T pop() + { + T res = queue.front(); + queue.pop(); + + return res; + } + + bool empty() + { + return queue.empty(); + } + +}; + +} // namespace villas diff --git a/lib/api/actions/node.cpp b/lib/api/actions/node.cpp new file mode 100644 index 000000000..006c7ba42 --- /dev/null +++ b/lib/api/actions/node.cpp @@ -0,0 +1,76 @@ +/** The API ressource for start/stop/pause/resume nodes. + * + * @author Steffen Vogel + * @copyright 2017-2018, Institute for Automation of Complex Power Systems, EONERC + * @license GNU General Public License (version 3) + * + * VILLASnode + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + *********************************************************************************/ + +#include + +#include +#include +#include +#include +#include + +#include + +namespace villas { +namespace node { +namespace api { + +template +class NodeAction : public Action { + +proctected: + int action(struct node *n) = 0; + +public: + virtual int execute(json_t *args, json_t **resp) + { + int ret; + json_error_t err; + const char *node_str; + + ret = json_unpack_ex(args, &err, 0, "{ s: s }", + "node", &node_str + ); + if (ret) + return ret; + + struct list *nodes = &s->api->super_node->nodes; + struct node *node = list_lookup(nodes, node_str); + + if (!node) + return -1; + + return A(node); + } + +}; + +/* Register actions */ +static ActionPlugin> p1("node.start", "start a node"); +static ActionPlugin> p2("node.stop", "stop a node"); +static ActionPlugin> p3("node.pause", "pause a node"); +static ActionPlugin> p4("node.resume", "resume a node"); +static ActionPlugin> p5("node.restart", "restart a node"); + +} // api +} // node +} // villas