Skip to main content

Track requests to your Flask server with Matomo

Project description

flask-matomo2

PyPI version PyPI - Python Version PyPI - Downloads Docs MIT License

Maturity badge - level 3 Stage

Code Coverage

CI(check) CI(release) CI(scheduled) CI(test)

flask-matomo2 is a library which lets you track the requests of your Flask website using Matomo (Piwik).

Forked from LucasHild/flask-matomo.

Installation

pip install flask-matomo2

Using flask-matomo2 in your project

Simply add flask-matomo2 to your dependencies:

# pyproject.toml
dependencies = [
  "flask-matomo2",
]

Using Poetry

poetry add flask-matomo2

Using PDM

pdm add flask-matomo2

Usage

from flask import Flask, jsonify
from flask_matomo2 import Matomo

app = Flask(__name__)
matomo = Matomo(
    app, 
    matomo_url="https://matomo.mydomain.com",
    id_site=5, token_auth="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")

@app.route("/")
def index():
  return jsonify({"page": "index"})

if __name__ == "__main__":
  app.run()

In the code above:

  1. The Matomo object is created by passing in the Flask application and arguments to configure Matomo.
  2. The matomo_url parameter is the url to your Matomo installation.
  3. The id_site parameter is the id of your site. This is used if you track several websites with one Matomo installation. It can be found if you open your Matomo dashboard, change to site you want to track and look for &idSite= in the url.
  4. The token_auth parameter can be found in the area API in the settings of Matomo. It is required for tracking the ip address.

Adding details to route

You can provide details to a route in 2 ways, first by using the matomo.details decorator:

from flask import Flask, jsonify
from flask_matomo2 import Matomo

matomo = Matomo(
    matomo_url="https://matomo.mydomain.com",
    id_site=5, token_auth="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
app = Flask(__name__)
matomo.init_app(app)

@app.route("/foo")
@matomo.details(action_name="Foo")
def foo():
  return jsonify({"page": "foo"})

if __name__ == "__main__":
  app.run()

Here the Matomo object is created before the Flask object and then calling init_app. Or by giving details to the Matomo constructor:

from flask import Flask, jsonify
from flask_matomo2 import Matomo

app = Flask(__name__)
matomo = Matomo(
  app,
  matomo_url="https://matomo.mydomain.com",
  id_site=5,
  token_auth="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  routes_details={
    "/foo": {
      "action_name": "Foo"
    }
  }
)

@app.route("/foo")
def foo():
  return jsonify({"page": "foo"})

if __name__ == "__main__":
  app.run()

Adjusting the tracked url

If your app is behind a proxy and you don't adjust the url in any other way, you can adjust the tracked url by setting base_url without trailing / in either the constructor:

from flask import Flask, jsonify
from flask_matomo2 import Matomo

matomo = Matomo(
    matomo_url="https://matomo.mydomain.com",
    id_site=5,
    base_url="https://mydomain.com/apps")
app = Flask(__name__)
matomo.init_app(app)

@app.route("/foo")
@matomo.details(action_name="Foo")
def foo():
  return jsonify({"page": "foo"})

if __name__ == "__main__":
  app.run()

Or a call to activate:

from flask import Flask, jsonify
from flask_matomo2 import Matomo

matomo = Matomo.activate_later()

matomo.activate(
    matomo_url="https://matomo.mydomain.com",
    id_site=5, 
    base_url="https://mydomain.com/apps"
)
app = Flask(__name__)
matomo.init_app(app)

@app.route("/foo")
@matomo.details(action_name="Foo")
def foo():
  return jsonify({"page": "foo"})

if __name__ == "__main__":
  app.run()

The result is that a request to /foo will be tracked as https://mydomain.com/apps/foo.

Using a custom client

By default, Matomo uses httpx.Client to make the tracking call. You can override this by setting client as long as the client uses the same api as httpx:s Client.

Ignoring a route

You can ignore tracking a route by decorating the route with @matomo.ignore():

from flask import Flask, jsonify
from flask_matomo2 import Matomo

matomo = Matomo(
    matomo_url="https://matomo.mydomain.com",
    id_site=5,
)
app = Flask(__name__)
matomo.init_app(app)

@app.route("/foo")
@matomo.ignore()
def foo():
  return jsonify({"page": "foo"})

if __name__ == "__main__":
  app.run()

Or ignore the route in the matomo constructor:

from flask import Flask, jsonify
from flask_matomo2 import Matomo

matomo = Matomo(
    matomo_url="https://matomo.mydomain.com",
    id_site=5,
    ignored_routes=["/foo"]
)
app = Flask(__name__)
matomo.init_app(app)

@app.route("/foo")
def foo():
  return jsonify({"page": "foo"})

if __name__ == "__main__":
  app.run()

Ignore routes by patterns

You can also ignore routes by giving a list of regexes to the constructor:

from flask import Flask, jsonify
from flask_matomo2 import Matomo

matomo = Matomo(
    matomo_url="https://matomo.mydomain.com",
    id_site=5,
    ignored_patterns=["/fo.*"]
)
app = Flask(__name__)
matomo.init_app(app)

@app.route("/foo")
def foo():
  return jsonify({"page": "foo"})

if __name__ == "__main__":
  app.run()

Ignore requests by User-Agent patterns

You can supply regex patterns to ignore request based on User-Agent:

from flask import Flask, jsonify
from flask_matomo2 import Matomo

matomo = Matomo(
    matomo_url="https://matomo.mydomain.com",
    id_site=5,
    ignored_ua_patterns=[".*bot.*"]
)
app = Flask(__name__)
matomo.init_app(app)

@app.route("/foo")
def foo():
  return jsonify({"page": "foo"})

if __name__ == "__main__":
  app.run()

Meta

Spraakbanken 2023-2024 - https://spraakbanken.gu.se Lucas Hild (original project Flask-Matomo)- https://lucas-hild.de This project is licensed under the MIT License - see the LICENSE file for details

Release Notes

Latest Changes

0.5.0 - 2024-08-14

Added

0.4.4 - 2024-08-14

Documentation

  • add metadata about python versions.

  • sort out documentation of params . PR #56 by @kod-kristoff.

0.4.1 - 2024-08-14

Changed

  • fix: add "/matomo.php" to matomo_url if needed. PR #55 by @arildm.

0.4.0 - 2024-03-04

Changed

0.3.0 - 2023-05-25

Added

0.2.0 - 2023-05-22

Changed

0.1.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flask_matomo2-0.5.0.tar.gz (44.1 kB view details)

Uploaded Source

Built Distribution

flask_matomo2-0.5.0-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file flask_matomo2-0.5.0.tar.gz.

File metadata

  • Download URL: flask_matomo2-0.5.0.tar.gz
  • Upload date:
  • Size: 44.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for flask_matomo2-0.5.0.tar.gz
Algorithm Hash digest
SHA256 d7ed8ab448cb1e85c32bdef7852a407169b5ae5a30868ed43fc4b7c4e6d3d358
MD5 35e36ece5ecf150ad8da9f43e28bea72
BLAKE2b-256 0393ecba77383748acc04940a9e9966a9282f6bd21584095a42062bc25051d4a

See more details on using hashes here.

File details

Details for the file flask_matomo2-0.5.0-py3-none-any.whl.

File metadata

File hashes

Hashes for flask_matomo2-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fa0592d4c7dd2f348f6438eb84c82411003378103c63ed7d07a97477c1c842ee
MD5 671371b0443eb8531911187850408548
BLAKE2b-256 102b57b25bd8d1efcbc5f206bce38b4c98399fb254637104f77f58c4aa32e796

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page