use praxis_filter::FilterPipeline;
use crate::http::pingora::context::PingoraRequestCtx;
pub(super) fn maybe_emit_fallback_access_log(pipeline: &FilterPipeline, status: u16, ctx: &mut PingoraRequestCtx) {
if ctx.response_delivery_complete || ctx.connection_upgraded || !pipeline.contains_filter("access_log") {
return;
}
if let Some(filter_ctx) = ctx.filter_context_for(pipeline, None) {
if praxis_filter::access_record_already_emitted(&filter_ctx) {
return;
}
if !pipeline.filter_request_conditions_match("access_log", &filter_ctx) {
return;
}
if !pipeline.emit_deferred_records(&filter_ctx, status) {
praxis_filter::emit_access_record(&filter_ctx, status);
}
}
}
pub(super) async fn logging_cleanup(pipeline: &FilterPipeline, ctx: &mut PingoraRequestCtx) {
if !ctx.response_phase_done
&& let Some(mut filter_ctx) = ctx.filter_context_for(pipeline, None)
{
let _result = pipeline.execute_http_response(&mut filter_ctx).await;
let extensions = filter_ctx.extensions;
let metadata = filter_ctx.filter_metadata;
let state = filter_ctx.filter_state;
let branch_idx = filter_ctx.executed_branch_filters;
let exec_idx = filter_ctx.executed_filter_indices;
let body_idx = filter_ctx.body_done_indices;
let cluster = filter_ctx.cluster;
let upstream = filter_ctx.upstream;
ctx.extensions = extensions;
ctx.filter_metadata = metadata;
ctx.filter_state = state;
ctx.cached_executed_branch_filters = branch_idx;
ctx.cached_executed_filter_indices = exec_idx;
ctx.cached_body_done_indices = body_idx;
ctx.cluster = cluster;
ctx.upstream = upstream;
}
}