1 /* sent.c - deal with data sent subsystem */
3 * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
4 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
7 * Copyright 2001 The OpenLDAP Foundation, All Rights Reserved.
8 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
10 * Copyright 2001, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
12 * This work has beed deveolped for the OpenLDAP Foundation
13 * in the hope that it may be useful to the Open Source community,
14 * but WITHOUT ANY WARRANTY.
16 * Permission is granted to anyone to use this software for any purpose
17 * on any computer system, and to alter it and redistribute it, subject
18 * to the following restrictions:
20 * 1. The author and SysNet s.n.c. are not responsible for the consequences
21 * of use of this software, no matter how awful, even if they arise from
24 * 2. The origin of this software must not be misrepresented, either by
25 * explicit claim or by omission. Since few users ever read sources,
26 * credits should appear in the documentation.
28 * 3. Altered versions must be plainly marked as such, and must not be
29 * misrepresented as being the original software. Since few users
30 * ever read sources, credits should appear in the documentation.
31 * SysNet s.n.c. cannot be responsible for the consequences of the
34 * 4. This notice may not be removed or altered.
42 #include "back-monitor.h"
45 monitor_subsys_sent_init(
49 struct monitorinfo *mi;
51 Entry *e, *e_tmp, *e_sent;
52 struct monitorentrypriv *mp;
58 mi = ( struct monitorinfo * )be->be_private;
60 if ( monitor_cache_get( mi,
61 &monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn, &e_sent ) ) {
63 LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
64 "monitor_subsys_sent_init: "
65 "unable to get entry '%s'\n",
66 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val ));
68 Debug( LDAP_DEBUG_ANY,
69 "monitor_subsys_sent_init: "
70 "unable to get entry '%s'\n%s%s",
71 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
82 snprintf( buf, sizeof( buf ),
85 "objectClass: LDAPsubEntry\n"
86 #ifdef SLAPD_MONITORSUBENTRY
87 "objectClass: monitorSubEntry\n"
88 #else /* !SLAPD_MONITORSUBENTRY */
89 "objectClass: extensibleObject\n"
90 #endif /* !SLAPD_MONITORSUBENTRY */
92 monitor_subsys[SLAPD_MONITOR_SENT].mss_dn.bv_val );
97 LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
98 "monitor_subsys_sent_init: "
99 "unable to create entry 'cn=Entries,%s'\n",
100 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val ));
102 Debug( LDAP_DEBUG_ANY,
103 "monitor_subsys_sent_init: "
104 "unable to create entry 'cn=Entries,%s'\n%s%s",
105 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
114 attr_merge( e, monitor_ad_desc, bv );
116 mp = ( struct monitorentrypriv * )ch_calloc( sizeof( struct monitorentrypriv ), 1 );
117 e->e_private = ( void * )mp;
119 mp->mp_children = NULL;
120 mp->mp_info = &monitor_subsys[SLAPD_MONITOR_SENT];
121 mp->mp_flags = monitor_subsys[SLAPD_MONITOR_SENT].mss_flags \
122 | MONITOR_F_SUB | MONITOR_F_PERSISTENT;
124 if ( monitor_cache_add( mi, e ) ) {
126 LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
127 "monitor_subsys_sent_init: "
128 "unable to add entry 'cn=Entries,%s'\n",
129 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val ));
131 Debug( LDAP_DEBUG_ANY,
132 "monitor_subsys_sent_init: "
133 "unable to add entry 'cn=Entries,%s'\n%s%s",
134 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
145 snprintf( buf, sizeof( buf ),
146 "dn: cn=Referrals,%s\n"
148 "objectClass: LDAPsubEntry\n"
149 #ifdef SLAPD_MONITORSUBENTRY
150 "objectClass: monitorSubEntry\n"
151 #else /* !SLAPD_MONITORSUBENTRY */
152 "objectClass: extensibleObject\n"
153 #endif /* !SLAPD_MONITORSUBENTRY */
155 monitor_subsys[SLAPD_MONITOR_SENT].mss_dn.bv_val );
157 e = str2entry( buf );
160 LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
161 "monitor_subsys_sent_init: "
162 "unable to create entry 'cn=Referrals,%s'\n",
163 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val ));
165 Debug( LDAP_DEBUG_ANY,
166 "monitor_subsys_sent_init: "
167 "unable to create entry 'cn=Referrals,%s'\n%s%s",
168 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
176 attr_merge( e, monitor_ad_desc, bv );
178 mp = ( struct monitorentrypriv * )ch_calloc( sizeof( struct monitorentrypriv ), 1 );
179 e->e_private = ( void * )mp;
181 mp->mp_children = NULL;
182 mp->mp_info = &monitor_subsys[SLAPD_MONITOR_SENT];
183 mp->mp_flags = monitor_subsys[SLAPD_MONITOR_SENT].mss_flags \
184 | MONITOR_F_SUB | MONITOR_F_PERSISTENT;
186 if ( monitor_cache_add( mi, e ) ) {
188 LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
189 "monitor_subsys_sent_init: "
190 "unable to add entry 'cn=Referrals,%s'\n",
191 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val ));
193 Debug( LDAP_DEBUG_ANY,
194 "monitor_subsys_sent_init: "
195 "unable to add entry 'cn=Referrals,%s'\n%s%s",
196 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
207 snprintf( buf, sizeof( buf ),
210 "objectClass: LDAPsubEntry\n"
211 #ifdef SLAPD_MONITORSUBENTRY
212 "objectClass: monitorSubEntry\n"
213 #else /* !SLAPD_MONITORSUBENTRY */
214 "objectClass: extensibleObject\n"
215 #endif /* !SLAPD_MONITORSUBENTRY */
217 monitor_subsys[SLAPD_MONITOR_SENT].mss_dn.bv_val );
219 e = str2entry( buf );
222 LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
223 "monitor_subsys_sent_init: "
224 "unable to create entry 'cn=PDU,%s'\n",
225 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val ));
227 Debug( LDAP_DEBUG_ANY,
228 "monitor_subsys_sent_init: "
229 "unable to create entry 'cn=PDU,%s'\n%s%s",
230 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
238 attr_merge( e, monitor_ad_desc, bv );
240 mp = ( struct monitorentrypriv * )ch_calloc( sizeof( struct monitorentrypriv ), 1 );
241 e->e_private = ( void * )mp;
243 mp->mp_children = NULL;
244 mp->mp_info = &monitor_subsys[SLAPD_MONITOR_SENT];
245 mp->mp_flags = monitor_subsys[SLAPD_MONITOR_SENT].mss_flags \
246 | MONITOR_F_SUB | MONITOR_F_PERSISTENT;
248 if ( monitor_cache_add( mi, e ) ) {
250 LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
251 "monitor_subsys_sent_init: "
252 "unable to add entry 'cn=PDU,%s'\n",
253 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val ));
255 Debug( LDAP_DEBUG_ANY,
256 "monitor_subsys_sent_init: "
257 "unable to add entry 'cn=PDU,%s'\n%s%s",
258 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
269 snprintf( buf, sizeof( buf ),
272 "objectClass: LDAPsubEntry\n"
273 #ifdef SLAPD_MONITORSUBENTRY
274 "objectClass: monitorSubEntry\n"
275 #else /* !SLAPD_MONITORSUBENTRY */
276 "objectClass: extensibleObject\n"
277 #endif /* !SLAPD_MONITORSUBENTRY */
279 monitor_subsys[SLAPD_MONITOR_SENT].mss_dn.bv_val );
281 e = str2entry( buf );
284 LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
285 "monitor_subsys_sent_init: "
286 "unable to create entry 'cn=Bytes,%s'\n",
287 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val ));
289 Debug( LDAP_DEBUG_ANY,
290 "monitor_subsys_sent_init: "
291 "unable to create entry 'cn=Bytes,%s'\n%s%s",
292 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
300 attr_merge( e, monitor_ad_desc, bv );
302 mp = ( struct monitorentrypriv * )ch_calloc( sizeof( struct monitorentrypriv ), 1 );
303 e->e_private = ( void * )mp;
305 mp->mp_children = NULL;
306 mp->mp_info = &monitor_subsys[SLAPD_MONITOR_SENT];
307 mp->mp_flags = monitor_subsys[SLAPD_MONITOR_SENT].mss_flags \
308 | MONITOR_F_SUB | MONITOR_F_PERSISTENT;
310 if ( monitor_cache_add( mi, e ) ) {
312 LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
313 "monitor_subsys_sent_init: "
314 "unable to add entry 'cn=Bytes,%s'\n",
315 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val ));
317 Debug( LDAP_DEBUG_ANY,
318 "monitor_subsys_sent_init: "
319 "unable to add entry 'cn=Bytes,%s'\n%s%s",
320 monitor_subsys[SLAPD_MONITOR_SENT].mss_ndn.bv_val,
328 mp = ( struct monitorentrypriv * )e_sent->e_private;
329 mp->mp_children = e_tmp;
331 monitor_cache_release( mi, e_sent );
337 monitor_subsys_sent_update(
338 struct monitorinfo *mi,
347 if ( strncasecmp( e->e_ndn, "CN=ENTRIES",
348 sizeof("CN=ENTRIES")-1 ) == 0 ) {
349 ldap_pvt_thread_mutex_lock(&num_sent_mutex);
350 n = num_entries_sent;
351 ldap_pvt_thread_mutex_unlock(&num_sent_mutex);
353 } else if ( strncasecmp( e->e_ndn, "CN=REFERRALS",
354 sizeof("CN=REFERRALS")-1 ) == 0 ) {
355 ldap_pvt_thread_mutex_lock(&num_sent_mutex);
357 ldap_pvt_thread_mutex_unlock(&num_sent_mutex);
359 } else if ( strncasecmp( e->e_ndn, "CN=PDU",
360 sizeof("CN=PDU")-1 ) == 0 ) {
361 ldap_pvt_thread_mutex_lock(&num_sent_mutex);
363 ldap_pvt_thread_mutex_unlock(&num_sent_mutex);
365 } else if ( strncasecmp( e->e_ndn, "CN=BYTES",
366 sizeof("CN=BYTES")-1 ) == 0 ) {
367 ldap_pvt_thread_mutex_lock(&num_sent_mutex);
369 ldap_pvt_thread_mutex_unlock(&num_sent_mutex);
376 a = attr_find( e->e_attrs, monitor_ad_desc );
381 snprintf( buf, sizeof( buf ), "%ld", n );
382 free( a->a_vals[ 0 ].bv_val );
383 ber_str2bv( buf, 0, 1, a->a_vals );