]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Bug fix
authorVojtech Vilimek <vojtech.vilimek@nic.cz>
Wed, 20 Jul 2022 08:29:46 +0000 (10:29 +0200)
committerVojtech Vilimek <vojtech.vilimek@nic.cz>
Wed, 20 Jul 2022 08:29:46 +0000 (10:29 +0200)
proto/stats/stats.c

index a4e0614e03f670d48737605a75e890bb5744932c..069bc7df764b35823704d3ddcb9338c55fd9f4d8 100644 (file)
@@ -33,36 +33,19 @@ static void
 stats_rt_notify(struct proto *P UNUSED, struct channel *src_ch, const net_addr *n UNUSED, rte *new, const rte *old)
 {
   struct stats_channel *ch = (void *) src_ch;
-  log(L_INFO "stats_rt_notify() %u", ch->max_generation);
 
   if (old)
   {
+    ch->counters[old->generation]--;
     if (old->generation < ch->max_generation)
-    {
-      ch->counters[old->generation]--;
-      log(L_INFO "channel %s counter %u was decreased", src_ch->name, old->generation);
-    }
-    else
-    {
-      log(L_WARN "Stats: Maximum generation reached in channel %s, route is dropped.",
-       src_ch->name
-      );
-    }
+      ch->sum--;
   }
 
   if (new)
   {
+    ch->counters[new->generation]++;
     if (new->generation < ch->max_generation)
-    {
-      ch->counters[new->generation]++;
-      log(L_INFO "channel %s counter %u was increased", src_ch->name, new->generation);
-    }
-    else
-    {
-      log(L_WARN "Stats: Maximum generation reached in channel %s, route is dropped.",
-       src_ch->name
-      );
-    }
+      ch->sum++;
   }  
 }
 
@@ -76,8 +59,6 @@ stats_reload_routes(struct channel *C UNUSED)
 static void 
 stats_configure_channels(struct proto *P, struct proto_config *CF)
 {
-  log(L_INFO "stats_configure_channels()");
-
   struct channel_config *cc;
   WALK_LIST(cc, CF->channels)
   {
@@ -96,7 +77,6 @@ stats_init(struct proto_config *CF)
 {
   struct proto *P = proto_new(CF);
   struct stats_proto *p = (void *) P;
-  log(L_INFO "stats_init()");
 
   P->rt_notify = stats_rt_notify;
   P->reload_routes = stats_reload_routes;
@@ -122,8 +102,6 @@ stats_find_channel(struct stats_proto *p, const char *name)
 static int
 stats_start(struct proto *P UNUSED) 
 {
-  log(L_INFO "stats_start()");
-
   return PS_UP;
 }
 
@@ -132,7 +110,6 @@ stats_reconfigure(struct proto *P, struct proto_config *CF)
 {
   struct stats_proto *p = (void *) P;
   struct stats_config *new = (void *) CF;
-  log(L_INFO "stats_reconfigure()");
 
   struct channel *c;
   WALK_LIST(c, p->p.channels)
@@ -150,13 +127,13 @@ stats_reconfigure(struct proto *P, struct proto_config *CF)
       struct stats_channel *sc = (void *) c;
       struct stats_channel_config *scc = (void *) cc;
 
-      sc->counters = mb_realloc(sc->counters, scc->max_generation);
+      sc->max_generation = scc->max_generation;
 
-      if (sc->max_generation < scc->max_generation)
-       /* zero newly created counters */
-       memset(sc->counters + sc->max_generation, 0, scc->max_generation - sc->max_generation);
+      /* recalculate sum */
+      sc->sum = 0;
+      for (u8 i = 0; i < sc->max_generation; i++)
+       sc->sum += sc->counters[i];
 
-      sc->max_generation = scc->max_generation;
       c->stale = 0;
     }
   }
@@ -169,29 +146,12 @@ stats_reconfigure(struct proto *P, struct proto_config *CF)
   return 1;
 }
 
-static void
-stats_copy_config(struct proto_config *dest UNUSED, struct proto_config *src UNUSED)
-{
-  /* Just a shallow copy, not many items here */
-}
-
-/* NO NEED TO PRINT ANYTHING BEFORE protocol header
-
-static void
-stats_get_status(struct proto *P, byte *buf)
-{
-  struct stats_proto *p = (void *) P;
-  
-  cli_msg(-1006, " another super informative message "); 
-}
-*/
-
 static void
 stats_show_proto_info(struct proto *P)
 {
   struct stats_proto *p = (void *) P;
-  log(L_INFO "stats_show_proto_info() ");
 
+  /* indexes of non-zero counters */
   u32 *arr = mb_alloc(p->p.pool, 256 * sizeof(u32));
 
   struct stats_channel *sc;
@@ -206,13 +166,13 @@ stats_show_proto_info(struct proto *P)
     for (u8 i = 0; i < sc->max_generation; i++)
       if (sc->counters[i])
       {
-       log(L_INFO "found non-zero %u in counter %u", sc->counters[i], i);
        arr[len] = i;
        len++;
       }
 
     cli_msg(-1006, "  Channel %s", sc->c.name);
     cli_msg(-1006, "    Max generation:  %3u", sc->max_generation);
+    cli_msg(-1006, "    Exports:  %10u", sc->sum);
     cli_msg(-1006, "    Counter     exported");
 
     for (u8 i = 0; i < len; i++)
@@ -228,10 +188,13 @@ stats_show_proto_info(struct proto *P)
 }
 
 void
-stats_update_debug(struct proto *P UNUSED)
+stats_update_debug(struct proto *P)
 {
-
-  //p->c->debug = p->p.debug;
+  struct channel *c;
+  WALK_LIST(c, P->channels)
+  {
+    c->debug = P->debug;
+  }
 }
 
 static int
@@ -239,11 +202,11 @@ stats_channel_start(struct channel *C)
 {
   struct stats_channel *c = (void *) C;
   struct stats_proto *p = (void *) C->proto;
-  log(L_INFO "stats_channel_start() %s", C->name);
 
   c->pool = p->p.pool;
 
-  c->counters = mb_allocz(c->pool, c->max_generation * sizeof(u32));
+  c->counters = mb_allocz(c->pool, 256 * sizeof(u32));
+  c->sum = 0;
 
   return 0;
 }
@@ -252,7 +215,6 @@ static void
 stats_channel_shutdown(struct channel *C)
 {
   struct stats_channel *c = (void *) C;
-  log(L_INFO "stats_channel_shutdown() %s", C->name);
 
   mb_free(c->counters);
   
@@ -277,8 +239,6 @@ struct protocol proto_stats = {
   .init =              stats_init,
   .start =             stats_start,
   .reconfigure =       stats_reconfigure,
-  .copy_config =       stats_copy_config,
-  //.get_status =      stats_get_status,
   .show_proto_info =   stats_show_proto_info
 };