From: Pierangelo Masarati Date: Mon, 19 Mar 2007 21:39:43 +0000 (+0000) Subject: add uptime monitoring (in seconds) X-Git-Tag: OPENLDAP_REL_ENG_2_4_MP~605 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=a6e232e7c1c6815b214e5f920459cd63ceeb54e7;p=openldap add uptime monitoring (in seconds) --- diff --git a/servers/slapd/back-monitor/time.c b/servers/slapd/back-monitor/time.c index 2d96339fa4..0b7653a50e 100644 --- a/servers/slapd/back-monitor/time.c +++ b/servers/slapd/back-monitor/time.c @@ -46,7 +46,7 @@ monitor_subsys_time_init( Entry *e, **ep, *e_time; monitor_entry_t *mp; - struct berval bv; + struct berval bv, value; assert( be != NULL ); @@ -73,8 +73,8 @@ monitor_subsys_time_init( if ( e == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_time_init: " - "unable to create entry \"cn=Start,%s\"\n", - ms->mss_ndn.bv_val, 0, 0 ); + "unable to create entry \"%s,%s\"\n", + bv.bv_val, ms->mss_ndn.bv_val, 0 ); return( -1 ); } attr_merge_normalize_one( e, mi->mi_ad_monitorTimestamp, @@ -92,8 +92,8 @@ monitor_subsys_time_init( if ( monitor_cache_add( mi, e ) ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_time_init: " - "unable to add entry \"cn=Start,%s\"\n", - ms->mss_ndn.bv_val, 0, 0 ); + "unable to add entry \"%s,%s\"\n", + bv.bv_val, ms->mss_ndn.bv_val, 0 ); return( -1 ); } @@ -109,8 +109,8 @@ monitor_subsys_time_init( if ( e == NULL ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_time_init: " - "unable to create entry \"cn=Current,%s\"\n", - ms->mss_ndn.bv_val, 0, 0 ); + "unable to create entry \"%s,%s\"\n", + bv.bv_val, ms->mss_ndn.bv_val, 0 ); return( -1 ); } attr_merge_normalize_one( e, mi->mi_ad_monitorTimestamp, @@ -128,8 +128,45 @@ monitor_subsys_time_init( if ( monitor_cache_add( mi, e ) ) { Debug( LDAP_DEBUG_ANY, "monitor_subsys_time_init: " - "unable to add entry \"cn=Current,%s\"\n", - ms->mss_ndn.bv_val, 0, 0 ); + "unable to add entry \"%s,%s\"\n", + bv.bv_val, ms->mss_ndn.bv_val, 0 ); + return( -1 ); + } + + *ep = e; + ep = &mp->mp_next; + + /* + * Uptime + */ + BER_BVSTR( &bv, "cn=Uptime" ); + e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv, + mi->mi_oc_monitoredObject, mi, NULL, NULL ); + if ( e == NULL ) { + Debug( LDAP_DEBUG_ANY, + "monitor_subsys_time_init: " + "unable to create entry \"%s,%s\"\n", + bv.bv_val, ms->mss_ndn.bv_val, 0 ); + return( -1 ); + } + BER_BVSTR( &value, "0" ); + attr_merge_normalize_one( e, mi->mi_ad_monitoredInfo, + &value, 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; + + if ( monitor_cache_add( mi, e ) ) { + Debug( LDAP_DEBUG_ANY, + "monitor_subsys_time_init: " + "unable to add entry \"%s,%s\"\n", + bv.bv_val, ms->mss_ndn.bv_val, 0 ); return( -1 ); } @@ -148,7 +185,8 @@ monitor_subsys_time_update( Entry *e ) { monitor_info_t *mi = ( monitor_info_t * )op->o_bd->be_private; - static struct berval bv_current = BER_BVC( "cn=current" ); + static struct berval bv_current = BER_BVC( "cn=current" ), + bv_uptime = BER_BVC( "cn=uptime" ); struct berval rdn; assert( mi != NULL ); @@ -200,6 +238,27 @@ monitor_subsys_time_update( assert( len == a->a_vals[ 0 ].bv_len ); AC_MEMCPY( a->a_vals[ 0 ].bv_val, tmbuf, len ); + /* FIXME: touch modifyTimestamp? */ + + } else if ( dn_match( &rdn, &bv_uptime ) ) { + Attribute *a; + char buf[ BACKMONITOR_BUFSIZE ]; + struct berval bv; + + a = attr_find( e->e_attrs, mi->mi_ad_monitoredInfo ); + if ( a == NULL ) { + return rs->sr_err = LDAP_OTHER; + } + + bv.bv_len = snprintf( buf, sizeof( buf ), "%lu", + (unsigned long)difftime( slap_get_time(), starttime ) ); + bv.bv_val = buf; + + ber_bvreplace( &a->a_vals[ 0 ], &bv ); + if ( a->a_nvals != a->a_vals ) { + ber_bvreplace( &a->a_nvals[ 0 ], &bv ); + } + /* FIXME: touch modifyTimestamp? */ }