What? Don't go yet!
Well, i-must-go, my project, needs me. The project was created as entry to the Get Noticed competition (a.k.a "Daj się poznać" in Polish). But this was just spiritus movens of starting the work on it. The idea came from a students' organization called SKOS (Students' Campus Computer Network) in Gdansk University of Technology, which I am still a part of, even after graduating - yeah, it's that fun ;-).
So let me tell you a few words about the background of the i-must-go application. Once upon a time, a bunch of students who were working as network administrators for their fellow dorm-mates realized that there were too many network switches to monitor each of them separately and manually. So they created an app called SWStats. It was a bunch of Perl, PHP, RRD and SNMP mashed together to monitor throughput throughout the network. It wasn't very pretty (at least not by todays' standards) but it did its job and it's doing it even now. However, lately things have started to get more complicated with almost a hundred of different switches to monitor. Keeping the list of how they are connected up to date is getting more and more tiresome. In fact, RRD is not too useful if we want to somehow reuse the gathered data.
Well, HP ProCurve switches might not be THE enterprise grade switches, but they are pretty good and offer a lot in the package. One of the basic functionalities is LLDP (Link Layer Discovery Protocol). Without getting too much into details, the most important thing is that the switches 'see' each other and can report on what devices are connected to each of their ports. Sounds like this would address the need for manual configuration of the network structure, right? Yes indeed! But we decided that there was a lot more to do than just mapping the network automatically...
After getting a closer look at what the current solution does and how the result is accomplished, I have formed several more requirements/ideas for the application.
First, seeing is believing - the application is supposed to not only identify the structure of the network, but also to show it. This means I need some kind of web frontend.
Second, SWStats allows for monitoring of network usage via SNMP polling. That's a feature that I have decided to keep, but with a change in the data storage from RRD to a time-series database (most likely InfluxDB).
And finally, everything should be done using SNMP protocol, as it's mostly standardized and would allow for reusability in different environments.
How do I want to do it?
I have chosen golang as my programming language to create the project. Mostly it because I don't know it and it's a really great programming language (at least on paper) - single binary output, seemingly familiar syntax and it's heavily concurrency-oriented - it will be a great learning opportunity for me. Plus so many tools that I'm using every day are created with it! I was just very curious of how does it all work. I'd have tried to code it in Python, but I am familiar enough with it for now and want to try something more. So this blog is additionally going to document my (I guess sometimes painful) journey with golang - hopefully it will help more golang first timers.
The app itself will try to use most of the flashy DevOps technologies as well - it will be running in CI environment of gitlab-ci and might even have some uses for docker (for testing and quick and dirty deployments).
Also, I'd love to thank my colleagues from SKOS for allowing me to use parts of the infrastructure (gitlab and the network) during the project's development.
Enough of chatting, let's get to work
Sure, sure - I'd love to see how the code turns out as well :). You can find it on my GitHub - https://github.com/wurbanski/i-must-go.
If you want to follow my journey through the competition - you can subscribe to my feed here.
And to other competitors... have fun and get noticed!