-
Notifications
You must be signed in to change notification settings - Fork 683
/
varnish_devicedetect
executable file
·133 lines (98 loc) · 2.61 KB
/
varnish_devicedetect
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/bin/sh
# -*- sh -*-
: <<EOF
=head1 NAME
varnish_devicedetect - Plugin to graph the device usage ratio of
website visitors
=head1 APPLICABLE SYSTEMS
Servers running varnish, and using the "varnish-devicedetect" VCL
(https://github.com/varnish/varnish-devicedetect)
=head1 CONFIGURATION
The plugin runs "varnishlog", and graphs the last 5 minutes of log
entries.
This configuration section shows the defaults of the plugin
=over 2
[varnish_devicedetect]
env.devices bot mobile-android mobile-iphone pc tablet-android tablet-ipad
=back
The "devices" list is a space separated list of devices, which should
match the headers set by the varnish-devicedect VCL.
=head1 INTERPRETATION
This plugin reads data from the Varnish shared memory log, and
presents a stacked percentage graph of the device types of your
website visitors for all entries present in the log, for the last 5
minutes.
The percentage shown per device is that of all devices, not just the
ones specified by env.devices.
=head1 AUTHOR
© 2012 - Stig Sandbeck Mathisen <ssm@fnord.no>
=head1 LICENSE
GPLv2
=head1 MAGIC MARKERS
#%# family=auto
#%# capabilities=autoconf
=cut
EOF
devices=${devices:-bot mobile-android mobile-iphone pc tablet-android tablet-ipad}
export devices
print_config() {
printf "graph_title Varnish device detection\n"
printf "graph_vlabel percent\n"
printf "graph_category webserver\n"
printf "graph_args --rigid --lower-limit 0 --upper-limit 100\n"
for device in $devices; do
printf "%s.label %s\n" $device $device
printf "%s.type GAUGE\n" $device
printf "%s.draw AREASTACK\n" $device
done
}
autoconf() {
if $(which varnishlog >/dev/null); then
printf "yes\n"
else
printf "no (no varnishlog in path)\n"
return 1
fi
}
print_values() {
varnishlog -d -i TxHeader -i ReqEnd -I X-UA-Device: \
| awk '
BEGIN {
start_time = systime() - 300
active = 0
# Initialize the devices array, so we print all, even the ones
# with zero value.
split(ENVIRON["devices"], devices)
for (device in devices) {
seen_devices[devices[device]] = 0
}
}
active == 0 && $2 == "ReqEnd" && $5 >= start_time {
active = 1
}
active == 1 && $2 == "TxHeader" && $4 == "X-UA-Device:" {
total++;
seen_devices[$5]++
}
END {
for (device in devices) {
if (total > 0)
percentage = seen_devices[devices[device]] / total * 100.0
else
percentage = 0
printf "%s.value %f\n", devices[device], percentage
}
}
'
}
case $1 in
autoconf)
autoconf
;;
config)
print_config
;;
*)
print_values
;;
esac