Code Monkey home page Code Monkey logo

globe's Introduction

globe

JavaScript application to search and view details for Tor relays and bridges. All the data comes from the Tor onionoo API. Uses Ember.js as JavaScript framework. Inspired by the official Tor Atlas.

Tor Onionoo Search is not affiliated with the Tor project. "Tor" and the "Onion Logo" are registered trademarks of The Tor Project, Inc.

##Use the application Build Status

To use a hosted version of Globe, click here to open http://globe.rndm.de. If you want to build your own version take a look at the grunt targets section.

If you can't or don't want to build the application on your own, you could download the latest archived relase from the release page.

##Features

  • search for bridges or relays
  • advanced search with country, running, flags and other filters
  • details for a bridge or relay
  • interactive graphs using dygraphs
  • shareable links for searches or details

##License

Globe is open-sourced software licensed under the MIT license

Project License
Ember.js MIT License
Pure Yahoo! Inc. BSD license
Font Awesome - Font SIL OFL 1.1
Font Awesome - SASS files MIT License
Handlebars MIT License
dygraphs MIT License
moment MIT License
jQuery MIT License
qTip2 MIT License
DataTables MIT license @
jquery deparam none mentioned
jsSHA BSD license

##Installation

Globe is tested and build with nodejs (0.10.x). For an easy overview on how to install node on your distribution look at Installing Node.js via package manager.

In addition to that, globe can be built in a virtual machine that is managed using Vagrant. To make it easier for you, we provide a Vagrantfile that builds an ubuntu (12.04) virtual machine with everything necessary for developing and building globe. If you have vagrant installed run vagrant up and wait until everything is ready.

Connect to your running virtual machine via vagrant ssh. Using the shared folder (cd /vagrant/) you can continue building globe using the following commands.

###Summary:

  1. npm install (not necessary in the vagrant machine)
  2. grunt
  3. node app.js

###Explanation

  1. First you need all the npm dependencies. Run npm install.

  2. Now you're ready to build the application and start the server. Call grunt and wait for it to complete the build process. Grunt precompiles the handlebars templates, combines all the different JavaScript and CSS files and minifies them. This can take a while depending on your computer.

  3. If it's done start the server using node app.js. This will start a simple express.js server that handles the requests.

If you only want to get the required html, JavaScript and CSS files see the Standalone grunt target below.

###grunt targets

#####Development target - grunt dev

  • useful for local development
  • uses not minified js and css
  • uses grunt watch to update code changes

#####Standalone target - grunt standalone

  • useful to create a minified version that is easy to deploy to your server
  • minifies all the js and css files
  • creates a /build folder that has all the required resources
  • used to build the resources for the running application

#####Standalone target with archive - grunt standalone-archive

  • same as grunt standalone but creates archive of the build directory
  • used for to create release files on github

#####Continuous integration target - grunt ci

  • same targets as grunt standalone with additional testing of the generated files using karma
  • used for travis continuous integration

#####Default target - grunt

  • same as standalone except it won't create a build folder with all the ressources

globe's People

Contributors

benib avatar makepanic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

globe's Issues

Display graphs for different time periods

The server-side Globe currently doesn't have graphs for different time periods. Moving this discussion here from [email protected].

Option 1: display graphs below each other (like Atlas does). Not pretty, but maybe the best solution we have without client-side JavaScript.

Option 2: merge all periods into one graph. I'm actually not sure how this would look like. Would all data points be on the same x axis? Then that's going to defeat the purpose of giving higher data resolution for more recent time periods. Maybe you can explain in more detail?

Search by contact fails

If I search for sysdev {at} leap {dot} se (which is an invalid search term to Onionoo), Globe attempts to search but never finishes.

Use a virtual table

I need to replace the current implementation with something that only renders a part of the whole table. Right now it renders everything which can cause a huge performance bottleneck.

Can be combined with #1

possible libs:

Graph and selection bar are not alligned when no data is available

Hi,

first of all thanks for Globe! It's a great tool! The issue I am reporting is purely cosmetical.

To reproduce it, find a relatively new relay for which there is no data before a certain time. Let's assume, a relay exists for 1 month, so there is no data older than that.

Select the "3 months" period tab.

You should see, that the graphs are showing the full time interval of three months including the first two months for which there is no data.

The selection bars below each graph, however, only show the time interval beginning with the first data; so in the case of our example it would only show the last month. Hence, the graphs and the selection bars are not aligned.

Cheers,
Lutwick

Request for top 10 relays by consensus weight should limit fields

[14:51:35.411] GET https://onionoo.torproject.org/details?type=relay&order=-consensus_weight&limit=10 [HTTP/1.1 304 Not Modified 404ms]
[14:52:11.097] GET https://onionoo.torproject.org/details?limit=50&search=gab&fields=fingerprint,nickname,advertised_bandwidth,last_restarted,country,flags,or_addresses,dir_address,running,hashed_fingerprint [HTTP/1.1 200 OK 489ms]

In theory, the first query could be improved by adding the same fields parameter as the second query uses.

Exit Policy Summary shouldn't display accepted and rejected ports

The exit_policy_summary field either contains an "accept" or a "reject" element. If there is an "accept" ("reject") element, the relay accepts (rejects) all TCP ports or port ranges in the given list for most IP addresses and rejects (accepts) all other ports. But saying "none" for the element which is not contained in the dict is misleading. It would be best to only display either accepted or rejected ports.

Fix search test failing

Error message:

Error: Assertion Failed: You have turned on testing mode, which disabled the run-loop's autorun. You will need to wrap any code with asynchronous side-effects in an Ember.run

Top 10 relays by consensus weight contains non-running relays

Globe makes the following request to populate its top 10 relays list:

https://onionoo.torproject.org/details?type=relay&order=-consensus_weight&limit=10&fields=fingerprint,nickname,advertised_bandwidth,last_restarted,country,flags,or_addresses,dir_address,running,hashed_fingerprint

It's probably confusing to list relays that are currently not running.

Can you add &running=true to that request?

Make "anonymous" a placeholder

It makes sense to make "anonymous" a placeholder in the search input box. It sort of seems counter intuitive right now. And then maybe make "anonymous" the default, if the search string is empty?

Uptime disparity

The uptime designated in the graph and the reported uptime are not consistent. I realize that they may be based off of different sources/calculations, but if so, this should be noted on the page. If they use the same source, there's a bug, since the uptime in the graph for the last week has been 100%, but the uptime shown is little over a day.

Cache Details result

To avoid requesting the details for a given fingerprint every time we could store the result on the first successful request.

Possible implementations:

localStorage:

indexedDB:

Implement caching mechanism

Moving this idea here from the [email protected] thread.

In the long run it would be useful to cache Onionoo results on the server running Globe in node.js. Though I'd say don't prioritize this right now.

However, when you get to this, I suggest implementing a slightly different caching algorithm for the node.js version of Globe than for the client-side Globe. The server-side Globe could download the full details and bandwidth documents once per hour and cache it on the server. In particular, it could attempt to download it more often and include an If-Modified-Since header in its request, and it'll only get an update once per hour. I guess this requires some concurrency magic on the server side to avoid multiple downloads in parallel.

But as I said above: this is a fine future work task! For now, it's fine to make new requests to Onionoo.

Colors in weights graph are correct

Either the line colors or legend in the weights graph is wrong. The node "Tonga" is not an exit, but it has non-zero exit probability. Not sure about the other colors.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.