Skip to content

hyperglass is a modern, customizable network looking glass written in Python 3.

License

Notifications You must be signed in to change notification settings

The-Peso-G/hyperglass

 
 

Repository files navigation

hyperglass is a modern network looking glass application. A looking glass is typically implemented by network service providers as a way of providing customers, peers, and partners with a way to easily view elements of, or run tests from the provider's network.


Documentation   |   Screenshots   |   Live Demo

Build Status Financial Contributors on Open Collective GitHub issues Pylint Code style: black


hyperglass is intended to make implementing a looking glass too easy not to do, with the lofty goal of improving the internet community at large by making looking glasses more common across autonomous systems of any size.

Features

  • BGP Route, BGP Community, BGP AS Path, Ping, Traceroute
  • Full frontend and backend IPv6 support
  • Netmiko-based connection handling for traditional network devices
  • FRRouting support via hyperglass-frr REST API
  • BIRD support via hyperglass-bird REST API
  • Customizable commands for each query type by vendor
  • Clean, modern, google-esq GUI based on the Bumla framework
  • Customizable colors, logo, web fonts, error messages, UI text
  • Simple TOML config file for all customizable parameters (no databases!)
  • Optional SSH Proxy to further direct secure router access
  • Configurable IP/Prefix "blacklist" to prevent lookup of sensitive prefixes
  • Configurable rate limiting, powered by Flask-Limiter
  • Query response caching with configurable cache timeout
  • Prometheus metrics for query statistics tracking (Check out the live demo!)

Platform Support

hyperglass is preconfigured to support the following platforms:

  • Cisco IOS-XR: Netmiko cisco_xr vendor class
  • Cisco Classic IOS/IOS-XE: Netmiko cisco_ios vendor class
  • Juniper JunOS: Netmiko junos vendor class
  • FRRouting: hyperglass-frr API
  • BIRD: hyperglass-bird API

Theoretically, any vendor supported by Netmiko can be supported by hyperglass. To request support for a specifc platform, please submit a Github Issue with the enhancement label.

Coming Soon

Community

There is now a hyperglass team on Keybase! Any users, potential users, or contributors of hyperglass are welcome to join to discuss usage, feature requests, bugs, and other things.

hyperglass is developed with the express intention of being free to the networking community.

However, the hyperglass demo does cost @checktheroads about $15/month for 3 Digital Ocean droplets. If you're feeling particularly helpful and want to help offset that cost, small donations are welcome.

Donate

Acknowledgements

  • This project originally started as a fork of vraulsan's looking-glass project. The guts of the Flask components still remain from that project, but almost everything else has been rewritten. Nevertheless, the inspiration for building hyperglass came from here.

Contributors

Code Contributors

This project exists thanks to all the people who contribute. [Contribute].

Financial Contributors

Become a financial contributor and help us sustain our community. [Contribute]

Individuals

Organizations

Support this project with your organization. Your logo will show up here with a link to your website. [Contribute]

License

Clear BSD License

Development Status

Beginning 2019-09-01, the initial release of hyperglass will only receive updates for critical bug fixes or vulnerabilities. Any enhancements, new features, or other general improvements will, if accepted/approved, be implemented in version 1.0.0, development for which can be tracked via the v1.0.0 branch.

But why

The initial release of hyperglass was the culmination of my first ever foray into development, so naturally it is not perfect. Building that initial release was an incredibly fun process through which I learned a lot, and the community's feedback has been overwhelmingly positive. However, after the initial release I still had a massive list of features I wanted to try to implement. As I began that process, I found many aspects of the hyperglass backend that needed improving (or in some cases, significant overhaul). So, I decided to put all my efforts into a single "1.0" release and treat the initial hyperglass release as more of a beta. This way, I'm able to dedicate what little development time I have to the drastic improvements in the works in the v1.0.0 branch.

What's coming in 1.0?

So far, I've already implemented the following:

Asyncio end-to-end wherever possible

✅ Migrated web framework from Flask to Sanic (removes Gunicorn dependency)

✅ Migrated outbound http client framework from Requests to HTTPX for FRR/BIRD connections

✅ Migrated front-end framework from Bulma to Bootstrap 4 using a custom theme, for which most visual aspects are still completely customizable.

✅ Front-end frameworks/dependencies are no longer bundled with hyperglass. Yarn now handles package management, and ParcelJS now bundles and minifies all Javascript libraries, CSS frameworks and custom CSS, fonts, etc. making for a more consistent and controlable user experience.

✅ Migrated config file language from TOML to YAML.

Pydantic for config file modeling and validation. This will reduce, if not remove, the likelihood of accidentally misconfiguring hyperglass, your devices, or custom commands. It also allows for a significantly more sensible way of setting reasonable defaults, which now exist for all configuration variables, except for devices.

✅ Ability to query multiple devices at once.

✅ VRF Support. IPv4 & IPv6 VRFs can be configured on a per-device basis and queried from the hyperglass UI.

✅ Custom commands are no longer NOS-specific. Command "profiles" can be arbitrarily created and associated with any device. This means that even if two different devices are running cisco_ios, one device can use one set of commands, and the other device can use a different set of commands.

✅ Improved native Juniper support

✅ Native Arista support

✅ Native Huawei support

✅ Some other backend goodies like: A (configurable) global timeout, so if a device can't be reached for whatever reason, the user is not left to watch a loading bar. Faster SSH queries. Way faster queries when using an SSH proxy/tunnel. Drastically improved error handling with 100% customizable user-facing error messages. Front-end to back-end communication is now 100% JSON, which means hyperglass is also a looking glass API for your network, not just a GUI.

What I'm still working on:

🕐 Possibly move to Netdev instead of Netmiko for SSH connection handling for performance gains.

🕐 Improved reverse proxy docs, mainly for adding GZIP compression support for static files

🕐 Make Grafana dashboard available via Grafana's plugin marketplace

...and several other things that probably won't make it into 1.0 :)

About

hyperglass is a modern, customizable network looking glass written in Python 3.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 80.3%
  • HTML 12.3%
  • JavaScript 4.7%
  • CSS 2.7%