mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-02-23 14:09:39 +08:00
Reimplement connection counters. Format of "connection" attribute
changed significantly.
This commit is contained in:
parent
9225707a06
commit
14820afdd9
@ -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 );
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user