From 10bff069341a01be6f6e6d458df4e9a18e801557 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Wed, 23 Aug 2017 15:02:32 +0200 Subject: [PATCH] added example for Javascript configuration files --- etc/js/config.js | 89 ++++++++++++++++++++++++++++++++++++++++++++++++ etc/js/global.js | 65 +++++++++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+) create mode 100644 etc/js/config.js create mode 100644 etc/js/global.js diff --git a/etc/js/config.js b/etc/js/config.js new file mode 100644 index 000000000..46689bfab --- /dev/null +++ b/etc/js/config.js @@ -0,0 +1,89 @@ +/** Example Javascript config + * + * This example demonstrates how you can use Javascript code and NodeJS + * to script configuration files. + * + * To use this configuration, run the following command: + * + * villas node <(node /etc/villas/node/js/config.js) + * + * @author Steffen Vogel + * @copyright 2017, 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 . + *********************************************************************************/ + +var glob = require('glob'); +var path = require('path'); +var global = require(__dirname + '/global.js') + +/* List of plugins + * + * Additional node-types, hooks or VILLASfpga IP cores + * can be loaded by compiling them into a shared library and + * adding them to this list + */ +global.plugins = glob.sync('/usr?(/local)/share/villas/node/plugins/*.so'); + +global.nodes = { + loopback_node : { + vectorize : 1, + type : "loopback", // A loopback node will receive exactly the same data which has been sent to it. + // The internal implementation is based on queue. + queuelen : 10240 // The queue length of the internal queue which buffers the samples. + }, + socket_node : { + type : "socket", + + local : "*:12000", + remote : "127.0.0.1:12000" + } +}; + +global.paths = [ + { + in : "test_node", + out : "socket_node", + queuelen : 10000 + }, + { + in : "socket_node", + out : "test_node", + queuelen : 10000, + hooks : [ + { + type : "stats", + warmup : 100, + verbose : true, + format : "human", + output : "./stats.log" + }, + { + type : "convert" + } + ] + } +]; + +// Convert Javascript Object to JSON string +var json = JSON.stringify(global, null, 4); + +// Some log message +process.stderr.write('Configuration file successfully generated'); + +// Print JSON to stdout +process.stdout.write(json); \ No newline at end of file diff --git a/etc/js/global.js b/etc/js/global.js new file mode 100644 index 000000000..194e0b654 --- /dev/null +++ b/etc/js/global.js @@ -0,0 +1,65 @@ +/** Global configuration file for VILLASnode. + * + * The syntax of this file is similar to JSON. + * A detailed description of the format can be found here: + * http://www.hyperrealm.com/libconfig/libconfig_manual.html//Configuration-Files + * + * @author Steffen Vogel + * @copyright 2017, 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 . + *********************************************************************************/ + +os = require('os'); + +var logfile = "/var/log/villas-node_" + new Date().toISOString() + ".log" + +module.exports = { + affinity : 0x01, // Mask of cores the server should run on + // This also maps the NIC interrupts to those cores! + + priority : 50, // Priority for the server tasks. + // Usually the server is using a real-time FIFO + // scheduling algorithm + + // See: https://github.com/docker/docker/issues/22380 + // on why we cant use real-time scheduling in Docker + + stats : 3, // The interval in seconds to print path statistics. + // A value of 0 disables the statistics. + + name : os.hostname(), // The name of this VILLASnode. Might by used by node-types + // to identify themselves (default is the hostname). + + log : { + level : 5, // The level of verbosity for debug messages + // Higher number => increased verbosity + + faciltities : [ "path", "socket" ], // The list of enabled debug faciltities. + // If omitted, all faciltities are enabled + // For a full list of available faciltities, check lib/log.c + + file : logfile, // File for logs + }, + + http : { + enabled : true, // Do not listen on port if true + + htdocs : "/villas/web/socket/", // Root directory of internal webserver + port : 80 // Port for HTTP connections + } +}; \ No newline at end of file