]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-monitor/conn.c
fix previous commit
[openldap] / servers / slapd / back-monitor / conn.c
index d8686e8ad05f015cc2a9650894e53a5a64635f3b..24c68396eb5896fe1b71b5c8656f22836f19a505 100644 (file)
@@ -79,24 +79,10 @@ monitor_subsys_conn_init(
        /*
         * Total conns
         */
-       snprintf( buf, sizeof( buf ),
-               "dn: cn=Total,%s\n"
-               "objectClass: %s\n"
-               "structuralObjectClass: %s\n"
-               "cn: Total\n"
-               "creatorsName: %s\n"
-               "modifiersName: %s\n"
-               "createTimestamp: %s\n"
-               "modifyTimestamp: %s\n",
-               ms->mss_dn.bv_val,
-               mi->mi_oc_monitorCounterObject->soc_cname.bv_val,
-               mi->mi_oc_monitorCounterObject->soc_cname.bv_val,
-               mi->mi_creatorsName.bv_val,
-               mi->mi_creatorsName.bv_val,
-               mi->mi_startTime.bv_val,
-               mi->mi_startTime.bv_val );
+       BER_BVSTR( &bv, "cn=Total" );
+       e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv,
+               mi->mi_oc_monitorCounterObject, mi, NULL, NULL );
        
-       e = str2entry( buf );
        if ( e == NULL ) {
                Debug( LDAP_DEBUG_ANY,
                        "monitor_subsys_conn_init: "
@@ -132,24 +118,10 @@ monitor_subsys_conn_init(
        /*
         * Current conns
         */
-       snprintf( buf, sizeof( buf ),
-               "dn: cn=Current,%s\n"
-               "objectClass: %s\n"
-               "structuralObjectClass: %s\n"
-               "cn: Current\n"
-               "creatorsName: %s\n"
-               "modifiersName: %s\n"
-               "createTimestamp: %s\n"
-               "modifyTimestamp: %s\n",
-               ms->mss_dn.bv_val,
-               mi->mi_oc_monitorCounterObject->soc_cname.bv_val,
-               mi->mi_oc_monitorCounterObject->soc_cname.bv_val,
-               mi->mi_creatorsName.bv_val,
-               mi->mi_creatorsName.bv_val,
-               mi->mi_startTime.bv_val,
-               mi->mi_startTime.bv_val );
-       
-       e = str2entry( buf );
+       BER_BVSTR( &bv, "cn=Current" );
+       e = monitor_entry_stub( &ms->mss_dn, &ms->mss_ndn, &bv,
+               mi->mi_oc_monitorCounterObject, mi, NULL, NULL );
+
        if ( e == NULL ) {
                Debug( LDAP_DEBUG_ANY,
                        "monitor_subsys_conn_init: "
@@ -252,17 +224,20 @@ conn_create(
        monitor_subsys_t        *ms )
 {
        monitor_entry_t *mp;
-       struct tm       *ltm;
+       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_unknown= BER_BVC("unknown");
+
        Entry           *e;
 
-       struct tm       *ctm;
+#ifdef HACK_LOCAL_TIME
        char            ctmbuf[ LDAP_LUTIL_GENTIME_BUFSIZE ];
-       struct tm       *mtm;
        char            mtmbuf[ LDAP_LUTIL_GENTIME_BUFSIZE ];
+#endif
 #ifdef HAVE_GMTIME_R
        struct tm       tm_buf;
 #endif /* HAVE_GMTIME_R */
@@ -273,67 +248,69 @@ conn_create(
 #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
-       ctm = localtime_r( &c->c_starttime, &tm_buf );
-       lutil_localtime( ctmbuf, sizeof( ctmbuf ), ctm, -timezone );
-       mtm = localtime_r( &c->c_activitytime, &tm_buf );
-       lutil_localtime( mtmbuf, sizeof( mtmbuf ), mtm, -timezone );
+       tm = localtime_r( &c->c_starttime, &tm_buf );
 # else
-       ctm = localtime( &c->c_starttime );
-       lutil_localtime( ctmbuf, sizeof( ctmbuf ), ctm, -timezone );
-       mtm = localtime( &c->c_activitytime );
-       lutil_localtime( mtmbuf, sizeof( mtmbuf ), mtm, -timezone );
-# endif /* HAVE_LOCALTIME_R */
+       tm = localtime( &c->c_starttime );
+# endif
+       ctmbv.bv_len = lutil_localtime( ctmbuf, sizeof( ctmbuf ), tm, -timezone );
+       ctmbv.bv_val = ctmbuf;
 #else /* !HACK_LOCAL_TIME */
-# ifdef HAVE_GMTIME_R
-       ctm = gmtime_r( &c->c_starttime, &tm_buf );
-       lutil_gentime( ctmbuf, sizeof( ctmbuf ), ctm );
-       mtm = gmtime_r( &c->c_activitytime, &tm_buf );
-       lutil_gentime( mtmbuf, sizeof( mtmbuf ), mtm );
-# else
-       ctm = gmtime( &c->c_starttime );
-       lutil_gentime( ctmbuf, sizeof( ctmbuf ), ctm );
-       mtm = gmtime( &c->c_activitytime );
-       lutil_gentime( mtmbuf, sizeof( mtmbuf ), mtm );
-# endif /* HAVE_GMTIME_R */
-#endif /* !HACK_LOCAL_TIME */
-#ifndef HAVE_GMTIME_R
-       ldap_pvt_thread_mutex_unlock( &gmtime_mutex );
-#endif
-
-#ifndef HAVE_GMTIME_R
-       ldap_pvt_thread_mutex_lock( &gmtime_mutex );
+       ctmbv = bv2;
 #endif
 
 #ifdef HAVE_GMTIME_R
-       ltm = gmtime_r( &c->c_starttime, &tm_buf );
+       tm = gmtime_r( &c->c_activitytime, &tm_buf );
 #else
-       ltm = gmtime( &c->c_starttime );
+       tm = gmtime( &c->c_activitytime );
 #endif
-       lutil_gentime( buf2, sizeof( buf2 ), ltm );
-
-#ifdef HAVE_GMTIME_R
-       ltm = gmtime_r( &c->c_activitytime, &tm_buf );
-#else
-       ltm = gmtime( &c->c_activitytime );
+       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
-       lutil_gentime( buf3, sizeof( buf3 ), ltm );
 
 #ifndef HAVE_GMTIME_R
        ldap_pvt_thread_mutex_unlock( &gmtime_mutex );
-#endif /* HAVE_GMTIME_R */
+#endif
 
-       snprintf( buf, sizeof( buf ),
-               "dn: cn=Connection %ld,%s\n"
-               "objectClass: %s\n"
-               "structuralObjectClass: %s\n"
-               "cn: Connection %ld\n"
+       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 );
+
+       if ( e == NULL) {
+               Debug( LDAP_DEBUG_ANY,
+                       "monitor_subsys_conn_create: "
+                       "unable to create entry "
+                       "\"cn=Connection %ld,%s\"\n",
+                       c->c_connid, 
+                       ms->mss_dn.bv_val, 0 );
+               return( -1 );
+       }
 
 #ifdef MONITOR_LEGACY_CONN
-               /* NOTE: this will disappear, as the exploded data
-                * has been moved to dedicated attributes */
-               "%s: "
+       /* NOTE: this will disappear, as the exploded data
+        * has been moved to dedicated attributes */
+       bv.bv_len = snprintf( buf, sizeof( buf ),
                        "%ld "
                        ": %ld "
                        ": %ld/%ld/%ld/%ld "
@@ -345,44 +322,7 @@ conn_create(
                        ": %s "
                        ": %s "
                        ": %s "
-                       ": %s\n"
-#endif /* MONITOR_LEGACY_CONN */
-
-               "%s: %lu\n"
-               "%s: %ld\n"
-
-               "%s: %ld\n"
-               "%s: %ld\n"
-               "%s: %ld\n"
-               "%s: %ld\n"
-
-               "%s: %ld\n"
-               "%s: %ld\n"
-               "%s: %ld\n"
-
-               "%s: %s%s%s%s%s%s\n"
-
-               "%s: %s\n"
-
-               "%s: %s\n"
-               "%s: %s\n"
-               "%s: %s\n"
-               "%s: %s\n"
-
-               "%s: %s\n"
-               "%s: %s\n"
-
-               "creatorsName: %s\n"
-               "modifiersName: %s\n"
-               "createTimestamp: %s\n"
-               "modifyTimestamp: %s\n",
-               c->c_connid, ms->mss_dn.bv_val,
-               mi->mi_oc_monitorConnection->soc_cname.bv_val,
-               mi->mi_oc_monitorConnection->soc_cname.bv_val,
-               c->c_connid,
-
-#ifdef MONITOR_LEGACY_CONN
-               mi->mi_ad_monitoredInfo->ad_cname.bv_val,
+                       ": %s",
                        c->c_connid,
                        (long) c->c_protocol,
                        c->c_n_ops_received, c->c_n_ops_executing,
@@ -406,72 +346,67 @@ conn_create(
                        c->c_sock_name.bv_val,
                        
                        buf2,
-                       buf3,
+                       buf3 );
+       attr_merge_one( e, mi->mi_ad_monitoredInfo, &bv, NULL );
 #endif /* MONITOR_LEGACY_CONN */
 
-               mi->mi_ad_monitorConnectionNumber->ad_cname.bv_val,
-                       c->c_connid,
-               mi->mi_ad_monitorConnectionProtocol->ad_cname.bv_val,
-                       (long)c->c_protocol,
-
-               mi->mi_ad_monitorConnectionOpsReceived->ad_cname.bv_val,
-                       c->c_n_ops_received,
-               mi->mi_ad_monitorConnectionOpsExecuting->ad_cname.bv_val,
-                       c->c_n_ops_executing,
-               mi->mi_ad_monitorConnectionOpsPending->ad_cname.bv_val,
-                       c->c_n_ops_pending,
-               mi->mi_ad_monitorConnectionOpsCompleted->ad_cname.bv_val,
-                       c->c_n_ops_completed,
-
-               mi->mi_ad_monitorConnectionGet->ad_cname.bv_val,
-                       c->c_n_get,
-               mi->mi_ad_monitorConnectionRead->ad_cname.bv_val,
-                       c->c_n_read,
-               mi->mi_ad_monitorConnectionWrite->ad_cname.bv_val,
-                       c->c_n_write,
-
-               mi->mi_ad_monitorConnectionMask->ad_cname.bv_val,
+       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", c->c_protocol );
+       attr_merge_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 );
+
+       bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_ops_executing );
+       attr_merge_one( e, mi->mi_ad_monitorConnectionOpsExecuting, &bv, NULL );
+
+       bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_ops_pending );
+       attr_merge_one( e, mi->mi_ad_monitorConnectionOpsPending, &bv, NULL );
+
+       bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_ops_completed );
+       attr_merge_one( e, mi->mi_ad_monitorConnectionOpsCompleted, &bv, NULL );
+
+       bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_get );
+       attr_merge_one( e, mi->mi_ad_monitorConnectionGet, &bv, NULL );
+
+       bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_read );
+       attr_merge_one( e, mi->mi_ad_monitorConnectionRead, &bv, NULL );
+
+       bv.bv_len = snprintf( buf, sizeof( buf ), "%ld", c->c_n_write );
+       attr_merge_one( e, mi->mi_ad_monitorConnectionWrite, &bv, NULL );
+
+       bv.bv_len = snprintf( buf, sizeof( buf ), "%s%s%s%s%s%s",
                        c->c_currentber ? "r" : "",
                        c->c_writewaiter ? "w" : "",
                        LDAP_STAILQ_EMPTY( &c->c_ops ) ? "" : "x",
                        LDAP_STAILQ_EMPTY( &c->c_pending_ops ) ? "" : "p",
                        connection_state2str( c->c_conn_state ),
-                       c->c_sasl_bind_in_progress ? "S" : "",
-               
-               mi->mi_ad_monitorConnectionAuthzDN->ad_cname.bv_val,
-                       c->c_dn.bv_len ? c->c_dn.bv_val : SLAPD_ANONYMOUS,
+                       c->c_sasl_bind_in_progress ? "S" : "" );
+       attr_merge_one( e, mi->mi_ad_monitorConnectionMask, &bv, NULL );
 
-               /* NOTE: client connections leave the c_peer_* fields NULL */
-               mi->mi_ad_monitorConnectionListener->ad_cname.bv_val,
-                       c->c_listener_url.bv_val,
-               mi->mi_ad_monitorConnectionPeerDomain->ad_cname.bv_val,
-                       BER_BVISNULL( &c->c_peer_domain ) ? "unknown" : c->c_peer_domain.bv_val,
-               mi->mi_ad_monitorConnectionLocalAddress->ad_cname.bv_val,
-                       BER_BVISNULL( &c->c_peer_name ) ? "unknown" : c->c_peer_name.bv_val,
-               mi->mi_ad_monitorConnectionPeerAddress->ad_cname.bv_val,
-                       c->c_sock_name.bv_val,
+       attr_merge_one( e, mi->mi_ad_monitorConnectionAuthzDN,
+               &c->c_dn, &c->c_ndn );
 
-               mi->mi_ad_monitorConnectionStartTime->ad_cname.bv_val,
-                       buf2,
-               mi->mi_ad_monitorConnectionActivityTime->ad_cname.bv_val,
-                       buf3,
+       /* NOTE: client connections leave the c_peer_* fields NULL */
+       attr_merge_one( e, mi->mi_ad_monitorConnectionListener,
+               &c->c_listener_url, NULL );
 
-               mi->mi_creatorsName.bv_val,
-               mi->mi_creatorsName.bv_val,
-               ctmbuf,
-               mtmbuf );
-               
-       e = str2entry( buf );
+       attr_merge_one( e, mi->mi_ad_monitorConnectionPeerDomain,
+               BER_BVISNULL( &c->c_peer_domain ) ? &bv_unknown : &c->c_peer_domain,
+               NULL );
 
-       if ( e == NULL) {
-               Debug( LDAP_DEBUG_ANY,
-                       "monitor_subsys_conn_create: "
-                       "unable to create entry "
-                       "\"cn=Connection %ld,%s\" entry\n",
-                       c->c_connid, 
-                       ms->mss_dn.bv_val, 0 );
-               return( -1 );
-       }
+       attr_merge_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,
+               &c->c_sock_name, NULL );
+
+       attr_merge_one( e, mi->mi_ad_monitorConnectionStartTime, &bv2, NULL );
+
+       attr_merge_one( e, mi->mi_ad_monitorConnectionActivityTime, &bv3, NULL );
 
        mp = monitor_entrypriv_create();
        if ( mp == NULL ) {