GithubHelp home page GithubHelp logo

internet-monitor's Introduction

Internet Speed Monitor

I've been curious to see how my internet speed varies during the day on my devices. As such, I decided to start collecting data.

Quickstart

Install the package:

pip install netspeedmonitor

Run the app from the command line:

netspeedmonitor app

If you'd like the app to run in the background:

netspeedmonitor app &

Be sure to take note of the process ID (PID) so that you can kill it as necessary.

To view the monitor UI, go to your [localhost in the browser on port 8501 (http://localhost:8501).

How this app works

Underneath the hood, we use the speedtest-cli package to send packets to Ookla's speed testing servers. The results are then logged to a TinyDB. To ensure atomic transactions, we use tinyrecord. Only a single instance of the app can be run per machine, because we use [tendo's] singleinstance module to ensure only a single instance runs on one machine. (Running multiple instances may clog up your internet especially if you are pinging Ookla's speed testing servers frequently, so we only allow a single instance to be run per machine. We use schedule to run speedtest-cli's speed testing functions on a user-configurable interval. Logging is made simple by using loguru The UI is built using streamlit; it was super fast and easy to build, kudos to the team!

Precautions to take

speedtest-cli sends about a few dozens of megabytes of data per test. As such, if you're using metered internet (i.e. one that has a data cap) such as a hotspot on your phone, you'll want to limit the frequency at which you ping Ookla's servers or prevent the process from running in the background.

Your internet speed data is private and yours by default

The open source package stores data in your home directory. By default it will store data at ~/.speedtest.json. (JSON is the default storage format for TinyDB.) You can inspect the source; by design, no measurement data is sent anywhere.

In fact, if you'd like to do your own analysis on the data, here's a code snippet that you can use to analyze it.

from tinydb import TinyDB

db = TinyDB("~/.speedtest.json")
df = pd.DataFrame(db.all())

Contributing and supporting the project

Contributions are welcome; support is even more welcome! Here's how you can help:

  1. Star the repo!
  2. Spread word about it on Twitter.
  3. Help test-drive the app.
  4. Test-drive the app on your Raspberry Pi.
  5. Make PRs to knock items off the roadmap.

Roadmap

  • Changing storage location (lets you back up on cloud storage).

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.