Improve statistics gathered.
[bluesky.git] / bluesky / store.c
index 48a69b4..427112b 100644 (file)
@@ -24,6 +24,8 @@ struct _BlueSkyStore {
     GMutex *lock;
     GCond *cond_idle;
     int pending;                /* Count of operations not yet complete. */
+
+    struct bluesky_stats *stats_get, *stats_put;
 };
 
 GHashTable *store_implementations;
@@ -71,6 +73,10 @@ BlueSkyStore *bluesky_store_new(const gchar *type)
     store->lock = g_mutex_new();
     store->cond_idle = g_cond_new();
     store->pending = 0;
+    store->stats_get = bluesky_stats_new(g_strdup_printf("Store[%s]: GETS",
+                                                         type));
+    store->stats_put = bluesky_stats_new(g_strdup_printf("Store[%s]: PUTS",
+                                                         type));
     g_free(scheme);
     return store;
 }
@@ -219,9 +225,19 @@ void bluesky_store_async_mark_complete(BlueSkyStoreAsync *async)
         g_thread_pool_push(notifier_thread_pool, nl, NULL);
     }
 
-    g_log("bluesky/store", G_LOG_LEVEL_DEBUG,
-          "[%p] complete: elapsed = %"PRIi64" ns, latency = %"PRIi64" ns",
-          async, elapsed, latency);
+    if (bluesky_verbose) {
+        g_log("bluesky/store", G_LOG_LEVEL_DEBUG,
+              "[%p] complete: elapsed = %"PRIi64" ns, latency = %"PRIi64" ns",
+              async, elapsed, latency);
+    }
+
+    if (async->data) {
+        if (async->op == STORE_OP_GET) {
+            bluesky_stats_add(async->store->stats_get, async->data->len);
+        } else if (async->op == STORE_OP_PUT) {
+            bluesky_stats_add(async->store->stats_put, async->data->len);
+        }
+    }
 }
 
 void bluesky_store_async_submit(BlueSkyStoreAsync *async)
@@ -234,13 +250,15 @@ void bluesky_store_async_submit(BlueSkyStoreAsync *async)
     // processing was started, if there could be a delay from submission time.
     async->exec_time = bluesky_now_hires();
 
-    g_log("bluesky/store", G_LOG_LEVEL_DEBUG, "[%p] submit: %s %s",
-          async,
-          async->op == STORE_OP_GET ? "GET"
-            : async->op == STORE_OP_PUT ? "PUT"
-            : async->op == STORE_OP_DELETE ? "DELETE"
-            : async->op == STORE_OP_BARRIER ? "BARRIER" : "???",
-          async->key);
+    if (bluesky_verbose) {
+        g_log("bluesky/store", G_LOG_LEVEL_DEBUG, "[%p] submit: %s %s",
+              async,
+              async->op == STORE_OP_GET ? "GET"
+                : async->op == STORE_OP_PUT ? "PUT"
+                : async->op == STORE_OP_DELETE ? "DELETE"
+                : async->op == STORE_OP_BARRIER ? "BARRIER" : "???",
+              async->key);
+    }
 
     /* Barriers are handled specially, and not handed down the storage
      * implementation layer. */
@@ -302,12 +320,17 @@ static void notifier_task(gpointer n, gpointer s)
 void bluesky_store_sync(BlueSkyStore *store)
 {
     g_mutex_lock(store->lock);
-    g_print("Waiting for pending store operations to complete...\n");
+    if (bluesky_verbose) {
+        g_log("bluesky/store", G_LOG_LEVEL_DEBUG,
+              "Waiting for pending store operations to complete...");
+    }
     while (store->pending > 0) {
         g_cond_wait(store->cond_idle, store->lock);
     }
     g_mutex_unlock(store->lock);
-    g_print("Operations are complete.\n");
+    if (bluesky_verbose) {
+        g_log("bluesky/store", G_LOG_LEVEL_DEBUG, "Operations are complete.");
+    }
 }
 
 /* Convenience wrappers that perform a single operation synchronously. */