1 /* operation.c - deal with operation subsystem */
3 * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
4 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
7 * Copyright 2001, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
9 * This work has beed deveolped for the OpenLDAP Foundation
10 * in the hope that it may be useful to the Open Source community,
11 * but WITHOUT ANY WARRANTY.
13 * Permission is granted to anyone to use this software for any purpose
14 * on any computer system, and to alter it and redistribute it, subject
15 * to the following restrictions:
17 * 1. The author and SysNet s.n.c. are not responsible for the consequences
18 * of use of this software, no matter how awful, even if they arise from
21 * 2. The origin of this software must not be misrepresented, either by
22 * explicit claim or by omission. Since few users ever read sources,
23 * credits should appear in the documentation.
25 * 3. Altered versions must be plainly marked as such, and must not be
26 * misrepresented as being the original software. Since few users
27 * ever read sources, credits should appear in the documentation.
28 * SysNet s.n.c. cannot be responsible for the consequences of the
31 * 4. This notice may not be removed or altered.
39 #include "back-monitor.h"
42 monitor_subsys_ops_init(
46 struct monitorinfo *mi;
48 Entry *e, *e_tmp, *e_op;
49 struct monitorentrypriv *mp;
55 mi = ( struct monitorinfo * )be->be_private;
57 if ( monitor_cache_get( mi,
58 &monitor_subsys[SLAPD_MONITOR_OPS].mss_ndn, &e_op ) ) {
60 LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
61 "monitor_subsys_ops_init: "
62 "unable to get entry '%s'\n",
63 monitor_subsys[SLAPD_MONITOR_OPS].mss_ndn.bv_val ));
65 Debug( LDAP_DEBUG_ANY,
66 "monitor_subsys_ops_init: "
67 "unable to get entry '%s'\n%s%s",
68 monitor_subsys[SLAPD_MONITOR_OPS].mss_ndn.bv_val,
79 snprintf( buf, sizeof( buf ),
80 "dn: cn=Initiated,%s\n"
82 "objectClass: LDAPsubEntry\n"
83 #ifdef SLAPD_MONITORSUBENTRY
84 "objectClass: monitorSubEntry\n"
85 #else /* !SLAPD_MONITORSUBENTRY */
86 "objectClass: extensibleObject\n"
87 #endif /* !SLAPD_MONITORSUBENTRY */
89 monitor_subsys[SLAPD_MONITOR_OPS].mss_dn.bv_val );
94 LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
95 "monitor_subsys_ops_init: "
96 "unable to create entry 'cn=Initiated,%s'\n",
97 monitor_subsys[SLAPD_MONITOR_OPS].mss_ndn.bv_val ));
99 Debug( LDAP_DEBUG_ANY,
100 "monitor_subsys_ops_init: "
101 "unable to create entry 'cn=Initiated,%s'\n%s%s",
102 monitor_subsys[SLAPD_MONITOR_OPS].mss_ndn.bv_val,
111 attr_merge( e, monitor_ad_desc, bv );
113 mp = ( struct monitorentrypriv * )ch_calloc( sizeof( struct monitorentrypriv ), 1 );
114 e->e_private = ( void * )mp;
116 mp->mp_children = NULL;
117 mp->mp_info = &monitor_subsys[SLAPD_MONITOR_OPS];
118 mp->mp_flags = monitor_subsys[SLAPD_MONITOR_OPS].mss_flags \
119 | MONITOR_F_SUB | MONITOR_F_PERSISTENT;
121 if ( monitor_cache_add( mi, e ) ) {
123 LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
124 "monitor_subsys_ops_init: "
125 "unable to add entry 'cn=Initiated,%s'\n",
126 monitor_subsys[SLAPD_MONITOR_OPS].mss_ndn.bv_val ));
128 Debug( LDAP_DEBUG_ANY,
129 "monitor_subsys_ops_init: "
130 "unable to add entry 'cn=Initiated,%s'\n%s%s",
131 monitor_subsys[SLAPD_MONITOR_OPS].mss_ndn.bv_val,
142 snprintf( buf, sizeof( buf ),
143 "dn: cn=Completed,%s\n"
145 "objectClass: LDAPsubEntry\n"
146 #ifdef SLAPD_MONITORSUBENTRY
147 "objectClass: monitorSubEntry\n"
148 #else /* !SLAPD_MONITORSUBENTRY */
149 "objectClass: extensibleObject\n"
150 #endif /* !SLAPD_MONITORSUBENTRY */
152 monitor_subsys[SLAPD_MONITOR_OPS].mss_dn.bv_val );
154 e = str2entry( buf );
157 LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
158 "monitor_subsys_ops_init: "
159 "unable to create entry 'cn=Completed,%s'\n",
160 monitor_subsys[SLAPD_MONITOR_OPS].mss_ndn.bv_val ));
162 Debug( LDAP_DEBUG_ANY,
163 "monitor_subsys_ops_init: "
164 "unable to create entry 'cn=Completed,%s'\n%s%s",
165 monitor_subsys[SLAPD_MONITOR_OPS].mss_ndn.bv_val,
173 attr_merge( e, monitor_ad_desc, bv );
175 mp = ( struct monitorentrypriv * )ch_calloc( sizeof( struct monitorentrypriv ), 1 );
176 e->e_private = ( void * )mp;
178 mp->mp_children = NULL;
179 mp->mp_info = &monitor_subsys[SLAPD_MONITOR_OPS];
180 mp->mp_flags = monitor_subsys[SLAPD_MONITOR_OPS].mss_flags \
181 | MONITOR_F_SUB | MONITOR_F_PERSISTENT;
183 if ( monitor_cache_add( mi, e ) ) {
185 LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
186 "monitor_subsys_ops_init: "
187 "unable to add entry 'cn=Completed,%s'\n",
188 monitor_subsys[SLAPD_MONITOR_OPS].mss_ndn.bv_val ));
190 Debug( LDAP_DEBUG_ANY,
191 "monitor_subsys_ops_init: "
192 "unable to add entry 'cn=Completed,%s'\n%s%s",
193 monitor_subsys[SLAPD_MONITOR_OPS].mss_ndn.bv_val,
201 mp = ( struct monitorentrypriv * )e_op->e_private;
202 mp->mp_children = e_tmp;
204 monitor_cache_release( mi, e_op );
210 monitor_subsys_ops_update(
211 struct monitorinfo *mi,
220 if ( strncasecmp( e->e_ndn, "CN=INITIATED",
221 sizeof("CN=INITIATED")-1 ) == 0 ) {
222 ldap_pvt_thread_mutex_lock(&num_ops_mutex);
223 n = num_ops_initiated;
224 ldap_pvt_thread_mutex_unlock(&num_ops_mutex);
226 } else if ( strncasecmp( e->e_ndn, "CN=COMPLETED",
227 sizeof("CN=COMPLETED")-1 ) == 0 ) {
228 ldap_pvt_thread_mutex_lock(&num_ops_mutex);
229 n = num_ops_completed;
230 ldap_pvt_thread_mutex_unlock(&num_ops_mutex);
237 a = attr_find( e->e_attrs, monitor_ad_desc );
242 snprintf( buf, sizeof( buf ), "%ld", n );
243 free( a->a_vals[ 0 ].bv_val );
244 ber_str2bv( buf, 0, 1, a->a_vals );