57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
from __future__ import annotations
|
|
|
|
from flask import jsonify, request
|
|
|
|
from app.blueprints.seo import bp
|
|
from app.blueprints.seo.queries import (
|
|
get_bot_status_codes,
|
|
get_bot_summary,
|
|
get_crawl_chart_data,
|
|
get_crawled_vs_visited,
|
|
)
|
|
from app.utils.dates import parse_date_range
|
|
from app.utils.htmx import render_htmx_aware
|
|
from app.utils.pagination import parse_pagination
|
|
|
|
|
|
@bp.route("/seo")
|
|
def seo():
|
|
from_date, to_date = parse_date_range(request)
|
|
return render_htmx_aware(
|
|
request, full_template="seo/index.html", partial_template="seo/_content.html",
|
|
from_date=from_date, to_date=to_date,
|
|
)
|
|
|
|
|
|
@bp.get("/api/seo/bot-summary")
|
|
def api_bot_summary():
|
|
from_date, to_date = parse_date_range(request)
|
|
return jsonify(data=get_bot_summary(from_date, to_date), meta={"from": from_date.isoformat(), "to": to_date.isoformat()})
|
|
|
|
|
|
@bp.get("/api/seo/crawl-chart-data")
|
|
def api_crawl_chart_data():
|
|
from_date, to_date = parse_date_range(request)
|
|
bot_name = request.args.get("bot")
|
|
return jsonify(
|
|
data=get_crawl_chart_data(from_date, to_date, bot_name),
|
|
meta={"from": from_date.isoformat(), "to": to_date.isoformat(), "bot": bot_name},
|
|
)
|
|
|
|
|
|
@bp.get("/api/seo/bot-status-codes")
|
|
def api_bot_status_codes():
|
|
from_date, to_date = parse_date_range(request)
|
|
return jsonify(data=get_bot_status_codes(from_date, to_date), meta={"from": from_date.isoformat(), "to": to_date.isoformat()})
|
|
|
|
|
|
@bp.get("/api/seo/crawled-vs-visited")
|
|
def api_crawled_vs_visited():
|
|
from_date, to_date = parse_date_range(request)
|
|
page, per_page = parse_pagination(request)
|
|
rows, total = get_crawled_vs_visited(from_date, to_date, page, per_page)
|
|
return jsonify(
|
|
data={"rows": rows, "total": total},
|
|
meta={"from": from_date.isoformat(), "to": to_date.isoformat(), "page": page, "per_page": per_page},
|
|
)
|