]> source.dussan.org Git - rspamd.git/commitdiff
[Rework] Allow to use custom callback for monitored checks
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 6 Jul 2017 07:32:21 +0000 (08:32 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 6 Jul 2017 07:32:21 +0000 (08:32 +0100)
src/libserver/monitored.c
src/libserver/monitored.h
src/worker.c

index 09d642d09c038d6d700f2d052b139f0451d9b015..472c3d4e6180351c5639b670d77074fa6ec5a303 100644 (file)
@@ -39,6 +39,8 @@ struct rspamd_monitored_ctx {
        struct rdns_resolver *resolver;
        struct event_base *ev_base;
        GPtrArray *elts;
+       mon_change_cb change_cb;
+       gpointer ud;
        gdouble monitoring_interval;
        guint max_errors;
        gboolean initialized;
@@ -94,6 +96,10 @@ rspamd_monitored_propagate_error (struct rspamd_monitored *m,
                                        error, m->url);
                        m->alive = FALSE;
                        m->offline_time = rspamd_get_calendar_ticks ();
+
+                       if (m->ctx->change_cb) {
+                               m->ctx->change_cb (m->ctx, m, FALSE, m->ctx->ud);
+                       }
                }
        }
 }
@@ -115,6 +121,10 @@ rspamd_monitored_propagate_success (struct rspamd_monitored *m, gdouble lat)
                m->offline_time = 0;
                m->nchecks = 1;
                m->latency = lat;
+
+               if (m->ctx->change_cb) {
+                       m->ctx->change_cb (m->ctx, m, TRUE, m->ctx->ud);
+               }
        }
        else {
                m->latency = (lat + m->latency * m->nchecks) / (m->nchecks + 1);
@@ -351,7 +361,9 @@ void
 rspamd_monitored_ctx_config (struct rspamd_monitored_ctx *ctx,
                struct rspamd_config *cfg,
                struct event_base *ev_base,
-               struct rdns_resolver *resolver)
+               struct rdns_resolver *resolver,
+               mon_change_cb change_cb,
+               gpointer ud)
 {
        struct rspamd_monitored *m;
        guint i;
@@ -361,6 +373,8 @@ rspamd_monitored_ctx_config (struct rspamd_monitored_ctx *ctx,
        ctx->resolver = resolver;
        ctx->cfg = cfg;
        ctx->initialized = TRUE;
+       ctx->change_cb = change_cb;
+       ctx->ud = ud;
 
        /* Start all events */
        for (i = 0; i < ctx->elts->len; i ++) {
@@ -437,6 +451,18 @@ rspamd_monitored_alive (struct rspamd_monitored *m)
        return m->alive;
 }
 
+gboolean
+rspamd_monitored_set_alive (struct rspamd_monitored *m, gboolean alive)
+{
+       gboolean st;
+
+       g_assert (m != NULL);
+       st = m->alive;
+       m->alive = alive;
+
+       return st;
+}
+
 gdouble
 rspamd_monitored_offline_time (struct rspamd_monitored *m)
 {
index 4c55a5646b22b41dad0cacea8b2afac6b02225c6..e342a5886a30eb375788f1b412d5d860e3bf906e 100644 (file)
@@ -38,6 +38,9 @@ enum rspamd_monitored_flags {
  */
 struct rspamd_monitored_ctx *rspamd_monitored_ctx_init (void);
 
+typedef void (*mon_change_cb) (struct rspamd_monitored_ctx *ctx,
+               struct rspamd_monitored *m, gboolean alive,
+               void *ud);
 /**
  * Configure context for monitored objects
  * @param ctx context
@@ -48,7 +51,9 @@ struct rspamd_monitored_ctx *rspamd_monitored_ctx_init (void);
 void rspamd_monitored_ctx_config (struct rspamd_monitored_ctx *ctx,
                struct rspamd_config *cfg,
                struct event_base *ev_base,
-               struct rdns_resolver *resolver);
+               struct rdns_resolver *resolver,
+               mon_change_cb change_cb,
+               gpointer ud);
 
 /**
  * Create monitored object
@@ -72,6 +77,13 @@ struct rspamd_monitored *rspamd_monitored_create (
  */
 gboolean rspamd_monitored_alive (struct rspamd_monitored *m);
 
+/**
+ * Force alive flag for a monitored object
+ * @param m monitored object
+ * @return TRUE or FALSE
+ */
+gboolean rspamd_monitored_set_alive (struct rspamd_monitored *m, gboolean alive);
+
 /**
  * Returns the current offline time for a monitored object
  * @param m
index 49336e22d664baff4becb9581a09d9252dbde1cf..8cf2f5fe8795533aa7d1754de6686463a8d6c578 100644 (file)
@@ -604,7 +604,7 @@ rspamd_worker_init_scanner (struct rspamd_worker *worker,
                struct rspamd_dns_resolver *resolver)
 {
        rspamd_monitored_ctx_config (worker->srv->cfg->monitored_ctx,
-                       worker->srv->cfg, ev_base, resolver->r);
+                       worker->srv->cfg, ev_base, resolver->r, NULL, NULL);
        rspamd_stat_init (worker->srv->cfg, ev_base);
        g_ptr_array_add (worker->finish_actions,
                        (gpointer) rspamd_worker_on_terminate);