Skip to main content

Package to collect statistics in Flask.

Project description

Flask-Statistics

Flask-Statistics is an extensions that collects data from requests send to the server to then display statistics like response-time, hits, unique hits, etc.

Installation

You can install the extensions with pip:

$ pip install flask-statgraph

Usage

Below is a small example on how to use the extension.

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_statgraph import Statistics

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///database.db"

db = SQLAlchemy(app)

class Request(db.Model):
    __tablename__ = "request"

    index = db.Column(db.Integer, primary_key=True, autoincrement=True)
    response_time = db.Column(db.Float)
    date = db.Column(db.DateTime)
    method = db.Column(db.String)
    size = db.Column(db.Integer)
    status_code = db.Column(db.Integer)
    path = db.Column(db.String)
    user_agent = db.Column(db.String)
    remote_address = db.Column(db.String)
    exception = db.Column(db.String)
    referrer = db.Column(db.String)
    browser = db.Column(db.String)
    platform = db.Column(db.String)
    mimetype = db.Column(db.String)

db.create_all()

statistics = Statistics(app, db, Request)

@app.route("/")
def index():
    return "Hello World!"

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

The script above sets up a basic SQLAlchemy Database. When initalizing the statistics extensions, you will have to provide a model (here: Request) to store the data in.

Now, whenever a user requests an endpoint, it will be stored in the defined model.

If you are in debug mode and an exception occures, teardown of the request will not happen and therefore it won't be stored in the database. If you want to teardown it by force, set PRESERVE_CONTEXT_ON_EXCEPTION to False in the config.

Things that are stored

Key Type Description
response_time float The time it took the server to process the request.
date datetime.datetime The date the request was send to the server (in UTC).
method str The HTTP method that was used (e.g. GET, POST, ..).
size int The body size in bytes that was send to the client.
status_code int The status code that was returned by the request.
user_agent str The User-Agent that was send with the request.
remote_address str The ip address of the client.
exception str If an error occured, this field will have the error message and the status_code will automatically be 500.
Example: ZeroDivisionError('division by zero')
referrer str Link to the website that referred the user to the endpoint.
browser str The browser that was used to send the request.
Example: firefox 72.0
platform str Operating System the request was send from.
mimetype str Mimetype of the response send to the client (e.g. html/text).

View the statistics

Flask-Statistics will add a blueprint with the prefix ../statistics to your app.

preview_image

Config

Name Type Description Default
STATISTICS_DEFAULT_DATE_SPAN datetime.timedelta If no date was selected, it will be set to today as end and today - option as start. datetime.timedelta(days=7)

Protect the route

Flask-Statistics accepts a fourth argument: A function that is called before any requests to the statistics blueprint.

...

def check_if_user_is_allowed():
    # check if user is allowed to
    # e.g. JWT Token, Flask Login etc.
    # ...
    if not allowed:
        return redirect(url_for("index"))

statistics = Statistics(app, db, Request, check_if_user_is_allowed)

There you can check if the user has the required permissions to view the statistics. If not, redirect him to another page.

Disable statistics

If a user has opt-out, request record can be disabled with custom function disable_f.

statistics = Statistics(app, db, Request, disable_f= lambda: current_user.has_optout() )

or

def has_disable_cookie():
    return request.cookies.get('disable_stat') == 'True'

statistics = Statistics(app, db, Request, disable_f=has_disable_cookie )

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_statgraph-1.0.2.tar.gz (6.7 kB view details)

Uploaded Source

Built Distribution

flask_statgraph-1.0.2-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

Details for the file flask_statgraph-1.0.2.tar.gz.

File metadata

  • Download URL: flask_statgraph-1.0.2.tar.gz
  • Upload date:
  • Size: 6.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.8

File hashes

Hashes for flask_statgraph-1.0.2.tar.gz
Algorithm Hash digest
SHA256 bed59851a8bf0f2f42942a8069f51030377b1f963d6077ea0feda1657106f9f1
MD5 912e291480b8fe9a64309d18eea14f31
BLAKE2b-256 d0ae5edc07a5f8e9db4e98a2fde1c10a87cf6f508fcd57195ec33b48863d2a53

See more details on using hashes here.

File details

Details for the file flask_statgraph-1.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for flask_statgraph-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 3632935594a3b7eb526ab055c5e7f265e7c2ded3525d4651804b52ba1c19fe3c
MD5 4b1d4b56908eee4e968274802bc18f70
BLAKE2b-256 ce136c452f86c1afb72a2cbfd81fc173b0ba8d67502dfa90fc71654250ada260

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