Flask Track Usage is a very light weight Flask extension to track usage traffic for Flask apps. This post will give you a brief introduction to the usage and merits.
Recently I had a requirement to add light weight tracking for a Flask app. Tools like Google analytics was not an option because, I wanted raw number and data handy rather than just figures, this was a website page in the intranet, and I also wanted to easily track all the REST apis. That is when I stumbled upon Steve Milner's Flask-Track-Usage package.
The API and usage is incredibly simple, and as of version 0.0.7 supported Mongo DB storage. Since Mongo was not an option for me, I added SQLAlchemy based storage, thus opening doors for a wide array of databases. These additions will be released as part of version 1.0.0.
Here is a quick-start version on using SQLStorage with Flask-Track-Usage:
# mainapp.py # Create the Flask 'app' from flask import Flask app = Flask(__name__) # Set the configuration items manually for the example app.config['TRACK_USAGE_USE_FREEGEOIP'] = False app.config['TRACK_USAGE_INCLUDE_OR_EXCLUDE_VIEWS'] = 'include' # We will just print out the data for the example from flask.ext.track_usage import TrackUsage from flask.ext.track_usage.storage.sql import SQLStorage # Make an instance of the extension t = TrackUsage(app, SQLStorage(conn_str="sqlite:///D:\\usage_tracking.db")) # Make an instance of the extension t = TrackUsage(app, storage) # Include the view in the metrics @t.include @app.route('/') def index(): return "Hello" # Run the application! app.run(debug=True)
In the code above, the SQLStorage object is created with a conn_str argument which can be any of the engine configurations supported by SQLAlchemy itself.
You can use Flask-Track-Usage with blueprints as well. This is how you include blueprints views:
# Here app is the Flask app created in mainapp.py app.config['TRACK_USAGE_INCLUDE_OR_EXCLUDE_VIEWS'] = 'include' # Make an instance of the extension t = TrackUsage(app, SQLStorage(conn_str="sqlite:///D:\\usage_tracking.db")) # exclude just the a_blueprint out from my_blueprints import a_blueprint t.exclude_blueprint(a_blueprint)
What we have done here is to include all views, except for the ones in the blueprint a_blueprint. You can instead exclude all by default, and include just the specific ones as shown below.
# Here app is the Flask app created in mainapp.py app.config['TRACK_USAGE_INCLUDE_OR_EXCLUDE_VIEWS'] = 'exclude' # Make an instance of the extension t = TrackUsage(app, SQLStorage(conn_str="sqlite:///D:\\usage_tracking.db")) from my_blueprints import a_blueprint t.include_blueprint(a_blueprint)
Once you have setup the extension to track usage, you can even use the _get_usage method part of the Storage object to view the usage hits. This method returns a list of JSON dict and has the following schema:
[
{
'url': str,
'user_agent': {
'browser': str,
'language': str,
'platform': str,
'version': str,
},
'blueprint': str,
'view_args': dict or None
'status': int,
'remote_addr': str,
'authorization': bool,
'ip_info': str or None,
'path': str,
'speed': float,
'date': datetime,
},
{
....
}
]