xref: /freebsd/cddl/usr.sbin/dwatch/libexec/systop (revision d0b2dbfa0ecf2bbc9709efc5e20baf8e4b44bbbf)
1*37b0d996SDevin Teske# -*- tab-width: 4 -*- ;; Emacs
2*37b0d996SDevin Teske# vi: set filetype=sh tabstop=8 shiftwidth=8 noexpandtab :: Vi/ViM
3*37b0d996SDevin Teske############################################################ IDENT(1)
4*37b0d996SDevin Teske#
5*37b0d996SDevin Teske# $Title: dwatch(8) profile for top-like syscall $
6*37b0d996SDevin Teske# $Copyright: 2014-2018 Devin Teske. All rights reserved. $
7*37b0d996SDevin Teske#
8*37b0d996SDevin Teske############################################################ DESCRIPTION
9*37b0d996SDevin Teske#
10*37b0d996SDevin Teske# Every 3 seconds update the screen with syscall consumers.
11*37b0d996SDevin Teske#
12*37b0d996SDevin Teske############################################################ PRAGMAS
13*37b0d996SDevin Teske
14*37b0d996SDevin Teske# Optional: You can override the default pragmas (shown below)
15*37b0d996SDevin Teske
16*37b0d996SDevin TeskeDTRACE_PRAGMA="
17*37b0d996SDevin Teske	option quiet
18*37b0d996SDevin Teske	option aggsortrev
19*37b0d996SDevin Teske" # END-QUOTE
20*37b0d996SDevin Teske
21*37b0d996SDevin Teske############################################################ PROBE
22*37b0d996SDevin Teske
23*37b0d996SDevin Teske: ${PROBE:=profile:::tick-3s}
24*37b0d996SDevin Teske
25*37b0d996SDevin Teske############################################################ ACTIONS
26*37b0d996SDevin Teske
27*37b0d996SDevin Teskeexec 9<<EOF
28*37b0d996SDevin TeskeBEGIN { printf("Sampling ...") } /* probe ID $ID */
29*37b0d996SDevin Teske
30*37b0d996SDevin Teskesyscall:::entry /* probe ID $(( $ID + 1 )) */
31*37b0d996SDevin Teske{
32*37b0d996SDevin Teske	@num[probefunc,execname] = count();
33*37b0d996SDevin Teske}
34*37b0d996SDevin Teske
35*37b0d996SDevin TeskeEND { trunc(@num) } /* probe ID $(( $ID + 2 )) */
36*37b0d996SDevin TeskeEOF
37*37b0d996SDevin TeskeACTIONS=$( cat <&9 )
38*37b0d996SDevin TeskeID=$(( $ID + 3 ))
39*37b0d996SDevin Teske
40*37b0d996SDevin Teske############################################################ EVENT TAG
41*37b0d996SDevin Teske
42*37b0d996SDevin Teske# The EVENT_TAG is run inside the print action after the timestamp has been
43*37b0d996SDevin Teske# printed. By default, `UID.GID CMD[PID]: ' of the process is printed.
44*37b0d996SDevin Teske#
45*37b0d996SDevin Teske# Here we override the default EVENT_TAG to include ANSI cursor-homing and
46*37b0d996SDevin Teske# screen-clearing codes.
47*37b0d996SDevin Teske
48*37b0d996SDevin Teskesize=$( stty size 2> /dev/null )
49*37b0d996SDevin Teskerows="${size%% *}"
50*37b0d996SDevin Teskecols="${size#* }"
51*37b0d996SDevin Teske
52*37b0d996SDevin Teskeexec 9<<EOF
53*37b0d996SDevin Teske	printf("\033[H"); /* Position the cursor at top-left */
54*37b0d996SDevin Teske	printf("\033[J"); /* Clear display from cursor to end */
55*37b0d996SDevin Teske
56*37b0d996SDevin Teske	/* Header line containing probe (left) and date (right) */
57*37b0d996SDevin Teske	printf("%-*s%s%Y%s\n",
58*37b0d996SDevin Teske		$(( ${cols:-80} - 20 )), "$PROBE",
59*37b0d996SDevin Teske		console ? "\033[32m" : "",
60*37b0d996SDevin Teske		walltimestamp,
61*37b0d996SDevin Teske		console ? "\033[39m" : "");
62*37b0d996SDevin Teske
63*37b0d996SDevin Teske	/* Column headers */
64*37b0d996SDevin Teske	printf("%s%8s %-20s %s%s\n",
65*37b0d996SDevin Teske		console ? "\033[1m" : "",
66*37b0d996SDevin Teske		"COUNT",
67*37b0d996SDevin Teske		"SYSCALL",
68*37b0d996SDevin Teske		"EXECNAME",
69*37b0d996SDevin Teske		console ? "\033[22m" : "");
70*37b0d996SDevin TeskeEOF
71*37b0d996SDevin TeskeEVENT_TAG=$( cat <&9 )
72*37b0d996SDevin Teske
73*37b0d996SDevin Teske############################################################ EVENT DETAILS
74*37b0d996SDevin Teske
75*37b0d996SDevin Teskeexec 9<<EOF
76*37b0d996SDevin Teske	printa("%@8u %-20s %s\n", @num);
77*37b0d996SDevin Teske	trunc(@num);
78*37b0d996SDevin TeskeEOF
79*37b0d996SDevin TeskeEVENT_DETAILS=$( cat <&9 )
80*37b0d996SDevin Teske
81*37b0d996SDevin Teske################################################################################
82*37b0d996SDevin Teske# END
83*37b0d996SDevin Teske################################################################################
84