]> git.sur5r.net Git - openldap/blob - servers/slapd/back-monitor/thread.c
more cleanup
[openldap] / servers / slapd / back-monitor / thread.c
1 /* thread.c - deal with thread subsystem */
2 /*
3  * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
4  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
5  */
6 /*
7  * Copyright 2001 The OpenLDAP Foundation, All Rights Reserved.
8  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
9  * 
10  * Copyright 2001, Pierangelo Masarati, All rights reserved. <ando@sys-net.it>
11  * 
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.
15  * 
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:
19  * 
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
22  *    flaws in it.
23  * 
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.
27  * 
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
32  *    alterations.
33  * 
34  * 4. This notice may not be removed or altered.
35  */
36
37 #include "portable.h"
38
39 #include <stdio.h>
40
41 #include "slap.h"
42 #include "back-monitor.h"
43
44 /*
45 *  * initializes log subentry
46 *   */
47 int
48 monitor_subsys_thread_init(
49         BackendDB       *be
50 )
51 {
52         struct monitorinfo      *mi;
53         Entry                   *e;
54         struct berval           bv[2];
55         static char             buf[1024];
56
57         mi = ( struct monitorinfo * )be->be_private;
58
59         if ( monitor_cache_get( mi, 
60                 &monitor_subsys[SLAPD_MONITOR_THREAD].mss_ndn, &e ) )
61         {
62 #ifdef NEW_LOGGING
63                 LDAP_LOG(( "operation", LDAP_LEVEL_CRIT,
64                         "monitor_subsys_thread_init: unable to get entry '%s'\n",
65                         monitor_subsys[SLAPD_MONITOR_THREAD].mss_ndn.bv_val ));
66 #else
67                 Debug( LDAP_DEBUG_ANY,
68                         "monitor_subsys_thread_init: unable to get entry '%s'\n",
69                         monitor_subsys[SLAPD_MONITOR_THREAD].mss_ndn.bv_val, 
70                         0, 0 );
71 #endif
72                 return( -1 );
73         }
74
75         /* initialize the thread number */
76         snprintf( buf, sizeof( buf ), "max=%d", connection_pool_max );
77
78         bv[1].bv_val = NULL;
79         bv[0].bv_val = buf;
80         bv[0].bv_len = strlen( bv[0].bv_val );
81
82         attr_merge( e, monitor_ad_desc, bv );
83
84         monitor_cache_release( mi, e );
85
86         return( 0 );
87 }
88
89 int 
90 monitor_subsys_thread_update( 
91         struct monitorinfo      *mi,
92         Entry                   *e
93 )
94 {
95         Attribute               *a;
96         struct berval           bv[2], *b = NULL;
97         char                    buf[1024];
98
99         bv[1].bv_val = NULL;
100
101         snprintf( buf, sizeof( buf ), "backload=%d", 
102                         ldap_pvt_thread_pool_backload( &connection_pool ) );
103
104         if ( ( a = attr_find( e->e_attrs, monitor_ad_desc ) ) != NULL ) {
105
106                 for ( b = a->a_vals; b[0].bv_val != NULL; b++ ) {
107                         if ( strncmp( b[0].bv_val, "backload=", 
108                                         sizeof( "backload=" ) - 1 ) == 0 ) {
109                                 free( b[0].bv_val );
110                                 ber_str2bv( buf, 0, 1, &b[0] );
111                                 break;
112                         }
113                 }
114         }
115
116         if ( b == NULL || b[0].bv_val == NULL ) {
117                 bv[0].bv_val = buf;
118                 bv[0].bv_len = strlen( buf );
119                 attr_merge( e, monitor_ad_desc, bv );
120         }
121
122         return( 0 );
123 }
124