Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: EthernetInterface PCA9635 dispBoB mbed-rtos mbed munin-client-lib
Revision 8:17b925cab77c, committed 2014-04-15
- Comitter:
- PrzemekWirkus
- Date:
- Tue Apr 15 09:36:43 2014 +0000
- Parent:
- 7:951c113bba49
- Commit message:
- Refactored to use munin-client-lib
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
munin-client-lib.lib | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Mon Apr 14 10:55:50 2014 +0000 +++ b/main.cpp Tue Apr 15 09:36:43 2014 +0000 @@ -1,179 +1,24 @@ -#include <string> -#include <vector> -#include <sstream> -#include "mbed.h" -#include "EthernetInterface.h" +#include "munincli.h" #include "dispBoB.h" +namespace +{ +const char* MUNIN_SERVER_ADDRESS = "172.28.22.45"; +const int MUNIN_SERVER_PORT = 4949; +} + namespace { - const char* MUNIN_SERVER_ADDRESS = "172.28.22.45"; - const int MUNIN_SERVER_PORT = 4949; - char CMD_FETCH_USERS[] = "fetch users\n"; +// Munin command(s): +char CMD_FETCH_USERS[] = "fetch users\n"; } -/** MuninDisplay class, used to fetch counters from Munin and display them on dispBoB. -* -* Example: -* @code -* MuninDisplay munin_lcd; -* munin_lcd.dhcp_connection(); // DHCP connection -* -* while(true) { -* while (munin_lcd.socket_connection(MUNIN_SERVER_ADDRESS, MUNIN_SERVER_PORT) < 0) { -* wait(1); -* } -* -* munin_lcd.socket_recv(); -* munin_lcd.socket_send(CMD_FETCH_USERS, sizeof(CMD_FETCH_USERS)); -* munin_lcd.socket_recv_all(); -* munin_lcd.get_param_value("usercount.value"); -* -* munin_lcd.socket_close(); -* wait(3); -* } -* @endcode -*/ -class MuninDisplay { -public: - /** Initialize dispBoB object - */ - MuninDisplay() : bob_display(p28, p27, p26) { - bob_display.cls(); - } - - /** Prints string on LCD - * - * @param str Text to be displayed on 'bob' display - */ - void lcd_print_str(const char *str) { - bob_display.cls(); - bob_display.printf("%s\n", str); - } - - /** Prints integer on LCD - * - * @param value Integer to be displayed on 'bob' display - */ - void lcd_print_int(const int value) { - bob_display.cls(); - bob_display.printf("% 6d\n", value); - } - - /** Scrolls string on LCD - * - * @param str Text to be displayed on 'bob' display - */ - void lcd_print_scroll(const char *str, float speed) { - bob_display.cls(); - bob_display.scroll(str, speed); - } - - /** Connect to DHCP - */ - void dhcp_connection() { - printf("DHCP: Connecting ... "); - eth.init(); //Use DHCP - eth.connect(); - printf("%s\r\n", eth.getIPAddress()); - } - - /** Create a dispBoB object defined on the I2C master bus - * - * @param server Munin server IP / name - * @param port Munin server port - */ - int socket_connection(const char *server, const int port) { - printf("TCP: Connecting ... "); - int ret = socket.connect(server, port) < 0; - printf("[OK]\r\n"); - return ret; - } +int main() +{ + MuninClient munin_lcd; + munin_lcd.dhcp_connection(); // DHCP connection + dispBoB bob_display(p28, p27, p26); - /** Closes socket conenction to Munin server - */ - void socket_close() { - socket.close(); - } - - /** Recv data from Munin to buffer 'buf' - */ - int socket_recv() { - const int n = socket.receive(buf, sizeof(buf) - 1); - if (n > 0) { - buf[n] = '\0'; - printf("RECV: %s\r\n", buf); - } - return n; - } - - /** Recv data from Munin to buffer 'buf'. Used to fetch reply for Munin command (given counter name) - */ - int socket_recv_all() { - const int n = socket.receive_all(buf, sizeof(buf) - 1); - if (n > 0) { - buf[n] = '\0'; - printf("RECV: %s\r\n", buf); - } - return n; - } - - /** Send data using socket to Munin server. Used to send command to Munin server. - * @param cmd Munin command string, must end with \n - * @param cmd_size Munin command buffer size - */ - int socket_send(char *cmd, const int cmd_size) { - const int n = socket.send(cmd, cmd_size - 1); - return n; - } - - /** Explodes Munin command reply into individual counters divided by '\n'. - * Function extract counter value from conunter wirh name param_name. - * @param param_name counter name - */ - int get_param_value(std::string param_name) { - // Explode Munin command and creaste separate strings with counters - std::vector<std::string> s = explode(std::string(buf), '\n'); - - // For each counter name get its name and if name matches param_name extract and return counter value - for (std::vector<std::string>::iterator it = s.begin(); it != s.end(); ++it) { - std::string ¶m = *it; - printf("PARAM_RECV: %s\r\n", param.c_str()); - if (!param.compare(0, param_name.size(), param_name)) { - printf("PARAM_FOUND: %s is '%s' \r\n", param.c_str(), param_name.c_str()); - std::vector<std::string> name_value = explode(param, ' '); - if (name_value.size() == 2) { - const int val = atoi(name_value[1].c_str()); - printf("DISPLAYING: %s\r\n", name_value[1].c_str()); - return val; - } - } - } - return 0; - } - -protected: - EthernetInterface eth; - TCPSocketConnection socket; - dispBoB bob_display; - char buf[256]; - - // String explode function - std::vector<std::string> explode(std::string const &s, char delim) - { - std::vector<std::string> result; - std::istringstream iss(s); - for (std::string token; std::getline(iss, token, delim); ) { - result.push_back(token); - } - return result; - } -}; - -int main() { - MuninDisplay munin_lcd; - munin_lcd.dhcp_connection(); // DHCP connection - while(true) { while (munin_lcd.socket_connection(MUNIN_SERVER_ADDRESS, MUNIN_SERVER_PORT) < 0) { wait(1); @@ -184,10 +29,11 @@ munin_lcd.socket_recv_all(); { const char *param = "usercount.value"; - int counter_value = munin_lcd.get_param_value(param); - munin_lcd.lcd_print_int(counter_value); + const int counter_value = munin_lcd.get_param_value(param); + bob_display.cls(); + bob_display.printf("% 6d\n", counter_value); } - + munin_lcd.socket_close(); wait(3); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/munin-client-lib.lib Tue Apr 15 09:36:43 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/PrzemekWirkus/code/munin-client-lib/#f964e7c125a7