dexplorer revision 1.1.1.1 1 1.1 christos #!/usr/bin/ksh
2 1.1 christos #
3 1.1 christos # dexplorer - DTrace system explorer, runs a collection of scripts.
4 1.1 christos # Written using DTrace (Solaris 10 3/05).
5 1.1 christos #
6 1.1 christos # This program automatically runs a collection of DTrace scripts to examine
7 1.1 christos # many areas of the system, and places the output in a meaningful directory
8 1.1 christos # structure that is tar'd and gzip'd.
9 1.1 christos #
10 1.1 christos # $Id: dexplorer,v 1.1.1.1 2015/09/30 22:01:07 christos Exp $
11 1.1 christos #
12 1.1 christos # USAGE: dexplorer [-yDT] [-d outputdir] [-i interval]
13 1.1 christos #
14 1.1 christos # -q # quiet mode
15 1.1 christos # -y # "yes", don't prompt for confirmation
16 1.1 christos # -D # don't delete output dir
17 1.1 christos # -T # don't create output tar.gz
18 1.1 christos # -d outputdir # output directory
19 1.1 christos # -i interval # interval for each sample
20 1.1 christos # eg,
21 1.1 christos # dexplorer # default is 5 second samples
22 1.1 christos # dexplorer -y -i30 # no prompting, with 30 second samples
23 1.1 christos #
24 1.1 christos # SEE ALSO: DTraceToolkit
25 1.1 christos #
26 1.1 christos # THANKS: David Visser, et all. for the idea and encouragement.
27 1.1 christos #
28 1.1 christos # COPYRIGHT: Copyright (c) 2005 Brendan Gregg.
29 1.1 christos #
30 1.1 christos # CDDL HEADER START
31 1.1 christos #
32 1.1 christos # The contents of this file are subject to the terms of the
33 1.1 christos # Common Development and Distribution License, Version 1.0 only
34 1.1 christos # (the "License"). You may not use this file except in compliance
35 1.1 christos # with the License.
36 1.1 christos #
37 1.1 christos # You can obtain a copy of the license at Docs/cddl1.txt
38 1.1 christos # or http://www.opensolaris.org/os/licensing.
39 1.1 christos # See the License for the specific language governing permissions
40 1.1 christos # and limitations under the License.
41 1.1 christos #
42 1.1 christos # CDDL HEADER END
43 1.1 christos #
44 1.1 christos # CODE:
45 1.1 christos #
46 1.1 christos # This is currently a monolithic script, and while it contains only
47 1.1 christos # a few dozen straigftforward DTrace scripts I think it's desirable to
48 1.1 christos # keep it that way. The scripts themselves have designed to be very
49 1.1 christos # generic (eg, switching on all sdt:::), and are aggregations to keep a
50 1.1 christos # limit on the size of the output.
51 1.1 christos #
52 1.1 christos # Author: Brendan Gregg [Sydney, Australia]
53 1.1 christos #
54 1.1 christos # 23-Jun-2005 Brendan Gregg Created this.
55 1.1 christos # 28-Jun-2005 " " Last update.
56 1.1 christos
57 1.1 christos #
58 1.1 christos # Default variables
59 1.1 christos #
60 1.1 christos interval=5 # time of each sample
61 1.1 christos verbose=1 # print screen output
62 1.1 christos prompt=1 # prompt before run
63 1.1 christos tar=1 # create tar file
64 1.1 christos delete=1 # delete output dirs
65 1.1 christos dtrace=/usr/sbin/dtrace # path to dtrace
66 1.1 christos root=. # default output dir
67 1.1 christos PATH=/usr/bin:/usr/sbin # safe path
68 1.1 christos dir=de_`uname -n`_`date +%Y%m%d%H%M` # OUTPUT FILENAME
69 1.1 christos samples=20 # max number of tests
70 1.1 christos current=0 # current sample
71 1.1 christos
72 1.1 christos #
73 1.1 christos # Process options
74 1.1 christos #
75 1.1 christos while getopts d:hi:qyDT name
76 1.1 christos do
77 1.1 christos case $name in
78 1.1 christos d) root=$OPTARG ;;
79 1.1 christos i) interval=$OPTARG ;;
80 1.1 christos q) verbose=0 ;;
81 1.1 christos y) prompt=0 ;;
82 1.1 christos D) delete=0 ;;
83 1.1 christos T) tar=0 ;;
84 1.1 christos h|?) cat <<-END >&2
85 1.1 christos USAGE: dexplorer [-qyDT] [-d outputdir] [-i interval]
86 1.1 christos
87 1.1 christos -q # quiet mode
88 1.1 christos -y # "yes", don't prompt for confirmation
89 1.1 christos -D # don't delete output dir
90 1.1 christos -T # don't create output tar.gz
91 1.1 christos -d outputdir # output directory
92 1.1 christos -i interval # interval for each sample
93 1.1 christos eg,
94 1.1 christos dexplorer # default is 5 second samples
95 1.1 christos dexplorer -y -i30 # no prompting, with 30 second samples
96 1.1 christos END
97 1.1 christos exit 1
98 1.1 christos esac
99 1.1 christos done
100 1.1 christos shift $(( OPTIND - 1 ))
101 1.1 christos
102 1.1 christos #
103 1.1 christos # Confirm path
104 1.1 christos #
105 1.1 christos if [[ "$prompt" == "1" ]] ; then
106 1.1 christos if [[ "$root" == "." ]]; then
107 1.1 christos print "Output dir will be the current dir ($PWD)."
108 1.1 christos else
109 1.1 christos print "Output dir will be $root"
110 1.1 christos fi
111 1.1 christos print -n "Hit enter for yes, or type path: "
112 1.1 christos read ans junk
113 1.1 christos if [[ "$ans" == [yY] || "$ans" == [yY]es ]]; then
114 1.1 christos print "WARNING: I didn't ask for \"$ans\"!"
115 1.1 christos print "\tI was asking for the path or just enter."
116 1.1 christos print "\tignoring \"$ans\"..."
117 1.1 christos fi
118 1.1 christos if [[ "$ans" != "" ]]; then
119 1.1 christos root=$ans
120 1.1 christos print "Output is now $root."
121 1.1 christos fi
122 1.1 christos fi
123 1.1 christos
124 1.1 christos #
125 1.1 christos # Sanity checks
126 1.1 christos #
127 1.1 christos if [[ "$interval" == *[a-zA-Z]* ]]; then
128 1.1 christos print "ERROR2: Invalid interval $interval.\n"
129 1.1 christos print "Please use a number of seconds."
130 1.1 christos exit 2
131 1.1 christos fi
132 1.1 christos if (( ${#interval} < 1 )); then
133 1.1 christos print "ERROR3: Length of interval $interval too short.\n"
134 1.1 christos print "Minimum 1 second."
135 1.1 christos exit 3
136 1.1 christos fi
137 1.1 christos if [[ ! -d "$root" ]]; then
138 1.1 christos print "ERROR4: Output directory \"$root\" does not exist.\n"
139 1.1 christos print "Perhaps try a mkdir first?"
140 1.1 christos print "or use an existing dir, eg \"/tmp\""
141 1.1 christos exit 4
142 1.1 christos fi
143 1.1 christos if [[ ! -w "$root" ]]; then
144 1.1 christos print "ERROR5: Can't write to output directory \"$root\".\n"
145 1.1 christos print "Are you logged in as root?"
146 1.1 christos print "Perhaps try another directory, eg \"/tmp\""
147 1.1 christos exit 5
148 1.1 christos fi
149 1.1 christos if [[ `$dtrace -b1k -qn 'BEGIN { trace(pid); exit(0); }'` == "" ]]; then
150 1.1 christos print "ERROR6: Unable to run dtrace!\n"
151 1.1 christos print "Perhaps this is a permission problem? Try running as root."
152 1.1 christos exit 6
153 1.1 christos fi
154 1.1 christos
155 1.1 christos # calculate total time
156 1.1 christos (( total = interval * samples ))
157 1.1 christos if (( total > 180 )); then
158 1.1 christos (( total = total / 60 ))
159 1.1 christos total="$total minutes"
160 1.1 christos else
161 1.1 christos total="$total seconds"
162 1.1 christos fi
163 1.1 christos
164 1.1 christos #
165 1.1 christos # Common Functions
166 1.1 christos #
167 1.1 christos function decho {
168 1.1 christos if (( verbose )); then print "$*"; fi
169 1.1 christos }
170 1.1 christos clean="sed /^\$/d"
171 1.1 christos header='dtrace:::BEGIN {
172 1.1 christos printf("%Y, ", walltimestamp);
173 1.1 christos printf("%s %s %s %s %s, ", `utsname.sysname, `utsname.nodename,
174 1.1 christos `utsname.release, `utsname.version, `utsname.machine);
175 1.1 christos printf("%d secs\n",'$interval');
176 1.1 christos }
177 1.1 christos profile:::tick-'$interval'sec { exit(0); }
178 1.1 christos '
179 1.1 christos function dstatus {
180 1.1 christos if (( verbose )); then
181 1.1 christos (( percent = current * 100 / samples ))
182 1.1 christos printf "%3d%% $*\n" $percent
183 1.1 christos (( current = current + 1 ))
184 1.1 christos fi
185 1.1 christos }
186 1.1 christos
187 1.1 christos ########################################
188 1.1 christos # START #
189 1.1 christos ########################################
190 1.1 christos
191 1.1 christos #
192 1.1 christos # Make dirs
193 1.1 christos #
194 1.1 christos err=0
195 1.1 christos cd $root
196 1.1 christos (( err = err + $? ))
197 1.1 christos mkdir $dir
198 1.1 christos (( err = err + $? ))
199 1.1 christos cd $dir
200 1.1 christos (( err = err + $? ))
201 1.1 christos base1=${PWD##*/}
202 1.1 christos base2=${dir##*/}
203 1.1 christos if [[ "$base1" != "$base2" || "$err" != "0" ]]; then
204 1.1 christos print "ERROR7: tried to mkdir $dir from $root, but something failed.\n"
205 1.1 christos print "Check directories before rerunning."
206 1.1 christos exit 7
207 1.1 christos fi
208 1.1 christos mkdir Cpu
209 1.1 christos mkdir Disk
210 1.1 christos mkdir Mem
211 1.1 christos mkdir Net
212 1.1 christos mkdir Proc
213 1.1 christos mkdir Info
214 1.1 christos
215 1.1 christos #
216 1.1 christos # Create Log
217 1.1 christos #
218 1.1 christos decho "Starting dexplorer ver 0.76."
219 1.1 christos decho "Sample interval is $interval seconds. Total run is > $total."
220 1.1 christos ( print "dexplorer ver 0.76\n------------------"
221 1.1 christos print -n "System: "
222 1.1 christos uname -a
223 1.1 christos print -n "Start: "
224 1.1 christos date ) > log
225 1.1 christos
226 1.1 christos #
227 1.1 christos # Capture Standard Info
228 1.1 christos #
229 1.1 christos args='pid,ppid,uid,gid,projid,zoneid,pset,pri,nice,'
230 1.1 christos args=$args'class,vsz,rss,time,pcpu,pmem,args'
231 1.1 christos uname -a > Info/uname-a # System
232 1.1 christos psrinfo -v > Info/psrinfo-v # CPU
233 1.1 christos prtconf > Info/prtconf # Memory (+ devices)
234 1.1 christos df -k > Info/df-k # Disk
235 1.1 christos ifconfig -a > Info/ifconfig-a # Network
236 1.1 christos ps -eo $args > Info/ps-o # Processes
237 1.1 christos uptime > Info/uptime # Load
238 1.1 christos
239 1.1 christos #
240 1.1 christos # Cpu Tests, DTrace
241 1.1 christos #
242 1.1 christos
243 1.1 christos dstatus "Interrupts by CPU..."
244 1.1 christos $dtrace -qn "$header"'
245 1.1 christos sdt:::interrupt-start { @num[cpu] = count(); }
246 1.1 christos dtrace:::END
247 1.1 christos {
248 1.1 christos printf("%-16s %16s\n", "CPU", "INTERRUPTS");
249 1.1 christos printa("%-16d %@16d\n", @num);
250 1.1 christos }
251 1.1 christos ' | $clean > Cpu/interrupt_by_cpu
252 1.1 christos
253 1.1 christos dstatus "Interrupt times..."
254 1.1 christos $dtrace -qn "$header"'
255 1.1 christos sdt:::interrupt-start { self->ts = vtimestamp; }
256 1.1 christos sdt:::interrupt-complete
257 1.1 christos /self->ts && arg0 != 0/
258 1.1 christos {
259 1.1 christos this->devi = (struct dev_info *)arg0;
260 1.1 christos self->name = this->devi != 0 ?
261 1.1 christos stringof(`devnamesp[this->devi->devi_major].dn_name) : "?";
262 1.1 christos this->inst = this->devi != 0 ? this->devi->devi_instance : 0;
263 1.1 christos @num[self->name, this->inst] = sum(vtimestamp - self->ts);
264 1.1 christos self->name = 0;
265 1.1 christos }
266 1.1 christos sdt:::interrupt-complete { self->ts = 0; }
267 1.1 christos dtrace:::END
268 1.1 christos {
269 1.1 christos printf("%11s %16s\n", "DEVICE", "TIME (ns)");
270 1.1 christos printa("%10s%-3d %@16d\n", @num);
271 1.1 christos }
272 1.1 christos ' | $clean > Cpu/interrupt_time
273 1.1 christos
274 1.1 christos dstatus "Dispatcher queue length by CPU..."
275 1.1 christos $dtrace -qn "$header"'
276 1.1 christos profile:::profile-1000
277 1.1 christos {
278 1.1 christos this->num = curthread->t_cpu->cpu_disp->disp_nrunnable;
279 1.1 christos @length[cpu] = lquantize(this->num, 0, 100, 1);
280 1.1 christos }
281 1.1 christos dtrace:::END { printa(" CPU %d%@d\n", @length); }
282 1.1 christos ' | $clean > Cpu/dispqlen_by_cpu
283 1.1 christos
284 1.1 christos dstatus "Sdt counts..."
285 1.1 christos $dtrace -qn "$header"'
286 1.1 christos sdt:::{ @num[probefunc, probename] = count(); }
287 1.1 christos dtrace:::END
288 1.1 christos {
289 1.1 christos printf("%-32s %-32s %10s\n", "FUNC", "NAME", "COUNT");
290 1.1 christos printa("%-32s %-32s %@10d\n", @num);
291 1.1 christos }
292 1.1 christos ' | $clean > Cpu/sdt_count
293 1.1 christos
294 1.1 christos #
295 1.1 christos # Disk Tests, DTrace
296 1.1 christos #
297 1.1 christos
298 1.1 christos dstatus "Pages paged in by process..."
299 1.1 christos $dtrace -qn "$header"'
300 1.1 christos vminfo:::pgpgin { @pg[pid, execname] = sum(arg0); }
301 1.1 christos dtrace:::END
302 1.1 christos {
303 1.1 christos printf("%6s %-16s %16s\n", "PID", "CMD", "PAGES");
304 1.1 christos printa("%6d %-16s %@16d\n", @pg);
305 1.1 christos }
306 1.1 christos ' | $clean > Disk/pgpgin_by_process
307 1.1 christos
308 1.1 christos dstatus "Files opened successfully count..."
309 1.1 christos $dtrace -qn "$header"'
310 1.1 christos syscall::open*:entry { self->file = copyinstr(arg0); self->ok = 1; }
311 1.1 christos syscall::open*:return /self->ok && arg0 != -1/
312 1.1 christos {
313 1.1 christos @num[self->file] = count();
314 1.1 christos }
315 1.1 christos syscall::open*:return /self->ok/ { self->file = 0; self->ok = 0; }
316 1.1 christos dtrace:::END
317 1.1 christos {
318 1.1 christos printf("%-64s %8s\n", "FILE", "COUNT");
319 1.1 christos printa("%-64s %@8d\n", @num);
320 1.1 christos }
321 1.1 christos ' | $clean > Disk/fileopen_count
322 1.1 christos
323 1.1 christos dstatus "Disk I/O size distribution by process..."
324 1.1 christos $dtrace -qn "$header"'
325 1.1 christos io:::start { @size[pid, execname] = quantize(args[0]->b_bcount); }
326 1.1 christos ' | $clean > Disk/sizedist_by_process
327 1.1 christos
328 1.1 christos #
329 1.1 christos # Mem Tests, DTrace
330 1.1 christos #
331 1.1 christos
332 1.1 christos dstatus "Minor faults by process..."
333 1.1 christos $dtrace -qn "$header"'
334 1.1 christos vminfo:::as_fault { @mem[pid, execname] = sum(arg0); }
335 1.1 christos dtrace:::END
336 1.1 christos {
337 1.1 christos printf("%6s %-16s %16s\n", "PID", "CMD", "MINFAULTS");
338 1.1 christos printa("%6d %-16s %@16d\n", @mem);
339 1.1 christos }
340 1.1 christos ' | $clean > Mem/minf_by_process
341 1.1 christos
342 1.1 christos
343 1.1 christos dstatus "Vminfo data by process..."
344 1.1 christos $dtrace -qn "$header"'
345 1.1 christos vminfo::: { @data[pid, execname, probename] = sum(arg0); }
346 1.1 christos dtrace:::END
347 1.1 christos {
348 1.1 christos printf("%6s %-16s %-16s %16s\n",
349 1.1 christos "PID", "CMD", "STATISTIC", "VALUE");
350 1.1 christos printa("%6d %-16s %-16s %@16d\n", @data);
351 1.1 christos }
352 1.1 christos ' | $clean > Mem/vminfo_by_process
353 1.1 christos
354 1.1 christos #
355 1.1 christos # Net Tests, DTrace
356 1.1 christos #
357 1.1 christos
358 1.1 christos dstatus "Mib data by mib statistic..."
359 1.1 christos $dtrace -qn "$header"'
360 1.1 christos mib::: { @data[probename] = sum(arg0); }
361 1.1 christos dtrace:::END
362 1.1 christos {
363 1.1 christos printf("%-32s %16s\n", "STATISTIC", "VALUE");
364 1.1 christos printa("%-32s %@16d\n", @data);
365 1.1 christos }
366 1.1 christos ' | $clean > Net/mib_data
367 1.1 christos
368 1.1 christos dstatus "TCP write bytes by process..."
369 1.1 christos $dtrace -qn "$header"'
370 1.1 christos fbt:ip:tcp_output:entry
371 1.1 christos {
372 1.1 christos this->size = msgdsize(args[1]);
373 1.1 christos @size[pid, execname] = sum(this->size);
374 1.1 christos }
375 1.1 christos dtrace:::END
376 1.1 christos {
377 1.1 christos printf("%6s %-16s %12s\n", "PID", "CMD", "BYTES");
378 1.1 christos printa("%6d %-16s %@12d\n", @size);
379 1.1 christos }
380 1.1 christos ' | $clean > Net/tcpw_by_process
381 1.1 christos
382 1.1 christos #
383 1.1 christos # Proc Tests, DTrace
384 1.1 christos #
385 1.1 christos
386 1.1 christos dstatus "Sample process @ 1000 Hz..."
387 1.1 christos $dtrace -qn "$header"'
388 1.1 christos profile:::profile-1000
389 1.1 christos {
390 1.1 christos @num[pid, curpsinfo->pr_psargs] = count();
391 1.1 christos }
392 1.1 christos dtrace:::END
393 1.1 christos {
394 1.1 christos printf("%6s %12s %s\n", "PID", "SAMPLES", "ARGS");
395 1.1 christos printa("%6d %@12d %S\n", @num);
396 1.1 christos }
397 1.1 christos ' | $clean > Proc/sample_process
398 1.1 christos
399 1.1 christos dstatus "Syscall count by process..."
400 1.1 christos $dtrace -qn "$header"'
401 1.1 christos syscall:::entry { @num[pid, execname, probefunc] = count(); }
402 1.1 christos dtrace:::END
403 1.1 christos {
404 1.1 christos printf("%6s %-24s %-24s %8s\n",
405 1.1 christos "PID", "CMD", "SYSCALL", "COUNT");
406 1.1 christos printa("%6d %-24s %-24s %@8d\n", @num);
407 1.1 christos }
408 1.1 christos ' | $clean > Proc/syscall_by_process
409 1.1 christos
410 1.1 christos dstatus "Syscall count by syscall..."
411 1.1 christos $dtrace -qn "$header"'
412 1.1 christos syscall:::entry { @num[probefunc] = count(); }
413 1.1 christos dtrace:::END
414 1.1 christos {
415 1.1 christos printf("%-32s %16s\n", "SYSCALL", "COUNT");
416 1.1 christos printa("%-32s %@16d\n", @num);
417 1.1 christos }
418 1.1 christos ' | $clean > Proc/syscall_count
419 1.1 christos
420 1.1 christos dstatus "Read bytes by process..."
421 1.1 christos $dtrace -qn "$header"'
422 1.1 christos sysinfo:::readch { @bytes[pid, execname] = sum(arg0); }
423 1.1 christos dtrace:::END
424 1.1 christos {
425 1.1 christos printf("%6s %-16s %16s\n", "PID", "CMD", "BYTES");
426 1.1 christos printa("%6d %-16s %@16d\n", @bytes);
427 1.1 christos }
428 1.1 christos ' | $clean > Proc/readb_by_process
429 1.1 christos
430 1.1 christos dstatus "Write bytes by process..."
431 1.1 christos $dtrace -qn "$header"'
432 1.1 christos sysinfo:::writech { @bytes[pid, execname] = sum(arg0); }
433 1.1 christos dtrace:::END
434 1.1 christos {
435 1.1 christos printf("%6s %-16s %16s\n", "PID", "CMD", "BYTES");
436 1.1 christos printa("%6d %-16s %@16d\n", @bytes);
437 1.1 christos }
438 1.1 christos ' | $clean > Proc/writeb_by_process
439 1.1 christos
440 1.1 christos dstatus "Sysinfo counts by process..."
441 1.1 christos $dtrace -qn "$header"'
442 1.1 christos sysinfo::: { @num[pid, execname, probename] = sum(arg0); }
443 1.1 christos dtrace:::END
444 1.1 christos {
445 1.1 christos printf("%6s %-16s %-16s %16s\n",
446 1.1 christos "PID", "CMD", "STATISTIC", "COUNT");
447 1.1 christos printa("%6d %-16s %-16s %@16d\n", @num);
448 1.1 christos }
449 1.1 christos ' | $clean > Proc/sysinfo_by_process
450 1.1 christos
451 1.1 christos dstatus "New process counts with arguments..."
452 1.1 christos $dtrace -qn "$header"'
453 1.1 christos proc:::exec-success
454 1.1 christos {
455 1.1 christos @num[pid, ppid, curpsinfo->pr_psargs] = count();
456 1.1 christos }
457 1.1 christos dtrace:::END
458 1.1 christos {
459 1.1 christos printf("%6s %6s %8s %s\n", "PID", "PPID", "COUNT", "ARGS");
460 1.1 christos printa("%6d %6d %@8d %S\n", @num);
461 1.1 christos }
462 1.1 christos ' | $clean > Proc/newprocess_count
463 1.1 christos
464 1.1 christos dstatus "Signal counts..."
465 1.1 christos $dtrace -qn "$header"'
466 1.1 christos proc:::signal-send {
467 1.1 christos @num[execname,args[2],stringof(args[1]->pr_fname)] = count();
468 1.1 christos }
469 1.1 christos dtrace:::END
470 1.1 christos {
471 1.1 christos printf("%-16s %-8s %-16s %8s\n",
472 1.1 christos "FROM", "SIG", "TO", "COUNT");
473 1.1 christos printa("%-16s %-8d %-16s %@8d\n", @num);
474 1.1 christos }
475 1.1 christos ' | $clean > Proc/signal_count
476 1.1 christos
477 1.1 christos dstatus "Syscall error counts..."
478 1.1 christos $dtrace -qn "$header"'
479 1.1 christos syscall:::return /(int)arg0 == -1/
480 1.1 christos {
481 1.1 christos @num[pid, execname, probefunc, errno] = count();
482 1.1 christos }
483 1.1 christos dtrace:::END
484 1.1 christos {
485 1.1 christos printf("%6s %-16s %-32s %-6s %8s\n",
486 1.1 christos "PID", "CMD", "SYSCALL", "ERRNO", "COUNT");
487 1.1 christos printa("%6d %-16s %-32s %-6d %@8d\n", @num);
488 1.1 christos }
489 1.1 christos ' | $clean > Proc/syscall_errors
490 1.1 christos
491 1.1 christos
492 1.1 christos ###########
493 1.1 christos # Done
494 1.1 christos #
495 1.1 christos ( print -n "End: "
496 1.1 christos date ) >> log
497 1.1 christos decho "100% Done."
498 1.1 christos if (( tar )); then
499 1.1 christos cd ..
500 1.1 christos tar cf $dir.tar $dir
501 1.1 christos gzip $dir.tar
502 1.1 christos decho "File is $dir.tar.gz"
503 1.1 christos fi
504 1.1 christos if (( delete && tar )); then
505 1.1 christos cd $dir
506 1.1 christos # this could be all an "rm -r $dir", but since it will be run
507 1.1 christos # as root on production servers - lets be analy cautious,
508 1.1 christos rm Cpu/interrupt_by_cpu
509 1.1 christos rm Cpu/interrupt_time
510 1.1 christos rm Cpu/dispqlen_by_cpu
511 1.1 christos rm Cpu/sdt_count
512 1.1 christos rm Disk/pgpgin_by_process
513 1.1 christos rm Disk/fileopen_count
514 1.1 christos rm Disk/sizedist_by_process
515 1.1 christos rm Mem/minf_by_process
516 1.1 christos rm Mem/vminfo_by_process
517 1.1 christos rm Net/mib_data
518 1.1 christos rm Net/tcpw_by_process
519 1.1 christos rm Proc/sample_process
520 1.1 christos rm Proc/syscall_by_process
521 1.1 christos rm Proc/syscall_count
522 1.1 christos rm Proc/readb_by_process
523 1.1 christos rm Proc/writeb_by_process
524 1.1 christos rm Proc/sysinfo_by_process
525 1.1 christos rm Proc/newprocess_count
526 1.1 christos rm Proc/signal_count
527 1.1 christos rm Proc/syscall_errors
528 1.1 christos rmdir Cpu
529 1.1 christos rmdir Disk
530 1.1 christos rmdir Mem
531 1.1 christos rmdir Net
532 1.1 christos rmdir Proc
533 1.1 christos rm Info/uname-a
534 1.1 christos rm Info/psrinfo-v
535 1.1 christos rm Info/prtconf
536 1.1 christos rm Info/df-k
537 1.1 christos rm Info/ifconfig-a
538 1.1 christos rm Info/ps-o
539 1.1 christos rm Info/uptime
540 1.1 christos rmdir Info
541 1.1 christos rm log
542 1.1 christos cd ..
543 1.1 christos rmdir $dir
544 1.1 christos else
545 1.1 christos decho "Directory is $dir"
546 1.1 christos fi
547 1.1 christos
548