dashboard: everything except gunicorn

This commit is contained in:
Misty De Méo 2025-02-18 15:05:36 -08:00
parent ec268af922
commit 715b16dbc4

View File

@ -17,13 +17,15 @@ See the License for the specific language governing permissions and
limitations under the License.
"""
import logging
import structlog
import sys
logger = structlog.get_logger()
try:
import flask
except ImportError as e:
logging.critical(
logger.critical(
'%s: %s\n\nYou might need to run "pip install '
'brozzler[dashboard]".\nSee README.rst for more information.',
type(e).__name__,
@ -77,7 +79,7 @@ def queued_count(site_id):
)
.count()
)
logging.debug("querying rethinkdb: %s", reql)
logger.debug("querying rethinkdb", query=reql)
count = reql.run()
return flask.jsonify(count=count)
@ -85,7 +87,7 @@ def queued_count(site_id):
@app.route("/api/sites/<site_id>/queue")
@app.route("/api/site/<site_id>/queue")
def queue(site_id):
logging.debug("flask.request.args=%s", flask.request.args)
logger.debug("flask.request.args", args=flask.request.args)
start = flask.request.args.get("start", 0)
end = flask.request.args.get("end", start + 90)
reql = rr.table("pages").between(
@ -93,7 +95,7 @@ def queue(site_id):
[site_id, 0, False, r.maxval],
index="priority_by_site",
)[start:end]
logging.debug("querying rethinkdb: %s", reql)
logger.debug("querying rethinkdb", query=reql)
queue_ = reql.run()
return flask.jsonify(queue_=list(queue_))
@ -112,7 +114,7 @@ def page_count(site_id):
)
.count()
)
logging.debug("querying rethinkdb: %s", reql)
logger.debug("querying rethinkdb", query=reql)
count = reql.run()
return flask.jsonify(count=count)
@ -130,7 +132,7 @@ def pages(site_id):
)
.order_by(index="least_hops")[start:end]
)
logging.debug("querying rethinkdb: %s", reql)
logger.debug("querying rethinkdb", query=reql)
pages_ = reql.run()
return flask.jsonify(pages=list(pages_))
@ -139,7 +141,7 @@ def pages(site_id):
@app.route("/api/page/<page_id>")
def page(page_id):
reql = rr.table("pages").get(page_id)
logging.debug("querying rethinkdb: %s", reql)
logger.debug("querying rethinkdb", query=reql)
page_ = reql.run()
return flask.jsonify(page_)
@ -148,7 +150,7 @@ def page(page_id):
@app.route("/api/page/<page_id>/yaml")
def page_yaml(page_id):
reql = rr.table("pages").get(page_id)
logging.debug("querying rethinkdb: %s", reql)
logger.debug("querying rethinkdb", query=reql)
page_ = reql.run()
return app.response_class(
yaml.dump(page_, default_flow_style=False), mimetype="application/yaml"
@ -159,7 +161,7 @@ def page_yaml(page_id):
@app.route("/api/site/<site_id>")
def site(site_id):
reql = rr.table("sites").get(site_id)
logging.debug("querying rethinkdb: %s", reql)
logger.debug("querying rethinkdb", query=reql)
s = reql.run()
if "cookie_db" in s:
s["cookie_db"] = base64.b64encode(s["cookie_db"]).decode("ascii")
@ -170,7 +172,7 @@ def site(site_id):
@app.route("/api/site/<site_id>/yaml")
def site_yaml(site_id):
reql = rr.table("sites").get(site_id)
logging.debug("querying rethinkdb: %s", reql)
logger.debug("querying rethinkdb", query=reql)
site_ = reql.run()
return app.response_class(
yaml.dump(site_, default_flow_style=False), mimetype="application/yaml"
@ -180,7 +182,7 @@ def site_yaml(site_id):
@app.route("/api/stats/<bucket>")
def stats(bucket):
reql = rr.table("stats").get(bucket)
logging.debug("querying rethinkdb: %s", reql)
logger.debug("querying rethinkdb", query=reql)
stats_ = reql.run()
return flask.jsonify(stats_)
@ -193,7 +195,7 @@ def sites(job_id):
except ValueError:
jid = job_id
reql = rr.table("sites").get_all(jid, index="job_id")
logging.debug("querying rethinkdb: %s", reql)
logger.debug("querying rethinkdb", query=reql)
sites_ = list(reql.run())
# TypeError: <binary, 7168 bytes, '53 51 4c 69 74 65...'> is not JSON serializable
for s in sites_:
@ -206,7 +208,7 @@ def sites(job_id):
def jobless_sites():
# XXX inefficient (unindexed) query
reql = rr.table("sites").filter(~r.row.has_fields("job_id"))
logging.debug("querying rethinkdb: %s", reql)
logger.debug("querying rethinkdb", query=reql)
sites_ = list(reql.run())
# TypeError: <binary, 7168 bytes, '53 51 4c 69 74 65...'> is not JSON serializable
for s in sites_:
@ -223,7 +225,7 @@ def job(job_id):
except ValueError:
jid = job_id
reql = rr.table("jobs").get(jid)
logging.debug("querying rethinkdb: %s", reql)
logger.debug("querying rethinkdb", query=reql)
job_ = reql.run()
return flask.jsonify(job_)
@ -236,7 +238,7 @@ def job_yaml(job_id):
except ValueError:
jid = job_id
reql = rr.table("jobs").get(jid)
logging.debug("querying rethinkdb: %s", reql)
logger.debug("querying rethinkdb", query=reql)
job_ = reql.run()
return app.response_class(
yaml.dump(job_, default_flow_style=False), mimetype="application/yaml"
@ -258,7 +260,7 @@ def services():
@app.route("/api/jobs")
def jobs():
reql = rr.table("jobs").order_by(r.desc("id"))
logging.debug("querying rethinkdb: %s", reql)
logger.debug("querying rethinkdb", query=reql)
jobs_ = list(reql.run())
return flask.jsonify(jobs=jobs_)
@ -313,13 +315,13 @@ try:
return self.application
def run(**options):
logging.info("running brozzler-dashboard using gunicorn")
logger.info("running brozzler-dashboard using gunicorn")
GunicornBrozzlerDashboard(app, options).run()
except ImportError:
def run():
logging.info("running brozzler-dashboard using simple flask app.run")
logger.info("running brozzler-dashboard using simple flask app.run")
app.run(host=SETTINGS["DASHBOARD_INTERFACE"], port=SETTINGS["DASHBOARD_PORT"])