In my last update I represented solutions for most of my goals that I set in my first post. There was still one feature to implement and I worked hard to have it finished in time for GSoC.
The last feature that I am talking about is the ability to show recently offline nodes in the map. This was the hardest part to implement but also the most important. Because with it you would be able to see which nodes are offline and need maintenance and you could see exactly where they are located. Until now there was only an email alert system, but it sent out an email for every change to the node. There wasn’t a filtering option and also it would do this for every node so the inbox would get cluttered really fast. By adding this feature you can get a list of all nodes that went offline in the past 24 hours and it updates that list alongside the map.
In my last post I talked about adding a sidebar that had a list of all nodes that are currently online and showing on the map. So I just added a new tab that represented the recently offline nodes. The hardest part of adding this was that I had to use nodewatchers API v2 which was still in development and hasn’t been fully documented. I still wanted to use it because in the newest nodewatcher version every API v1 request will be replaced by v2. This way there would be less work in the future and also I took some time to document everything I have learned about it. This document has everything that I was able to gather from nodewatcher code and examples of how to use it. In the picture below you can see how the sidebar currently looks and also the list of recently offline nodes. It has the same functionalities as the online node list like the search bar, option to show the selected node on the map and to go to that specific nodes page.
GSoC has provided me with a unique opportunity to work on a large scale open source project and I have learned a lot in the past three months. Mostly about time management and not putting too much on my plate. It was truly an experience that will help me later on in my life. I will for sure work on other open source projects and continue my work with nodewatcher because I have analysed and figured out most of the code. It would be a shame to just let that knowledge go and move on to another project before being sure that someone else does take over and continues the work.
Freifunk blog posts:
Github pull requests:
Main map code: https://github.com/wlanslovenija/nodewatcher/pull/69
API v2 documentation: https://github.com/wlanslovenija/nodewatcher/pull/70
I am very happy to say that since my last update I was able to implement most of the features that I have talked about and was able to test them with real data.
In the last update I talked about how I started my own local leaflet map with which I wanted to test every feature before implementing them. While doing that I also need to go through most of the nodewatcher code to see how the map is being generated. The problem here was that nodewatcher uses Django templates and many custom scripts that were placed in multiple locations. It took some time to figure out what each part was doing because the map was made at the start of nodewatcher and wasn’t documented well. So this took most of my time, but after I figured out where everything was I was able to start implementing most of my code.
The implementation went surprisingly fast, so I was able to test everything on my own nodewatcher server that I started at the beginning of GSoC. The only problem here was that I didn’t have any nodes to see on my map. I was able to workaround this by redirecting my API call to gather node data from the nodes.wlan-si.net server which is the wlan slovenija nodewatcher server. It has over 300+ active nodes. In the pictures below you are able to see the things that I have currently implemented that are:
- The fullscreen map option
- Popup with some general information about the node that you get when you click on it. And also by clicking the name in the popup you can go to that nodes website
- Sidebar that gives you a list of all currently online nodes with a search bar and the ability to show each one on the map.
Next thing for me is to try to implement one more feature which is the ability to see nodes that have gone offline in the past 24 hours. I say try because I have already looked into it and the problem with this is that the current API doesn’t have a filtering option so I can’t get only the nodes that have the location parameter set. I will also mostly focus on writing good documentation because that is something that nodewatcher is currently lacking and it would have really helped me a lot.
Since my last update I made a lot of progress in understanding how nodewatcher works, mostly around Django, and implementing some of the elements I stated in my last post.
My progress in the beginning was very slow because I hadn’t used Django in such capacity used in nodewatcher. But after a couple of trial and error moments and a lot of help from Django forums and wlan-si members I was able to get a grip of the things I needed. There should be a more detailed description as to how to some parts of the nodewatcher system work. Currently only a handful of people know how the whole system work and that shouldn’t be the case, I will try to document most of my findings and contribute them to the project to help others later on.
I started my own leaflet map in order to begin progress on the map while I learned everything around the current nodewatcher schema. I tried to implement the basic functionalities first to see how the whole code is layed out. As you can see from the picture below I tested out the fullscreen option of the map and also the color representation of the different nodes. In the top-right corner I also added the support for selecting which nodes to show.
This is just a test example and there is a lot of work implementing this into nodewatcher because here I wrote my own script and added the markers by hand. The biggest part is that I need to figure out where to add this code to nodewatcher and make it work with real nodes. I hope to have this figured out until the next update so that some of the features get added. These features are subject to changes and will most likely change in appearance.
I also had some problems with implementing new scripts but that shouldn’t pose a problem in the future. As I said earlier the main problem is adapting to the current code and maintaining its structure so that there isn’t any confusion when someone else takes over. But as I said this involves a lot of asking around for help and will be helpful later on because I hope to continue with this project after GSoC.
After that I will start working on the side menu and anything else that shows as a good addition to the map but for now it is important to learn how the system works and add basic upgrades so that later on it is easier to focus just on adding new elements not wasting time with learning how everything works again.
My name is Marin and this year through Google Summer of Code I am contributing to the nodewatcher project and with these blog posts I will keep you updated on my progress.
Nodewatcher is one of the projects of wlan slovenija open wireless network. Its main goal is the development of an open source, modular community-oriented platform used for network planning, node deployment, node monitoring and maintenance. Currently it is used to monitor more than 1600 nodes in multiple countries. I got acquainted with nodewatcher when I joined a Croatian organization called Otvorena Mreža who uses nodewatcher to monitor their nodes.
While working with nodewatcher on Otvorena Mreža there was a recurring problem of not noticing offline nodes on time, we had an alert system that would constantly get flooded if a node kept restarting and that would hide the fact that another one is offline. Nodewatcher is based around monitoring and control of nodes so the best way to monitor multiple nodes at once should be the map, because you get a fast overview of all of them and you can also focus on one of them. The current map while functional, it only shows currently active nodes and it could do so much more. With my project I intend to add features that would allow easier and more detailed overview of nodes.
Some of the features that have came up as necessary are:
- ability to get a fullscreen map to make it more presentable and easier to inspect
- when hovering over a node it should list a short description about it i.e. name and number of users
- toggle buttons to enable and disable which nodes to show (online, offline, idle)
- color representation of the current status of the node, most importantly it should be easy to spot nodes that have gone offline recently
These are just some of the functionalities that need to be implemented to the map, after that I hope to get feedback from other nodewatcher users to see if anything else should be added or changed. Currently, the next step is to analyse the current code and see if it should be completely redone or is it possible just to upgrade it.