Ballcone is a fast and lightweight server-side Web analytics solution.

Overview

Ballcone

Ballcone is a fast and lightweight server-side Web analytics solution. It requires no JavaScript on your website.

GitHub Tests Docker Hub

Screenshots

Ballcone

Ballcone: petrovich

Design Goals

  • Simplicity. Ballcone requires almost zero set-up as it prefers convention over configuration
  • Efficiency. Ballcone performs lightning-fast analytic queries over data thanks to the underlying columnar database
  • Specificity. Ballcone aims at providing visual insights on the HTTP access logs with no bloat

Features

  • No JavaScript snippets required
  • GeoIP mapping with the GeoLite2 database
  • Extraction of platform and browser information from User-Agent

Architecture

Ballcone captures the access_log entries exported in JSON by nginx via the bundled syslog logger (65140/udp). These entries are stored in the embedded MonetDBLite database. Ballcone uses it to perform data manipulation and analytic queries. Also, Ballcone provides a convenient Web interface (8080/tcp) for accessing and observing the gathered data.

          +-----------+            +------------+
   HTTP   |           |   syslog   |            |   HTTP
<-------->+   nginx   +----------->+  Ballcone  +<-------->
          |           |    JSON    |            |
          +-----------+            +------------+
                                   |MonetDB-Lite|
                                   +------------+

For better performance, Ballcone inserts data in batches, committing them to MonetDBLite every few seconds (five seconds by default).

Requirements

Demo

This repository contains an example configuration of nginx and Ballcone. Just run the container from Docker Hub or build it locally. nginx will be available at http://127.0.0.1:8888/ and Ballcone will be available at http://127.0.0.1:8080/.

docker-compose up
# or
docker run --rm -p '127.0.0.1:8888:80' -p '127.0.0.1:8080:8080' dustalov/ballcone:demo

Naming and Meaning

Ballcone has two meanings.

First, it is the romanization of the Russian word балкон that means a balcony. You go to the balcony to breath some fresh air and look down at the things outside.

Second, if a ball is inscribed in a cone, it resembles the all-seeing eye (help wanted: dustalov/ballcone#8).

Regardless of the meaning you prefer, Ballcone helps you to watch your websites.

Installation

The simplest way to get started is to run make pipenv after cloning the repository. Just make sure Pipenv is installed.

Getting Ballcone

Running the Docker image is the simplest way to get started. Docker Hub performs automated builds of the Ballcone source code from GitHub: https://hub.docker.com/r/dustalov/ballcone. The following command runs Ballcone on 127.0.0.1: the syslog protocol will be available via 65140/udp, the Web interface will be available via 8080/tcp, and the data will be stored in the /var/lib/ballcone directory on the host machine.

docker run -p '127.0.0.1:8080:8080' -p '127.0.0.1:65140:65140/udp' -v '/var/lib/ballcone/monetdb:/usr/src/app/monetdb' --restart=unless-stopped dustalov/ballcone ballcone -sh '0.0.0.0' -wh '0.0.0.0'

However, Docker is not the only option. Alternatively, Ballcone can be packaged into a standalone executable using PyInstaller and runned as a systemd service (see ballcone.service as an example):

make pyinstaller
sudo make install-systemd
sudo systemctl start ballcone

Finally, Ballcone can be installed directly on the host machine for manual runs:

pip3 install -e git+https://github.com/dustalov/[email protected]#egg=ballcone

Note that ballcone without arguments creates the monetdb directory inside the current directory.

Configuring nginx

You need to define the JSON-compatible log format for your service in the nginx configuration file. Let us call it ballcone_json_example. This format is similar to the one used in Matomo (see matomo-log-analytics). It should be put before the server context.

log_format ballcone_json_example escape=json
    '{'
    '"service": "example", '
    '"ip": "$remote_addr", '
    '"host": "$host", '
    '"path": "$request_uri", '
    '"status": "$status", '
    '"referrer": "$http_referer", '
    '"user_agent": "$http_user_agent", '
    '"length": $bytes_sent, '
    '"generation_time_milli": $request_time, '
    '"date": "$time_iso8601"'
    '}';

Then, you should put this access_log directive inside the server context to transfer logs via the syslog protocol.

access_log syslog:server=127.0.0.1:65140 ballcone_json_example;

Please look at the complete example of nginx configuration in demo/nginx.conf.

Roadmap

Roadmap is available at https://github.com/dustalov/ballcone/issues.

Alternatives

Copyright

Copyright © 2020 Dmitry Ustalov. See LICENSE for details.

Comments
  • Wish: Support more than a months of data

    Wish: Support more than a months of data

    Ballcone is neat and clean, but I find limiting that only the last month (in the graph) or the last 7 days (in the text) seems to be able to be seen. This prevents the visualization of longer-duration trends. Is this purely a UI limitation, or is it to keep the database small?

    enhancement 
    opened by stephanemagnenat 4
  • Bump pyinstaller from 5.3 to 5.4.1

    Bump pyinstaller from 5.3 to 5.4.1

    Bumps pyinstaller from 5.3 to 5.4.1.

    Release notes

    Sourced from pyinstaller's releases.

    v5.4.1

    Please see the v5.4.1 section of the changelog for a list of the changes since v5.4.

    v5.4

    Please see the v5.4 section of the changelog for a list of the changes since v5.3.

    Changelog

    Sourced from pyinstaller's changelog.

    5.4.1 (2022-09-11)

    Bugfix

    
    * (Windows) Fix run-time error raised by ``pyi_rth_win32comgenpy``, the
      run-time
      hook for ``win32com``. (:issue:`7079`)
    

    5.4 (2022-09-10)

    Features

    • (Windows) When collecting a DLL that was discovered via link-time dependency analysis of a collected binary/extension, attempt to preserve its parent directory structure instead of collecting it into application's top-level directory. This aims to preserve the parent directory structure of DLLs bundled with python packages in PyPI wheels, while the DLLs collected from system directories (as well as from Library\bin directory of the Anaconda's environment) are still collected into top-level application directory. (:issue:7028)
    • Add support for setuptools-provided distutils, available since setuptools >= 60.0. (:issue:7075)
    • Implement a generic file filtering decision function for use in hooks, based on the source filename and optional inclusion and exclusion pattern list (:func:PyInstaller.utils.hooks.include_or_exclude_file). (:issue:7040)
    • Rework the module exclusion mechanism. The excluded module entries, specified via excludedimports list in the hooks, are now used to suppress module imports from corresponding nodes during modulegraph construction, rather than to remove the nodes from the graph as a post-processing step. This should make the module exclusion more robust, but the main benefit is that we avoid running (potentially many and potentially costly) hooks for modules that would end up excluded anyway. (:issue:7066)

    Bugfix

    
    * (Windows) Attempt to extend DLL search paths with directories found in
      the `PATH` environment variable and by tracking calls to the
      `os.add_dll_directory` function during import of the packages in
      the isolated sub-process that performs the binary dependency scanning.
      (:issue:`6924`)
    * (Windows) Ensure that ANGLE DLLs (``libEGL.dll`` and ``libGLESv2.dll``)
    </tr></table> 
    

    ... (truncated)

    Commits
    • 36aa18a Release v5.4.1. [skip ci]
    • 40f40a7 hooks: fix error raised by pyi_rth_win32comgenpy
    • c44a0d4 Release v5.4. [skip ci]
    • bf2a4ad Added missing inline types for public api (#7068)
    • b80740e hooks: setuptools: avoid recursing into vendored pyparsing.diagram
    • f93dd3f hooks: fix the message in distutils pre-module-find hook
    • 3be4a49 ci: lift the ban on setuptools-provided distutils
    • 1aa357a tests: add basic setuptools import test
    • c8e18bf hooks: add support for setuptools >= 60.0
    • 3bba7d3 loader: FrozenImporter: give precedence to modified module paths
    • 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)
    dependencies python 
    opened by dependabot[bot] 2
  • Idea: Make more popular paths more readable

    Idea: Make more popular paths more readable

    Currently the "Most popular path" section is not super readable, because for every path the day is shown. I think a way to make that more readable would be to show the day only once, like this:

            path 1
    day 1   path 2
            path 3
    --------------
            path 1
    day 2   path 2
            path 3
    

    The same comment applies to the "Most popular browser" section, but there I believe plots might be better (because browsers do not vanish from one day to the other) (see #104).

    enhancement 
    opened by stephanemagnenat 1
  • Bump flake8 from 4.0.1 to 5.0.4

    Bump flake8 from 4.0.1 to 5.0.4

    Bumps flake8 from 4.0.1 to 5.0.4.

    Commits
    • 6027577 Release 5.0.4
    • 213e006 Merge pull request #1653 from asottile/lower-bound-importlib-metadata
    • e94ee2b require sufficiently new importlib-metadata
    • 318a86a Merge pull request #1646 from televi/main
    • 7b8b374 Clarify entry point naming
    • 7160561 Merge pull request #1649 from PyCQA/pre-commit-ci-update-config
    • 84d56a8 [pre-commit.ci] pre-commit autoupdate
    • ff6569b Release 5.0.3
    • e76b59a Merge pull request #1648 from PyCQA/invalid-syntax-partial-parse
    • 25e8ff1 ignore config files that partially parse as flake8 configs
    • 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)
    dependencies python 
    opened by dependabot[bot] 1
  • Bump flake8 from 4.0.1 to 5.0.3

    Bump flake8 from 4.0.1 to 5.0.3

    Bumps flake8 from 4.0.1 to 5.0.3.

    Commits
    • ff6569b Release 5.0.3
    • e76b59a Merge pull request #1648 from PyCQA/invalid-syntax-partial-parse
    • 25e8ff1 ignore config files that partially parse as flake8 configs
    • 70c0b3d Release 5.0.2
    • 5e69ba9 Merge pull request #1642 from PyCQA/no-home
    • 8b51ee4 skip skipping home if home does not exist
    • 446b18d Merge pull request #1641 from PyCQA/entry-points-not-pickleable
    • b70d7a2 work around un-pickleabiliy of EntryPoint in 3.8.0
    • 91a7fa9 fix order of release notes
    • 405cfe0 Release 5.0.1
    • 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)
    dependencies python 
    opened by dependabot[bot] 1
  • Bump flake8 from 4.0.1 to 5.0.2

    Bump flake8 from 4.0.1 to 5.0.2

    Bumps flake8 from 4.0.1 to 5.0.2.

    Commits
    • 70c0b3d Release 5.0.2
    • 5e69ba9 Merge pull request #1642 from PyCQA/no-home
    • 8b51ee4 skip skipping home if home does not exist
    • 446b18d Merge pull request #1641 from PyCQA/entry-points-not-pickleable
    • b70d7a2 work around un-pickleabiliy of EntryPoint in 3.8.0
    • 91a7fa9 fix order of release notes
    • 405cfe0 Release 5.0.1
    • d20bb97 Merge pull request #1631 from PyCQA/dupe-sys-path
    • fce93b9 prevent duplicate plugin discovery on misconfigured pythons
    • 3f4872a Merge pull request #1628 from mxr/patch-1
    • 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)
    dependencies python 
    opened by dependabot[bot] 1
  • Bump pyinstaller from 5.1 to 5.3

    Bump pyinstaller from 5.1 to 5.3

    Bumps pyinstaller from 5.1 to 5.3.

    Release notes

    Sourced from pyinstaller's releases.

    v5.3

    Please see the v5.3 section of the changelog for a list of the changes since v5.2.

    v5.2

    Please see the v5.2 section of the changelog for a list of the changes since v5.1.

    Changelog

    Sourced from pyinstaller's changelog.

    5.3 (2022-07-30)

    Features

    
    * (Windows) Implement handling of console control signals in the ``onefile``
      bootloader parent process. The implemented handler suppresses the
      ``CTRL_C_EVENT`` and ``CTRL_BREAK_EVENT`` to let the child process
      deal with them as they see it fit. In the case of ``CTRL_CLOSE_EVENT``,
      ``CTRL_LOGOFF_EVENT``, or ``CTRL_SHUTDOWN_EVENT``, the handler attempts
      to delay the termination of the parent process in order to buy time for
      the child process to exit and for the main thread of the parent process
      to clean up the temporary directory before exiting itself. This should
      prevent the temporary directory of a ``onefile`` frozen application
      being left behind when the user closes the console window. (:issue:`6591`)
    * Implement a mechanism for controlling the collection mode of modules and
      packages, with granularity ranging from top-level packages to individual
      sub-modules. Therefore, the hooks can now specify whether the hooked
      package should be collected as byte-compiled .pyc modules into embedded
      PYZ archive (the default behavior), or as source .py files collected as
      external data files (without corresponding modules in the PYZ archive).
      (:issue:`6945`)
    

    Bugfix

    
    * (non-Windows) Avoid generating debug messages in POSIX signal handlers,
      as the functions involved are generally not signal-safe. Should also
      fix the endless spam of ``SIGPIPE`` that ocurrs under certain conditions
      when shutting down the frozen application on linux. (:issue:`5270`)
    * (non-Windows) If the child process of a ``onefile`` frozen application
      is terminated by a signal, delay re-raising of the signal in the parent
      process until after the clean up has been performed. This prevents
      ``onefile`` frozen applications from leaving behind their unpacked
      temporary directories when either the parent or the child process is
      sent the ``SIGTERM`` signal. (:issue:`2379`)
    * When building with ``noarchive=True`` (e.g., ``--debug noarchive`` or
      ``--debug all``), PyInstaller no longer pollutes user-writable source
      locations with its ``.pyc`` or ``.pyo`` files written next to the
      corresponding source files. (:issue:`6591`)
    * When building with ``noarchive=True`` (e.g., ``--debug noarchive`` or
      ``--debug all``), the source paths are now stripped from the collected
      .pyc modules, same as if PYZ archive was used. (:issue:`6591`)
    

    Hooks

    
    &amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt; 
    &lt;/code&gt;&lt;/pre&gt;
    &lt;/blockquote&gt;
    &lt;p&gt;... (truncated)&lt;/p&gt;
    &lt;/details&gt;
    &lt;details&gt;
    &lt;summary&gt;Commits&lt;/summary&gt;
    
    &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;https://github.com/pyinstaller/pyinstaller/commit/fbf7948be85177dd44b41217e9f039e1d176de6b&quot;&gt;&lt;code&gt;fbf7948&lt;/code&gt;&lt;/a&gt; Release 5.3.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://github.com/pyinstaller/pyinstaller/commit/ba38ba4ba90ae726129e15240f25c27ddc29bf29&quot;&gt;&lt;code&gt;ba38ba4&lt;/code&gt;&lt;/a&gt; tests: put pyi_builder's clean-up under environment variable switch&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://github.com/pyinstaller/pyinstaller/commit/acf10bb7c6c31cef8abee63fa73adbed926de003&quot;&gt;&lt;code&gt;acf10bb&lt;/code&gt;&lt;/a&gt; tests: have pyi_builder fixure clean up directories on Windows&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://github.com/pyinstaller/pyinstaller/commit/2fa0497783aab41800620961f166628e2b915ae8&quot;&gt;&lt;code&gt;2fa0497&lt;/code&gt;&lt;/a&gt; tests: modulegraph unit tests: do not use distutils as test package&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://github.com/pyinstaller/pyinstaller/commit/6ccba969db1fe7fa43c0bbd0bdb224c7775c3e70&quot;&gt;&lt;code&gt;6ccba96&lt;/code&gt;&lt;/a&gt; tests: test_import_pep302: do not use distutils as test package&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://github.com/pyinstaller/pyinstaller/commit/dfdf7f9db172ce938fce3bd78c833b44f07e2e81&quot;&gt;&lt;code&gt;dfdf7f9&lt;/code&gt;&lt;/a&gt; tests: test_apple_event_handling_carbon: ensure unique app path&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://github.com/pyinstaller/pyinstaller/commit/5b9e61fca052e59fdb2533f6406fa457a65cb0ce&quot;&gt;&lt;code&gt;5b9e61f&lt;/code&gt;&lt;/a&gt; tests: test_pkg_resources_provider: include uuid in generated egg path&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://github.com/pyinstaller/pyinstaller/commit/7875d7684c6ddad90e91af9141229083ebb1297f&quot;&gt;&lt;code&gt;7875d76&lt;/code&gt;&lt;/a&gt; compat: remove obsolete compatibility definitions&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://github.com/pyinstaller/pyinstaller/commit/6cb49d9050e1b7a5142f7b9142f5cc7bde31ee31&quot;&gt;&lt;code&gt;6cb49d9&lt;/code&gt;&lt;/a&gt; loader: remove delayed imports from pymod02_importers&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://github.com/pyinstaller/pyinstaller/commit/c115bce4dd1eb43c3e1ad52ca6743ed6fd3f0a70&quot;&gt;&lt;code&gt;c115bce&lt;/code&gt;&lt;/a&gt; loader: remove pyimod01_os_path and replace its use with os.path&lt;/li&gt;
    &lt;li&gt;Additional commits viewable in &lt;a href=&quot;https://github.com/pyinstaller/pyinstaller/compare/v5.1...v5.3&quot;&gt;compare view&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/details&gt;
    
    &lt;br /&gt;
    </code></pre>
    
    
    [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pyinstaller&package-manager=pip&previous-version=5.1&new-version=5.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
    
    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-automerge-start)
    [//]: # (dependabot-automerge-end)
    
    ---
    
    <details>
    <summary>Dependabot commands and options</summary>
    <br />
    
    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)
    
    
    </details>
    dependencies python 
    opened by dependabot[bot] 1
  • Bump types-python-dateutil from 2.8.18 to 2.8.19

    Bump types-python-dateutil from 2.8.18 to 2.8.19

    Bumps types-python-dateutil from 2.8.18 to 2.8.19.

    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)
    dependencies python 
    opened by dependabot[bot] 1
  • Bump mypy from 0.961 to 0.971

    Bump mypy from 0.961 to 0.971

    Bumps mypy from 0.961 to 0.971.

    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)
    dependencies python 
    opened by dependabot[bot] 1
  • Bump types-simplejson from 3.17.6 to 3.17.7

    Bump types-simplejson from 3.17.6 to 3.17.7

    Bumps types-simplejson from 3.17.6 to 3.17.7.

    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)
    dependencies python 
    opened by dependabot[bot] 1
  • Bump pyinstaller from 5.1 to 5.2

    Bump pyinstaller from 5.1 to 5.2

    Bumps pyinstaller from 5.1 to 5.2.

    Release notes

    Sourced from pyinstaller's releases.

    v5.2

    Please see the v5.2 section of the changelog for a list of the changes since v5.1.

    Changelog

    Sourced from pyinstaller's changelog.

    5.2 (2022-07-08)

    Features

    
    * Detect if an icon file (``.ico`` or ``.icns``) is of another image type but
      has been mislabelled as a native icon type via its file suffix then either
      normalise to a genuinely native image type if ``pillow`` is installed or raise
      an error. (:issue:`6870`)
    * Exit gracefully with an explanatory :class:`SystemExit` if the user moves or
      deletes the application whilst it's still running. Note that this is only
      detected on trying to load a module which has not already been loaded.
      (:issue:`6856`)
    * Implement new standard hook variable, called
      ``warn_on_missing_hiddenimports``. This optional boolean flag allows a hook to
      opt out from warnings generated by missing hidden imports originating from
      that hook. (:issue:`6914`)
    

    Bugfix

    
    * (Linux) Fix potential mismatch between the collected Python shared library
      name and the name expected by the bootloader when using Anaconda environment.
      The mismatch would occur on some attempts to freeze a program that uses an
      extension that is also linked against the python shared library.
      (:issue:`6831`)
    * (Linux) Fix the missing ``gi.repository`` error in an application frozen on
      RHEL/Fedora linux with GObject introspection installed from the distribution's
      RPM package. (:issue:`6780`)
    * (macOS) The ``QtWebEngine`` hook now makes ``QtOpenGL`` and ``QtDBus``
      available to the renderer process with framework installs of Qt 6.
      (:issue:`6892`)
    * (Windows) Optimize EXE PE headers fix-up process in an attempt to reduce the
      processing time and the memory footprint with large onefile builds.
      (:issue:`6874`)
    * Add a try/except guard around :func:`ctypes.util.find_library` to protect
      against `CPython bug [#93094](https://github.com/pyinstaller/pyinstaller/issues/93094) &lt;https://github.com/python/cpython/issues/93094&gt;`_
      which leads to a :class:`FileNotFoundError`. (:issue:`6864`)
    * Fix regression in PyInstaller v5 where an import of a non-existent GObject
      introspection (`gi`) module (for example, an optional dependency) in the
      program causes a build-time error and aborts the build process.
      (:issue:`6897`)
    * If passed a name of an importable module instead of a package, the
      :func:`PyInstaller.utils.hooks.collect_submodules` function now returns
      a list containing the module's name, same as it would for a package without
      submodules. (:issue:`6850`)
    * Prevent :func:`PyInstaller.utils.hooks.collect_submodules` from recursing into
      sub-packages that are excluded by the function passed via the ``filter``
    &lt;/tr&gt;&lt;/table&gt; 
    </code></pre>
    </blockquote>
    <p>... (truncated)</p>
    </details>
    <details>
    <summary>Commits</summary>
    

    <ul> <li><a href="https://github.com/pyinstaller/pyinstaller/commit/c7040cb6505bf36bc17aaab897f9224181aec1ec"><code>c7040cb</code></a> Release 5.2.</li> <li><a href="https://github.com/pyinstaller/pyinstaller/commit/22d1d2a5378228744cc95f14904dae1664df32c4"><code>22d1d2a</code></a> Tests: Requirements: Scheduled weekly dependency update for week 27 (<a href="https://github-redirect.dependabot.com/pyinstaller/pyinstaller/issues/6927">#6927</a>)</li> <li><a href="https://github.com/pyinstaller/pyinstaller/commit/35451d0df77dd4e2c3ad613ee35cb28d99a9421e"><code>35451d0</code></a> depend: allow hooks to opt out of missing hidden import warnings</li> <li><a href="https://github.com/pyinstaller/pyinstaller/commit/b4fa6a60047bedb667128a48c1a67a9de73ccac3"><code>b4fa6a6</code></a> Tests: Requirements: Scheduled weekly dependency update for week 26 (<a href="https://github-redirect.dependabot.com/pyinstaller/pyinstaller/issues/6912">#6912</a>)</li> <li><a href="https://github.com/pyinstaller/pyinstaller/commit/684bfac8adcf254fec5777f212c13eb62181f900"><code>684bfac</code></a> hooks: refactor GObject introspection (gi) hooks</li> <li><a href="https://github.com/pyinstaller/pyinstaller/commit/832c4286755968eace91881f0639ccd3986f6f2b"><code>832c428</code></a> add badges to README (<a href="https://github-redirect.dependabot.com/pyinstaller/pyinstaller/issues/6909">#6909</a>) [skip ci]</li> <li><a href="https://github.com/pyinstaller/pyinstaller/commit/43c9a8f4b7aecfad1f853b8f93e5703dc23bcb6a"><code>43c9a8f</code></a> hooks: disable QtWebEngine sandboxing for Qt6 on macOS</li> <li><a href="https://github.com/pyinstaller/pyinstaller/commit/987771fbe88616fafada835ea5c09801521934e3"><code>987771f</code></a> Tests: Requirements: Scheduled weekly dependency update for week 25 (<a href="https://github-redirect.dependabot.com/pyinstaller/pyinstaller/issues/6902">#6902</a>)</li> <li><a href="https://github.com/pyinstaller/pyinstaller/commit/6889f341d1dd1bae8ce5df3237502fd20292fee4"><code>6889f34</code></a> Fix QtWebEngine with PyQt6 framework builds (<a href="https://github-redirect.dependabot.com/pyinstaller/pyinstaller/issues/6892">#6892</a>)</li> <li><a href="https://github.com/pyinstaller/pyinstaller/commit/11997b8e4d5b36f4feadea0cc5f434b6b1c98b17"><code>11997b8</code></a> ci: Force colored output</li> <li>Additional commits viewable in <a href="https://github.com/pyinstaller/pyinstaller/compare/v5.1...v5.2">compare view</a></li> </ul> </details>

    <br />

    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)
    dependencies python 
    opened by dependabot[bot] 1
  • Idea: most popular browser as plot

    Idea: most popular browser as plot

    The most-popular browser data are hard to read, because each days are not super-well delimited. Maybe a plot would help? Associated with longer-duration data (see #103), it would be helpful in giving an idea of the browser-usage trend.

    enhancement help wanted good first issue 
    opened by stephanemagnenat 1
  • Support other Web servers

    Support other Web servers

    Although nginx is my default choice, the world is not limited just to it. Other servers, such as haproxy, also support exporting access logs via the syslog protocol, so they might be already supported, too.

    help wanted good first issue 
    opened by dustalov 0
  • Query string parsing

    Query string parsing

    nginx provides the request query string in the variable $args. Query strings can contain useful information like UTM parameters. This could be useful in analyzing the traffic sources but requires changes in the database schema and nginx log format.

    question 
    opened by dustalov 0
Owner
Dmitry Ustalov
Head of Research at @Toloka, https://toloka.ai/research
Dmitry Ustalov
A python package to manage the stored receiver-side Strain Green's Tensor (SGT) database of 3D background models and able to generate Green's function and synthetic waveform

A python package to manage the stored receiver-side Strain Green's Tensor (SGT) database of 3D background models and able to generate Green's function and synthetic waveform

Liang Ding 6 Aug 31, 2022
Fastest Semantle solver this side of the Mississippi

semantle Fastest Semantle solver this side of the Mississippi. Roughly 3 average turns to win Measured against (part of) the word2vec-google-news-300

Frank Odom 6 Aug 21, 2022
Active Transport Analytics Model: A new strategic transport modelling and data visualization framework

{ATAM} Active Transport Analytics Model Active Transport Analytics Model (“ATAM”

ATAM Analytics 2 Apr 27, 2022
Audio-analytics for music-producers! Automate tedious tasks such as musical scale detection, BPM rate classification and audio file conversion.

Click here to be re-directed to the Beat Inspect Streamlit Web-App You are a music producer? Let's get in touch via LinkedIn Fundamental Analytics for

Stefan Rummer 8 Aug 5, 2022
This code makes the logs provided by Fiddler proxy of the Google Analytics events coming from iOS more readable.

GA-beautifier-iOS This code makes the logs provided by Fiddler proxy of the Google Analytics events coming from iOS more readable. To run it, create a

Rafael Machado 3 Feb 2, 2022
Transform a Google Drive server into a VFX pipeline ready server

Google Drive VFX Server VFX Pipeline About The Project Quick tutorial to setup a Google Drive Server for multiple machines access, and VFX Pipeline on

Valentin Beaumont 17 Jun 27, 2022
Bionic is Python Framework for crafting beautiful, fast user experiences for web and is free and open source.

Bionic is Python Framework for crafting beautiful, fast user experiences for web and is free and open source. Getting Started This is an example of ho

null 14 Apr 10, 2022
Sabe is a python framework written for easy web server setup.

Sabe is a python framework written for easy web server setup. Sabe, kolay web sunucusu kurulumu için yazılmış bir python çerçevesidir. Öğrenmesi kola

null 2 Jan 1, 2022
A web interface for a soft serve Git server.

Soft Serve monitor Soft Sevre is a very nice git server. It offers a really nice TUI to browse the repositories on the server. Unfortunately, it does

Maxime Bouillot 5 Apr 26, 2022
Tools for dos (denial-of-service) website / web server

DoS Attack Tools Tools for dos (denial-of-service) website / web server di buat olah NurvySec How to install on debian / ubuntu $ apt update $ apt ins

nurvy 1 Feb 10, 2022
My solution for a MARL problem on a Grid Environment with Q-tables.

To run the project, run: conda create --name env python=3.7 pip install -r requirements.txt python run.py To-do: Add direction to the state space Take

Merve Noyan 12 Dec 25, 2021
Some usefull scripts for the Nastran's 145 solution (Flutter Analysis) using the pyNastran package.

nastran-aero-flutter This project is intended to analyse the Supersonic Panel Flutter using the NASTRAN software. The project uses the pyNastran and t

zuckberj 10 Jul 6, 2022
LPCV Winner Solution of Spring Team

LPCV Winner Solution of Spring Team

null 22 Jul 20, 2022
Placeholders is a single-unit storage solution for your Frontend.

Placeholder Placeholders is a single-unit file storage solution for your Frontend. Why Placeholder? Generally, when a website/service requests for fil

Tanmoy Sen Gupta 1 Nov 9, 2021
A simple solution for water overflow problem in Python

Water Overflow problem There is a stack of water glasses in a form of triangle as illustrated. Each glass has a 250ml capacity. When a liquid is poure

Kris 2 Oct 22, 2021
WildHack 2021 solution by Nuclear Foxes team (public version).

WildHack 2021 Nuclear Foxes Team This repo contains our project for the Wildberries Hackathon 2021. Task 2: Searching tags Implement an algorithm of r

Sergey Zakharov 1 Apr 18, 2022
Python solution of advent-of-code 2021

Advent of code 2021 Python solutions of Advent of Code 2021 written by Eric Bouteillon Requirements The solutions were developed and tested using Pyth

Eric Bouteillon 2 Jan 6, 2022
A hackerank problems, solution repository

This is a repository for all hackerank challenges kindly note this is for learning purposes and if you wish to contribute, dont hesitate all submision

Tyler Mwalo Kenneth's 1 Dec 20, 2021
AIO solution for SSIS students

ssis.bit AIO solution for SSIS students Hardware CircuitPython supports more than 200 different boards. Locally available is the TTGO T8 ESP32-S2 ST77

null 3 Jun 5, 2022