# uc-monitor-go-test [![Go Report Card](https://goreportcard.com/badge/lightkone.guifi.net/lightkone/uc-monitor-go-test)](https://goreportcard.com/report/lightkone.guifi.net/lightkone/uc-monitor-go-test) A proof-of-concept application that leverages [AntidoteDB](https://syncfree.github.io/antidote/) to orchestrate the Guifi.net network nodes monitoring system for the [LightKone](https://www.lightkone.eu/) project. ## Description The monitoring application is distributed in three main blocks: - Network description fetching and feeding (functional) - Nodes assignment among the different monitoring servers [WiP] - Actual nodes monitorisation [WiP] This proof of concept is built on top of the [AntidoteDB Java tutorial](https://github.com/SyncFree/antidote-java-tutorial) by [Deepthi Akkoorath (@deepthidevaki)](https://github.com/deepthidevaki) and uses [João Neto (@joaomlneto)](https://github.com/joaomlneto)'s [HTTP/HTTPS REST API for AntidoteDB](https://github.com/LightKone/antidote-rest-server). ## Installation ### Docker Install `docker-ce` using your ### Go and required libraries Install Go using your operating system's package manager or follow the [instructions here](https://golang.org/doc/install). After installing Go, download and install the folowing external libraries needed: - golang/glog: `go get github.com/golang/glog` - sparrc/go-ping: `go get github.com/sparrc/go-ping` ### AntidoteDB Java tutorial Get the tutorial's source code [here](https://github.com/SyncFree/antidote-java-tutorial) to download the code and [start the two AntidoteDB nodes](https://github.com/SyncFree/antidote-java-tutorial#starting-antidote-nodes). ### HTTP/HTTPS REST API Install the AntidoteDB REST API server following the [instructions here](https://github.com/LightKone/antidote-rest-server). Once everything is installed, start the server with the `antidote-rest-server` command. The server connects to one of the AntidoteDB instances (the one running on port 8087) from the Java tutorial. ## Building and running the application ### Fetch the network description and feed it to AntidoteDB The whole Guifi.net network description is included in the `cnml.xml` file, which can be downloaded from the Guifi.net website, and is used by default: ``` $ cd src/monitor/fetch/ $ go run monitor-fetch.go 57642 nodes read from cnml.xml 53461 devices read from cnml.xml 39988 devices exported to /tmp/gmonitor2/devs.json 0 devices removed from AntidoteDB (0 success, 0 fail) 0 IPv4 addresses removed from AntidoteDB (0 success, 0 fail) 10634 devices added to AntidoteDB (10634 success, 0 fail) ... ``` etc. Smaller subnetworks can be used instead, like the Guifi-UPC subnetwork, for testing purposes: ``` $ go run monitor-fetch.go -cnml_file upc.xml 19 nodes read from upc.xml 0 devices removed from AntidoteDB (0 success, 0 fail) 0 IPv4 addresses removed from AntidoteDB (0 success, 0 fail) 49 devices added to AntidoteDB (49 success, 0 fail) 67 IPv4 addresses added or updated to AntidoteDB (67 success, 0 fail) ``` ### Assign network nodes to monitoring servers [WiP] ``` go run monitor-assign.go ``` ### Monitor the nodes [WiP] ``` go run monitor-ping.go ``` ### Note Previously as of this note on Linux support: _this library attempts to send an "unprivileged" ping via UDP. On Linux, this must be enabled by setting_: ```sudo sysctl -w net.ipv4.ping_group_range="0 2147483647"```