]> git.sur5r.net Git - openldap/commitdiff
Reimplement connection counters. Format of "connection" attribute
authorKurt Zeilenga <kurt@openldap.org>
Wed, 30 Jun 1999 02:50:40 +0000 (02:50 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Wed, 30 Jun 1999 02:50:40 +0000 (02:50 +0000)
changed significantly.

servers/slapd/connection.c
servers/slapd/monitor.c
servers/slapd/slap.h

index 7546d42e1e3645600f588feb8a8db557a7fcf5c7..dd561602328a963f69f04a9721c31202894e5966 100644 (file)
@@ -238,6 +238,8 @@ static Connection* connection_get( ber_socket_t s )
                        "connection_get(%d): got connid=%ld\n",
                        s, c->c_connid, 0 );
 
+               c->c_n_get++;
+
                assert( c->c_struct_state == SLAP_C_USED );
                assert( c->c_conn_state != SLAP_C_INVALID );
                assert( ber_pvt_sb_in_use( c->c_sb ) );
@@ -349,11 +351,13 @@ long connection_init(
     c->c_client_addr = ch_strdup( addr );
 
     c->c_n_ops_received = 0;
-#ifdef LDAP_COUNTERS
     c->c_n_ops_executing = 0;
     c->c_n_ops_pending = 0;
     c->c_n_ops_completed = 0;
-#endif
+
+       c->c_n_get = 0;
+       c->c_n_read = 0;
+       c->c_n_write = 0;
 
     c->c_activitytime = c->c_starttime = slap_get_time();
 
@@ -602,11 +606,9 @@ connection_operation( void *arg_v )
        ber_tag_t tag = arg->co_op->o_tag;
        Connection *conn = arg->co_conn;
 
-#ifdef LDAP_COUNTERS
        ldap_pvt_thread_mutex_lock( &num_ops_mutex );
        num_ops_initiated++;
        ldap_pvt_thread_mutex_unlock( &num_ops_mutex );
-#endif
 
        switch ( tag ) {
        case LDAP_REQ_BIND:
@@ -651,17 +653,14 @@ connection_operation( void *arg_v )
                break;
        }
 
-#ifdef LDAP_COUNTERS
        ldap_pvt_thread_mutex_lock( &num_ops_mutex );
        num_ops_completed++;
        ldap_pvt_thread_mutex_unlock( &num_ops_mutex );
-#endif
 
        ldap_pvt_thread_mutex_lock( &conn->c_mutex );
 
-#ifdef LDAP_COUNTERS
+       conn->c_n_ops_executing--;
        conn->c_n_ops_completed++;
-#endif
 
        slap_op_remove( &conn->c_ops, arg->co_op );
        slap_op_free( arg->co_op );
@@ -718,6 +717,8 @@ int connection_read(ber_socket_t s)
                return -1;
        }
 
+       c->c_n_read++;
+
        if( c->c_conn_state == SLAP_C_CLOSING ) {
                Debug( LDAP_DEBUG_TRACE,
                        "connection_read(%d): closing, ignoring input for id=%ld\n",
@@ -826,9 +827,11 @@ connection_input(
                || conn->c_conn_state == SLAP_C_CLOSING )
        {
                Debug( LDAP_DEBUG_ANY, "deferring operation\n", 0, 0, 0 );
+               conn->c_n_ops_pending++;
                slap_op_add( &conn->c_pending_ops, op );
 
        } else {
+               conn->c_n_ops_executing++;
                connection_op_activate( conn, op );
        }
 
@@ -869,6 +872,9 @@ connection_resched( Connection *conn )
                /* pending operations should not be marked for abandonment */
                assert(!op->o_abandon);
 
+               conn->c_n_ops_pending--;
+               conn->c_n_ops_executing++;
+
                connection_op_activate( conn, op );
 
                if ( conn->c_conn_state == SLAP_C_BINDING ) {
@@ -947,6 +953,8 @@ int connection_write(ber_socket_t s)
                return -1;
        }
 
+       c->c_n_write++;
+
        Debug( LDAP_DEBUG_TRACE,
                "connection_write(%d): waking output for id=%ld\n",
                s, c->c_connid, 0 );
index eccdcbec12c2efe885166f41cf8bb06341a02cad..1e0a95546cd06a56aee25678b93f946087e27dcf 100644 (file)
@@ -33,13 +33,10 @@ monitor_info( Connection *conn, Operation *op )
        int    nconns, nwritewaiters, nreadwaiters;
        struct tm       *ltm;
        char            *p;
-#ifdef LDAP_COUNTERS
-    int        i;
-    char       buf2[22]
-    char       buf3[22]
+    char       buf2[22];
+    char       buf3[22];
        Connection *c;
        int                     connindex;
-#endif
     time_t             currenttime;
 
        vals[0] = &val;
@@ -71,7 +68,6 @@ monitor_info( Connection *conn, Operation *op )
        nwritewaiters = 0;
        nreadwaiters = 0;
 
-#ifdef LDAP_COUNTERS
        /* loop through the connections */
        for ( c = connection_first( &connindex );
                c != NULL;
@@ -90,25 +86,45 @@ monitor_info( Connection *conn, Operation *op )
                ltm = gmtime( &c->c_starttime );
                strftime( buf2, sizeof(buf2), "%Y%m%d%H%M%SZ", ltm );
 
-               ltm = gmtime( &c->.c_activitytime );
-               strftime( buf3, sizeof(buf2), "%y%m%d%H%M%SZ", ltm );
+               ltm = gmtime( &c->c_activitytime );
+               strftime( buf3, sizeof(buf2), "%Y%m%d%H%M%SZ", ltm );
 #else
                ltm = localtime( &c->.c_starttime );
                strftime( buf2, sizeof(buf2), "%y%m%d%H%M%SZ", ltm );
 
-               ltm = localtime( &c->.c_activitytime );
+               ltm = localtime( &c->c_activitytime );
                strftime( buf3, sizeof(buf2), "%y%m%d%H%M%SZ", ltm );
 #endif
 
                ldap_pvt_thread_mutex_unlock( &gmtime_mutex );
 
-               sprintf( buf, "%d : %s : %d : %d : %s : %s%s%s%s : %s", i,
-                   buf2, c[i].c_n_ops_received, c[i].c_n_ops_completed,
-                   c[i].c_cdn ? c[i].c_cdn : "NULLDN",
-                   c[i].c_currentber ? "r" : "",
-                   c[i].c_writewaiter ? "w" : "",
-                   c[i].c_ops != NULL ? "x" : "",
-                   c[i].c_pending_ops != NULL ? "p" : ""
+               sprintf( buf,
+                       "%ld : %ld "
+                       ": %ld/%ld/%ld/%ld "
+                       ": %ld/%ld/%ld "
+                       ": %s%s%s%s "
+                       ": %s : %s : %s "
+                       ": %s : %s",
+
+                       c->c_connid,
+                       (long) c->c_protocol,
+
+                       c->c_n_ops_received, c->c_n_ops_executing,
+                       c->c_n_ops_pending, c->c_n_ops_completed,
+
+                       /* add low-level counters here */
+                       c->c_n_get, c->c_n_read, c->c_n_write,
+
+                   c->c_currentber ? "r" : "",
+                   c->c_writewaiter ? "w" : "",
+                   c->c_ops != NULL ? "x" : "",
+                   c->c_pending_ops != NULL ? "p" : "",
+
+                   c->c_cdn ? c->c_cdn : "<anonymous>",
+                   c->c_client_addr ? c->c_client_addr : "unknown",
+                   c->c_client_name ? c->c_client_name : "unknown",
+
+                   buf2,
                        buf3
                );
 
@@ -117,7 +133,6 @@ monitor_info( Connection *conn, Operation *op )
                attr_merge( e, "connection", vals );
        }
        connection_done(c);
-#endif
 
        sprintf( buf, "%d", nconns );
        val.bv_val = buf;
@@ -144,7 +159,6 @@ monitor_info( Connection *conn, Operation *op )
        val.bv_len = strlen( buf );
        attr_merge( e, "readwaiters", vals );
 
-#ifdef LDAP_COUNTERS
        ldap_pvt_thread_mutex_lock(&num_ops_mutex);
        sprintf( buf, "%ld", num_ops_initiated );
        ldap_pvt_thread_mutex_unlock(&num_ops_mutex);
@@ -172,7 +186,6 @@ monitor_info( Connection *conn, Operation *op )
        val.bv_val = buf;
        val.bv_len = strlen( buf );
        attr_merge( e, "bytessent", vals );
-#endif
 
        currenttime = slap_get_time();
 
index c9b944fc09100261b55f1b5499c0396caa92169c..de4c6cd45c7975d576c7e33328bf73727ad0fe9b 100644 (file)
@@ -553,6 +553,10 @@ typedef struct slap_conn {
        long    c_n_ops_executing;      /* num of ops currently executing */
        long    c_n_ops_pending;                /* num of ops pending execution */
        long    c_n_ops_completed;      /* num of ops completed */
+
+       long    c_n_get;                /* num of get calls */
+       long    c_n_read;               /* num of read calls */
+       long    c_n_write;              /* num of write calls */
 } Connection;
 
 #if defined(LDAP_SYSLOG) && defined(LDAP_DEBUG)