This endpoint can be queried on a daily basis to retrieve cloud usage stats. For assets and comments we take into considerations only those who belong to public projects.
59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
import logging
|
|
import datetime
|
|
import functools
|
|
|
|
from flask import Blueprint, jsonify
|
|
from cloud.stats import count_nodes, count_users
|
|
|
|
blueprint = Blueprint('cloud.stats', __name__, url_prefix='/s')
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
@functools.lru_cache()
|
|
def get_stats(before: datetime.datetime):
|
|
query_comments = {'node_type': 'comment'}
|
|
query_assets = {'node_type': 'asset'}
|
|
# TODO Actually query per home project (and 1 blend per project)
|
|
query_user_blender_sync = {'name': 'startup.blend'}
|
|
|
|
if before:
|
|
d = {'_created': {'$lt': before}}
|
|
query_comments.update(d)
|
|
query_assets.update(d)
|
|
query_user_blender_sync.update(d)
|
|
|
|
stats = {
|
|
'comments': count_nodes(query_comments),
|
|
'assets': count_nodes(query_assets),
|
|
'users_total': count_users(),
|
|
'users_blender_sync': count_nodes(query_user_blender_sync),
|
|
}
|
|
return stats
|
|
|
|
|
|
@blueprint.route('/')
|
|
@blueprint.route('/before/<int:before>')
|
|
def index(before: int=0):
|
|
"""
|
|
This endpoint is queried on a daily basis by grafista to retrieve cloud usage
|
|
stats. For assets and comments we take into considerations only those who belong
|
|
to public projects.
|
|
|
|
These is the data we retrieve
|
|
|
|
- Comments count
|
|
- Assets count (video, images and files)
|
|
- Users count (subscribers count goes via store)
|
|
- Blender Sync users
|
|
"""
|
|
|
|
# TODO: Implement project-level metrics (and update ad every child update)
|
|
if before:
|
|
before = datetime.datetime.strptime(before, '%Y%m%d')
|
|
else:
|
|
today = datetime.date.today()
|
|
before = datetime.datetime(today.year, today.month, today.day)
|
|
|
|
return jsonify(get_stats(before))
|