diff --git a/afpy.py b/afpy.py index 569c23a..a52966d 100644 --- a/afpy.py +++ b/afpy.py @@ -9,7 +9,7 @@ import docutils.core import docutils.writers.html5_polyglot import feedparser from dateutil.parser import parse -from flask import (Flask, abort, redirect, render_template, request, +from flask import (Flask, abort, jsonify, redirect, render_template, request, send_from_directory, url_for) from flask_cache import Cache from itsdangerous import BadSignature, URLSafeSerializer @@ -323,6 +323,31 @@ def jobs(): return redirect('https://plone.afpy.org/rss-jobs/RSS', code=307) +def get_posts_stats(): + stats = {} + for category in POSTS: + stats[category] = {} + for status in ('waiting', 'published'): + stats[category][status] = len(list( + (root / category / status).iterdir())) + return stats + + +def get_system_stats(): + st = os.statvfs(__file__) + return { + "disk_free": st.f_bavail * st.f_frsize, + "disk_total": st.f_blocks * st.f_frsize, + "load_avg": os.getloadavg(), + } + + +@app.route('/status') +def status(): + stats = {**get_posts_stats(), **get_system_stats()} + return jsonify(stats) + + @app.template_filter('rfc822_datetime') def format_rfc822_datetime(timestamp): return email.utils.formatdate(timestamp)