{"id":44377189,"url":"https://github.com/gathering/gondul","last_synced_at":"2026-02-11T21:13:55.695Z","repository":{"id":79634461,"uuid":"56076923","full_name":"gathering/gondul","owner":"gathering","description":"Network management/monitoring system specialized for temporary events","archived":false,"fork":false,"pushed_at":"2025-04-13T05:18:45.000Z","size":2848,"stargazers_count":43,"open_issues_count":68,"forks_count":10,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-04-13T06:24:12.187Z","etag":null,"topics":["dhcp","monitoring","pinger","snmp","templating","varnish"],"latest_commit_sha":null,"homepage":"http://tech.gathering.org","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gathering.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-04-12T15:49:41.000Z","updated_at":"2025-04-13T05:18:50.000Z","dependencies_parsed_at":"2023-11-23T20:37:08.076Z","dependency_job_id":null,"html_url":"https://github.com/gathering/gondul","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gathering/gondul","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gathering%2Fgondul","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gathering%2Fgondul/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gathering%2Fgondul/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gathering%2Fgondul/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gathering","download_url":"https://codeload.github.com/gathering/gondul/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gathering%2Fgondul/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29345433,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T20:11:40.865Z","status":"ssl_error","status_checked_at":"2026-02-11T20:10:41.637Z","response_time":97,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dhcp","monitoring","pinger","snmp","templating","varnish"],"created_at":"2026-02-11T21:13:51.659Z","updated_at":"2026-02-11T21:13:55.690Z","avatar_url":"https://github.com/gathering.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Gondul - The network monitoring/management system\n=================================================\n\nThis is the system used to monitor the network during The Gathering (a\ncomputer party with between 5000 and 10000 active clients - see\nhttp://gathering.org). It is now provided as a stand-alone application with\nthe goal of being usable to any number of computer parties and events of\nsimilar nature. First up of non-TG users was Digitality X 2016\n(http://digitalityx.no), taking place in June / July 2016.\n\nUnlike other NMS's, Gondul is not designed to run perpetually, but for a\nlimited time and needs to be effective with minimal infrastructure in place\nas it is used during initial installation of the network.\n\nYou should be able to install this on your own for other similar events of\nvarious scales. The system requirements are minimal, but some advise:\n\n- You can run it on a single VM or split it based on roles. Either works.\n- The database is used extensively, but careful attention has been paid to\n  scaling it sensibly.\n- Do not (unless you like high CPU loads) ignore the caching layer\n  (Varnish). We use it extensively and are able to invalidate cache\n  properly if needed so it is not a hindrance.\n\nSome facts from The Gathering 2016:\n\n- Non-profit.\n- 5000+ participants, 400 volunteers/crew, plus numerous visitors.\n- Lasted 5 days during the easter of 2016. Tech crew arrived on-site 5 days\n  before.\n- Total of 10500+ unique network devices seen (unique mac addresses).\n- Active network devices at 2016-03-22T12:00:00: 206\n- Active network devices at 2016-03-23T08:00:00: 346\n- Active network devices at 2016-03-23T20:00:00: 6467\n- 180+ switches and routers. Pinged several times per second. Polled for\n  SNMP every minute. Every reply (or lack thereof) is kept.\n- Collected roughly 300 million database rows, or 30GB of data in postgresql.\n- Public NMS and API provided to all participants and the world at large.\n- The NMS saw between 200 and 500 requests per second during normal\n  operation. Many were 304 \"Not Modified\".\n- 99.99% cache hit rate (Varnish cache size: default 256MB).\n- ~300 rows inserted per second. Most of these are COPY() of ping replies\n  (thus performs well).\n- Biggest CPU hog was the SNMP polling, but not an issue.\n- Numerous features developed during the event with no database changes,\n  mainly in the frontend, but also tweaking the API.\n\nName\n----\n\nThe name comes from the Norse Valkyrie Gondul, also known as the wand\nbearer.\n\nFeatures\n--------\n\nSome of Gondul's features are:\n\n- Collects SNMP and ping-data frequently.\n- Per-device configurable SNMP polling-interval\n- IPv4 and IPv6 support\n- Provides per-port statistics.\n- Client-counter (based on active DHCP leases)\n- Intelligent, easy-to-use and real-time device search based on name,\n  description (e.g.: sysDescr, so also software versions/models), serial\n  numbers, distribution switches, IP addresses, etc.\n- Low-effort operations log with optional device-association, using the\n  same search pattern.\n- Intelligent health-map that will alert you of any error without\n  overloading you with information.\n\n  - All \"map handlers\" evaluate a device and return a health score from 0\n    to 1000 to signify what their opinion of the device's health is.\n    Whatever map handler provides the worst score will be shown.\n  - Map handlers are trivial to write and exist in pure javascript.\n  - Some map handlers include:\n\n    - Latency (v4/v6)\n    - Temperature (Cisco and Juniper)\n    - SNMP sysname versus database sysname-mismatch\n    - DHCP age (where a client subnet is set)\n    - Lack of management info (e.g.: missing IPv6 management info)\n    - Recent reboots\n    - (more)\n\n- Replay capabilities: Easy to review the state of the network as it was at\n  any given time Gondul was running. And \"fast forward\" to real time.\n- Modular JavaScript front-end that is reasonably easy to adapt\n- Templating (using jinja2 and all data available to Gondul, from\n  management information to latency)\n- Graphing and dashboards through Graphite\n- Huge-ass README that is still not complete.\n\nCurrent state\n-------------\n\nGondul is used at The Gathering and Digitality X among other places. It was\nspun off as a separate project from the big \"Tech:Server misc tools\" git\nrepository in 2015. It was also used extensively at The Gathering 2017.\n\nThere is no \"release\" process for the time being since all development is\ndirectly linked to upcoming events and development continues throughout\nevents.\n\nThe current state of deployment is that it is in the middle of a re-design.\nAs such, the current documentation is slightly out-of-date.\n\nInstallation\n------------\n\nSee ``INSTALLING.rst``.\n\nArchitecture\n------------\n\nGondul is split in multiple roles, at the very core is the database server\n(postgresql).\n\nThe data is provided by three individual data collectors. They are found in\n``collectors/``. Two of these can run on any host with database access. The\nthird, the dhcptailer, need to run on your dhcp server, or some server with\naccess to the DHCP log. It is picky about log formating (patches welcome).\n\nAll three of these collectors provide systemd service-files which should\nkeep them running even if they fall over. Which they might do if you fiddle\nwith the database.\n\nIn addition to the collectors, there is the API. The API provides three\ndifferent sets of endpoints. Two of these are considered moderately\nsensitive (e.g.: provides management information and port-specific\nstatistics), while the third is considered public. The two private API end\npoints are split into a read-only and write-only name space.\n\nLast is the frontend. This is written entirely in HTML and JavaScript and\ninteracts with the API. It comes in two minimally different versions: one\npublic and one \"private\". The only actual difference should be what they\n_try_ to access.\n\nThe basic philosophy of Gondul is to have a generic and solid API, a data\nbase model that is somewhat agnostic to what we collect (so we can add more\ninteresting SNMP communities on the fly) and a front end that does a lot of\nmagic.\n\nRecently, graphite/grafana was added, but as it failed to deliver during\nThe Gathering 2017, the integration is being re-worked slightly. It is\ncurrently non-functional.\n\nAPIs\n----\n\nSee `doc/API.rst`__. \n\n__ https://github.com/tech-server/gondul/blob/master/doc/API.rst\n\nOn the topic of the front-end....\n---------------------------------\n\nThe front end uses bootstrap and jquery, but not really all that\nextensively.\n\nThe basic idea is to push a ton of information to the front-end and exploit\nmodern concepts such as \"8MB of data is essentially nothing\" and \"your\nbrowser actually does client-side caching sensibly\" and \"it's easier to\ndevelop js than adapt a backend when the need arises\". If you look in a\ndeveloper console, you will see frequent requests, but if you look closer,\nthey should almost all be client side cache hits. And those which aren't\ncan either be 304 Not Modified's or server-side cache hits. Caching is\nabsolutely crucial to the entire process.\n\nWe need more user-documentation though.\n\nAlso, the front-end can be somewhat bandwidth intensive. Use gzip. Patches\nfor variable polling frequency on mobile devices are welcome.\n\nSecurity\n--------\n\nSecurity is ensured in multiple ways. First of all, database passwords\nshould obviously be kept secret. It is never visible in the frontend.\n\nSecondly, APIs are clearly separated. Some data is actually duplicated\nbecause it has to be available both in a public API in an aggregated form,\nand in detailed form in the private API.\n\nGondul it self does not implement any actual authentication mechanisms for\nthe API. That is left up to the web server. An example Apache configuration\nfile is provided and the default ansible recipies use them.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgathering%2Fgondul","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgathering%2Fgondul","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgathering%2Fgondul/lists"}