Functions to track the total bytes sent over a rate limit group.
authorNick Mathewson <nickm@torproject.org>
Sun, 21 Mar 2010 17:16:31 +0000 (13:16 -0400)
committerNick Mathewson <nickm@torproject.org>
Sun, 21 Mar 2010 17:16:31 +0000 (13:16 -0400)
bufferevent-internal.h
bufferevent_ratelim.c
include/event2/bufferevent.h

index cd50856e52429ca0131c29a2ae492a5896d0e7e7..1b56c4322e9dba4304586b9663810d4b794d4fbd 100644 (file)
@@ -79,6 +79,13 @@ struct bufferevent_rate_limit_group {
         * again. */
        unsigned pending_unsuspend_write : 1;
 
+       /*@{*/
+       /** Total number of bytes read or written in this group since last
+        * reset. */
+       ev_uint64_t total_read;
+       ev_uint64_t total_written;
+       /*@}*/
+
        /** The number of bufferevents in the group. */
        int n_members;
 
index c6b7e2485cd9deb6b93d4ac19ef048dfaa94d55e..d32f63b3c8c9990f1f43c80fafef96ab85cf9923 100644 (file)
@@ -282,6 +282,7 @@ _bufferevent_decrement_read_buckets(struct bufferevent_private *bev, int bytes)
        if (bev->rate_limiting->group) {
                LOCK_GROUP(bev->rate_limiting->group);
                bev->rate_limiting->group->rate_limit.read_limit -= bytes;
+               bev->rate_limiting->group->total_read += bytes;
                if (bev->rate_limiting->group->rate_limit.read_limit <= 0) {
                        _bev_group_suspend_reading(bev->rate_limiting->group);
                }
@@ -313,6 +314,7 @@ _bufferevent_decrement_write_buckets(struct bufferevent_private *bev, int bytes)
        if (bev->rate_limiting->group) {
                LOCK_GROUP(bev->rate_limiting->group);
                bev->rate_limiting->group->rate_limit.write_limit -= bytes;
+               bev->rate_limiting->group->total_written += bytes;
                if (bev->rate_limiting->group->rate_limit.write_limit <= 0) {
                        _bev_group_suspend_writing(bev->rate_limiting->group);
                }
@@ -908,3 +910,19 @@ bufferevent_rate_limit_group_decrement_write(
        return r;
 }
 
+void
+bufferevent_rate_limit_group_get_totals(struct bufferevent_rate_limit_group *grp,
+    ev_uint64_t *total_read_out, ev_uint64_t *total_written_out)
+{
+       EVUTIL_ASSERT(grp != NULL);
+       if (total_read_out)
+               *total_read_out = grp->total_read;
+       if (total_written_out)
+               *total_written_out = grp->total_written;
+}
+
+void
+bufferevent_rate_limit_group_reset_totals(struct bufferevent_rate_limit_group *grp)
+{
+       grp->total_read = grp->total_written = 0;
+}
index 15accf9777ef4720b500d74e225e3766e5f0ff6b..b1d7e43a01958e5e0af8b492b68b9c0d6115192d 100644 (file)
@@ -674,6 +674,19 @@ int bufferevent_rate_limit_group_decrement_write(
 /*@}*/
 
 
+/** Set the variable pointed to by total_read_out to the total number of bytes
+ * ever read on grp, and the variable pointed to by total_written_out to the
+ * total number of bytes ever written on grp. */
+void bufferevent_rate_limit_group_get_totals(
+    struct bufferevent_rate_limit_group *grp,
+    ev_uint64_t *total_read_out, ev_uint64_t *total_written_out);
+
+/** Reset the number of bytes read or written on grp as given by
+ * bufferevent_rate_limit_group_reset_totals(). */
+void
+bufferevent_rate_limit_group_reset_totals(
+       struct bufferevent_rate_limit_group *grp);
+
 #ifdef __cplusplus
 }
 #endif