]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-monitor/sent.c
import fix to back-monitor attribute normalization (ITS#3659)
[openldap] / servers / slapd / back-monitor / sent.c
index f14337b8267aa087bd563d81cfa959117a680243..67291f64263dcc6aa7ee626f10997799e211958e 100644 (file)
@@ -1,42 +1,28 @@
 /* sent.c - deal with data sent subsystem */
-/*
- * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+/* $OpenLDAP$ */
+/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 2001-2005 The OpenLDAP Foundation.
+ * Portions Copyright 2001-2003 Pierangelo Masarati.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
  */
-/*
- * Copyright 2001 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
- * 
- * Copyright 2001, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
- * 
- * This work has beed deveolped for the OpenLDAP Foundation 
- * in the hope that it may be useful to the Open Source community, 
- * but WITHOUT ANY WARRANTY.
- * 
- * Permission is granted to anyone to use this software for any purpose
- * on any computer system, and to alter it and redistribute it, subject
- * to the following restrictions:
- * 
- * 1. The author and SysNet s.n.c. are not responsible for the consequences
- *    of use of this software, no matter how awful, even if they arise from
- *    flaws in it.
- * 
- * 2. The origin of this software must not be misrepresented, either by
- *    explicit claim or by omission.  Since few users ever read sources,
- *    credits should appear in the documentation.
- * 
- * 3. Altered versions must be plainly marked as such, and must not be
- *    misrepresented as being the original software.  Since few users
- *    ever read sources, credits should appear in the documentation.
- *    SysNet s.n.c. cannot be responsible for the consequences of the
- *    alterations.
- * 
- * 4. This notice may not be removed or altered.
+/* ACKNOWLEDGEMENTS:
+ * This work was initially developed by Pierangelo Masarati for inclusion
+ * in OpenLDAP Software.
  */
 
 #include "portable.h"
 
 #include <stdio.h>
+#include <ac/string.h>
 
 #include "slap.h"
 #include "back-monitor.h"
@@ -50,25 +36,25 @@ monitor_subsys_sent_init(
        
        Entry                   *e, *e_tmp, *e_sent;
        struct monitorentrypriv *mp;
-       char                    buf[1024];
-       struct berval           bv[2];
+       char                    buf[ BACKMONITOR_BUFSIZE ];
+       struct berval           bv;
 
        assert( be != NULL );
 
        mi = ( struct monitorinfo * )be->be_private;
 
        if ( monitor_cache_get( mi,
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn, &e_sent ) ) {
+                       &monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn, &e_sent ) ) {
 #ifdef NEW_LOGGING
-               LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
+               LDAP_LOG( OPERATION, CRIT,
                        "monitor_subsys_sent_init: "
                        "unable to get entry '%s'\n",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val ));
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val, 0, 0 );
 #else
                Debug( LDAP_DEBUG_ANY,
                        "monitor_subsys_sent_init: "
                        "unable to get entry '%s'\n%s%s",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val, 
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val, 
                        "", "" );
 #endif
                return( -1 );
@@ -81,37 +67,37 @@ monitor_subsys_sent_init(
         */
        snprintf( buf, sizeof( buf ),
                        "dn: cn=Entries,%s\n"
-                       "objectClass: top\n"
-                       "objectClass: LDAPsubEntry\n"
-#ifdef SLAPD_MONITORSUBENTRY
-                       "objectClass: monitorSubEntry\n"
-#else /* !SLAPD_MONITORSUBENTRY */
-                       "objectClass: extensibleObject\n"
-#endif /* !SLAPD_MONITORSUBENTRY */
-                       "cn: Entries\n",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_dn->bv_val );
+                       "objectClass: %s\n"
+                       "structuralObjectClass: %s\n"
+                       "cn: Entries\n"
+                       "createTimestamp: %s\n"
+                       "modifyTimestamp: %s\n",
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_dn.bv_val,
+                       mi->mi_oc_monitorCounterObject->soc_cname.bv_val,
+                       mi->mi_oc_monitorCounterObject->soc_cname.bv_val,
+                       mi->mi_startTime.bv_val,
+                       mi->mi_startTime.bv_val );
 
        e = str2entry( buf );
        if ( e == NULL ) {
 #ifdef NEW_LOGGING
-               LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
+               LDAP_LOG( OPERATION, CRIT,
                        "monitor_subsys_sent_init: "
                        "unable to create entry 'cn=Entries,%s'\n",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val ));
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val, 0, 0 );
 #else
                Debug( LDAP_DEBUG_ANY,
                        "monitor_subsys_sent_init: "
                        "unable to create entry 'cn=Entries,%s'\n%s%s",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val,
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
                        "", "" );
 #endif
                return( -1 );
        }
        
-       bv[1].bv_val = NULL;
-       bv[0].bv_val = "0";
-       bv[0].bv_len = 1;
-       attr_merge( e, monitor_ad_desc, bv );
+       bv.bv_val = "0";
+       bv.bv_len = 1;
+       attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, &bv );
        
        mp = ( struct monitorentrypriv * )ch_calloc( sizeof( struct monitorentrypriv ), 1 );
        e->e_private = ( void * )mp;
@@ -123,15 +109,15 @@ monitor_subsys_sent_init(
 
        if ( monitor_cache_add( mi, e ) ) {
 #ifdef NEW_LOGGING
-               LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
+               LDAP_LOG( OPERATION, CRIT,
                        "monitor_subsys_sent_init: "
                        "unable to add entry 'cn=Entries,%s'\n",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val ));
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val, 0, 0 );
 #else
                Debug( LDAP_DEBUG_ANY,
                        "monitor_subsys_sent_init: "
                        "unable to add entry 'cn=Entries,%s'\n%s%s",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val,
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
                        "", "" );
 #endif
                return( -1 );
@@ -144,36 +130,37 @@ monitor_subsys_sent_init(
         */
        snprintf( buf, sizeof( buf ),
                        "dn: cn=Referrals,%s\n"
-                       "objectClass: top\n"
-                       "objectClass: LDAPsubEntry\n"
-#ifdef SLAPD_MONITORSUBENTRY
-                       "objectClass: monitorSubEntry\n"
-#else /* !SLAPD_MONITORSUBENTRY */
-                       "objectClass: extensibleObject\n"
-#endif /* !SLAPD_MONITORSUBENTRY */
-                       "cn: Referrals\n",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_dn->bv_val );
+                       "objectClass: %s\n"
+                       "structuralObjectClass: %s\n"
+                       "cn: Referrals\n"
+                       "createTimestamp: %s\n"
+                       "modifyTimestamp: %s\n",
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_dn.bv_val,
+                       mi->mi_oc_monitorCounterObject->soc_cname.bv_val,
+                       mi->mi_oc_monitorCounterObject->soc_cname.bv_val,
+                       mi->mi_startTime.bv_val,
+                       mi->mi_startTime.bv_val );
 
        e = str2entry( buf );
        if ( e == NULL ) {
 #ifdef NEW_LOGGING
-               LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
+               LDAP_LOG( OPERATION, CRIT,
                        "monitor_subsys_sent_init: "
                        "unable to create entry 'cn=Referrals,%s'\n",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val ));
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val, 0, 0 );
 #else
                Debug( LDAP_DEBUG_ANY,
                        "monitor_subsys_sent_init: "
                        "unable to create entry 'cn=Referrals,%s'\n%s%s",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val,
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
                        "", "" );
 #endif
                return( -1 );
        }
 
-       bv[0].bv_val = "0";
-       bv[0].bv_len = 1;
-       attr_merge( e, monitor_ad_desc, bv );
+       bv.bv_val = "0";
+       bv.bv_len = 1;
+       attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, &bv );
        
        mp = ( struct monitorentrypriv * )ch_calloc( sizeof( struct monitorentrypriv ), 1 );
        e->e_private = ( void * )mp;
@@ -185,15 +172,15 @@ monitor_subsys_sent_init(
 
        if ( monitor_cache_add( mi, e ) ) {
 #ifdef NEW_LOGGING
-               LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
+               LDAP_LOG( OPERATION, CRIT,
                        "monitor_subsys_sent_init: "
                        "unable to add entry 'cn=Referrals,%s'\n",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val ));
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val, 0, 0 );
 #else
                Debug( LDAP_DEBUG_ANY,
                        "monitor_subsys_sent_init: "
                        "unable to add entry 'cn=Referrals,%s'\n%s%s",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val,
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
                        "", "" );
 #endif
                return( -1 );
@@ -206,36 +193,37 @@ monitor_subsys_sent_init(
         */
        snprintf( buf, sizeof( buf ),
                        "dn: cn=PDU,%s\n"
-                       "objectClass: top\n"
-                       "objectClass: LDAPsubEntry\n"
-#ifdef SLAPD_MONITORSUBENTRY
-                       "objectClass: monitorSubEntry\n"
-#else /* !SLAPD_MONITORSUBENTRY */
-                       "objectClass: extensibleObject\n"
-#endif /* !SLAPD_MONITORSUBENTRY */
-                       "cn: PDU\n",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_dn->bv_val );
+                       "objectClass: %s\n"
+                       "structuralObjectClass: %s\n"
+                       "cn: PDU\n"
+                       "createTimestamp: %s\n"
+                       "modifyTimestamp: %s\n",
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_dn.bv_val,
+                       mi->mi_oc_monitorCounterObject->soc_cname.bv_val,
+                       mi->mi_oc_monitorCounterObject->soc_cname.bv_val,
+                       mi->mi_startTime.bv_val,
+                       mi->mi_startTime.bv_val );
 
        e = str2entry( buf );
        if ( e == NULL ) {
 #ifdef NEW_LOGGING
-               LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
+               LDAP_LOG( OPERATION, CRIT,
                        "monitor_subsys_sent_init: "
                        "unable to create entry 'cn=PDU,%s'\n",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val ));
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val, 0, 0 );
 #else
                Debug( LDAP_DEBUG_ANY,
                        "monitor_subsys_sent_init: "
                        "unable to create entry 'cn=PDU,%s'\n%s%s",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val,
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
                        "", "" );
 #endif
                return( -1 );
        }
 
-       bv[0].bv_val = "0";
-       bv[0].bv_len = 1;
-       attr_merge( e, monitor_ad_desc, bv );
+       bv.bv_val = "0";
+       bv.bv_len = 1;
+       attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, &bv );
        
        mp = ( struct monitorentrypriv * )ch_calloc( sizeof( struct monitorentrypriv ), 1 );
        e->e_private = ( void * )mp;
@@ -247,15 +235,15 @@ monitor_subsys_sent_init(
 
        if ( monitor_cache_add( mi, e ) ) {
 #ifdef NEW_LOGGING
-               LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
+               LDAP_LOG( OPERATION, CRIT,
                        "monitor_subsys_sent_init: "
                        "unable to add entry 'cn=PDU,%s'\n",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val ));
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val, 0, 0 );
 #else
                Debug( LDAP_DEBUG_ANY,
                        "monitor_subsys_sent_init: "
                        "unable to add entry 'cn=PDU,%s'\n%s%s",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val,
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
                        "", "" );
 #endif
                return( -1 );
@@ -268,36 +256,37 @@ monitor_subsys_sent_init(
         */
        snprintf( buf, sizeof( buf ),
                        "dn: cn=Bytes,%s\n"
-                       "objectClass: top\n"
-                       "objectClass: LDAPsubEntry\n"
-#ifdef SLAPD_MONITORSUBENTRY
-                       "objectClass: monitorSubEntry\n"
-#else /* !SLAPD_MONITORSUBENTRY */
-                       "objectClass: extensibleObject\n"
-#endif /* !SLAPD_MONITORSUBENTRY */
-                       "cn: Bytes\n",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_dn->bv_val );
+                       "objectClass: %s\n"
+                       "structuralObjectClass: %s\n"
+                       "cn: Bytes\n"
+                       "createTimestamp: %s\n"
+                       "modifyTimestamp: %s\n",
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_dn.bv_val,
+                       mi->mi_oc_monitorCounterObject->soc_cname.bv_val,
+                       mi->mi_oc_monitorCounterObject->soc_cname.bv_val,
+                       mi->mi_startTime.bv_val,
+                       mi->mi_startTime.bv_val );
 
        e = str2entry( buf );
        if ( e == NULL ) {
 #ifdef NEW_LOGGING
-               LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
+               LDAP_LOG( OPERATION, CRIT,
                        "monitor_subsys_sent_init: "
                        "unable to create entry 'cn=Bytes,%s'\n",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val ));
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val, 0, 0 );
 #else
                Debug( LDAP_DEBUG_ANY,
                        "monitor_subsys_sent_init: "
                        "unable to create entry 'cn=Bytes,%s'\n%s%s",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val,
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
                        "", "" );
 #endif
                return( -1 );
        }
 
-       bv[0].bv_val = "0";
-       bv[0].bv_len = 1;
-       attr_merge( e, monitor_ad_desc, bv );
+       bv.bv_val = "0";
+       bv.bv_len = 1;
+       attr_merge_one( e, mi->mi_ad_monitorCounter, &bv, &bv );
        
        mp = ( struct monitorentrypriv * )ch_calloc( sizeof( struct monitorentrypriv ), 1 );
        e->e_private = ( void * )mp;
@@ -309,15 +298,15 @@ monitor_subsys_sent_init(
 
        if ( monitor_cache_add( mi, e ) ) {
 #ifdef NEW_LOGGING
-               LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
+               LDAP_LOG( OPERATION, CRIT,
                        "monitor_subsys_sent_init: "
                        "unable to add entry 'cn=Bytes,%s'\n",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val ));
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val, 0, 0 );
 #else
                Debug( LDAP_DEBUG_ANY,
                        "monitor_subsys_sent_init: "
                        "unable to add entry 'cn=Bytes,%s'\n%s%s",
-                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn->bv_val,
+                       monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
                        "", "" );
 #endif
                return( -1 );
@@ -335,35 +324,36 @@ monitor_subsys_sent_init(
 
 int
 monitor_subsys_sent_update(
-       struct monitorinfo      *mi,
+       Operation               *op,
        Entry                   *e
 )
 {
+       struct monitorinfo *mi = (struct monitorinfo *)op->o_bd->be_private;
        long            n = -1;
 
        assert( mi );
        assert( e );
        
-       if ( strncasecmp( e->e_ndn, "CN=ENTRIES", 
-                               sizeof("CN=ENTRIES")-1 ) == 0 ) {
+       if ( strncasecmp( e->e_ndn, "cn=entries", 
+                               sizeof("cn=entries")-1 ) == 0 ) {
                ldap_pvt_thread_mutex_lock(&num_sent_mutex);
                n = num_entries_sent;
                ldap_pvt_thread_mutex_unlock(&num_sent_mutex);
 
-       } else if ( strncasecmp( e->e_ndn, "CN=REFERRALS", 
-                               sizeof("CN=REFERRALS")-1 ) == 0 ) {
+       } else if ( strncasecmp( e->e_ndn, "cn=referrals", 
+                               sizeof("cn=referrals")-1 ) == 0 ) {
                ldap_pvt_thread_mutex_lock(&num_sent_mutex);
                n = num_refs_sent;
                ldap_pvt_thread_mutex_unlock(&num_sent_mutex);
 
-       } else if ( strncasecmp( e->e_ndn, "CN=PDU", 
-                               sizeof("CN=PDU")-1 ) == 0 ) {
+       } else if ( strncasecmp( e->e_ndn, "cn=pdu", 
+                               sizeof("cn=pdu")-1 ) == 0 ) {
                ldap_pvt_thread_mutex_lock(&num_sent_mutex);
                n = num_pdu_sent;
                ldap_pvt_thread_mutex_unlock(&num_sent_mutex);
 
-       } else if ( strncasecmp( e->e_ndn, "CN=BYTES", 
-                               sizeof("CN=BYTES")-1 ) == 0 ) {
+       } else if ( strncasecmp( e->e_ndn, "cn=bytes", 
+                               sizeof("cn=bytes")-1 ) == 0 ) {
                ldap_pvt_thread_mutex_lock(&num_sent_mutex);
                n = num_bytes_sent;
                ldap_pvt_thread_mutex_unlock(&num_sent_mutex);
@@ -371,16 +361,16 @@ monitor_subsys_sent_update(
 
        if ( n != -1 ) {
                Attribute       *a;
-               char            buf[16];
+               char            buf[] = "+9223372036854775807L";
 
-               a = attr_find( e->e_attrs, monitor_ad_desc );
+               a = attr_find( e->e_attrs, mi->mi_ad_monitorCounter);
                if ( a == NULL ) {
                        return( -1 );
                }
 
                snprintf( buf, sizeof( buf ), "%ld", n );
                free( a->a_vals[ 0 ].bv_val );
-               ber_str2bv( buf, 0, 1, a->a_vals );
+               ber_str2bv( buf, 0, 1, &a->a_vals[ 0 ] );
        }
 
        return( 0 );