src/rrd_daemon.c: Count some statistics.
authorFlorian Forster <octo@verplant.org>
Thu, 3 Jul 2008 08:08:33 +0000 (10:08 +0200)
committerFlorian Forster <octo@verplant.org>
Thu, 3 Jul 2008 08:08:33 +0000 (10:08 +0200)
src/rrd_daemon.c

index 3163e18..4b725c2 100644 (file)
@@ -162,6 +162,11 @@ static char *config_base_dir = NULL;
 static char **config_listen_address_list = NULL;
 static int config_listen_address_list_len = 0;
 
+static uint64_t stats_queue_length = 0;
+static uint64_t stats_updates_total = 0;
+static uint64_t stats_values_total = 0;
+static pthread_mutex_t stats_lock = PTHREAD_MUTEX_INITIALIZER;
+
 /* 
  * Functions
  */
@@ -222,6 +227,8 @@ static int remove_pidfile (void) /* {{{ */
 static int enqueue_cache_item (cache_item_t *ci, /* {{{ */
     queue_side_t side)
 {
+  int did_insert = 0;
+
   RRDD_LOG (LOG_DEBUG, "enqueue_cache_item: Adding %s to the update queue.",
       ci->file);
 
@@ -241,6 +248,8 @@ static int enqueue_cache_item (cache_item_t *ci, /* {{{ */
 
       if (cache_queue_tail == NULL)
         cache_queue_tail = cache_queue_head;
+
+      did_insert = 1;
     }
     else if (cache_queue_head == ci)
     {
@@ -279,10 +288,19 @@ static int enqueue_cache_item (cache_item_t *ci, /* {{{ */
     else
       cache_queue_tail->next = ci;
     cache_queue_tail = ci;
+
+    did_insert = 1;
   }
 
   ci->flags |= CI_FLAGS_IN_QUEUE;
 
+  if (did_insert)
+  {
+    pthread_mutex_lock (&stats_lock);
+    stats_queue_length++;
+    pthread_mutex_unlock (&stats_lock);
+  }
+
   return (0);
 } /* }}} int enqueue_cache_item */
 
@@ -443,6 +461,11 @@ static void *queue_thread_main (void *args __attribute__((unused))) /* {{{ */
       cache_queue_tail = NULL;
     ci->next = NULL;
 
+    pthread_mutex_lock (&stats_lock);
+    assert (stats_queue_length > 0);
+    stats_queue_length--;
+    pthread_mutex_unlock (&stats_lock);
+
     pthread_mutex_unlock (&cache_lock);
 
     RRDD_LOG (LOG_DEBUG, "queue_thread_main: rrd_update (%s, %i, %p)",
@@ -460,6 +483,11 @@ static void *queue_thread_main (void *args __attribute__((unused))) /* {{{ */
     for (i = 0; i < values_num; i++)
       free (values[i]);
 
+    pthread_mutex_lock (&stats_lock);
+    stats_updates_total++;
+    stats_values_total += values_num;
+    pthread_mutex_unlock (&stats_lock);
+
     pthread_mutex_lock (&cache_lock);
     pthread_cond_broadcast (&flush_cond);
   } /* while (do_shutdown == 0) */