Modern, privacy-friendly, and detailed web analytics that works without cookies or JS.

Overview

Shynet logo

Modern, privacy-friendly, and cookie-free web analytics.
Getting started »

ScreenshotsFeaturesOffice Hours


Motivation

There are a lot of web analytics tools. Unfortunately, most of them come with the following caveats:

  • They require handing all of your visitors' info to a third-party company
  • They use cookies to track visitors across sessions, so you need to have those annoying cookie notices
  • They collect so much personal data that even the NSA is jealous
  • They are closed source and/or expensive, often with limited data portability
  • They are hard to use

Shynet has none of these caveats. You host it yourself, so the data is yours. It works without cookies, so you don't need any intrusive cookie notices. It collects just enough data to be useful, but not enough to be creepy. It's open source and intended to be self-hosted. And you may even find the interface easy to use.

Shynet is a portmanteau of "Skynet" and "shy." The idea is that it gives you loads of useful information (Skynet) while also respecting your visitors' privacy (shy).

Screenshots

Note: These screenshots have been edited to hide sensitive data. The "real" Shynet has a lot more pages and information available, but hopefully this gives you an idea of the general look and feel of the tool.

Shynet's homepage Shynet's homepage, where you can see all of your services at a glance.

A service page A real service page, where you can see higher-level details about a site.

Not shown: management view, session view, full service view. (You'll need to install Shynet for yourself to see those!)

Shynet is built using a17t, an atomic design library. Customization and extension is simple; learn more about a17t.

Features

Architecture

  • Runs on a single machine — Because it's so small, Shynet can easily run as a single docker container on a single small VPS
  • ...or across a giant Kubernetes cluster — For higher traffic installations, Shynet can be deployed with as many parallelized ingress nodes as needed, with Redis caching and separate backend workers for database IO
  • Built using Django — Shynet is built using Django, so deploying, updating, and migrating can be done without headaches
  • Multiple users and sites — A single Shynet instance can support multiple users, each tracking multiple different sites

Tracking

  • JavaScript not required — It will fallback to using a 1x1 transparent tracking pixel if JavaScript isn't available
  • Lightweight — The tracking script weighs less than a kilobyte (and doesn't look like your typical tracking script)
  • Generally not blocked — Because you host Shynet yourself, it tends not to be on ad block lists
  • Primary-key integration — You can easily associate visitors in Shynet with their user accounts on your site (if that's something you want)

Metrics

Here's the information Shynet can give you about your visitors:

  • Hits — how many pages on your site were opened/viewed
  • Sessions — how many times your site was visited (essentially a collection of hits)
  • Page load time — how long the pages on your site look to load
  • Bounce rate — the percentage of visitors who left after just one page
  • Duration — how long visitors stayed on the site
  • Referrers — the links visitors followed to get to your site
  • Locations — the relative popularity of all the pages on your site
  • Operating system — your visitors' OS (from user agent)
  • Browser — your visitors' browser (from user agent)
  • Geographic location & network — general location of your visitors (from IP)
  • Device type — whether your visitors are using a desktop, tablet, or phone (from user agent)

Workflow

  • Collaboration built-in — Administrators can easily share services with other users, as well
  • Accounts (or not) — Shynet has a fully featured account management workflow (powered by Django Allauth)

Recommendations

Shynet isn't for everyone. It's great for personal projects and small to medium size websites, but hasn't been tested with ultra-high traffic sites. It also requires a fair amount of technical know-how to deploy and maintain, so if you need a one-click solution, you're best served with other tools.

Concepts

Shynet is pretty simple, but there are a few key terms you need to know in order to use it effectively:

Services are the properties on the web you'd like to track. These generally correspond to websites or single top-level domains. Shynet generates one tracking embed per service.

Hits are a single page-load on one of your services.

Sessions are a collection of hits (or just one) that are made by the same browser in a short period of time.

Installation

You can find intructions on getting started and usage in the Usage Guide. Out of the box, we support deploying via a simple Docker container, docker-compose, Heroku, or Kubernetes (see kubernetes).

FAQ

Does Shynet respond to Do Not Track (DNT) signals? Yes. While there isn't any standardized way to handle DNT requests, Shynet allows you to specify whether you want to collect any data from users with DNT enabled on a per-service basis. (By default, Shynet will not collect any data from users who specify DNT.)

Is this GDPR compliant? It depends on how you use it. If you're worried about GDPR, you should talk to a lawyer about your particular data collection practices. I'm not a lawyer. (And this isn't legal advice.)

Troubleshooting

Having trouble with Shynet? Check out the troubleshooting guide, or create an issue if you think you found a bug in Shynet itself (or have a feature suggestion).

Roadmap

To see the upcoming planned features, check out the repository's roadmap project. Upcoming features include data aggregation through rollups, anomaly detection, detailed data exports, two-factor authentication, and a data deletion tool.

In the Wild

These sites use Shynet to monitor usage without violating visitors' privacy: PolitiTweet, Miles' personal site, a17t, Lensant, WhoAreMyRepresentatives.org, and more. (Want to add your site to this list? Send a PR.)

Contributing

Are you interested in contributing to Shynet? Just send a pull request! Maybe once the project matures there will be more detailed contribution guidelines, but for now just send the code this way and we'll make sure it meets our standards together. Just know that by contributing, you agree to share all of your contributions under the same license as the project (see LICENSE). And always be sure to follow the Code of Conduct.

License

Shynet is made available under the Apache License, version 2.0.


Shynet was created by Miles McCain (@MilesMcCain) at the Recurse Center using a17t.

Comments
  • Add multi stage build for docker for dev env, and placehoder for cerleryworker in docker compose

    Add multi stage build for docker for dev env, and placehoder for cerleryworker in docker compose

    Overhauls Docker setup

    • Makes use of multi stage builds to get a development environment with docker (which installs testing libraries, and mounts the code in the container for auto-reload)
    • Removes Nginx from base and dev builds, and only adds them to production docker-compose using compose extends - https://docs.docker.com/compose/extends/
    • Updates documentation
    • Adds celery worker to and redis to the docker-compose prod setup, but keeps them commented and ready for use
    opened by sergioisidoro 15
  • Worker Timeout

    Worker Timeout

    Hi there,

    I may well be doing something wrong, but having issues with timeouts.. System works fine for a couple of minutes, then randomly stops - this halts fetching the file from the server and makes web pages hang. I am running an unusual setup, using two VMs. One is my main ingress via a Caddy reverse proxy, which then sends the request internally to the ShyNet server which is on a different machine. I don't think this should affect operation - any thoughts?

    Launching Shynet web server... [2020-04-28 21:45:16 +0000] [1] [INFO] Starting gunicorn 20.0.4 [2020-04-28 21:45:16 +0000] [1] [INFO] Listening at: http://0.0.0.0:8080 (1) [2020-04-28 21:45:16 +0000] [1] [INFO] Using worker: sync [2020-04-28 21:45:16 +0000] [8] [INFO] Booting worker with pid: 8 [2020-04-28 21:45:16 +0000] [9] [INFO] Booting worker with pid: 9 [2020-04-28 21:45:16 +0000] [10] [INFO] Booting worker with pid: 10 [2020-04-28 21:47:16 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:8) [2020-04-28 22:47:16 +0100] [8] [INFO] Worker exiting (pid: 8) [2020-04-28 21:47:16 +0000] [11] [INFO] Booting worker with pid: 11 [2020-04-28 21:47:18 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:10) [2020-04-28 22:47:18 +0100] [10] [INFO] Worker exiting (pid: 10) [2020-04-28 21:47:19 +0000] [12] [INFO] Booting worker with pid: 12

    Thanks in advance - this project looks really promising !

    bug question 
    opened by JXGA 15
  • Add an API

    Add an API

    Usually I use Django REST Framework for API but in this case it could be overkill. If there are plans for full API I can rewrite it using DRF. I added additional argument to service.get_core_stats() to return less data. Tokens can be managed only from Django admin.

    opened by haaavk 14
  • ZeroDivisionError in render function

    ZeroDivisionError in render function

    Hi

    I am having an issue with shynet for only one of my accounts. Is there any way to fix this or put it into a try/except? Maybe have a value this expression defaults to if there is an error?

    Thank you

    shynet_1  | ERROR Internal Server Error: /dashboard/
    shynet_1  | Traceback (most recent call last):
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    shynet_1  |     response = get_response(request)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py", line 202, in _get_response
    shynet_1  |     response = response.render()
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/response.py", line 105, in render
    shynet_1  |     self.content = self.rendered_content
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/response.py", line 83, in rendered_content
    shynet_1  |     return template.render(context, self._request)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/backends/django.py", line 61, in render
    shynet_1  |     return self.template.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 170, in render
    shynet_1  |     return self._render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 162, in _render
    shynet_1  |     return self.nodelist.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    shynet_1  |     bit = node.render_annotated(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    shynet_1  |     return self.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 150, in render
    shynet_1  |     return compiled_parent._render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 162, in _render
    shynet_1  |     return self.nodelist.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    shynet_1  |     bit = node.render_annotated(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    shynet_1  |     return self.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 62, in render
    shynet_1  |     result = block.nodelist.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    shynet_1  |     bit = node.render_annotated(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    shynet_1  |     return self.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 62, in render
    shynet_1  |     result = block.nodelist.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    shynet_1  |     bit = node.render_annotated(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    shynet_1  |     return self.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/defaulttags.py", line 211, in render
    shynet_1  |     nodelist.append(node.render_annotated(context))
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    shynet_1  |     return self.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 192, in render
    shynet_1  |     return template.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 172, in render
    shynet_1  |     return self._render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 162, in _render
    shynet_1  |     return self.nodelist.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    shynet_1  |     bit = node.render_annotated(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    shynet_1  |     return self.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/defaulttags.py", line 516, in render
    shynet_1  |     return self.nodelist.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    shynet_1  |     bit = node.render_annotated(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    shynet_1  |     return self.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/library.py", line 234, in render
    shynet_1  |     return t.render(new_context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 172, in render
    shynet_1  |     return self._render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 162, in _render
    shynet_1  |     return self.nodelist.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    shynet_1  |     bit = node.render_annotated(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    shynet_1  |     return self.render(context)
    shynet_1  |   File "/usr/local/lib/python3.9/site-packages/django/template/library.py", line 192, in render
    shynet_1  |     output = self.func(*resolved_args, **resolved_kwargs)
    shynet_1  |   File "/usr/src/shynet/dashboard/templatetags/helpers.py", line 76, in percent_change_display
    shynet_1  |     change = int(round(100 * abs(end - start) / start))
    shynet_1  | ZeroDivisionError: division by zero
    
    bug 
    opened by Soneji 14
  • SQLite not working

    SQLite not working

    I tried setting up a local instance of shynet, to test it, but the setup with SQLite did not work. I uncommented the sqlite settings in the .env template file and commented the postgres settings. I tried the command mentioned in the setup guide (docker run --env-file=.env milesmcc/shynet), which threw an error:

    Performing startup checks...
    Running migrations (setting up DB)...
    Traceback (most recent call last):
      File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
        self.connect()
      File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 33, in inner
        return func(*args, **kwargs)
      File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 200, in connect
        self.connection = self.get_new_connection(conn_params)
      File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 33, in inner
        return func(*args, **kwargs)
      File "/usr/local/lib/python3.10/site-packages/django/db/backends/sqlite3/base.py", line 209, in get_new_connection
        conn = Database.connect(**conn_params)
    sqlite3.OperationalError: unable to open database file
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "/usr/src/shynet/./manage.py", line 21, in <module>
        main()
      File "/usr/src/shynet/./manage.py", line 17, in main
        execute_from_command_line(sys.argv)
      File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
        utility.execute()
      File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 413, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 354, in run_from_argv
        self.execute(*args, **cmd_options)
      File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 398, in execute
        output = self.handle(*args, **options)
      File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 89, in wrapped
        res = handle_func(*args, **kwargs)
      File "/usr/local/lib/python3.10/site-packages/django/core/management/commands/migrate.py", line 92, in handle
        executor = MigrationExecutor(connection, self.migration_progress_callback)
      File "/usr/local/lib/python3.10/site-packages/django/db/migrations/executor.py", line 18, in __init__
        self.loader = MigrationLoader(self.connection)
      File "/usr/local/lib/python3.10/site-packages/django/db/migrations/loader.py", line 53, in __init__
        self.build_graph()
      File "/usr/local/lib/python3.10/site-packages/django/db/migrations/loader.py", line 220, in build_graph
        self.applied_migrations = recorder.applied_migrations()
      File "/usr/local/lib/python3.10/site-packages/django/db/migrations/recorder.py", line 77, in applied_migrations
        if self.has_table():
      File "/usr/local/lib/python3.10/site-packages/django/db/migrations/recorder.py", line 55, in has_table
        with self.connection.cursor() as cursor:
      File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 33, in inner
        return func(*args, **kwargs)
      File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 259, in cursor
        return self._cursor()
      File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 235, in _cursor
        self.ensure_connection()
      File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 33, in inner
        return func(*args, **kwargs)
      File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 218, in ensure_connection
        with self.wrap_database_errors:
      File "/usr/local/lib/python3.10/site-packages/django/db/utils.py", line 90, in __exit__
        raise dj_exc_value.with_traceback(traceback) from exc_value
      File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
        self.connect()
      File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 33, in inner
        return func(*args, **kwargs)
      File "/usr/local/lib/python3.10/site-packages/django/db/backends/base/base.py", line 200, in connect
        self.connection = self.get_new_connection(conn_params)
      File "/usr/local/lib/python3.10/site-packages/django/utils/asyncio.py", line 33, in inner
        return func(*args, **kwargs)
      File "/usr/local/lib/python3.10/site-packages/django/db/backends/sqlite3/base.py", line 209, in get_new_connection
        conn = Database.connect(**conn_params)
    django.db.utils.OperationalError: unable to open database file
    Migrations failed, exiting
    

    It threw the same error without mounting the folder with the database file into the container, and it also failed with mounting the database file directly (./database/db.sqlite3:/var/local/shynet/db/db.sqlite3:rw)

    This docker-compose, which should do the same if I'm not mistaken, did also fail with the same error

    version: "3.0"
    services:
      shynet:
        image: milesmcc/shynet
        container_name: shynet
        restart: unless-stopped
        ports:
          - 8080:8080
        volumes:
          - ./database/db.sqlite3:/var/local/shynet/db/db.sqlite3:rw
        env_file: .env
    

    I have no idea where the problem could be, because I don't know how django handles databases.

    opened by Blechlawine 13
  • Analytics not showing up

    Analytics not showing up

    I have succesfully installed Shynet behind a reverse proxy. I have created a new service, added the snippet to my site but I don't see any analytics showing up on the interface.

    I do see the snippet being loaded on my site, and I see requests being made every 5000ms (hearthbeat value).

    bug question 
    opened by LickABrick 11
  • KeyError for Chart Data in Dashboard

    KeyError for Chart Data in Dashboard

    Recently updated shynet to use the latest dockerhub image and came across this:

    ERROR Internal Server Error: /dashboard/
    Traceback (most recent call last):
      File "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
        response = get_response(request)
      File "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
        response = wrapped_callback(request, *callback_args, **callback_kwargs)
      File "/usr/local/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
        return self.dispatch(request, *args, **kwargs)
      File "/usr/local/lib/python3.9/site-packages/django/contrib/auth/mixins.py", line 52, in dispatch
        return super().dispatch(request, *args, **kwargs)
      File "/usr/local/lib/python3.9/site-packages/django/views/generic/base.py", line 98, in dispatch
        return handler(request, *args, **kwargs)
      File "/usr/local/lib/python3.9/site-packages/django/views/generic/list.py", line 157, in get
        context = self.get_context_data()
      File "/usr/src/shynet/dashboard/views.py", line 39, in get_context_data
        service.stats = service.get_core_stats(
      File "/usr/src/shynet/core/models.py", line 117, in get_core_stats
        comparison_data = self.get_relative_stats(
      File "/usr/src/shynet/core/models.py", line 203, in get_relative_stats
        chart_data, chart_tooltip_format, chart_granularity = self._get_chart_data(
      File "/usr/src/shynet/core/models.py", line 295, in _get_chart_data
        chart_data[k["date"]]["hits"] = k["count"]
    KeyError: datetime.date(2021, 6, 1)
    
    opened by k----n 9
  • Allow

    Allow "silent failure" for non-origin requests

    My CI pipeline runs some end-to-end tests on preview environments and checks for console errors before marking a proposed change as OK to merge. Shynet was logging all this, so I started using the "Allowed origins" but now I'm getting a bunch of console errors.

    I'm not sure the right way to fix this, but what do you think of a flag allowing a "silent failure"? i.e., don't log the visit but don't throw a 403.

    opened by ianjmacintosh 8
  • GeoIP Map

    GeoIP Map

    Unchanged from my last post in #92

    Only added small tweak to remove the limited-height on the session list where the content is already limited to 10 items, causing annoying scroll on there

    Screenshots: | Phone | Desktop | |-------|---------| | analytics casperverswijvelt be_dashboard_service_ba385d2a-5c80-4b31-931e-3da309fac8d0__startDate=2021-4-22 endDate=2021-4-24(iPhone X) | image |

    Closes #92

    opened by CasperVerswijvelt 8
  • Possible duplicate sessions

    Possible duplicate sessions

    Opening an issue I actually won't be able to work on because I don't know most the underlying tech.

    I've installed shynet but I see some "weird" hit counts and session counts. In short inspecting the activity for the sites shows mostly three recordings for each person, with the same IP, most of the same hits but wiht minor differences.

    I'm unsure if this is actually people loading the site three times, which I find doubtful in the amount of times I see it, or if t's some conflict in the way that sessions are grouped together. Example. image

    bug 
    opened by Windyo 8
  • Set up single-command install

    Set up single-command install

    With the help of @dhbahr :

    • added sanity_checks.py which checks if setup commands have been run, and return booleans based on results
    • added processing of sanity checks in webserver.sh, with exit conditions
    • added example docker-compose file
    • added stub in readme.md

    I don't know if this needs more documentation or not. Closes #12

    opened by Windyo 8
  • Dashboard works but when I access the page on my website loading the script.js fails

    Dashboard works but when I access the page on my website loading the script.js fails

    I followed the instructions for docker-compose and everything seemed to go well. I can access dashboard at http and have injected the tracking script code into a relevant page.

    When I try to access the page I get the error in the browser console:

    Loading failed for the <script> with source “https://mydomain.com:9000/ingress/******-5c88-4f07-88c1-741f77e92c38/script.js”.

    And when I try to load the script itself:

    Secure Connection Failed
    
    An error occurred during a connection to mydomain.com. SSL received a record that exceeded the maximum permissible length.
    
    Error code: SSL_ERROR_RX_RECORD_TOO_LONG
    
        The page you are trying to view cannot be shown because the authenticity of the received data could not be verified.
        Please contact the website owners to inform them of this problem.
    

    Do I need to set up some SSL certificates how do I go about doing that?

    opened by gilgtc 1
  • Bump cryptography from 38.0.1 to 38.0.3

    Bump cryptography from 38.0.1 to 38.0.3

    Bumps cryptography from 38.0.1 to 38.0.3.

    Changelog

    Sourced from cryptography's changelog.

    38.0.3 - 2022-11-01

    
    * Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.0.7,
      which resolves *CVE-2022-3602* and *CVE-2022-3786*.
    

    .. _v38-0-2:

    38.0.2 - 2022-10-11 (YANKED)

    .. attention::

    This release was subsequently yanked from PyPI due to a regression in OpenSSL.
    
    • Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.0.6.

    .. _v38-0-1:

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies python 
    opened by dependabot[bot] 0
  • Bump django from 4.1.1 to 4.1.2

    Bump django from 4.1.1 to 4.1.2

    Bumps django from 4.1.1 to 4.1.2.

    Commits
    • 6e9c6a0 [4.1.x] Bumped version for 4.1.2 release.
    • 9d656ea [4.1.x] Fixed CVE-2022-41323 -- Prevented locales being interpreted as regula...
    • 7843c43 [4.1.x] Refs #32987 -- Relaxed system check for template tag modules with the...
    • f783148 [4.1.x] Clarified how to reference RelatedObjectDoesNotExist exceptions.
    • 96c541e [4.1.x] Refs #34058 -- Fixed changing/deleting sequences when altering pre-Dj...
    • 7a16758 [4.1.x] Fixed #33984 -- Reverted "Fixed #32980 -- Made models cache related m...
    • ecf6506 [4.1.x] Fixed #34062 -- Updated View.http_method_not_allowed() to support async.
    • 97353bc [4.1.x] Fixed #34058 -- Changed sequence types when altering pre-Django 4.1 a...
    • 7607fc8 [4.1.x] Fixed #33026 -- Mentioned RequestFactory in testing tools docs.
    • b826b38 [4.1.x] Refs #34010 -- Made --debug-mode work for parallel tests using spawn.
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies python 
    opened by dependabot[bot] 0
  • robot traffic

    robot traffic

    Hi,

    In my stats I have a lot of "MICROSOFT-CORP-MSN-AS-BLOCK" polluting the true traffic. The source of this traffic is not clear. The flags "Ignore robots" is on.

    Screenshot from 2022-11-17 11-04-31

    Does anyone has an idea on how to mitigate/solve this issue?

    opened by christophemacabiau 0
  • Automatically update geoip database

    Automatically update geoip database

    Currently, the geoip database is only updated when there is a new release, but outdated geoip data will lead to some mistakes in identifying countries, especially when there is no new release for a long time.

    Maybe we can provide an environment variable to use the user's maxmind license_key to automatically update the geoip library on a regular basis? For users who do not care about the accuracy of the country, they can use the database in the docker by setting the environment variable to empty string.

    If this is difficult to implement, you can also schedule a cronjob on the host which use docker exec to update it. This is what I do now. This requires additionally installing curl in the container.

    opened by cmj2002 2
  • Next release may surprise shynet users due to GPC header

    Next release may surprise shynet users due to GPC header

    GPC header is treated the same as DNT header right now. DNT is deprecated and rarely used compared to GPC. People may not know they are using it (I didn't know). For example Brave browser and DuckDuckGo Privacy Essentials extension set GPC header. After next release shynet users may be suprised (I was) they don't see their own visits. The first test I do after deploying new version is to visit one of my websites and see the spike in dashboard. It took me a while to understand why there is no spike.

    opened by haaavk 0
Releases(v0.12.0)
  • v0.12.0(Jan 1, 2022)

    What's Changed

    • feat(docker): healthcheck by @JuniorJPDJ in https://github.com/milesmcc/shynet/pull/166
    • fix(docker): healthcheck by @JuniorJPDJ in https://github.com/milesmcc/shynet/pull/175
    • Testing setup (dependencies and github actions) by @sergioisidoro in https://github.com/milesmcc/shynet/pull/169
    • Add first factories and first dashboard tests by @sergioisidoro in https://github.com/milesmcc/shynet/pull/172
    • Bump sqlparse from 0.4.1 to 0.4.2 by @dependabot in https://github.com/milesmcc/shynet/pull/178
    • Fix typo in GUIDE.md by @lionep in https://github.com/milesmcc/shynet/pull/180
    • Lessen priorities on field buttons by @milesmcc in https://github.com/milesmcc/shynet/pull/182
    • Miscellaneous bug fixes and improvements

    New Contributors

    • @JuniorJPDJ made their first contribution in https://github.com/milesmcc/shynet/pull/166
    • @sergioisidoro made their first contribution in https://github.com/milesmcc/shynet/pull/169
    • @lionep made their first contribution in https://github.com/milesmcc/shynet/pull/180

    Full Changelog: https://github.com/milesmcc/shynet/compare/v0.11.0...v0.12.0

    Source code(tar.gz)
    Source code(zip)
  • v0.11.0(Aug 1, 2021)

    What’s Changed

    • Add ability to toggle between map chart and country/session table (#153) @CasperVerswijvelt
    • Change snippet url to display current host (#159) @wvffle
    • Fix hits without sessions bug (#160) @haaavk
    • Fix ellipsis in multiple tables (#152) @CasperVerswijvelt
    Source code(tar.gz)
    Source code(zip)
  • v0.10.0(Jun 13, 2021)

    This release replaces the old list of countries with an annotated world map, adds relative bars to the tables to help visualize relative stats, and includes several bug fixes and upstream security improvements.

    Notably, this is the first Shynet release that was driven entirely by contributors. I (Miles) did not develop any of the features myself—they were all contributed by our fantastic community (shoutout to @CasperVerswijvelt and @haaavk).

    What’s Changed

    • GeoIP Map (#142) @CasperVerswijvelt
    • Add hits to chart data (#141) @haaavk
    • Percents + visualization (#139) @haaavk
    • Document possible time zone values (#147) @ianjmacintosh
    • Bump django from 3.1.9 to 3.1.12 (#150) @dependabot
    • Bump django from 3.1.8 to 3.1.9 (#146) @dependabot
    • Bump urllib3 from 1.26.4 to 1.26.5 (#145) @dependabot
    • Datepicker mobile overflow (#143) @CasperVerswijvelt
    Source code(tar.gz)
    Source code(zip)
  • v0.9.1(May 14, 2021)

  • v0.9.0(May 14, 2021)

    This release, which adds a large number of UI quality of life improvements and customization options, was made possible largely by @CasperVerswijvelt and @haaavk. Thank you for your contributions!

    Full commit log:

    *   afb78dc - (HEAD -> master, origin/master, origin/HEAD) Merge branch 'pagination-settings' (2 minutes ago) <R. Miles McCain>
    |\  
    | * d9e1ffd - (pagination-settings) Add DASHBOARD_PAGE_SIZE to TEMPLATE.env and app.json (2 weeks ago) <Paweł Jastrzębski>
    | * 9fb875f - Add DASHBOARD_PAGE_SIZE to settings (2 weeks ago) <Paweł Jastrzębski>
    * |   a4eaef0 - Merge branch 'hourly-chart' (2 minutes ago) <R. Miles McCain>
    |\ \  
    | * | 4cd0c47 - (hourly-chart) Add click handler for going from daily to hourly chart view by clicking chart at specific date (13 days ago) <CasperVerswijvelt>
    | * | 7c69b0b - Fix hourly chart bug (2 weeks ago) <CasperVerswijvelt>
    | * | 78bea50 - Use timedelta instead of checking days difference which did not work correctly (2 weeks ago) <CasperVerswijvelt>
    | * | c2daf3a - Show hourly chart starting from ranges of 3 days and less (2 weeks ago) <CasperVerswijvelt>
    | * | 2221a99 - When daterange is 1 day, show hourly data in chart (3 weeks ago) <CasperVerswijvelt>
    :...skipping...
    *   afb78dc - (HEAD -> master, origin/master, origin/HEAD) Merge branch 'pagination-settings' (2 minutes ago) <R. Miles McCain>
    |\  
    | * d9e1ffd - (pagination-settings) Add DASHBOARD_PAGE_SIZE to TEMPLATE.env and app.json (2 weeks ago) <Paweł Jastrzębski>
    | * 9fb875f - Add DASHBOARD_PAGE_SIZE to settings (2 weeks ago) <Paweł Jastrzębski>
    * |   a4eaef0 - Merge branch 'hourly-chart' (2 minutes ago) <R. Miles McCain>
    |\ \  
    | * | 4cd0c47 - (hourly-chart) Add click handler for going from daily to hourly chart view by clicking chart at specific date (13 days ago) <CasperVerswijvelt>
    | * | 7c69b0b - Fix hourly chart bug (2 weeks ago) <CasperVerswijvelt>
    | * | 78bea50 - Use timedelta instead of checking days difference which did not work correctly (2 weeks ago) <CasperVerswijvelt>
    | * | c2daf3a - Show hourly chart starting from ranges of 3 days and less (2 weeks ago) <CasperVerswijvelt>
    | * | 2221a99 - When daterange is 1 day, show hourly data in chart (3 weeks ago) <CasperVerswijvelt>
    * | |   7891866 - Merge branch 'skip_heartbeat' (3 minutes ago) <R. Miles McCain>
    |\ \ \  
    | * | | 69ec373 - (skip_heartbeat) Fix xhr callbacks (3 weeks ago) <Paweł Jastrzębski>
    | * | | ea893b2 - Skip heartbeat if there is no response (3 weeks ago) <Paweł Jastrzębski>
    | | |/  
    | |/|   
    * | |   eedcbc4 - Merge branch 'haaavk/master' (3 minutes ago) <R. Miles McCain>
    |\ \ \  
    | * | | a1a083a - (haaavk/master) Replace yesterday date range with last 3 days (9 days ago) <Paweł Jastrzębski>
    | * | | 8b167b2 - Fix date ranges (9 days ago) <Paweł Jastrzębski>
    | * | | e9536f1 - Remove some date ranges (3 weeks ago) <Paweł Jastrzębski>
    | * | | 6f835a4 - Fix code style (3 weeks ago) <Paweł Jastrzębski>
    | * | | faf4f48 - Add custom ranges to litepicker (3 weeks ago) <Paweł Jastrzębski>
    | * | | 2c0fafe - Fix litepicker event (3 weeks ago) <Paweł Jastrzębski>
    | * | | 6eb41e0 - Fix litepicker colors (3 weeks ago) <Paweł Jastrzębski>
    | * | | 3d43f22 - Update litepicker and add ranges plugin (3 weeks ago) <Paweł Jastrzębski>
    | |/ /  
    * | |   0d00662 - Merge branch 'custom-map-provider' (3 minutes ago) <R. Miles McCain>
    |\ \ \  
    | * | | f6e502d - (custom-map-provider) Remove trailing dollar in long and lat placeholder (2 weeks ago) <CasperVerswijvelt>
    | * | | 32ae0aa - Change locationUrl to snake casing (3 weeks ago) <CasperVerswijvelt>
    | * | | 278306d - Add custom location url from environment variable (3 weeks ago) <CasperVerswijvelt>
    | | |/  
    | |/|   
    * | |   0b78f6d - Merge branch 'ui-improvements' (5 minutes ago) <R. Miles McCain>
    |\ \ \  
    | * | | ab51089 - (ui-improvements) Fix code checks, add button role and tabindex (85 minutes ago) <CasperVerswijvelt>
    | * | | 86695db - Remove forgotten truncatechars (85 minutes ago) <CasperVerswijvelt>
    | * | | 4e4cfe0 - Fix flex grow in header not working as intended (86 minutes ago) <CasperVerswijvelt>
    | * | | f54b67e - Ellipsis overflow for long url on hit page (86 minutes ago) <CasperVerswijvelt>
    | * | | 43f339e - Disable wrapping in table cells, prefer ellipsis (88 minutes ago) <CasperVerswijvelt>
    | * | | b144efa - Many UI Improvements (89 minutes ago) <CasperVerswijvelt>
    | * | | c06b7a0 - General styling improvements (2 hours ago) <CasperVerswijvelt>
    | * | | f13745f - Make favicon not squish and add ellipsis overflow (2 hours ago) <CasperVerswijvelt>
    | * | | 5c782dd - Use flag icons instead of emoji's (2 hours ago) <CasperVerswijvelt>
    | * | | a6a5088 - (preserve-date-range) Contextual date improvements (2 hours ago) <R. Miles McCain>
    | * | | 2b003b8 - Preserve date range in urls in side menu (6 days ago) <CasperVerswijvelt>
    :...skipping...
    *   afb78dc - (HEAD -> master, origin/master, origin/HEAD) Merge branch 'pagination-settings' (2 minutes ago) <R. Miles McCain>
    |\  
    | * d9e1ffd - (pagination-settings) Add DASHBOARD_PAGE_SIZE to TEMPLATE.env and app.json (2 weeks ago) <Paweł Jastrzębski>
    | * 9fb875f - Add DASHBOARD_PAGE_SIZE to settings (2 weeks ago) <Paweł Jastrzębski>
    * |   a4eaef0 - Merge branch 'hourly-chart' (2 minutes ago) <R. Miles McCain>
    |\ \  
    | * | 4cd0c47 - (hourly-chart) Add click handler for going from daily to hourly chart view by clicking chart at specific date (13 days ago) <CasperVerswijvelt>
    | * | 7c69b0b - Fix hourly chart bug (2 weeks ago) <CasperVerswijvelt>
    | * | 78bea50 - Use timedelta instead of checking days difference which did not work correctly (2 weeks ago) <CasperVerswijvelt>
    | * | c2daf3a - Show hourly chart starting from ranges of 3 days and less (2 weeks ago) <CasperVerswijvelt>
    | * | 2221a99 - When daterange is 1 day, show hourly data in chart (3 weeks ago) <CasperVerswijvelt>
    * | |   7891866 - Merge branch 'skip_heartbeat' (3 minutes ago) <R. Miles McCain>
    |\ \ \  
    | * | | 69ec373 - (skip_heartbeat) Fix xhr callbacks (3 weeks ago) <Paweł Jastrzębski>
    | * | | ea893b2 - Skip heartbeat if there is no response (3 weeks ago) <Paweł Jastrzębski>
    | | |/  
    | |/|   
    * | |   eedcbc4 - Merge branch 'haaavk/master' (3 minutes ago) <R. Miles McCain>
    |\ \ \  
    | * | | a1a083a - (haaavk/master) Replace yesterday date range with last 3 days (9 days ago) <Paweł Jastrzębski>
    | * | | 8b167b2 - Fix date ranges (9 days ago) <Paweł Jastrzębski>
    | * | | e9536f1 - Remove some date ranges (3 weeks ago) <Paweł Jastrzębski>
    | * | | 6f835a4 - Fix code style (3 weeks ago) <Paweł Jastrzębski>
    | * | | faf4f48 - Add custom ranges to litepicker (3 weeks ago) <Paweł Jastrzębski>
    | * | | 2c0fafe - Fix litepicker event (3 weeks ago) <Paweł Jastrzębski>
    | * | | 6eb41e0 - Fix litepicker colors (3 weeks ago) <Paweł Jastrzębski>
    | * | | 3d43f22 - Update litepicker and add ranges plugin (3 weeks ago) <Paweł Jastrzębski>
    | |/ /  
    * | |   0d00662 - Merge branch 'custom-map-provider' (3 minutes ago) <R. Miles McCain>
    |\ \ \  
    | * | | f6e502d - (custom-map-provider) Remove trailing dollar in long and lat placeholder (2 weeks ago) <CasperVerswijvelt>
    | * | | 32ae0aa - Change locationUrl to snake casing (3 weeks ago) <CasperVerswijvelt>
    | * | | 278306d - Add custom location url from environment variable (3 weeks ago) <CasperVerswijvelt>
    | | |/  
    | | |/  
    | |/|   
    * | |   0b78f6d - Merge branch 'ui-improvements' (5 minutes ago) <R. Miles McCain>
    |\ \ \  
    | * | | ab51089 - (ui-improvements) Fix code checks, add button role and tabindex (85 minutes ago) <CasperVerswijvelt>
    | * | | 86695db - Remove forgotten truncatechars (85 minutes ago) <CasperVerswijvelt>
    | * | | 4e4cfe0 - Fix flex grow in header not working as intended (86 minutes ago) <CasperVerswijvelt>
    | * | | f54b67e - Ellipsis overflow for long url on hit page (86 minutes ago) <CasperVerswijvelt>
    | * | | 43f339e - Disable wrapping in table cells, prefer ellipsis (88 minutes ago) <CasperVerswijvelt>
    | * | | b144efa - Many UI Improvements (89 minutes ago) <CasperVerswijvelt>
    | * | | c06b7a0 - General styling improvements (2 hours ago) <CasperVerswijvelt>
    | * | | f13745f - Make favicon not squish and add ellipsis overflow (2 hours ago) <CasperVerswijvelt>
    | * | | 5c782dd - Use flag icons instead of emoji's (2 hours ago) <CasperVerswijvelt>
    | * | | a6a5088 - (preserve-date-range) Contextual date improvements (2 hours ago) <R. Miles McCain>
    | * | | 2b003b8 - Preserve date range in urls in side menu (6 days ago) <CasperVerswijvelt>
    | * | | 023e0fd - Preserve date range query parameters (8 days ago) <CasperVerswijvelt>
    | * | | 03f88af - Update test for my new instance (3 weeks ago) <R. Miles McCain>
    | * | |   87b7ce2 - Merge branch 'improve_currently_online' into dev (3 weeks ago) <R. Miles McCain>
    | |\ \ \  
    | | * | | 71431fc - (improve_currently_online) Fix currently_online (3 weeks ago) <Paweł Jastrzębski>
    | | | |/  
    | | |/|   
    | * | | 26c1ae2 - Fix ingest when MMDB not found (3 weeks ago) <R. Miles McCain>
    | * | |   36d7250 - Merge branch 'CasperVerswijvelt/master' into dev (3 weeks ago) <R. Miles McCain>
    | |\ \ \  
    | * | | | 68945df - (snippet-after-create) Improve service page when no hits are recorded (3 weeks ago) <R. Miles McCain>
    | * | | | fef531e - Improve homepage when no services exist (3 weeks ago) <R. Miles McCain>
    | * | | | 46176b1 - Merge 2 steps (3 weeks ago) <CasperVerswijvelt>
    | * | | | 94c53d2 - Show snippet on service page when not hits are recorded yet (3 weeks ago) <CasperVerswijvelt>
    | | |_|/  
    | |/| |   
    * | | |   74ddef1 - Merge branch 'flag-icons' (6 minutes ago) <R. Miles McCain>
    |\ \ \ \  
    | * | | | 369f4d8 - (flag-icons) Use flag icons instead of emoji's (3 weeks ago) <CasperVerswijvelt>
    | |/ / /  
    * | | | 9d9d4a7 - (dev) Bump version to v0.9.0 (11 minutes ago) <R. Miles McCain>
    * | | | d66f683 - (origin/dev) Add DASHBOARD_PAGE_SIZE to settings (18 minutes ago) <Paweł Jastrzębski>
    * | | | b44642e - When daterange is 1 day, show hourly data in chart (18 minutes ago) <CasperVerswijvelt>
    * | | | c12a7e9 - Document ACTIVE_USER_TIMEDELTA (18 minutes ago) <R. Miles McCain>
    * | | | 0294d31 - Remove console warning from script (18 minutes ago) <R. Miles McCain>
    * | | | 40cb5af - Skip heartbeat if there is no response (18 minutes ago) <Paweł Jastrzębski>
    * | | | 073bd94 - Update litepicker and add ranges plugin (18 minutes ago) <Paweł Jastrzębski>
    * | | | 3a01fef - Add custom location url from environment variable (18 minutes ago) <CasperVerswijvelt>
    * | | | 14a7ec6 - Make favicon not squish and add ellipsis overflow (18 minutes ago) <CasperVerswijvelt>
    * | | | fdf2ab7 - Use flag icons instead of emoji's (18 minutes ago) <CasperVerswijvelt>
    * | | | 737eeb5 - Contextual date improvements (18 minutes ago) <R. Miles McCain>
    * | | | cb4855e - Preserve date range in urls in side menu (18 minutes ago) <CasperVerswijvelt>
    * | | | f4127cf - Preserve date range query parameters (18 minutes ago) <CasperVerswijvelt>
    * | | | 159015d - Update test for my new instance (18 minutes ago) <R. Miles McCain>
    * | | | a7548d7 - Fix currently_online (18 minutes ago) <Paweł Jastrzębski>
    * | | | da87ddb - Fix ingest when MMDB not found (18 minutes ago) <R. Miles McCain>
    * | | | 4a76ab3 - Improve service page when no hits are recorded (18 minutes ago) <R. Miles McCain>
    * | | | 4afeced - Improve homepage when no services exist (18 minutes ago) <R. Miles McCain>
    * | | | 2a6efe1 - Merge 2 steps (18 minutes ago) <CasperVerswijvelt>
    * | | | 07f3926 - Show snippet on service page when not hits are recorded yet (18 minutes ago) <CasperVerswijvelt>
    * | | |   14ed0b7 - Merge branch 'docker-github-build' (21 minutes ago) <R. Miles McCain>
    |\ \ \ \  
    | |_|_|/  
    |/| | |   
    | * | | df6786e - (docker-github-build) Change docker push tags (3 weeks ago) <CasperVerswijvelt>
    | * | | 6621625 - Multi arch docker build (3 weeks ago) <Casper Verswijvelt>
    | | |/  
    | |/|   
    | * | c03ef52 - (CasperVerswijvelt/master) Fix pixel request from not allowed origin triggering a hit (6 weeks ago) <CasperVerswijvelt>
    
    Source code(tar.gz)
    Source code(zip)
  • v0.8.2(Mar 29, 2021)

    This small patch update splits a particularly troublesome migration into two migrations so that users with complex deployment setups are able to migrate without any special work.

    Source code(tar.gz)
    Source code(zip)
  • v0.8.1(Mar 29, 2021)

  • v0.8.0(Mar 28, 2021)

    Note: updating to this version of Shynet will apply several migrations to your database. These may take upwards of 20 minutes to complete, depending on the size of your database.

    Changelog:

    * c2234ec - (HEAD -> dev, origin/dev) Bump version <R. Miles McCain>
    * 02cbee5 - Cache bounce <R. Miles McCain>
    * 518436f - Relock npm packages <R. Miles McCain>
    * 311aa2b - Drop Turbolinks <R. Miles McCain>
    * 8ad44dd - Add pagination to dashboard <R. Miles McCain>
    * 874aad8 - Store service directly in Hit <R. Miles McCain>
    * f2e875d - Add indexes to key Hit fields <R. Miles McCain>
    * 45fd32c - Index `last_seen` <R. Miles McCain>
    * 08b36ba - Integrate debug toolbar <R. Miles McCain>
    * d5cfe57 - Add debug toolbar <R. Miles McCain>
    *   c131cfe - Merge branch 'patch-1' into dev <R. Miles McCain>
    |\  
    | * 9df8647 - (patch-1) Fix #99 <Kasper Seweryn>
    * | 526d4cd - Relock Pipfile <R. Miles McCain>
    * |   8e09871 - Merge branch 'dependabot/pip/django-3.1.6' into dev <R. Miles McCain>
    |\ \  
    | * | 22d996b - (origin/dependabot/pip/django-3.1.6, dependabot/pip/django-3.1.6) Bump django from 3.1.3 to 3.1.6 <dependabot[bot]>
    * | |   6aa3ce0 - Merge branch 'dependabot/pip/pyyaml-5.4' into dev <R. Miles McCain>
    |\ \ \  
    | |_|/  
    |/| |   
    | * | 23ea8e4 - (origin/dependabot/pip/pyyaml-5.4, dependabot/pip/pyyaml-5.4) Bump pyyaml from 5.3.1 to 5.4 <dependabot[bot]>
    | |/  
    | * b7a6ac9 - (origin/master, origin/HEAD) Bump apexcharts from 3.23.1 to 3.24.0 (#97) <dependabot[bot]>
    * | 38d8d41 - Update kubernetes deployments <R. Miles McCain>
    * | 592613a - Use dev shynet in kubernetes deployments <R. Miles McCain>
    * | e9f43c6 - Bump version <R. Miles McCain>
    * | 89c6800 - Fix formatting <R. Miles McCain>
    * | db9c807 - Add optional more aggressive salting (fixes #95) <R. Miles McCain>
    * |   6e48a3e - Merge branch 'global-ip-block' into dev <R. Miles McCain>
    |\ \  
    | * | c0d0273 - (global-ip-block) Add additional env variable to template <Oliver Kamer>
    | * | d071a91 - Block Collect IP option if disabled globally <Oliver Kamer>
    | * | d67e14b - Block IP collection from settings <Oliver Kamer>
    | * | 174a386 - Add block all ips to settings <Oliver Kamer>
    | * | ce23cfc - Add pycharm gitignore stuff <Oliver Kamer>
    | |/  
    * |   ba9a716 - Merge branch 'heartbeat-frequency' into dev <R. Miles McCain>
    |\ \  
    | * | 8be690c - (heartbeat-frequency) Use heartbeat frequency for currently active <Oliver Kamer>
    | |/  
    * / 6d7292a - Fix duration change being unknown (fixes #89) <R. Miles McCain>
    
    Source code(tar.gz)
    Source code(zip)
  • v0.7.3(Jan 11, 2021)

  • v0.7.2(Jan 10, 2021)

    c86192d - R. Miles McCain - Improve a17t colors 775c105 - R. Miles McCain - Bump version to 0.7.2 be85c0a - R. Miles McCain - Update and trim dependencies 70e1af1 - R. Miles McCain - Fix division by zero error

    Source code(tar.gz)
    Source code(zip)
  • v0.7.1(Nov 26, 2020)

    6afea91 - R. Miles McCain - Bump version 7a4c892 - R. Miles McCain - Remove background from favicon 9b50b1e - imgbot[bot] - [ImgBot] Optimize images (#87)

    Source code(tar.gz)
    Source code(zip)
  • v0.7.0(Nov 26, 2020)

    52a18d2 - R. Miles McCain - Small visual improvements 8aaf312 - R. Miles McCain - Bump version ede0690 - R. Miles McCain - Format code a42455c - R. Miles McCain - Add browser icon 547a84f - R. Miles McCain - Update screenshots f56ea99 - R. Miles McCain - Add demo data command 4cea5d2 - R. Miles McCain - Add additional icons e4f09b4 - R. Miles McCain - Ensure times are always correct cc094fe - R. Miles McCain - Add icons to dashboard ac5c743 - R. Miles McCain - Update dependencies

    Source code(tar.gz)
    Source code(zip)
  • v0.6.9(Oct 17, 2020)

  • v0.6.8(Oct 17, 2020)

  • v0.6.7(Oct 17, 2020)

  • v0.6.6(Oct 14, 2020)

    a8fd263 - R. Miles McCain - Bump version 31fa3d5 - R. Miles McCain - Update dependencies 13229f6 - Sudipto Ghosh - removed unused import 101d26d - Sudipto Ghosh - added SHOW_SHYNET_VERSION env var to control display of version info

    Source code(tar.gz)
    Source code(zip)
  • v0.6.5(Aug 28, 2020)

    c524325 - R. Miles McCain - Bump version to v0.6.5 4a07ab8 - R. Miles McCain - Prevent multiple emails from pointing to same collaborator (fixes #78) c8dead4 - R. Miles McCain - Prevent services from showing up twice on homepage

    Source code(tar.gz)
    Source code(zip)
  • v0.6.4(Aug 19, 2020)

  • v0.6.3(Aug 18, 2020)

  • v0.6.2(Aug 11, 2020)

    6652acd - R. Miles McCain - Bump version 1dfbec0 - R. Miles McCain - Split testing options 3e315f0 - R. Miles McCain - Enforce origin checking on pixel trackers (indirectly fixes #65) 2d42674 - R. Miles McCain - Add warning when hostname starts with http (fixes #68) e4deab2 - R. Miles McCain - Fix file path creation (fixes #69) c5ed5ef - R. Miles McCain - Merge branch 'MagnumDingusEdu/master' into dev 7268a4e - R. Miles McCain - Improve GUIDE language 2cbc5ac - Vividh Mariy - Added deployment using docker-compose. Fixed #70 058601d - R. Miles McCain - Fix button styling on session page (fixes #63) 213c44a - Jake Malachowski - Add Render as a deployment option (#62) 8b98cf2 - R. Miles McCain - Update pixel cache control 4c53b94 - R. Miles McCain - Add SPA section to guide TOC a70e07b - R. Miles McCain - Finish transition to startup checks

    Source code(tar.gz)
    Source code(zip)
  • v0.6.1(Jul 7, 2020)

    0195c45 - R. Miles McCain - Document SPA behavior a54d9e6 - R. Miles McCain - Bump version a4245eb - R. Miles McCain - Update dependencies 7e0584b - R. Miles McCain - Fix button styling 37396cd - R. Miles McCain - Improve service form a1e4bef - R. Miles McCain - Use a17t v0.2.2 c351027 - R. Miles McCain - Improve origin explanation language da61b9b - R. Miles McCain - Document primary key integration (fixes #56) 98187a3 - R. Miles McCain - Document health check endpoint (fixes #59) 3d27efb - R. Miles McCain - Check IP versions before comparing (fixes #57) 80c66ce - R. Miles McCain - Remove unnecessary ipaddress dependency a2776e6 - R. Miles McCain - Rename from "sanity results" to "startup results"

    Source code(tar.gz)
    Source code(zip)
  • v0.6.0(Jun 28, 2020)

    c73f965 - imgbot[bot] - [ImgBot] Optimize images (#55) 510df19 - R. Miles McCain - Add script injection option 93d4ee5 - R. Miles McCain - Use specific version of pipenv in dockerfile 1a7594b - R. Miles McCain - Use SHA256 for more secure session association f464a7e - R. Miles McCain - Add automatic release drafter a1cd3d4 - R. Miles McCain - Code cleanup 358fb23 - R. Miles McCain - Fix multiple origin support (closes #52) 94fed58 - R. Miles McCain - Fix charts 49f452d - R. Miles McCain - Lock Python package versions 40d07fe - R. Miles McCain - Add IE11 support 87a411f - R. Miles McCain - Make ingress processing more resilient 88f25b6 - R. Miles McCain - Analytics script cleanup (closes #54) bb0dc2e - R. Miles McCain - Remove all external dependencies 4a89397 - R. Miles McCain - Arbitrarily update the pixel test ba795cc - R. Miles McCain - Clarify collaborators description c9b5a67 - Alexandre Bulté - SIGNUPS_ENABLED -> ACCOUNT_SIGNUPS_ENABLED in docs (#51) affcb89 - Alexandre Bulté - Add timeout to curl / geoip (#50) e030807 - R. Miles McCain - Fix GeoIP2 license keys

    Source code(tar.gz)
    Source code(zip)
  • v0.5.2(Jun 15, 2020)

    This release adds the ability to exclude bots from being tracked. If you don't have PERFORM_CHECKS_AND_SETUP enabled, you will need to perform migrations to update to this release.

    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(May 28, 2020)

    • Creating a superuser, hostname, and whitelabel are now separate steps to better match expectations around installation. (Removed ephemeral all SHYNET_* environment variables that had no effect after initial installation.)
    • Added a health check endpoint, /healthz.
    • Disabled email verification by default (most instances are not configured to allow external sign ups, and there's no sense in requiring admins to verify their emails).
    • Made other small bug fixes and improvements.
    Source code(tar.gz)
    Source code(zip)
  • v0.4.1(May 19, 2020)

  • v0.3.0(May 2, 2020)

Owner
R. Miles McCain
Stanford ’24, @StanfordIO, @RecurseCenter. Digital safety, privacy & security. PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLU… 🏳️‍🌈
R. Miles McCain
Karen is a Discord Bot that will check for a list of forbidden words/expressions, removing the message that contains them and replying with another message.

Karen is a Discord Bot that will check for a list of forbidden words/expressions, removing the message that contains them and replying with another message. Everything is highly customizable.

Rafael Almeida 1 Nov 03, 2021
Tglogging - A python package to send your app logs to a telegram chat in realtime

Telegram Logger A simple python package to send your app logs to a telegram chat

SUBIN 60 Dec 27, 2022
A Python wrapper for the WooCommerce API.

WooCommerce API - Python Client A Python wrapper for the WooCommerce REST API. Easily interact with the WooCommerce REST API using this library. Insta

WooCommerce 171 Dec 25, 2022
A replacement for Reddit /r/copypasta CummyBot2000 with extra measures to avoid it being banned.

CummyBot1984 A replacement for Reddit /r/copypasta's CummyBot2000 with extra measures to respect Reddit's API rules. Features Copies and replies to ev

2 Feb 21, 2022
ResolveURL - Fork of UrlResolver by eldorados, tknorris and jsergio123

ResolveURL Fork of UrlResolver by eldorados, tknorris and jsergio123 I am in no

gujal 60 Jan 03, 2023
TwitterBot-ImageCollector - Twitter bot that collects images from likes saves the image

TwitterBot-ImageCollector Bot de Twitter que recolecta imagenes a partir de los

Gx3 Studios 4 Jun 01, 2022
An open source API to validate the EU Covid Certificates / Green Certificates

Open Covid Certificate Validator This an open source API to validate EU Digital COVID Certificates. It receives a COVID certificate and validates it u

Merlin Schumacher 47 May 30, 2022
A simple script that can be used to track real time that user was online in telegram

TG_OnlineTracker A simple script that can be used to track real time that user was online in telegram Join @DaisySupport_Official 🎵 for help 🏃‍♂️ Ea

Inuka Asith 15 Oct 23, 2022
Python: Asynchronous client for the Open-Meteo API.

Python: Asynchronous client for the Open-Meteo API. Asynchronous client for the Open-Meteo API. About Open-Meteo offers free weather forecast APIs for

Franck Nijhof 11 Dec 21, 2022
PepeSniper is an open-source Discord Nitro auto claimer/redeemer made in python.

PepeSniper is an open-source Discord Nitro auto claimer made in python. It sure as hell is not the fastest sniper out there but it gets the job done in a timely and stable manner. It also supports ho

Unknown User 1 Dec 22, 2021
Add Reactions to your Channel Posts!

• Shaaak - Post Reaction Bot Simple and Minimalistic telegram bot to add Reactions and Comments to your Channel Posts! - What's Unique About it?

Harsh Raj 4 Jan 31, 2022
TgMusicBot is a telegram userbot for playing songs in telegram voice calls based on Pyrogram and PyTgCalls.

TgMusicBot [Stable] TgMusicBot is a telegram userbot for playing songs in telegram voice calls based on Pyrogram and PyTgCalls. Commands !start / !hel

Kürşad 21 Dec 25, 2022
Code for generating Tiktok X-Gorgon, X-Khronos and etc. parameters

TikTok-Algorithm I found this python file from a source which was later deleted. Although the test api functions no longer seem to work, surprisingly

0 Dec 09, 2021
Python wrapper for Gmailnator

Python wrapper for Gmailnator

h0nda 11 Mar 19, 2022
Utilizing the freqtrade high-frequency cryptocurrency trading framework to build and optimize trading strategies. The bot runs nonstop on a Rasberry Pi.

Freqtrade Strategy Repository Please test all scripts and dry run them before using them in live mode Contact me on discord if you have any questions!

Michael Fourie 90 Jan 01, 2023
Joins a specified server on all the tokens

Joins a specified server on all the tokens. Usage python -m pip install requests python joiner.py Note Your tokens must be located in a text file call

1 Dec 21, 2021
Spacecrypto-bombcrypto-bot - SpaceCrypto And Bombcrypto Bot - MultiScreen

SpaceCrypto And Bombcrypto Bot - MultiScreen This is a open source project inspi

Paulo Bramante 5 Nov 03, 2022
A Discord webhook spammer made in Python.

A Python made Discord webhook spammer usually used for token loggers to spam them/delete them original by cattyn I only made it so u can change the avatar to whatever u want instead of it being hardc

notperry1234567890 15 Dec 15, 2021
MAASTA is a wrapper to create an Ansible inventory for MAAS instances that are provisioned by Terraform.

MAASTA is a wrapper to create an Ansible inventory for MAAS instances that are provisioned by Terraform.

Saeid Bostandoust 144 Dec 16, 2022
Python client for the LightOn Muse API

lightonmuse Python bindings to production-ready intelligence primitives powered by state-of-the-art language models. Create. Process. Understand. Lear

LightOn 12 Apr 10, 2022