s3:idmap_ad: add support for ADS_AUTH_SASL_{STARTTLS,LDAPS}
[Samba.git] / examples / systemtap / generate-winbindd.stp.sh
blob3a4d2d87eb1ef2b3e00b9ae274f6d5754e0d2abe
1 #!/bin/sh
3 outfile="$(dirname $0)/winbindd.stp"
5 child_funcs="winbindd_dual_init_connection
6 _wbint_InitConnection
7 _wbint_Ping
8 _wbint_PamAuth
9 _wbint_PamAuthCrap
10 _wbint_PamLogOff
11 _wbint_PamAuthChangePassword
12 _wbint_PamAuthCrapChangePassword
13 _wbint_ListTrustedDomains
14 _wbint_LookupSid
15 _wbint_LookupSids
16 _wbint_LookupName
17 _wbint_Sids2UnixIDs
18 _wbint_UnixIDs2Sids
19 _wbint_AllocateUid
20 _wbint_AllocateGid
21 _wbint_GetNssInfo
22 _wbint_LookupUserAliases
23 _wbint_LookupUserGroups
24 _wbint_QuerySequenceNumber
25 _wbint_LookupGroupMembers
26 _wbint_QueryGroupList
27 _wbint_QueryUserRidList
28 _wbint_DsGetDcName
29 _wbint_LookupRids
30 _wbint_CheckMachineAccount
31 _wbint_ChangeMachineAccount
32 _wbint_PingDc"
34 async_funcs="wb_ping
35 winbindd_lookupsid
36 winbindd_lookupsids
37 winbindd_lookupname
38 winbindd_sids_to_xids
39 winbindd_xids_to_sids
40 winbindd_getpwsid
41 winbindd_getpwnam
42 winbindd_getpwuid
43 winbindd_getsidaliases
44 winbindd_getuserdomgroups
45 winbindd_getgroups
46 winbindd_show_sequence
47 winbindd_getgrgid
48 winbindd_getgrnam
49 winbindd_getusersids
50 winbindd_lookuprids
51 winbindd_setpwent
52 winbindd_getpwent
53 winbindd_endpwent
54 winbindd_dsgetdcname
55 winbindd_getdcname
56 winbindd_setgrent
57 winbindd_getgrent
58 winbindd_endgrent
59 winbindd_list_users
60 winbindd_list_groups
61 winbindd_check_machine_acct
62 winbindd_ping_dc
63 winbindd_pam_auth
64 winbindd_pam_logoff
65 winbindd_pam_chauthtok
66 winbindd_pam_chng_pswd_auth_crap
67 winbindd_wins_byip
68 winbindd_wins_byname
69 winbindd_allocate_uid
70 winbindd_allocate_gid
71 winbindd_change_machine_acct
72 winbindd_pam_auth_crap"
74 backend_funcs="query_user_list
75 enum_dom_groups
76 enum_local_groups
77 name_to_sid
78 sid_to_name
79 rids_to_names
80 lookup_usergroups
81 lookup_useraliases
82 lookup_groupmem
83 sequence_number
84 lockout_policy
85 password_policy
86 trusted_domains"
88 header='#!/usr/bin/stap
90 # Systemtap script to instrument winbindd
92 '"# Generated by examples/systemtap/$(basename $0) on $(date), do not edit
93 #"'
94 # Usage:
96 # Instrument all winbindd processes:
97 # # stap winbindd.stp
99 # Instrument a specific winbindd process:
100 # # stap -x PID winbindd.stp
103 global dc_running, dc_svctime
104 global backend_running, backend_svctime
105 global send_running, recv_running
106 global start_time, idle_time
107 global async_svctime, async_runtime
109 probe begin {
110 printf("Collecting data, press ctrl-C to stop... ")
113 domchild_req_template='
115 # winbind domain child function XXX
118 probe process("winbindd").function("XXX") {
119 dc_running[tid(), "XXX"] = gettimeofday_us()
122 probe process("winbindd").function("XXX").return {
123 if (!([tid(), "XXX"] in dc_running))
124 next
126 end = gettimeofday_us()
127 begin = dc_running[tid(), "XXX"]
128 delete dc_running[tid(), "XXX"]
130 duration = end - begin
131 dc_svctime["XXX"] <<< duration
134 backend_req_template='
136 # winbind domain child backend function XXX
139 probe process("winbindd").function("XXX@../source3/winbindd/winbindd_ads.c") {
140 backend_running[tid(), "XXX"] = gettimeofday_us()
143 probe process("winbindd").function("XXX@../source3/winbindd/winbindd_ads.c").return {
144 if (!([tid(), "XXX"] in backend_running))
145 next
147 end = gettimeofday_us()
148 begin = backend_running[tid(), "XXX"]
149 delete backend_running[tid(), "XXX"]
151 duration = end - begin
152 backend_svctime["XXX"] <<< duration
155 async_req_template='
157 # winbind async function XXX
160 probe process("winbindd").function("XXX_send") {
161 send_running["XXX_send"] = gettimeofday_us()
164 probe process("winbindd").function("XXX_send").return {
165 if (!(["XXX_send"] in send_running))
166 next
168 end = gettimeofday_us()
169 start = send_running["XXX_send"]
170 delete send_running["XXX_send"]
172 start_time["XXX_send", $return] = start
173 idle_time["XXX_send", $return] = end
176 probe process("winbindd").function("XXX_recv") {
177 if (!(["XXX_send", $req] in start_time))
178 next
180 recv_running["XXX_recv"] = gettimeofday_us()
183 probe process("winbindd").function("XXX_recv").return {
184 if (!(["XXX_recv"] in recv_running))
185 next
187 recv_end = gettimeofday_us()
188 recv_start = recv_running["XXX_recv"]
189 delete recv_running["XXX_recv"]
190 recv_runtime = recv_end - recv_start
192 req = @entry($req)
194 send_begin = start_time["XXX_send", req]
195 delete start_time["XXX_send", req]
196 svctime = recv_end - send_begin
198 idle = idle_time["XXX_send", req]
199 delete idle_time["XXX_send", req]
200 runtime = (idle - send_begin) + recv_runtime
202 async_svctime["XXX_send"] <<< svctime
203 async_runtime["XXX_send"] <<< runtime
206 footer='
207 probe end {
208 printf("\n\n")
210 printf("Winbind request service time\n")
211 printf("============================\n")
212 foreach ([name] in async_svctime) {
213 printf("%-40s count: %5d, sum: %6d ms (min: %6d us, avg: %6d us, max: %6d us)\n",
214 name,
215 @count(async_svctime[name]),
216 @sum(async_svctime[name]) / 1000,
217 @min(async_svctime[name]),
218 @avg(async_svctime[name]),
219 @max(async_svctime[name]))
221 printf("\n")
223 printf("Winbind request runtime\n")
224 printf("=======================\n")
225 foreach ([name] in async_runtime) {
226 printf("%-40s count: %5d, sum: %6d ms (min: %6d us, avg: %6d us, max: %6d us)\n",
227 name,
228 @count(async_runtime[name]),
229 @sum(async_runtime[name]) / 1000,
230 @min(async_runtime[name]),
231 @avg(async_runtime[name]),
232 @max(async_runtime[name]))
234 printf("\n")
236 printf("Winbind domain-child request service time\n")
237 printf("=========================================\n")
238 foreach ([name] in dc_svctime) {
239 printf("%-40s count: %5d, sum: %6d ms (min: %6d us, avg: %6d us, max: %6d us)\n",
240 name,
241 @count(dc_svctime[name]),
242 @sum(dc_svctime[name]) / 1000,
243 @min(dc_svctime[name]),
244 @avg(dc_svctime[name]),
245 @max(dc_svctime[name]))
247 printf("\n")
249 printf("Winbind domain-child AD-backend service time\n")
250 printf("============================================\n")
251 foreach ([name] in backend_svctime) {
252 printf("%-40s count: %5d, sum: %6d ms (min: %6d us, avg: %6d us, max: %6d us)\n",
253 name,
254 @count(backend_svctime[name]),
255 @sum(backend_svctime[name]) / 1000,
256 @min(backend_svctime[name]),
257 @avg(backend_svctime[name]),
258 @max(backend_svctime[name]))
260 printf("\n")
262 printf("Winbind request service time distributions (us)\n")
263 printf("===============================================\n")
264 foreach ([name] in async_svctime) {
265 printf("%s:\n", name);
266 println(@hist_log(async_svctime[name]))
268 printf("\n")
270 printf("Winbind request runtime distributions (us)\n")
271 printf("==========================================\n")
272 foreach ([name] in async_runtime) {
273 printf("%s:\n", name);
274 println(@hist_log(async_runtime[name]))
277 printf("Winbind domain-child request service time distributions (us)\n")
278 printf("============================================================\n")
279 foreach ([name] in dc_svctime) {
280 printf("%s:\n", name);
281 println(@hist_log(dc_svctime[name]))
284 printf("Winbind domain-child AD-backend service time distributions (us)\n")
285 printf("===============================================================\n")
286 foreach ([name] in backend_svctime) {
287 printf("%s:\n", name);
288 println(@hist_log(backend_svctime[name]))
292 cat <<EOF >$outfile
293 $header
296 printf "$child_funcs\n" | while read func; do
297 printf "$domchild_req_template\n" | sed -e s/XXX/$func/g >>$outfile
298 done
300 printf "$backend_funcs\n" | while read func; do
301 printf "$backend_req_template\n" | sed -e "s|XXX|$func|g" >>$outfile
302 done
304 printf "$async_funcs\n" | while read func; do
305 printf "$async_req_template\n" | sed -e s/XXX/$func/g >>$outfile
306 done
308 cat <<EOF >>$outfile
309 $footer