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