summaryrefslogtreecommitdiff
path: root/src/cli.rs
diff options
context:
space:
mode:
authorOwen Jacobson <owen@grimoire.ca>2024-10-31 17:59:10 -0400
committerOwen Jacobson <owen@grimoire.ca>2024-10-31 17:59:10 -0400
commit8088a8bd8bced9127edcb2284b993332d291b443 (patch)
treeb1c09c6331dcb13d3b54fb1a42df09a9de0bbde5 /src/cli.rs
parent2d0611fc21f781ad875dc878f59ce2fc140c9c20 (diff)
Limit background expiry to the API.
Using requests to drive background work (expiring things, mainly) is a hack to avoid the complexity of background workers, but it's reaching its limits. In the live deployment at `hi.grimoire.ca`, we found that requests for the UI were taking 300+ milliseconds as the expiry process required database access. The DB there is slow, which is a separate issue, but also being accessed many times for little benefit. Since only the API is actually _affected_ by expiry, I've scoped the middleware down to just those endpoints.
Diffstat (limited to 'src/cli.rs')
-rw-r--r--src/cli.rs15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/cli.rs b/src/cli.rs
index 0659851..308294d 100644
--- a/src/cli.rs
+++ b/src/cli.rs
@@ -87,10 +87,6 @@ impl Args {
let app = App::from(pool);
let app = routers(&app)
- .route_layer(middleware::from_fn_with_state(
- app.clone(),
- expire::middleware,
- ))
.route_layer(middleware::from_fn(clock::middleware))
.route_layer(middleware::map_response(Self::server_info()))
.with_state(app);
@@ -144,6 +140,17 @@ fn routers(app: &App) -> Router<App> {
]
.into_iter()
.fold(Router::default(), Router::merge)
+ // Run expiry whenever someone accesses the API. This was previously a blanket middleware
+ // affecting the whole service, but loading the client makes a several requests before the
+ // client can completely load, each of which was triggering expiry. There is absolutely no
+ // upside to re-checking expiry tens of times back-to-back like that; the API is accessed
+ // more regularly and with less of a traffic rush.
+ //
+ // This should, probably, be moved to a background job at some point.
+ .route_layer(middleware::from_fn_with_state(
+ app.clone(),
+ expire::middleware,
+ ))
.route_layer(middleware::from_fn_with_state(app.clone(), setup_required)),
// API endpoints that handle setup
setup::router(),