Skip to main content

A Flask extension for tracking and visualizing visitor metrics

Project description

Flask Metrics Visitors

A Flask extension for tracking and visualizing visitor metrics.

Features

  • Track visitor sessions and page views
  • Display real-time session analytics
  • Filterable session data with DataTables
  • Session duration and click tracking
  • Page URL tracking
  • Timezone-aware timestamps
  • Persistent SQLite database storage

Demo

Dashboard Overview

Dashboard Overview

Session Analytics

Session Analytics

Detailed Session View

Detailed Session View

Requirements

  • Python 3.7 or higher
  • Flask 2.0.0 or higher
  • Flask-SQLAlchemy 3.0.0 or higher
  • Flask-Login 0.6.0 or higher

Installation

pip install flask-metrics-visitors

Development Setup

To build the package locally:

  1. Install build dependencies:
pip install twine
  1. Build the package with version increment:
# For a patch release (bug fixes)
./build.sh patch

# For a minor release (new features)
./build.sh minor

# For a major release (breaking changes)
./build.sh major
  1. Upload to PyPI (if you have access):
./push.sh

The version number follows semantic versioning (MAJOR.MINOR.PATCH):

  • MAJOR version for incompatible API changes
  • MINOR version for backwards-compatible functionality
  • PATCH version for backwards-compatible bug fixes

Setup

You can initialize the extension in two ways:

1. Direct Initialization

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_metrics_visitors import MetricsVisitors

app = Flask(__name__)
db = SQLAlchemy(app)

# Initialize the metrics extension
metrics = MetricsVisitors(app, db)

# Get and register the blueprint after initialization
app.register_blueprint(metrics.get_blueprint())

2. Factory Pattern (Recommended)

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_metrics_visitors import MetricsVisitors

db = SQLAlchemy()
metrics = MetricsVisitors()

def create_app():
    app = Flask(__name__)
    
    # Configure your app
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///metrics.db'
    app.config['METRICS_VISITORS_SESSION_LIFETIME'] = 30
    app.config['METRICS_VISITORS_UPDATE_INTERVAL'] = 30
    
    # Initialize extensions
    db.init_app(app)
    metrics.init_app(app, db)
    
    # Register the blueprint after initialization
    app.register_blueprint(metrics.get_blueprint())
    
    return app

app = create_app()
  1. Include the session tracking JavaScript in your base template:
<script src="{{ url_for('metrics_visitors.static', filename='js/session-tracker.js') }}"></script>
  1. Create the database tables:
with app.app_context():
    db.create_all()

Database Configuration

The extension uses SQLite for persistent storage of session data. By default, the database is stored in the application's instance folder. You can configure the database path using:

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///path/to/your/database.db'

Database Backup

It's recommended to implement regular backups of your SQLite database. Here's a simple backup strategy:

  1. Create a backup directory:
mkdir -p backups
  1. Set up a cron job to backup the database daily:
0 0 * * * cp /path/to/your/database.db /path/to/backups/database_$(date +\%Y\%m\%d).db

Database Maintenance

The extension automatically:

  • Cleans up old session data based on the configured retention period
  • Handles database migrations when the schema changes
  • Optimizes the database for performance

Usage

  1. Access the metrics dashboard at /metrics
  2. View session analytics at /metrics/session-analytics
  3. Session data is automatically tracked and updated every 30 seconds
  4. Use the DataTables interface to filter and sort session data

Session Tracking

The session tracker automatically:

  • Tracks session duration
  • Counts clicks
  • Records page URLs
  • Updates stats periodically
  • Sends final stats on page unload
  • Handles page visibility changes

Configuration

The following configuration options are available:

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///metrics.db'  # SQLite database path
app.config['METRICS_VISITORS_SESSION_LIFETIME'] = 30  # Session lifetime in days
app.config['METRICS_VISITORS_UPDATE_INTERVAL'] = 30  # Update interval in seconds

Package Information

  • Author: Patrick Hastings
  • License: MIT
  • Python Support: 3.7, 3.8, 3.9, 3.10
  • Development Status: Beta
  • Framework: Flask
  • Environment: Web Environment

License

MIT

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_metrics_visitors-0.7.0.tar.gz (16.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flask_metrics_visitors-0.7.0-py3-none-any.whl (16.3 kB view details)

Uploaded Python 3

File details

Details for the file flask_metrics_visitors-0.7.0.tar.gz.

File metadata

  • Download URL: flask_metrics_visitors-0.7.0.tar.gz
  • Upload date:
  • Size: 16.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for flask_metrics_visitors-0.7.0.tar.gz
Algorithm Hash digest
SHA256 d1636283b15ab25a901b1b01a6c383f31c691c5169af16f9d57ac1d717443bb4
MD5 bbc135a9c09088d7d44dffc8384c6746
BLAKE2b-256 ab322002869f07bbd7567bf78a90898b69b364d3a63f829be399c814112a3b75

See more details on using hashes here.

File details

Details for the file flask_metrics_visitors-0.7.0-py3-none-any.whl.

File metadata

File hashes

Hashes for flask_metrics_visitors-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e9dee699bf4a00e0e97a2d71db2f309e9201086f92b0d5dd1cb7edad71f8cfa2
MD5 3a2828bbeebfb57b8ef867ab74f1ef4d
BLAKE2b-256 7e5d27cbebf993bbc4dcb9a7f3dd7eddb118fcc46b72c36e28c431d5264d9c21

See more details on using hashes here.

Supported by

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