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