Radish alpha
r
rad:zwTxygwuz5LDGBq255RA2CbNGrz8
Radicle CI broker
Radicle
Git
feat: log filter decision more clearly, at info level
Merged liw opened 1 year ago

Signed-off-by: Lars Wirzenius liw@liw.fi

feat: log event filter evaluation in more detail

This is a step towards making filters more transparent.

Signed-off-by: Lars Wirzenius liw@liw.fi

2 files changed +35 -10 9e84afec a3dbd8f8
modified src/filter.rs
@@ -88,13 +88,18 @@ pub enum EventFilter {

impl EventFilter {
    pub fn allows(&self, event: &CiEvent) -> bool {
-
        match self {
-
            Self::Allow => return true,
-
            Self::Deny => return false,
-
            Self::Not(expr) => return !expr.iter().any(|e| e.allows(event)),
-
            Self::And(exprs) => return exprs.iter().all(|e| e.allows(event)),
-
            Self::Or(exprs) => return exprs.iter().any(|e| e.allows(event)),
-
            _ => (),
+
        let decision = match self {
+
            Self::Allow => Some(true),
+
            Self::Deny => Some(false),
+
            Self::Not(expr) => Some(!expr.iter().any(|e| e.allows(event))),
+
            Self::And(exprs) => Some(exprs.iter().all(|e| e.allows(event))),
+
            Self::Or(exprs) => Some(exprs.iter().any(|e| e.allows(event))),
+
            _ => None,
+
        };
+

+
        if let Some(allowed) = decision {
+
            logger::queueproc_predicate_decision(event, self, allowed);
+
            return allowed;
        }

        let decision = match event {
@@ -161,9 +166,7 @@ impl EventFilter {
            },
        };

-
        logger::debug2(format!(
-
            "EventFilter::allows: decision={decision} event={event:?}"
-
        ));
+
        logger::queueproc_filter_decision(event, self, decision);

        decision
    }
modified src/logger.rs
@@ -14,6 +14,7 @@ use crate::{
    ci_event_source::CiEventSource,
    config::Config,
    db::{QueueId, QueuedCiEvent},
+
    filter::EventFilter,
    msg::Request,
    node_event_source::NodeEventSource,
    queueproc::QueueError,
@@ -145,6 +146,7 @@ enum Id {
    QueueProcActionShutdown,
    QueueProcDisconnected,
    QueueProcEnd,
+
    QueueProcFilterDecision,
    QueueProcPickedEvent,
    QueueProcProcessedEvent,
    QueueProcQueueLength,
@@ -433,6 +435,26 @@ pub fn queueproc_queue_length(len: usize) {
    );
}

+
pub fn queueproc_filter_decision(event: &CiEvent, filter: &EventFilter, allowed: bool) {
+
    info!(
+
        msg_id = ?Id::QueueProcFilterDecision,
+
        ?event,
+
        ?filter,
+
        ?allowed,
+
        "filter decision"
+
    );
+
}
+

+
pub fn queueproc_predicate_decision(event: &CiEvent, filter: &EventFilter, allowed: bool) {
+
    trace!(
+
        msg_id = ?Id::QueueProcFilterDecision,
+
        ?event,
+
        ?filter,
+
        ?allowed,
+
        "filter predicate decision"
+
    );
+
}
+

pub fn queueproc_picked_event(id: &QueueId, event: &QueuedCiEvent, adapter: &Adapter) {
    info!(
        msg_id = ?Id::QueueProcPickedEvent,