/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2001-2006 The OpenLDAP Foundation.
+ * Copyright 2001-2013 The OpenLDAP Foundation.
* Portions Copyright 2001-2003 Pierangelo Masarati.
* All rights reserved.
*
#include "lutil.h"
#include "back-monitor.h"
-#ifndef LDAP_DEVEL
-#define MONITOR_LEGACY_CONN
-#endif
-
static int
monitor_subsys_conn_update(
Operation *op,
monitor_info_t *mi;
Entry *e, **ep, *e_conn;
monitor_entry_t *mp;
+ char buf[ BACKMONITOR_BUFSIZE ];
struct berval bv;
assert( be != NULL );
mp->mp_children = NULL;
ep = &mp->mp_children;
+ /*
+ * Max file descriptors
+ */
+ BER_BVSTR( &bv, "cn=Max File Descriptors" );
+ e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv,
+ mi->mi_oc_monitorCounterObject, NULL, NULL );
+
+ if ( e == NULL ) {
+ Debug( LDAP_DEBUG_ANY,
+ "monitor_subsys_conn_init: "
+ "unable to create entry \"%s,%s\"\n",
+ bv.bv_val, ms->mss_ndn.bv_val, 0 );
+ return( -1 );
+ }
+
+ if ( dtblsize ) {
+ bv.bv_val = buf;
+ bv.bv_len = snprintf( buf, sizeof( buf ), "%d", dtblsize );
+
+ } else {
+ BER_BVSTR( &bv, "0" );
+ }
+ attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, NULL );
+
+ mp = monitor_entrypriv_create();
+ if ( mp == NULL ) {
+ return -1;
+ }
+ e->e_private = ( void * )mp;
+ mp->mp_info = ms;
+ mp->mp_flags = ms->mss_flags \
+ | MONITOR_F_SUB | MONITOR_F_PERSISTENT;
+ mp->mp_flags &= ~MONITOR_F_VOLATILE_CH;
+
+ if ( monitor_cache_add( mi, e ) ) {
+ Debug( LDAP_DEBUG_ANY,
+ "monitor_subsys_conn_init: "
+ "unable to add entry \"cn=Total,%s\"\n",
+ ms->mss_ndn.bv_val, 0, 0 );
+ return( -1 );
+ }
+
+ *ep = e;
+ ep = &mp->mp_next;
+
/*
* Total conns
*/
BER_BVSTR( &bv, "cn=Total" );
e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv,
- mi->mi_oc_monitorCounterObject, mi, NULL, NULL );
+ mi->mi_oc_monitorCounterObject, NULL, NULL );
if ( e == NULL ) {
Debug( LDAP_DEBUG_ANY,
return( -1 );
}
- BER_BVSTR( &bv, "0" );
- attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, &bv );
+ BER_BVSTR( &bv, "-1" );
+ attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, NULL );
mp = monitor_entrypriv_create();
if ( mp == NULL ) {
*/
BER_BVSTR( &bv, "cn=Current" );
e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv,
- mi->mi_oc_monitorCounterObject, mi, NULL, NULL );
+ mi->mi_oc_monitorCounterObject, NULL, NULL );
if ( e == NULL ) {
Debug( LDAP_DEBUG_ANY,
}
BER_BVSTR( &bv, "0" );
- attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, &bv );
+ attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, NULL );
mp = monitor_entrypriv_create();
if ( mp == NULL ) {
} else if ( dn_match( &rdn, ¤t_bv ) ) {
Connection *c;
- int connindex;
+ ber_socket_t connindex;
for ( n = 0, c = connection_first( &connindex );
c != NULL;
- n++, c = connection_next( c, &connindex ) ) {
+ n++, c = connection_next( c, &connindex ) )
+ {
/* No Op */ ;
}
connection_done( c );
if ( n != -1 ) {
Attribute *a;
- char buf[] = "+9223372036854775807L";
+ char buf[LDAP_PVT_INTTYPE_CHARS(long)];
ber_len_t len;
a = attr_find( e->e_attrs, mi->mi_ad_monitorCounter );
monitor_subsys_t *ms )
{
monitor_entry_t *mp;
- struct tm *tm;
+ struct tm tm;
char buf[ BACKMONITOR_BUFSIZE ];
char buf2[ LDAP_LUTIL_GENTIME_BUFSIZE ];
char buf3[ LDAP_LUTIL_GENTIME_BUFSIZE ];
- struct berval bv, ctmbv, mtmbv, bv2, bv3;
+ struct berval bv, ctmbv, mtmbv;
struct berval bv_unknown= BER_BVC("unknown");
Entry *e;
-#ifdef HACK_LOCAL_TIME
- char ctmbuf[ LDAP_LUTIL_GENTIME_BUFSIZE ];
- char mtmbuf[ LDAP_LUTIL_GENTIME_BUFSIZE ];
-#endif
-#ifdef HAVE_GMTIME_R
- struct tm tm_buf;
-#endif /* HAVE_GMTIME_R */
-
assert( c != NULL );
assert( ep != NULL );
-#ifndef HAVE_GMTIME_R
- ldap_pvt_thread_mutex_lock( &gmtime_mutex );
-#endif
-
-#ifdef HAVE_GMTIME_R
- tm = gmtime_r( &c->c_starttime, &tm_buf );
-#else
- tm = gmtime( &c->c_starttime );
-#endif
- bv2.bv_len = lutil_gentime( buf2, sizeof( buf2 ), tm );
- bv2.bv_val = buf2;
-#ifdef HACK_LOCAL_TIME
-# ifdef HAVE_LOCALTIME_R
- tm = localtime_r( &c->c_starttime, &tm_buf );
-# else
- tm = localtime( &c->c_starttime );
-# endif
- ctmbv.bv_len = lutil_localtime( ctmbuf, sizeof( ctmbuf ), tm, -timezone );
- ctmbv.bv_val = ctmbuf;
-#else /* !HACK_LOCAL_TIME */
- ctmbv = bv2;
-#endif
-
-#ifdef HAVE_GMTIME_R
- tm = gmtime_r( &c->c_activitytime, &tm_buf );
-#else
- tm = gmtime( &c->c_activitytime );
-#endif
- bv3.bv_len = lutil_gentime( buf3, sizeof( buf3 ), tm );
- bv3.bv_val = buf3;
-#ifdef HACK_LOCAL_TIME
-# ifdef HAVE_LOCALTIME_R
- tm = localtime_r( &c->c_activitytime, &tm_buf );
-# else
- tm = localtime( &c->c_activitytime );
-# endif /* HAVE_LOCALTIME_R */
- mtmbv.bv_len = lutil_localtime( mtmbuf, sizeof( mtmbuf ), tm, -timezone );
- mtmbv.bv_val = mtmbuf;
-#else /* !HACK_LOCAL_TIME */
- mtmbv = bv3;
-#endif
-
-#ifndef HAVE_GMTIME_R
- ldap_pvt_thread_mutex_unlock( &gmtime_mutex );
-#endif
+ ldap_pvt_gmtime( &c->c_starttime, &tm );
+
+ ctmbv.bv_len = lutil_gentime( buf2, sizeof( buf2 ), &tm );
+ ctmbv.bv_val = buf2;
+
+ ldap_pvt_gmtime( &c->c_activitytime, &tm );
+ mtmbv.bv_len = lutil_gentime( buf3, sizeof( buf3 ), &tm );
+ mtmbv.bv_val = buf3;
bv.bv_len = snprintf( buf, sizeof( buf ),
"cn=Connection %ld", c->c_connid );
bv.bv_val = buf;
e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv,
- mi->mi_oc_monitorConnection, mi, &ctmbv, &mtmbv );
+ mi->mi_oc_monitorConnection, &ctmbv, &mtmbv );
if ( e == NULL) {
Debug( LDAP_DEBUG_ANY,
c->c_dn.bv_len ? c->c_dn.bv_val : SLAPD_ANONYMOUS,
c->c_listener_url.bv_val,
- c->c_peer_domain.bv_val,
- c->c_peer_name.bv_val,
+ BER_BVISNULL( &c->c_peer_domain )
+ ? "" : c->c_peer_domain.bv_val,
+ BER_BVISNULL( &c->c_peer_name )
+ ? "" : c->c_peer_name.bv_val,
c->c_sock_name.bv_val,
buf2,
buf3 );
- attr_merge_one( e, mi->mi_ad_monitoredInfo, &bv, NULL );
+ attr_merge_normalize_one( e, mi->mi_ad_monitoredInfo, &bv, NULL );
#endif /* MONITOR_LEGACY_CONN */
bv.bv_len = snprintf( buf, sizeof( buf ), "%lu", c->c_connid );
attr_merge_one( e, mi->mi_ad_monitorConnectionNumber, &bv, NULL );
bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", (long) c->c_protocol );
- attr_merge_one( e, mi->mi_ad_monitorConnectionProtocol, &bv, NULL );
+ attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionProtocol, &bv, NULL );
bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_ops_received );
attr_merge_one( e, mi->mi_ad_monitorConnectionOpsReceived, &bv, NULL );
LDAP_STAILQ_EMPTY( &c->c_pending_ops ) ? "" : "p",
connection_state2str( c->c_conn_state ),
c->c_sasl_bind_in_progress ? "S" : "" );
- attr_merge_one( e, mi->mi_ad_monitorConnectionMask, &bv, NULL );
+ attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionMask, &bv, NULL );
attr_merge_one( e, mi->mi_ad_monitorConnectionAuthzDN,
&c->c_dn, &c->c_ndn );
/* NOTE: client connections leave the c_peer_* fields NULL */
- attr_merge_one( e, mi->mi_ad_monitorConnectionListener,
+ assert( !BER_BVISNULL( &c->c_listener_url ) );
+ attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionListener,
&c->c_listener_url, NULL );
- attr_merge_one( e, mi->mi_ad_monitorConnectionPeerDomain,
+ attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionPeerDomain,
BER_BVISNULL( &c->c_peer_domain ) ? &bv_unknown : &c->c_peer_domain,
NULL );
- attr_merge_one( e, mi->mi_ad_monitorConnectionPeerAddress,
+ attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionPeerAddress,
BER_BVISNULL( &c->c_peer_name ) ? &bv_unknown : &c->c_peer_name,
NULL );
- attr_merge_one( e, mi->mi_ad_monitorConnectionLocalAddress,
+ assert( !BER_BVISNULL( &c->c_sock_name ) );
+ attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionLocalAddress,
&c->c_sock_name, NULL );
- attr_merge_one( e, mi->mi_ad_monitorConnectionStartTime, &bv2, NULL );
+ attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionStartTime, &ctmbv, NULL );
- attr_merge_one( e, mi->mi_ad_monitorConnectionActivityTime, &bv3, NULL );
+ attr_merge_normalize_one( e, mi->mi_ad_monitorConnectionActivityTime, &mtmbv, NULL );
mp = monitor_entrypriv_create();
if ( mp == NULL ) {
{
monitor_info_t *mi = ( monitor_info_t * )op->o_bd->be_private;
- Connection *c;
- int connindex;
- monitor_entry_t *mp;
int rc = SLAP_CB_CONTINUE;
monitor_subsys_t *ms;
*ep = NULL;
if ( ndn == NULL ) {
- Entry *e = NULL,
- *e_tmp = NULL;
+ Connection *c;
+ ber_socket_t connindex;
+ Entry *e = NULL,
+ *e_tmp = NULL;
/* create all the children of e_parent */
for ( c = connection_first( &connindex );
c != NULL;
c = connection_next( c, &connindex ) )
{
+ monitor_entry_t *mp;
+
if ( conn_create( mi, c, &e, ms ) != SLAP_CB_CONTINUE
|| e == NULL )
{
*ep = e;
} else {
+ Connection *c;
+ ber_socket_t connindex;
unsigned long connid;
char *next = NULL;
static struct berval nconn_bv = BER_BVC( "cn=connection " );