Skip to content

Repository files navigation

Alice-LG - Your friendly looking glass

"No, no! The adventures first, explanations take such a dreadful time."
Lewis Carroll, Alice's Adventures in Wonderland & Through the Looking-Glass

Take a look at Alice-LG production examples at:

And checkout the API at:

Breaking Changes

6.0.0

With the new functional react UI, the DOMContentLoaded event can no longer be used for injecting additional content. Please use Alice.onLayoutReady(function(main) { ... }); instead.

5.1.0

The spelling of "neighbors" is now harmonized. Please update your config and replace e.g. neighbour.asn with neighbor.asn (in case of java script errors).

Explanations

Alice-LG is a BGP looking glass which gets its data from external APIs.

Currently Alice-LG supports the following APIs:

Birdwatcher

Normally you would first install the birdwatcher API directly on the machine(s) where you run BIRD on and then install Alice-LG on a seperate public facing server and point her to the afore mentioned birdwatcher API.

This project was a direct result of the RIPE IXP Tools Hackathon just prior to RIPE73 in Madrid, Spain.

Major thanks to Barry O'Donovan who built the original INEX Bird's Eye BIRD API of which Alice-LG is a spinnoff

GoBGP

Alice-LG supports direct integration with GoBGP instances using gRPC. See the configuration section for more detail.

OpenBGPD

Alice-LG supports OpenBGP via bgplgd and openbgpd-state-server.

Building Alice-LG from scratch

These examples include setting up your Go environment, if you already have set that up then you can obviously skip that

CentOS:

First add the following lines at the end of your ~/.bash_profile:

GOPATH=$HOME/go
export GOPATH
PATH=$PATH:$GOPATH/bin
export PATH

Now run:

source~/.bash_profile
# Install frontend build dependencies
sudo yum install golang npm
sudo npm install --global yarn
mkdir -p ~/go/bin ~/go/pkg ~/go/src/github.com/alice-lg/
cd~/go/src/github.com/alice-lg
git clone https://github.com/alice-lg/alice-lg.git
cd alice-lg
make

Your Alice-LG source will now be located at ~/go/src/github.com/alice-lg/alice-lg and your alice-LG executable should be at ~/go/src/github.com/alice-lg/alice-lg/bin/alice-lg-linux-amd64

Configuration

An example configuration can be found at etc/alice-lg/alice.example.conf.

You can copy it to any of the following locations:

etc/alice-lg/alice.conf # local
etc/alice-lg/alice.local.conf # local
/etc/alice-lg/alice.conf # global

You will have to edit the configuration file as you need to point Alice-LG to the correct backend source. Multiple sources can be configured.

Birdwatcher:

[source.rs1-example-v4]name = rs1.example.com (IPv4)
[source.rs1-example-v4.birdwatcher]api = http://rs1.example.com:29184/
neighbors_refresh_timeout = 2
# show_last_reboot = true# timezone = UTC# type = single_table / multi_tabletype = multi_table
# not needed for single_tablepeer_table_prefix = T
pipe_protocol_prefix = M
[source.rs1-example-v6]name = rs1.example.com (IPv6)
[source.rs1-example-v6.birdwatcher]api = http://rs1.example.com:29186/

GoBGP:

[source.rs2-example]name = rs2.example.com
group = AMS
[source.rs2-example.gobgp]# Host is the IP (or DNS name) and port for the remote GoBGP daemonhost = rs2.example.com:50051
# ProcessingTimeout is a timeout in seconds configured per gRPC call to a given GoBGP daemonprocessing_timeout = 300

Configure TLS with:

tls_crt = /path/to/cert
tls_common_name = "common name"

You can disable TLS with insecure = true.

OpenBGPD via openbgpd-state-server:

[source.rs-example]name = rs-example.openbgpd-state-server
[source.rs-example.openbgpd-state-server]api = http://rs23.example.net:29111/api
# Optional response cache time in seconds# Default: disabled (0)cache_ttl = 100

OpenBGPD via bgplgd:

[source.rs-example]name = rs-example.openbgpd-bgplgd
[source.rs-example.openbgpd-bgplgd]api = http://rs23.example.net/bgplgd
# Optional response cache time in seconds# Default: disabled (0)cache_ttl = 100

Running

Launch the server by running

./bin/alice-lg-linux-amd64

Customization

Alice now supports custom themes! In your alice.conf, you now can specify a theme by setting:

[theme]
path = /path/to/my/alice-theme

with the optional parameter (the "mountpoint" of the theme) url_base = /theme

You can put assets (images, fonts, javscript, css) in this folder.

Stylesheets and Javascripts are automatically included in the client's html and are served from the backend.

Alice provides early stages of an extension API, which is for now only used to modify the content of the welcome screen, by providing a javascript in your theme containing:

Alice.updateContent({welcome: {title: "My Awesome Looking Glass",tagline: "powered by Alice"}});

A callback for running custom javascript after the base application was initialized can be installed using:

Alice.onLayoutReady(function(page){// page is the layout HTML root element});

For an example check out: https://github.com/alice-lg/alice-theme-example

Hacking

The client is a Single Page React Application. All sources are available in ui/.

Yarn is required for building the UI.

Create a fresh UI build with

cd ui/
make

This will install all dependencies with yarn install and run yarn build.

As this is a create-react-app application, react-scripts are present and you can just run a development server using yarn start.

All this available as a containerized environment:

Running docker-compose up in the ./dev will build and start the backend and run a webpack dev server for the UI.

The UI is then available on http://localhost:3000/ and on http://localhost:7340/ the backend will serve the API.

Sponsors

The development of Alice is now sponsored by

DE-CIX Logo

Many thanks go out to ECIX, where this project originated and was backed over the last two years.

Support for OpenBGPD was sponsored by the Route Server Support Foundation.

About

Alice - Through the Looking Glass https://lg.de-cix.nethttps://lg.ecix.net

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - fullctl/alice-lg: Alice - Through the Looking Glass https://lg.de-cix.net https://lg.ecix.net · GitHub
Skip to content

Repository files navigation

Alice-LG - Your friendly looking glass

"No, no! The adventures first, explanations take such a dreadful time."
Lewis Carroll, Alice's Adventures in Wonderland & Through the Looking-Glass

Take a look at Alice-LG production examples at:

And checkout the API at:

Breaking Changes

6.0.0

With the new functional react UI, the DOMContentLoaded event can no longer be used for injecting additional content. Please use Alice.onLayoutReady(function(main) { ... }); instead.

5.1.0

The spelling of "neighbors" is now harmonized. Please update your config and replace e.g. neighbour.asn with neighbor.asn (in case of java script errors).

Explanations

Alice-LG is a BGP looking glass which gets its data from external APIs.

Currently Alice-LG supports the following APIs:

Birdwatcher

Normally you would first install the birdwatcher API directly on the machine(s) where you run BIRD on and then install Alice-LG on a seperate public facing server and point her to the afore mentioned birdwatcher API.

This project was a direct result of the RIPE IXP Tools Hackathon just prior to RIPE73 in Madrid, Spain.

Major thanks to Barry O'Donovan who built the original INEX Bird's Eye BIRD API of which Alice-LG is a spinnoff

GoBGP

Alice-LG supports direct integration with GoBGP instances using gRPC. See the configuration section for more detail.

OpenBGPD

Alice-LG supports OpenBGP via bgplgd and openbgpd-state-server.

Building Alice-LG from scratch

These examples include setting up your Go environment, if you already have set that up then you can obviously skip that

CentOS:

First add the following lines at the end of your ~/.bash_profile:

GOPATH=$HOME/go
export GOPATH
PATH=$PATH:$GOPATH/bin
export PATH

Now run:

source~/.bash_profile
# Install frontend build dependencies
sudo yum install golang npm
sudo npm install --global yarn
mkdir -p ~/go/bin ~/go/pkg ~/go/src/github.com/alice-lg/
cd~/go/src/github.com/alice-lg
git clone https://github.com/alice-lg/alice-lg.git
cd alice-lg
make

Your Alice-LG source will now be located at ~/go/src/github.com/alice-lg/alice-lg and your alice-LG executable should be at ~/go/src/github.com/alice-lg/alice-lg/bin/alice-lg-linux-amd64

Configuration

An example configuration can be found at etc/alice-lg/alice.example.conf.

You can copy it to any of the following locations:

etc/alice-lg/alice.conf # local
etc/alice-lg/alice.local.conf # local
/etc/alice-lg/alice.conf # global

You will have to edit the configuration file as you need to point Alice-LG to the correct backend source. Multiple sources can be configured.

Birdwatcher:

[source.rs1-example-v4]name = rs1.example.com (IPv4)
[source.rs1-example-v4.birdwatcher]api = http://rs1.example.com:29184/
neighbors_refresh_timeout = 2
# show_last_reboot = true# timezone = UTC# type = single_table / multi_tabletype = multi_table
# not needed for single_tablepeer_table_prefix = T
pipe_protocol_prefix = M
[source.rs1-example-v6]name = rs1.example.com (IPv6)
[source.rs1-example-v6.birdwatcher]api = http://rs1.example.com:29186/

GoBGP:

[source.rs2-example]name = rs2.example.com
group = AMS
[source.rs2-example.gobgp]# Host is the IP (or DNS name) and port for the remote GoBGP daemonhost = rs2.example.com:50051
# ProcessingTimeout is a timeout in seconds configured per gRPC call to a given GoBGP daemonprocessing_timeout = 300

Configure TLS with:

tls_crt = /path/to/cert
tls_common_name = "common name"

You can disable TLS with insecure = true.

OpenBGPD via openbgpd-state-server:

[source.rs-example]name = rs-example.openbgpd-state-server
[source.rs-example.openbgpd-state-server]api = http://rs23.example.net:29111/api
# Optional response cache time in seconds# Default: disabled (0)cache_ttl = 100

OpenBGPD via bgplgd:

[source.rs-example]name = rs-example.openbgpd-bgplgd
[source.rs-example.openbgpd-bgplgd]api = http://rs23.example.net/bgplgd
# Optional response cache time in seconds# Default: disabled (0)cache_ttl = 100

Running

Launch the server by running

./bin/alice-lg-linux-amd64

Customization

Alice now supports custom themes! In your alice.conf, you now can specify a theme by setting:

[theme]
path = /path/to/my/alice-theme

with the optional parameter (the "mountpoint" of the theme) url_base = /theme

You can put assets (images, fonts, javscript, css) in this folder.

Stylesheets and Javascripts are automatically included in the client's html and are served from the backend.

Alice provides early stages of an extension API, which is for now only used to modify the content of the welcome screen, by providing a javascript in your theme containing:

Alice.updateContent({welcome: {title: "My Awesome Looking Glass",tagline: "powered by Alice"}});

A callback for running custom javascript after the base application was initialized can be installed using:

Alice.onLayoutReady(function(page){// page is the layout HTML root element});

For an example check out: https://github.com/alice-lg/alice-theme-example

Hacking

The client is a Single Page React Application. All sources are available in ui/.

Yarn is required for building the UI.

Create a fresh UI build with

cd ui/
make

This will install all dependencies with yarn install and run yarn build.

As this is a create-react-app application, react-scripts are present and you can just run a development server using yarn start.

All this available as a containerized environment:

Running docker-compose up in the ./dev will build and start the backend and run a webpack dev server for the UI.

The UI is then available on http://localhost:3000/ and on http://localhost:7340/ the backend will serve the API.

Sponsors

The development of Alice is now sponsored by

DE-CIX Logo

Many thanks go out to ECIX, where this project originated and was backed over the last two years.

Support for OpenBGPD was sponsored by the Route Server Support Foundation.

About

Alice - Through the Looking Glass https://lg.de-cix.nethttps://lg.ecix.net

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - fullctl/alice-lg: Alice - Through the Looking Glass https://lg.de-cix.net https://lg.ecix.net · GitHub
Skip to content

Repository files navigation

Alice-LG - Your friendly looking glass

"No, no! The adventures first, explanations take such a dreadful time."
Lewis Carroll, Alice's Adventures in Wonderland & Through the Looking-Glass

Take a look at Alice-LG production examples at:

And checkout the API at:

Breaking Changes

6.0.0

With the new functional react UI, the DOMContentLoaded event can no longer be used for injecting additional content. Please use Alice.onLayoutReady(function(main) { ... }); instead.

5.1.0

The spelling of "neighbors" is now harmonized. Please update your config and replace e.g. neighbour.asn with neighbor.asn (in case of java script errors).

Explanations

Alice-LG is a BGP looking glass which gets its data from external APIs.

Currently Alice-LG supports the following APIs:

Birdwatcher

Normally you would first install the birdwatcher API directly on the machine(s) where you run BIRD on and then install Alice-LG on a seperate public facing server and point her to the afore mentioned birdwatcher API.

This project was a direct result of the RIPE IXP Tools Hackathon just prior to RIPE73 in Madrid, Spain.

Major thanks to Barry O'Donovan who built the original INEX Bird's Eye BIRD API of which Alice-LG is a spinnoff

GoBGP

Alice-LG supports direct integration with GoBGP instances using gRPC. See the configuration section for more detail.

OpenBGPD

Alice-LG supports OpenBGP via bgplgd and openbgpd-state-server.

Building Alice-LG from scratch

These examples include setting up your Go environment, if you already have set that up then you can obviously skip that

CentOS:

First add the following lines at the end of your ~/.bash_profile:

GOPATH=$HOME/go
export GOPATH
PATH=$PATH:$GOPATH/bin
export PATH

Now run:

source~/.bash_profile
# Install frontend build dependencies
sudo yum install golang npm
sudo npm install --global yarn
mkdir -p ~/go/bin ~/go/pkg ~/go/src/github.com/alice-lg/
cd~/go/src/github.com/alice-lg
git clone https://github.com/alice-lg/alice-lg.git
cd alice-lg
make

Your Alice-LG source will now be located at ~/go/src/github.com/alice-lg/alice-lg and your alice-LG executable should be at ~/go/src/github.com/alice-lg/alice-lg/bin/alice-lg-linux-amd64

Configuration

An example configuration can be found at etc/alice-lg/alice.example.conf.

You can copy it to any of the following locations:

etc/alice-lg/alice.conf # local
etc/alice-lg/alice.local.conf # local
/etc/alice-lg/alice.conf # global

You will have to edit the configuration file as you need to point Alice-LG to the correct backend source. Multiple sources can be configured.

Birdwatcher:

[source.rs1-example-v4]name = rs1.example.com (IPv4)
[source.rs1-example-v4.birdwatcher]api = http://rs1.example.com:29184/
neighbors_refresh_timeout = 2
# show_last_reboot = true# timezone = UTC# type = single_table / multi_tabletype = multi_table
# not needed for single_tablepeer_table_prefix = T
pipe_protocol_prefix = M
[source.rs1-example-v6]name = rs1.example.com (IPv6)
[source.rs1-example-v6.birdwatcher]api = http://rs1.example.com:29186/

GoBGP:

[source.rs2-example]name = rs2.example.com
group = AMS
[source.rs2-example.gobgp]# Host is the IP (or DNS name) and port for the remote GoBGP daemonhost = rs2.example.com:50051
# ProcessingTimeout is a timeout in seconds configured per gRPC call to a given GoBGP daemonprocessing_timeout = 300

Configure TLS with:

tls_crt = /path/to/cert
tls_common_name = "common name"

You can disable TLS with insecure = true.

OpenBGPD via openbgpd-state-server:

[source.rs-example]name = rs-example.openbgpd-state-server
[source.rs-example.openbgpd-state-server]api = http://rs23.example.net:29111/api
# Optional response cache time in seconds# Default: disabled (0)cache_ttl = 100

OpenBGPD via bgplgd:

[source.rs-example]name = rs-example.openbgpd-bgplgd
[source.rs-example.openbgpd-bgplgd]api = http://rs23.example.net/bgplgd
# Optional response cache time in seconds# Default: disabled (0)cache_ttl = 100

Running

Launch the server by running

./bin/alice-lg-linux-amd64

Customization

Alice now supports custom themes! In your alice.conf, you now can specify a theme by setting:

[theme]
path = /path/to/my/alice-theme

with the optional parameter (the "mountpoint" of the theme) url_base = /theme

You can put assets (images, fonts, javscript, css) in this folder.

Stylesheets and Javascripts are automatically included in the client's html and are served from the backend.

Alice provides early stages of an extension API, which is for now only used to modify the content of the welcome screen, by providing a javascript in your theme containing:

Alice.updateContent({welcome: {title: "My Awesome Looking Glass",tagline: "powered by Alice"}});

A callback for running custom javascript after the base application was initialized can be installed using:

Alice.onLayoutReady(function(page){// page is the layout HTML root element});

For an example check out: https://github.com/alice-lg/alice-theme-example

Hacking

The client is a Single Page React Application. All sources are available in ui/.

Yarn is required for building the UI.

Create a fresh UI build with

cd ui/
make

This will install all dependencies with yarn install and run yarn build.

As this is a create-react-app application, react-scripts are present and you can just run a development server using yarn start.

All this available as a containerized environment:

Running docker-compose up in the ./dev will build and start the backend and run a webpack dev server for the UI.

The UI is then available on http://localhost:3000/ and on http://localhost:7340/ the backend will serve the API.

Sponsors

The development of Alice is now sponsored by

DE-CIX Logo

Many thanks go out to ECIX, where this project originated and was backed over the last two years.

Support for OpenBGPD was sponsored by the Route Server Support Foundation.

About

Alice - Through the Looking Glass https://lg.de-cix.nethttps://lg.ecix.net

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - fullctl/alice-lg: Alice - Through the Looking Glass https://lg.de-cix.net https://lg.ecix.net · GitHub
Skip to content

Repository files navigation

Alice-LG - Your friendly looking glass

"No, no! The adventures first, explanations take such a dreadful time."
Lewis Carroll, Alice's Adventures in Wonderland & Through the Looking-Glass

Take a look at Alice-LG production examples at:

And checkout the API at:

Breaking Changes

6.0.0

With the new functional react UI, the DOMContentLoaded event can no longer be used for injecting additional content. Please use Alice.onLayoutReady(function(main) { ... }); instead.

5.1.0

The spelling of "neighbors" is now harmonized. Please update your config and replace e.g. neighbour.asn with neighbor.asn (in case of java script errors).

Explanations

Alice-LG is a BGP looking glass which gets its data from external APIs.

Currently Alice-LG supports the following APIs:

Birdwatcher

Normally you would first install the birdwatcher API directly on the machine(s) where you run BIRD on and then install Alice-LG on a seperate public facing server and point her to the afore mentioned birdwatcher API.

This project was a direct result of the RIPE IXP Tools Hackathon just prior to RIPE73 in Madrid, Spain.

Major thanks to Barry O'Donovan who built the original INEX Bird's Eye BIRD API of which Alice-LG is a spinnoff

GoBGP

Alice-LG supports direct integration with GoBGP instances using gRPC. See the configuration section for more detail.

OpenBGPD

Alice-LG supports OpenBGP via bgplgd and openbgpd-state-server.

Building Alice-LG from scratch

These examples include setting up your Go environment, if you already have set that up then you can obviously skip that

CentOS:

First add the following lines at the end of your ~/.bash_profile:

GOPATH=$HOME/go
export GOPATH
PATH=$PATH:$GOPATH/bin
export PATH

Now run:

source~/.bash_profile
# Install frontend build dependencies
sudo yum install golang npm
sudo npm install --global yarn
mkdir -p ~/go/bin ~/go/pkg ~/go/src/github.com/alice-lg/
cd~/go/src/github.com/alice-lg
git clone https://github.com/alice-lg/alice-lg.git
cd alice-lg
make

Your Alice-LG source will now be located at ~/go/src/github.com/alice-lg/alice-lg and your alice-LG executable should be at ~/go/src/github.com/alice-lg/alice-lg/bin/alice-lg-linux-amd64

Configuration

An example configuration can be found at etc/alice-lg/alice.example.conf.

You can copy it to any of the following locations:

etc/alice-lg/alice.conf # local
etc/alice-lg/alice.local.conf # local
/etc/alice-lg/alice.conf # global

You will have to edit the configuration file as you need to point Alice-LG to the correct backend source. Multiple sources can be configured.

Birdwatcher:

[source.rs1-example-v4]name = rs1.example.com (IPv4)
[source.rs1-example-v4.birdwatcher]api = http://rs1.example.com:29184/
neighbors_refresh_timeout = 2
# show_last_reboot = true# timezone = UTC# type = single_table / multi_tabletype = multi_table
# not needed for single_tablepeer_table_prefix = T
pipe_protocol_prefix = M
[source.rs1-example-v6]name = rs1.example.com (IPv6)
[source.rs1-example-v6.birdwatcher]api = http://rs1.example.com:29186/

GoBGP:

[source.rs2-example]name = rs2.example.com
group = AMS
[source.rs2-example.gobgp]# Host is the IP (or DNS name) and port for the remote GoBGP daemonhost = rs2.example.com:50051
# ProcessingTimeout is a timeout in seconds configured per gRPC call to a given GoBGP daemonprocessing_timeout = 300

Configure TLS with:

tls_crt = /path/to/cert
tls_common_name = "common name"

You can disable TLS with insecure = true.

OpenBGPD via openbgpd-state-server:

[source.rs-example]name = rs-example.openbgpd-state-server
[source.rs-example.openbgpd-state-server]api = http://rs23.example.net:29111/api
# Optional response cache time in seconds# Default: disabled (0)cache_ttl = 100

OpenBGPD via bgplgd:

[source.rs-example]name = rs-example.openbgpd-bgplgd
[source.rs-example.openbgpd-bgplgd]api = http://rs23.example.net/bgplgd
# Optional response cache time in seconds# Default: disabled (0)cache_ttl = 100

Running

Launch the server by running

./bin/alice-lg-linux-amd64

Customization

Alice now supports custom themes! In your alice.conf, you now can specify a theme by setting:

[theme]
path = /path/to/my/alice-theme

with the optional parameter (the "mountpoint" of the theme) url_base = /theme

You can put assets (images, fonts, javscript, css) in this folder.

Stylesheets and Javascripts are automatically included in the client's html and are served from the backend.

Alice provides early stages of an extension API, which is for now only used to modify the content of the welcome screen, by providing a javascript in your theme containing:

Alice.updateContent({welcome: {title: "My Awesome Looking Glass",tagline: "powered by Alice"}});

A callback for running custom javascript after the base application was initialized can be installed using:

Alice.onLayoutReady(function(page){// page is the layout HTML root element});

For an example check out: https://github.com/alice-lg/alice-theme-example

Hacking

The client is a Single Page React Application. All sources are available in ui/.

Yarn is required for building the UI.

Create a fresh UI build with

cd ui/
make

This will install all dependencies with yarn install and run yarn build.

As this is a create-react-app application, react-scripts are present and you can just run a development server using yarn start.

All this available as a containerized environment:

Running docker-compose up in the ./dev will build and start the backend and run a webpack dev server for the UI.

The UI is then available on http://localhost:3000/ and on http://localhost:7340/ the backend will serve the API.

Sponsors

The development of Alice is now sponsored by

DE-CIX Logo

Many thanks go out to ECIX, where this project originated and was backed over the last two years.

Support for OpenBGPD was sponsored by the Route Server Support Foundation.

About

Alice - Through the Looking Glass https://lg.de-cix.nethttps://lg.ecix.net

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - fullctl/alice-lg: Alice - Through the Looking Glass https://lg.de-cix.net https://lg.ecix.net · GitHub
Skip to content

Repository files navigation

Alice-LG - Your friendly looking glass

"No, no! The adventures first, explanations take such a dreadful time."
Lewis Carroll, Alice's Adventures in Wonderland & Through the Looking-Glass

Take a look at Alice-LG production examples at:

And checkout the API at:

Breaking Changes

6.0.0

With the new functional react UI, the DOMContentLoaded event can no longer be used for injecting additional content. Please use Alice.onLayoutReady(function(main) { ... }); instead.

5.1.0

The spelling of "neighbors" is now harmonized. Please update your config and replace e.g. neighbour.asn with neighbor.asn (in case of java script errors).

Explanations

Alice-LG is a BGP looking glass which gets its data from external APIs.

Currently Alice-LG supports the following APIs:

Birdwatcher

Normally you would first install the birdwatcher API directly on the machine(s) where you run BIRD on and then install Alice-LG on a seperate public facing server and point her to the afore mentioned birdwatcher API.

This project was a direct result of the RIPE IXP Tools Hackathon just prior to RIPE73 in Madrid, Spain.

Major thanks to Barry O'Donovan who built the original INEX Bird's Eye BIRD API of which Alice-LG is a spinnoff

GoBGP

Alice-LG supports direct integration with GoBGP instances using gRPC. See the configuration section for more detail.

OpenBGPD

Alice-LG supports OpenBGP via bgplgd and openbgpd-state-server.

Building Alice-LG from scratch

These examples include setting up your Go environment, if you already have set that up then you can obviously skip that

CentOS:

First add the following lines at the end of your ~/.bash_profile:

GOPATH=$HOME/go
export GOPATH
PATH=$PATH:$GOPATH/bin
export PATH

Now run:

source~/.bash_profile
# Install frontend build dependencies
sudo yum install golang npm
sudo npm install --global yarn
mkdir -p ~/go/bin ~/go/pkg ~/go/src/github.com/alice-lg/
cd~/go/src/github.com/alice-lg
git clone https://github.com/alice-lg/alice-lg.git
cd alice-lg
make

Your Alice-LG source will now be located at ~/go/src/github.com/alice-lg/alice-lg and your alice-LG executable should be at ~/go/src/github.com/alice-lg/alice-lg/bin/alice-lg-linux-amd64

Configuration

An example configuration can be found at etc/alice-lg/alice.example.conf.

You can copy it to any of the following locations:

etc/alice-lg/alice.conf # local
etc/alice-lg/alice.local.conf # local
/etc/alice-lg/alice.conf # global

You will have to edit the configuration file as you need to point Alice-LG to the correct backend source. Multiple sources can be configured.

Birdwatcher:

[source.rs1-example-v4]name = rs1.example.com (IPv4)
[source.rs1-example-v4.birdwatcher]api = http://rs1.example.com:29184/
neighbors_refresh_timeout = 2
# show_last_reboot = true# timezone = UTC# type = single_table / multi_tabletype = multi_table
# not needed for single_tablepeer_table_prefix = T
pipe_protocol_prefix = M
[source.rs1-example-v6]name = rs1.example.com (IPv6)
[source.rs1-example-v6.birdwatcher]api = http://rs1.example.com:29186/

GoBGP:

[source.rs2-example]name = rs2.example.com
group = AMS
[source.rs2-example.gobgp]# Host is the IP (or DNS name) and port for the remote GoBGP daemonhost = rs2.example.com:50051
# ProcessingTimeout is a timeout in seconds configured per gRPC call to a given GoBGP daemonprocessing_timeout = 300

Configure TLS with:

tls_crt = /path/to/cert
tls_common_name = "common name"

You can disable TLS with insecure = true.

OpenBGPD via openbgpd-state-server:

[source.rs-example]name = rs-example.openbgpd-state-server
[source.rs-example.openbgpd-state-server]api = http://rs23.example.net:29111/api
# Optional response cache time in seconds# Default: disabled (0)cache_ttl = 100

OpenBGPD via bgplgd:

[source.rs-example]name = rs-example.openbgpd-bgplgd
[source.rs-example.openbgpd-bgplgd]api = http://rs23.example.net/bgplgd
# Optional response cache time in seconds# Default: disabled (0)cache_ttl = 100

Running

Launch the server by running

./bin/alice-lg-linux-amd64

Customization

Alice now supports custom themes! In your alice.conf, you now can specify a theme by setting:

[theme]
path = /path/to/my/alice-theme

with the optional parameter (the "mountpoint" of the theme) url_base = /theme

You can put assets (images, fonts, javscript, css) in this folder.

Stylesheets and Javascripts are automatically included in the client's html and are served from the backend.

Alice provides early stages of an extension API, which is for now only used to modify the content of the welcome screen, by providing a javascript in your theme containing:

Alice.updateContent({welcome: {title: "My Awesome Looking Glass",tagline: "powered by Alice"}});

A callback for running custom javascript after the base application was initialized can be installed using:

Alice.onLayoutReady(function(page){// page is the layout HTML root element});

For an example check out: https://github.com/alice-lg/alice-theme-example

Hacking

The client is a Single Page React Application. All sources are available in ui/.

Yarn is required for building the UI.

Create a fresh UI build with

cd ui/
make

This will install all dependencies with yarn install and run yarn build.

As this is a create-react-app application, react-scripts are present and you can just run a development server using yarn start.

All this available as a containerized environment:

Running docker-compose up in the ./dev will build and start the backend and run a webpack dev server for the UI.

The UI is then available on http://localhost:3000/ and on http://localhost:7340/ the backend will serve the API.

Sponsors

The development of Alice is now sponsored by

DE-CIX Logo

Many thanks go out to ECIX, where this project originated and was backed over the last two years.

Support for OpenBGPD was sponsored by the Route Server Support Foundation.

About

Alice - Through the Looking Glass https://lg.de-cix.nethttps://lg.ecix.net

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - fullctl/alice-lg: Alice - Through the Looking Glass https://lg.de-cix.net https://lg.ecix.net · GitHub
Skip to content

Repository files navigation

Alice-LG - Your friendly looking glass

"No, no! The adventures first, explanations take such a dreadful time."
Lewis Carroll, Alice's Adventures in Wonderland & Through the Looking-Glass

Take a look at Alice-LG production examples at:

And checkout the API at:

Breaking Changes

6.0.0

With the new functional react UI, the DOMContentLoaded event can no longer be used for injecting additional content. Please use Alice.onLayoutReady(function(main) { ... }); instead.

5.1.0

The spelling of "neighbors" is now harmonized. Please update your config and replace e.g. neighbour.asn with neighbor.asn (in case of java script errors).

Explanations

Alice-LG is a BGP looking glass which gets its data from external APIs.

Currently Alice-LG supports the following APIs:

Birdwatcher

Normally you would first install the birdwatcher API directly on the machine(s) where you run BIRD on and then install Alice-LG on a seperate public facing server and point her to the afore mentioned birdwatcher API.

This project was a direct result of the RIPE IXP Tools Hackathon just prior to RIPE73 in Madrid, Spain.

Major thanks to Barry O'Donovan who built the original INEX Bird's Eye BIRD API of which Alice-LG is a spinnoff

GoBGP

Alice-LG supports direct integration with GoBGP instances using gRPC. See the configuration section for more detail.

OpenBGPD

Alice-LG supports OpenBGP via bgplgd and openbgpd-state-server.

Building Alice-LG from scratch

These examples include setting up your Go environment, if you already have set that up then you can obviously skip that

CentOS:

First add the following lines at the end of your ~/.bash_profile:

GOPATH=$HOME/go
export GOPATH
PATH=$PATH:$GOPATH/bin
export PATH

Now run:

source~/.bash_profile
# Install frontend build dependencies
sudo yum install golang npm
sudo npm install --global yarn
mkdir -p ~/go/bin ~/go/pkg ~/go/src/github.com/alice-lg/
cd~/go/src/github.com/alice-lg
git clone https://github.com/alice-lg/alice-lg.git
cd alice-lg
make

Your Alice-LG source will now be located at ~/go/src/github.com/alice-lg/alice-lg and your alice-LG executable should be at ~/go/src/github.com/alice-lg/alice-lg/bin/alice-lg-linux-amd64

Configuration

An example configuration can be found at etc/alice-lg/alice.example.conf.

You can copy it to any of the following locations:

etc/alice-lg/alice.conf # local
etc/alice-lg/alice.local.conf # local
/etc/alice-lg/alice.conf # global

You will have to edit the configuration file as you need to point Alice-LG to the correct backend source. Multiple sources can be configured.

Birdwatcher:

[source.rs1-example-v4]name = rs1.example.com (IPv4)
[source.rs1-example-v4.birdwatcher]api = http://rs1.example.com:29184/
neighbors_refresh_timeout = 2
# show_last_reboot = true# timezone = UTC# type = single_table / multi_tabletype = multi_table
# not needed for single_tablepeer_table_prefix = T
pipe_protocol_prefix = M
[source.rs1-example-v6]name = rs1.example.com (IPv6)
[source.rs1-example-v6.birdwatcher]api = http://rs1.example.com:29186/

GoBGP:

[source.rs2-example]name = rs2.example.com
group = AMS
[source.rs2-example.gobgp]# Host is the IP (or DNS name) and port for the remote GoBGP daemonhost = rs2.example.com:50051
# ProcessingTimeout is a timeout in seconds configured per gRPC call to a given GoBGP daemonprocessing_timeout = 300

Configure TLS with:

tls_crt = /path/to/cert
tls_common_name = "common name"

You can disable TLS with insecure = true.

OpenBGPD via openbgpd-state-server:

[source.rs-example]name = rs-example.openbgpd-state-server
[source.rs-example.openbgpd-state-server]api = http://rs23.example.net:29111/api
# Optional response cache time in seconds# Default: disabled (0)cache_ttl = 100

OpenBGPD via bgplgd:

[source.rs-example]name = rs-example.openbgpd-bgplgd
[source.rs-example.openbgpd-bgplgd]api = http://rs23.example.net/bgplgd
# Optional response cache time in seconds# Default: disabled (0)cache_ttl = 100

Running

Launch the server by running

./bin/alice-lg-linux-amd64

Customization

Alice now supports custom themes! In your alice.conf, you now can specify a theme by setting:

[theme]
path = /path/to/my/alice-theme

with the optional parameter (the "mountpoint" of the theme) url_base = /theme

You can put assets (images, fonts, javscript, css) in this folder.

Stylesheets and Javascripts are automatically included in the client's html and are served from the backend.

Alice provides early stages of an extension API, which is for now only used to modify the content of the welcome screen, by providing a javascript in your theme containing:

Alice.updateContent({welcome: {title: "My Awesome Looking Glass",tagline: "powered by Alice"}});

A callback for running custom javascript after the base application was initialized can be installed using:

Alice.onLayoutReady(function(page){// page is the layout HTML root element});

For an example check out: https://github.com/alice-lg/alice-theme-example

Hacking

The client is a Single Page React Application. All sources are available in ui/.

Yarn is required for building the UI.

Create a fresh UI build with

cd ui/
make

This will install all dependencies with yarn install and run yarn build.

As this is a create-react-app application, react-scripts are present and you can just run a development server using yarn start.

All this available as a containerized environment:

Running docker-compose up in the ./dev will build and start the backend and run a webpack dev server for the UI.

The UI is then available on http://localhost:3000/ and on http://localhost:7340/ the backend will serve the API.

Sponsors

The development of Alice is now sponsored by

DE-CIX Logo

Many thanks go out to ECIX, where this project originated and was backed over the last two years.

Support for OpenBGPD was sponsored by the Route Server Support Foundation.

About

Alice - Through the Looking Glass https://lg.de-cix.nethttps://lg.ecix.net

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - fullctl/alice-lg: Alice - Through the Looking Glass https://lg.de-cix.net https://lg.ecix.net · GitHub
Skip to content

Repository files navigation

Alice-LG - Your friendly looking glass

"No, no! The adventures first, explanations take such a dreadful time."
Lewis Carroll, Alice's Adventures in Wonderland & Through the Looking-Glass

Take a look at Alice-LG production examples at:

And checkout the API at:

Breaking Changes

6.0.0

With the new functional react UI, the DOMContentLoaded event can no longer be used for injecting additional content. Please use Alice.onLayoutReady(function(main) { ... }); instead.

5.1.0

The spelling of "neighbors" is now harmonized. Please update your config and replace e.g. neighbour.asn with neighbor.asn (in case of java script errors).

Explanations

Alice-LG is a BGP looking glass which gets its data from external APIs.

Currently Alice-LG supports the following APIs:

Birdwatcher

Normally you would first install the birdwatcher API directly on the machine(s) where you run BIRD on and then install Alice-LG on a seperate public facing server and point her to the afore mentioned birdwatcher API.

This project was a direct result of the RIPE IXP Tools Hackathon just prior to RIPE73 in Madrid, Spain.

Major thanks to Barry O'Donovan who built the original INEX Bird's Eye BIRD API of which Alice-LG is a spinnoff

GoBGP

Alice-LG supports direct integration with GoBGP instances using gRPC. See the configuration section for more detail.

OpenBGPD

Alice-LG supports OpenBGP via bgplgd and openbgpd-state-server.

Building Alice-LG from scratch

These examples include setting up your Go environment, if you already have set that up then you can obviously skip that

CentOS:

First add the following lines at the end of your ~/.bash_profile:

GOPATH=$HOME/go
export GOPATH
PATH=$PATH:$GOPATH/bin
export PATH

Now run:

source~/.bash_profile
# Install frontend build dependencies
sudo yum install golang npm
sudo npm install --global yarn
mkdir -p ~/go/bin ~/go/pkg ~/go/src/github.com/alice-lg/
cd~/go/src/github.com/alice-lg
git clone https://github.com/alice-lg/alice-lg.git
cd alice-lg
make

Your Alice-LG source will now be located at ~/go/src/github.com/alice-lg/alice-lg and your alice-LG executable should be at ~/go/src/github.com/alice-lg/alice-lg/bin/alice-lg-linux-amd64

Configuration

An example configuration can be found at etc/alice-lg/alice.example.conf.

You can copy it to any of the following locations:

etc/alice-lg/alice.conf # local
etc/alice-lg/alice.local.conf # local
/etc/alice-lg/alice.conf # global

You will have to edit the configuration file as you need to point Alice-LG to the correct backend source. Multiple sources can be configured.

Birdwatcher:

[source.rs1-example-v4]name = rs1.example.com (IPv4)
[source.rs1-example-v4.birdwatcher]api = http://rs1.example.com:29184/
neighbors_refresh_timeout = 2
# show_last_reboot = true# timezone = UTC# type = single_table / multi_tabletype = multi_table
# not needed for single_tablepeer_table_prefix = T
pipe_protocol_prefix = M
[source.rs1-example-v6]name = rs1.example.com (IPv6)
[source.rs1-example-v6.birdwatcher]api = http://rs1.example.com:29186/

GoBGP:

[source.rs2-example]name = rs2.example.com
group = AMS
[source.rs2-example.gobgp]# Host is the IP (or DNS name) and port for the remote GoBGP daemonhost = rs2.example.com:50051
# ProcessingTimeout is a timeout in seconds configured per gRPC call to a given GoBGP daemonprocessing_timeout = 300

Configure TLS with:

tls_crt = /path/to/cert
tls_common_name = "common name"

You can disable TLS with insecure = true.

OpenBGPD via openbgpd-state-server:

[source.rs-example]name = rs-example.openbgpd-state-server
[source.rs-example.openbgpd-state-server]api = http://rs23.example.net:29111/api
# Optional response cache time in seconds# Default: disabled (0)cache_ttl = 100

OpenBGPD via bgplgd:

[source.rs-example]name = rs-example.openbgpd-bgplgd
[source.rs-example.openbgpd-bgplgd]api = http://rs23.example.net/bgplgd
# Optional response cache time in seconds# Default: disabled (0)cache_ttl = 100

Running

Launch the server by running

./bin/alice-lg-linux-amd64

Customization

Alice now supports custom themes! In your alice.conf, you now can specify a theme by setting:

[theme]
path = /path/to/my/alice-theme

with the optional parameter (the "mountpoint" of the theme) url_base = /theme

You can put assets (images, fonts, javscript, css) in this folder.

Stylesheets and Javascripts are automatically included in the client's html and are served from the backend.

Alice provides early stages of an extension API, which is for now only used to modify the content of the welcome screen, by providing a javascript in your theme containing:

Alice.updateContent({welcome: {title: "My Awesome Looking Glass",tagline: "powered by Alice"}});

A callback for running custom javascript after the base application was initialized can be installed using:

Alice.onLayoutReady(function(page){// page is the layout HTML root element});

For an example check out: https://github.com/alice-lg/alice-theme-example

Hacking

The client is a Single Page React Application. All sources are available in ui/.

Yarn is required for building the UI.

Create a fresh UI build with

cd ui/
make

This will install all dependencies with yarn install and run yarn build.

As this is a create-react-app application, react-scripts are present and you can just run a development server using yarn start.

All this available as a containerized environment:

Running docker-compose up in the ./dev will build and start the backend and run a webpack dev server for the UI.

The UI is then available on http://localhost:3000/ and on http://localhost:7340/ the backend will serve the API.

Sponsors

The development of Alice is now sponsored by

DE-CIX Logo

Many thanks go out to ECIX, where this project originated and was backed over the last two years.

Support for OpenBGPD was sponsored by the Route Server Support Foundation.

About

Alice - Through the Looking Glass https://lg.de-cix.nethttps://lg.ecix.net

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - fullctl/alice-lg: Alice - Through the Looking Glass https://lg.de-cix.net https://lg.ecix.net · GitHub
Skip to content

Repository files navigation

Alice-LG - Your friendly looking glass

"No, no! The adventures first, explanations take such a dreadful time."
Lewis Carroll, Alice's Adventures in Wonderland & Through the Looking-Glass

Take a look at Alice-LG production examples at:

And checkout the API at:

Breaking Changes

6.0.0

With the new functional react UI, the DOMContentLoaded event can no longer be used for injecting additional content. Please use Alice.onLayoutReady(function(main) { ... }); instead.

5.1.0

The spelling of "neighbors" is now harmonized. Please update your config and replace e.g. neighbour.asn with neighbor.asn (in case of java script errors).

Explanations

Alice-LG is a BGP looking glass which gets its data from external APIs.

Currently Alice-LG supports the following APIs:

Birdwatcher

Normally you would first install the birdwatcher API directly on the machine(s) where you run BIRD on and then install Alice-LG on a seperate public facing server and point her to the afore mentioned birdwatcher API.

This project was a direct result of the RIPE IXP Tools Hackathon just prior to RIPE73 in Madrid, Spain.

Major thanks to Barry O'Donovan who built the original INEX Bird's Eye BIRD API of which Alice-LG is a spinnoff

GoBGP

Alice-LG supports direct integration with GoBGP instances using gRPC. See the configuration section for more detail.

OpenBGPD

Alice-LG supports OpenBGP via bgplgd and openbgpd-state-server.

Building Alice-LG from scratch

These examples include setting up your Go environment, if you already have set that up then you can obviously skip that

CentOS:

First add the following lines at the end of your ~/.bash_profile:

GOPATH=$HOME/go
export GOPATH
PATH=$PATH:$GOPATH/bin
export PATH

Now run:

source~/.bash_profile
# Install frontend build dependencies
sudo yum install golang npm
sudo npm install --global yarn
mkdir -p ~/go/bin ~/go/pkg ~/go/src/github.com/alice-lg/
cd~/go/src/github.com/alice-lg
git clone https://github.com/alice-lg/alice-lg.git
cd alice-lg
make

Your Alice-LG source will now be located at ~/go/src/github.com/alice-lg/alice-lg and your alice-LG executable should be at ~/go/src/github.com/alice-lg/alice-lg/bin/alice-lg-linux-amd64

Configuration

An example configuration can be found at etc/alice-lg/alice.example.conf.

You can copy it to any of the following locations:

etc/alice-lg/alice.conf # local
etc/alice-lg/alice.local.conf # local
/etc/alice-lg/alice.conf # global

You will have to edit the configuration file as you need to point Alice-LG to the correct backend source. Multiple sources can be configured.

Birdwatcher:

[source.rs1-example-v4]name = rs1.example.com (IPv4)
[source.rs1-example-v4.birdwatcher]api = http://rs1.example.com:29184/
neighbors_refresh_timeout = 2
# show_last_reboot = true# timezone = UTC# type = single_table / multi_tabletype = multi_table
# not needed for single_tablepeer_table_prefix = T
pipe_protocol_prefix = M
[source.rs1-example-v6]name = rs1.example.com (IPv6)
[source.rs1-example-v6.birdwatcher]api = http://rs1.example.com:29186/

GoBGP:

[source.rs2-example]name = rs2.example.com
group = AMS
[source.rs2-example.gobgp]# Host is the IP (or DNS name) and port for the remote GoBGP daemonhost = rs2.example.com:50051
# ProcessingTimeout is a timeout in seconds configured per gRPC call to a given GoBGP daemonprocessing_timeout = 300

Configure TLS with:

tls_crt = /path/to/cert
tls_common_name = "common name"

You can disable TLS with insecure = true.

OpenBGPD via openbgpd-state-server:

[source.rs-example]name = rs-example.openbgpd-state-server
[source.rs-example.openbgpd-state-server]api = http://rs23.example.net:29111/api
# Optional response cache time in seconds# Default: disabled (0)cache_ttl = 100

OpenBGPD via bgplgd:

[source.rs-example]name = rs-example.openbgpd-bgplgd
[source.rs-example.openbgpd-bgplgd]api = http://rs23.example.net/bgplgd
# Optional response cache time in seconds# Default: disabled (0)cache_ttl = 100

Running

Launch the server by running

./bin/alice-lg-linux-amd64

Customization

Alice now supports custom themes! In your alice.conf, you now can specify a theme by setting:

[theme]
path = /path/to/my/alice-theme

with the optional parameter (the "mountpoint" of the theme) url_base = /theme

You can put assets (images, fonts, javscript, css) in this folder.

Stylesheets and Javascripts are automatically included in the client's html and are served from the backend.

Alice provides early stages of an extension API, which is for now only used to modify the content of the welcome screen, by providing a javascript in your theme containing:

Alice.updateContent({welcome: {title: "My Awesome Looking Glass",tagline: "powered by Alice"}});

A callback for running custom javascript after the base application was initialized can be installed using:

Alice.onLayoutReady(function(page){// page is the layout HTML root element});

For an example check out: https://github.com/alice-lg/alice-theme-example

Hacking

The client is a Single Page React Application. All sources are available in ui/.

Yarn is required for building the UI.

Create a fresh UI build with

cd ui/
make

This will install all dependencies with yarn install and run yarn build.

As this is a create-react-app application, react-scripts are present and you can just run a development server using yarn start.

All this available as a containerized environment:

Running docker-compose up in the ./dev will build and start the backend and run a webpack dev server for the UI.

The UI is then available on http://localhost:3000/ and on http://localhost:7340/ the backend will serve the API.

Sponsors

The development of Alice is now sponsored by

DE-CIX Logo

Many thanks go out to ECIX, where this project originated and was backed over the last two years.

Support for OpenBGPD was sponsored by the Route Server Support Foundation.

About

Alice - Through the Looking Glass https://lg.de-cix.nethttps://lg.ecix.net

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages