Ema has submitted this change and it was merged.
Change subject: varnish: rename scripts depending on varnishlog.py
......................................................................
varnish: rename scripts depending on varnishlog.py
We do not need to have two different versions of the python varnishlog
scripts now that the upgrade to Varnish 4 is finished.
Bug: T150660
Change-Id: I5b1024c268a9ddf21d5596bc5338d54e9286ea97
---
M modules/varnish/files/varnishmedia
D modules/varnish/files/varnishmedia4
M modules/varnish/files/varnishprocessor/varnishprocessor.py
D modules/varnish/files/varnishprocessor4/__init__.py
D modules/varnish/files/varnishprocessor4/varnishprocessor.py
M modules/varnish/files/varnishreqstats
D modules/varnish/files/varnishreqstats4
M modules/varnish/files/varnishrls
D modules/varnish/files/varnishrls4
M modules/varnish/files/varnishstatsd
D modules/varnish/files/varnishstatsd4
M modules/varnish/files/varnishxcache
D modules/varnish/files/varnishxcache4
M modules/varnish/files/varnishxcps
D modules/varnish/files/varnishxcps4
M modules/varnish/manifests/common.pp
M modules/varnish/manifests/logging/media.pp
M modules/varnish/manifests/logging/reqstats.pp
M modules/varnish/manifests/logging/rls.pp
M modules/varnish/manifests/logging/statsd.pp
M modules/varnish/manifests/logging/xcache.pp
M modules/varnish/manifests/logging/xcps.pp
22 files changed, 80 insertions(+), 1,014 deletions(-)
Approvals:
Ema: Verified; Looks good to me, approved
diff --git a/modules/varnish/files/varnishmedia
b/modules/varnish/files/varnishmedia
index 2466134..27a0535 100755
--- a/modules/varnish/files/varnishmedia
+++ b/modules/varnish/files/varnishmedia
@@ -42,7 +42,7 @@
def process_transaction(self, transaction):
"""Process a single completed transaction."""
- status_code = transaction.get('TxStatus')
+ status_code = transaction.get('RespStatus')
if status_code is None:
return
@@ -56,11 +56,11 @@
def start(self):
varnishlog.varnishlog((
- ('m', 'RxURL:/thumb/'), # Only look at thumb requests
- ('n', 'frontend'), # Consider the frontend Varnish instance
- ('i', 'TxStatus'), # Get TxStatus for the HTTP status code
- ('i', 'RxURL'), # Get RxURL to delimit requests
- ('i', 'ReqEnd'), # Get ReqEnd to delimit requests
+ ('q', 'ReqURL ~ "/thumb/"'), # Only look at thumb requests
+ ('n', 'frontend'), # Only frontend Varnish instance
+ ('i', 'RespStatus'), # RespStatus for the HTTP status code
+ ('i', 'ReqURL'), # ReqURL to delimit requests
+ ('i', 'Timestamp'), # Timestamp to delimit requests
), self.handle_log_record)
lp = MediaVarnishLogProcessor()
diff --git a/modules/varnish/files/varnishmedia4
b/modules/varnish/files/varnishmedia4
deleted file mode 100755
index 27a0535..0000000
--- a/modules/varnish/files/varnishmedia4
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-"""
- varnishmedia
- ~~~~~~~~~~~~
-
- Accumulate browser cache hit ratio and total request volume statistics
- for media requests and report to StatsD.
-
- Usage: varnishmedia [--statsd-server SERVER] [--key-prefix PREFIX]
-
- --statsd-server SERVER statsd server (default: none; echo to stdout)
- --key-prefix PREFIX metric key prefix (default:
media.thumbnail.varnish)
-
- Copyright 2015 Ori Livneh <[email protected]>
- Copyright 2015 Gilles Dubuc <[email protected]>
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-"""
-from __future__ import division
-
-import re
-
-import varnishlog
-import varnishprocessor
-
-
-class MediaVarnishLogProcessor(varnishprocessor.VarnishLogProcessor):
- description = 'Media Browser Cache Hit Ratio StatsD Reporter'
- key_prefix = 'media.thumbnail.varnish'
-
- def process_transaction(self, transaction):
- """Process a single completed transaction."""
- status_code = transaction.get('RespStatus')
- if status_code is None:
- return
-
- metric_keys = ['reqs.all', 'resps.' + status_code]
-
- for key in metric_keys:
- self.stats[key] = self.stats.get(key, 0) + 1
-
- if self.stats['reqs.all'] > 10000:
- self.flush_stats()
-
- def start(self):
- varnishlog.varnishlog((
- ('q', 'ReqURL ~ "/thumb/"'), # Only look at thumb requests
- ('n', 'frontend'), # Only frontend Varnish instance
- ('i', 'RespStatus'), # RespStatus for the HTTP status code
- ('i', 'ReqURL'), # ReqURL to delimit requests
- ('i', 'Timestamp'), # Timestamp to delimit requests
- ), self.handle_log_record)
-
-lp = MediaVarnishLogProcessor()
diff --git a/modules/varnish/files/varnishprocessor/varnishprocessor.py
b/modules/varnish/files/varnishprocessor/varnishprocessor.py
index 099a735..e286093 100644
--- a/modules/varnish/files/varnishprocessor/varnishprocessor.py
+++ b/modules/varnish/files/varnishprocessor/varnishprocessor.py
@@ -63,13 +63,13 @@
def handle_log_record(self, transaction_id, tag, record, remote_party):
"""VSL_handler_f callback function."""
- if tag == 'RxURL':
+ if tag == 'ReqURL':
# RxURL is the first tag we expect. If there are any existing
# records for this transaction ID, we clear them away.
self.transactions[transaction_id] = {tag: record}
- elif tag == 'ReqEnd':
- # ReqEnd is the last tag we expect. We pop the transaction's
- # records from the buffer and process it.
+ elif tag == 'Timestamp' and 'Resp' in record:
+ # This is the last tag we expect. We pop the transaction's records
+ # from the buffer and process it.
transaction = self.transactions.pop(transaction_id, None)
if transaction is not None:
transaction[tag] = record
diff --git a/modules/varnish/files/varnishprocessor4/__init__.py
b/modules/varnish/files/varnishprocessor4/__init__.py
deleted file mode 100644
index c73bf42..0000000
--- a/modules/varnish/files/varnishprocessor4/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from .varnishprocessor import VarnishLogProcessor # noqa
diff --git a/modules/varnish/files/varnishprocessor4/varnishprocessor.py
b/modules/varnish/files/varnishprocessor4/varnishprocessor.py
deleted file mode 100644
index e286093..0000000
--- a/modules/varnish/files/varnishprocessor4/varnishprocessor.py
+++ /dev/null
@@ -1,115 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- VarnishLogProcessor
- ~~~~~~~~~~~~~~~~~~~
-
- Processes Varnish log data and sends the output to statsd
-
- Copyright 2015 Ori Livneh <[email protected]>
- Copyright 2015 Gilles Dubuc <[email protected]>
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-"""
-import argparse
-import io
-import socket
-import urlparse
-
-
-class VarnishLogProcessor:
- description = 'Varnish Log Processor'
- key_prefix = None
- statsd_server = None
-
- def __init__(self):
- ap = argparse.ArgumentParser(
- description=self.description,
- epilog='If no statsd server is specified, prints stats to stdout.'
- )
-
- print self.key_prefix
-
- ap.add_argument('--key-prefix', help='metric key prefix',
- type=parse_prefix_string, default=self.key_prefix)
- ap.add_argument('--statsd-server', help='statsd server',
- type=parse_statsd_server_string, default=None)
- args = ap.parse_args()
-
- if args.key_prefix is not None:
- self.key_prefix = args.key_prefix
-
- if args.statsd_server is not None:
- self.statsd_server = args.statsd_server
-
- if self.statsd_server:
- self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-
- self.stats = {}
- self.transactions = {}
-
- self.start()
-
- def handle_log_record(self, transaction_id, tag, record, remote_party):
- """VSL_handler_f callback function."""
-
- if tag == 'ReqURL':
- # RxURL is the first tag we expect. If there are any existing
- # records for this transaction ID, we clear them away.
- self.transactions[transaction_id] = {tag: record}
- elif tag == 'Timestamp' and 'Resp' in record:
- # This is the last tag we expect. We pop the transaction's records
- # from the buffer and process it.
- transaction = self.transactions.pop(transaction_id, None)
- if transaction is not None:
- transaction[tag] = record
- self.process_transaction(transaction)
- else:
- # All other tags are buffered.
- transaction = self.transactions.get(transaction_id)
- if transaction is not None:
- transaction[tag] = record
- return 0
-
- def flush_stats(self):
- """Flush metrics to standard out or statsd server."""
- buf = io.BytesIO()
- while self.stats:
- key, value = self.stats.popitem()
- metric = '%s.%s:%s|c\n' % (self.key_prefix, key, value)
- buf.write(metric.encode('utf-8'))
- buf.seek(io.SEEK_SET)
- if self.statsd_server:
- self.sock.sendto(buf.read(), self.statsd_server)
- else:
- print(buf.read().decode('utf-8').rstrip())
-
- def process_transaction(self, transaction):
- pass
-
- def start():
- pass
-
-
-def parse_statsd_server_string(server_string):
- parsed = urlparse.urlparse('//' + server_string)
- return parsed.hostname, parsed.port or 8125
-
-
-def parse_prefix_string(prefix):
- print prefix
-
- prefix = prefix.strip('.')
- if not prefix:
- raise ValueError('Key prefix must not be empty')
- return prefix
diff --git a/modules/varnish/files/varnishreqstats
b/modules/varnish/files/varnishreqstats
index 9ed812d..3917878 100755
--- a/modules/varnish/files/varnishreqstats
+++ b/modules/varnish/files/varnishreqstats
@@ -8,7 +8,8 @@
- HTTP Status type (ok, error)
- HTTP Method (GET, POST, etc.)
- Copyright 2015 Andrew Otto <[email protected]>
+ Copyright 2015-2016 Andrew Otto <[email protected]>
+ 2016 Emanuele Rocca <[email protected]>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -110,6 +111,7 @@
for k in counts.keys():
statsd_pipe.incr(k, counts[k])
+
def reset_counts():
"""
Resets the global counts and last_published_at
@@ -118,6 +120,7 @@
global counts, last_published_at
counts = copy.deepcopy(default_counts)
last_published_at = time.time()
+
def count_vsl_entries(
vsl_args,
@@ -154,11 +157,11 @@
return
# Count the http request method
- if tag in ['TxRequest', 'RxRequest'] and is_valid_http_method(value):
+ if tag in ['BereqMethod', 'ReqMethod'] and is_valid_http_method(value):
counts[remote_party + '.method.' + value.lower()] += 1
# Count the http response status
- elif tag in ['RxStatus', 'TxStatus'] and is_valid_http_status(value):
+ elif tag in ['BerespStatus', 'RespStatus'] and
is_valid_http_status(value):
key_prefix = remote_party + '.status.'
counts[key_prefix + value[0] + 'xx'] += 1
@@ -173,7 +176,11 @@
counts[key_prefix + 'error'] += 1
# Thesee indicates we completed a request, count it.
- elif tag in ['ReqEnd', 'BackendClose', 'BackendReuse']:
+ elif tag in ['BackendClose', 'BackendReuse']:
+ counts[remote_party + '.total'] += 1
+
+ # There is no ReqEnd in v4, let's use Timestamp for Resp
+ elif tag == 'Timestamp' and 'Resp' in value:
counts[remote_party + '.total'] += 1
# If interval seconds have passed, publish counts
@@ -204,11 +211,11 @@
arguments = parser.parse_args()
vsl_args = [
- ('i', 'TxRequest'),
- ('i', 'RxStatus'),
- ('i', 'RxRequest'),
- ('i', 'TxStatus'),
- ('i', 'ReqEnd'),
+ ('i', 'BereqMethod'),
+ ('i', 'BerespStatus'),
+ ('i', 'ReqMethod'),
+ ('i', 'RespStatus'),
+ ('i', 'Timestamp'),
('i', 'BackendClose'),
('i', 'BackendReuse')
]
@@ -235,7 +242,7 @@
# ##### Tests ######
# To run:
-# python -m unittest varnishstats-diamond-collector
+# python -m unittest varnishreqstats
#
# This requires that varnishlog.test.data is present
# in the current directory. It contains 100 entries
diff --git a/modules/varnish/files/varnishreqstats4
b/modules/varnish/files/varnishreqstats4
deleted file mode 100755
index 1deb221..0000000
--- a/modules/varnish/files/varnishreqstats4
+++ /dev/null
@@ -1,278 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-"""
-Reads varnish shared logs and emits counts for the following:
- - Total requests
- - HTTP Status Code (200, 404, etc.)
- - HTTP Status Code Class (2xx, 3xx, etc.)
- - HTTP Status type (ok, error)
- - HTTP Method (GET, POST, etc.)
-
- Copyright 2015-2016 Andrew Otto <[email protected]>
- 2016 Emanuele Rocca <[email protected]>
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- Author: Andrew Otto
-
-"""
-import argparse
-import copy
-import datetime
-import statsd
-import sys
-import time
-import unittest
-
-from varnishlog import varnishlog
-
-valid_http_methods = (
- 'get',
- 'head',
- 'post',
- 'put',
- 'delete',
- 'trace',
- 'connect',
- 'options',
- 'purge',
-)
-
-# Initialize a dict of default counts
-# we will always report.
-default_counts = {
- 'backend.status.1xx': 0,
- 'backend.status.2xx': 0,
- 'backend.status.3xx': 0,
- 'backend.status.4xx': 0,
- 'backend.status.5xx': 0,
- 'backend.status.ok': 0,
- 'backend.status.error': 0,
- 'backend.total': 0,
-
- 'client.status.1xx': 0,
- 'client.status.2xx': 0,
- 'client.status.3xx': 0,
- 'client.status.4xx': 0,
- 'client.status.5xx': 0,
- 'client.status.ok': 0,
- 'client.status.error': 0,
- 'client.total': 0,
-}
-# Include valid http_methods in default_counts.
-for m in valid_http_methods:
- default_counts['backend.method.' + m] = 0
- default_counts['client.method.' + m] = 0
-
-
-def is_valid_http_method(m):
- """
- Returns True if m is in the list of valid_http_methods.
- """
- return m.lower() in valid_http_methods
-
-
-def is_valid_http_status(s):
- """
- Returns True if s is in a valid HTTP status range.
- """
- try:
- return 100 <= int(s) < 600
- except ValueError:
- return False
-
-
-def print_counts(counts):
- """
- Formats and prints out the contents of the counts dict.
- """
- keys = counts.keys()
- keys.sort()
- print(
- datetime.datetime.now().strftime('%Y-%m-%dT%H:%M:%S').center(31, '-')
- )
- for k in keys:
- print("{0} {1}".format(str(counts[k]).rjust(10), k))
- print('')
-
-
-def publish_statsd_counts(statsd_client, counts):
- with statsd_client.pipeline() as statsd_pipe:
- for k in counts.keys():
- statsd_pipe.incr(k, counts[k])
-
-
-def reset_counts():
- """
- Resets the global counts and last_published_at
- variables.
- """
- global counts, last_published_at
- counts = copy.deepcopy(default_counts)
- last_published_at = time.time()
-
-
-def count_vsl_entries(
- vsl_args,
- interval=60,
- verbose=False,
- statsd_client=None
-):
- """
- Starts varnishlog and stores counts for http status
- and http method in the global counts dict. If varnishlog
- finshes (because vsl_args has -k or -r). Every interval
- seconds, counts will either be printed or sent to statsd.
-
- """
-
- # These need to be global, since they will be reset by
- # count_vsl_entry_callback and we don't want them to
- # end up in local scope.
- global counts, last_published_at
-
- # Initialize the global counts dict and reset
- # the last_published_at timestamp.
- reset_counts()
-
- def count_vsl_entry_callback(
- transaction_id,
- tag,
- value,
- remote_party
- ):
- global counts, last_published_at
-
- if remote_party not in ['backend', 'client']:
- return
-
- # Count the http request method
- if tag in ['BereqMethod', 'ReqMethod'] and is_valid_http_method(value):
- counts[remote_party + '.method.' + value.lower()] += 1
-
- # Count the http response status
- elif tag in ['BerespStatus', 'RespStatus'] and
is_valid_http_status(value):
- key_prefix = remote_party + '.status.'
- counts[key_prefix + value[0] + 'xx'] += 1
-
- http_status_key = key_prefix + value
- counts[http_status_key] = (
- counts.setdefault(http_status_key, 0) + 1
- )
- # Increment ok/error status metric.
- if value[0] in '123':
- counts[key_prefix + 'ok'] += 1
- elif value[0] in '45':
- counts[key_prefix + 'error'] += 1
-
- # Thesee indicates we completed a request, count it.
- elif tag in ['BackendClose', 'BackendReuse']:
- counts[remote_party + '.total'] += 1
-
- # There is no ReqEnd in v4, let's use Timestamp for Resp
- elif tag == 'Timestamp' and 'Resp' in value:
- counts[remote_party + '.total'] += 1
-
- # If interval seconds have passed, publish counts
- # and reset the last_published_at timestamp.
- if last_published_at + interval < time.time():
- if verbose:
- print_counts(counts)
- if statsd_client:
- publish_statsd_counts(statsd_client, counts)
-
- reset_counts()
-
- # Run varnishlog with the count_vsl_entry_callback
- # called for every VSL entry.
- varnishlog(vsl_args, count_vsl_entry_callback)
-
-
-if __name__ == '__main__':
- parser = argparse.ArgumentParser(
- description=__doc__,
- formatter_class=argparse.RawTextHelpFormatter
- )
- parser.add_argument('--varnish-name', default=None)
- parser.add_argument('--interval', default=60, type=int)
- parser.add_argument('--verbose', default=False, action='store_true')
- parser.add_argument('--statsd', default=None)
- parser.add_argument('--metric-prefix', default='varnish')
- arguments = parser.parse_args()
-
- vsl_args = [
- ('i', 'BereqMethod'),
- ('i', 'BerespStatus'),
- ('i', 'ReqMethod'),
- ('i', 'RespStatus'),
- ('i', 'Timestamp'),
- ('i', 'BackendClose'),
- ('i', 'BackendReuse')
- ]
- if arguments.varnish_name:
- vsl_args.append(('n', arguments.varnish_name))
-
- if arguments.statsd:
- statsd_parts = arguments.statsd.split(':')
- if len(statsd_parts) == 1:
- (host, port) = (statsd_parts[0], 8125)
- else:
- (host, port) = (statsd_parts[0], statsd_parts[1])
- statsd_client = statsd.StatsClient(host, int(port),
prefix=arguments.metric_prefix)
- else:
- statsd_client = None
-
- count_vsl_entries(
- vsl_args,
- interval=arguments.interval,
- verbose=arguments.verbose,
- statsd_client=statsd_client
- )
-
-
-# ##### Tests ######
-# To run:
-# python -m unittest varnishreqstats4
-#
-# This requires that varnishlog.test.data is present
-# in the current directory. It contains 100 entries
-# spread across 6 transactions. It was collected from
-# a real text varnish server using the varnishlog utility.
-#
-class TestVarnishreqstats(unittest.TestCase):
- varnishlog_test_data_file = 'varnishlog.test.data'
-
- def test_is_valid_http_method(self):
- self.assertTrue(is_valid_http_method('GET'))
- self.assertTrue(is_valid_http_method('get'))
- self.assertTrue(is_valid_http_method('post'))
- self.assertFalse(is_valid_http_method('nogood'))
-
- def test_is_valid_http_status(self):
- self.assertTrue(is_valid_http_status('200'))
- self.assertTrue(is_valid_http_status('404'))
- self.assertTrue(is_valid_http_status(301))
- self.assertFalse(is_valid_http_status('nogood'))
- self.assertFalse(is_valid_http_status('1000'))
-
- def test_count_vsl_entries(self):
- # Test on 100 records from varnishlog.test.data file
- extra_vsl_args = [('r', self.varnishlog_test_data_file)]
- d = count_vsl_entries(extra_vsl_args)
-
- self.assertEqual(d['client.method.post'], 0)
- self.assertEqual(d['client.status.200'], 1)
- self.assertEqual(d['client.status.2xx'], 1)
- self.assertEqual(d['client.status.ok'], 1)
- self.assertEqual(d['client.status.error'], 0)
- self.assertEqual(d['client.total'], 1)
diff --git a/modules/varnish/files/varnishrls b/modules/varnish/files/varnishrls
index 4083989..6949546 100755
--- a/modules/varnish/files/varnishrls
+++ b/modules/varnish/files/varnishrls
@@ -14,6 +14,7 @@
Copyright 2015 Ori Livneh <[email protected]>
Copyright 2015 Gilles Dubuc <[email protected]>
+ Copyright 2016 Emanuele Rocca <[email protected]>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -34,19 +35,20 @@
import varnishlog
import varnishprocessor
+
class ResourceLoaderVarnishLogProcessor(varnishprocessor.VarnishLogProcessor):
description = 'ResourceLoader Browser Cache Hit Ratio StatsD Reporter'
key_prefix = 'ResourceLoader'
def process_transaction(self, transaction):
"""Process a single completed transaction."""
- status_code = transaction['TxStatus']
+ status_code = transaction['RespStatus']
metric_keys = ['reqs.all', 'resps.' + status_code]
- if 'RxHeader' in transaction:
+ if 'ReqHeader' in transaction:
metric_keys.append('reqs.if_none_match')
- cache_control_header = transaction.get('TxHeader')
+ cache_control_header = transaction.get('RespHeader')
cache_control = 'no'
if cache_control_header:
match = re.search(r'(?<=max-age=)\d+', cache_control_header)
@@ -62,20 +64,18 @@
self.flush_stats()
def start(self):
+ # VSL query matching ResourceLoader ReqURLs
+ query = 'ReqURL ~ "^/w/load.php"'
+
varnishlog.varnishlog((
- ('n', 'frontend'), # Consider the frontend Varnish instance
- ('c', None), # Only consider interactions with the client
- ('i', 'TxStatus'), # Get TxStatus for the HTTP status code
- ('i', 'RxHeader'), # Get RxHeader for If-None-Match header
- ('i', 'TxHeader'), # Get TxHeader for Cache-control header
- ('i', 'RxURL'), # Get RxURL to match /w/load.php
- ('i', 'ReqEnd'), # Get ReqEnd to delimit requests
- ('C', ''), # Use case-insensitive matching
- ('I', '^(/w/load\.php' # ...to match ResourceLoader RxURLs
- '|if-none-match:' # ...or If-None-Match RxHeaders
- '|cache-control:' # ...or Cache-control TxHeaders
- '|([\d.]+ ?){6}$' # ...or ReqEnd lines
- '|[1-5]\d{2}$)'), # ...or RxStatus codes
+ ('q', query), # VSL query
+ ('n', 'frontend'), # Consider the frontend Varnish instance
+ ('i', 'RespStatus'), # Get RespStatus for the HTTP status code
+ ('i', 'ReqURL'), # Get ReqURL to match /w/load.php
+ ('i', 'Timestamp'), # Timestamp lines
+ ('C', ''), # Use case-insensitive matching
+ ('I', 'ReqHeader:if-none-match'),
+ ('I', 'RespHeader:cache-control'),
), self.handle_log_record)
lp = ResourceLoaderVarnishLogProcessor()
diff --git a/modules/varnish/files/varnishrls4
b/modules/varnish/files/varnishrls4
deleted file mode 100755
index 6949546..0000000
--- a/modules/varnish/files/varnishrls4
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-"""
- varnishrls
- ~~~~~~~~~~
-
- Accumulate browser cache hit ratio and total request volume statistics
- for ResourceLoader requests (/w/load.php) and report to StatsD.
-
- Usage: varnishrls [--statsd-server SERVER] [--key-prefix PREFIX]
-
- --statsd-server SERVER statsd server (default: none; echo to stdout)
- --key-prefix PREFIX metric key prefix (default: varnish.clients)
-
- Copyright 2015 Ori Livneh <[email protected]>
- Copyright 2015 Gilles Dubuc <[email protected]>
- Copyright 2016 Emanuele Rocca <[email protected]>
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-"""
-from __future__ import division
-
-import re
-import varnishlog
-import varnishprocessor
-
-
-class ResourceLoaderVarnishLogProcessor(varnishprocessor.VarnishLogProcessor):
- description = 'ResourceLoader Browser Cache Hit Ratio StatsD Reporter'
- key_prefix = 'ResourceLoader'
-
- def process_transaction(self, transaction):
- """Process a single completed transaction."""
- status_code = transaction['RespStatus']
- metric_keys = ['reqs.all', 'resps.' + status_code]
-
- if 'ReqHeader' in transaction:
- metric_keys.append('reqs.if_none_match')
-
- cache_control_header = transaction.get('RespHeader')
- cache_control = 'no'
- if cache_control_header:
- match = re.search(r'(?<=max-age=)\d+', cache_control_header)
- if match:
- cache_control = 'short' if match.group() == '300' else 'long'
- metric_keys.append('responses.%s_cache_control.%s' %
- (cache_control, status_code))
-
- for key in metric_keys:
- self.stats[key] = self.stats.get(key, 0) + 1
-
- if self.stats['reqs.all'] > 10000:
- self.flush_stats()
-
- def start(self):
- # VSL query matching ResourceLoader ReqURLs
- query = 'ReqURL ~ "^/w/load.php"'
-
- varnishlog.varnishlog((
- ('q', query), # VSL query
- ('n', 'frontend'), # Consider the frontend Varnish instance
- ('i', 'RespStatus'), # Get RespStatus for the HTTP status code
- ('i', 'ReqURL'), # Get ReqURL to match /w/load.php
- ('i', 'Timestamp'), # Timestamp lines
- ('C', ''), # Use case-insensitive matching
- ('I', 'ReqHeader:if-none-match'),
- ('I', 'RespHeader:cache-control'),
- ), self.handle_log_record)
-
-lp = ResourceLoaderVarnishLogProcessor()
diff --git a/modules/varnish/files/varnishstatsd
b/modules/varnish/files/varnishstatsd
index 5106198..9a0089b 100755
--- a/modules/varnish/files/varnishstatsd
+++ b/modules/varnish/files/varnishstatsd
@@ -14,7 +14,8 @@
If no statsd server is specified, prints stats to stdout instead.
- Copyright 2015 Ori Livneh <[email protected]>
+ Copyright 2015-2016 Ori Livneh <[email protected]>
+ 2016 Emanuele Rocca <[email protected]>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -45,11 +46,17 @@
UDP_MTU_BYTES = 1472
vsl_args = [
- ('i', 'Backend'),
- ('i', 'BackendXID'),
- ('i', 'ReqEnd'),
- ('i', 'RxStatus'),
- ('i', 'TxRequest'),
+ # Backend HTTP response status code (eg: 200, 404)
+ ('i', 'BerespStatus'),
+ # Backend HTTP request method (eg: GET, POST)
+ ('i', 'BereqMethod'),
+ # The following two tags are logged when a new backend connection is opened
+ # or put up for reuse by a later connection. We need those to get the
+ # backend name
+ ('i', 'BackendOpen'),
+ ('i', 'BackendReuse'),
+ # Timestamp to compute TTFB (BerespBody)
+ ('i', 'Timestamp'),
]
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
@@ -97,61 +104,43 @@
buf = io.BytesIO()
-def log_value_err(callback):
- def wrapper(transaction_id, tag, record, remote_party):
- try:
- return callback(transaction_id, tag, record, remote_party)
- except ValueError as err:
- print locals()
- return
-
- return wrapper
-
-
-@log_value_err
def vsl_callback(transaction_id, tag, record, remote_party):
global buf
- if tag == 'Backend':
+ if tag in ("BackendOpen", "BackendReuse"):
# Associate the transaction ID with the backend name.
- tid, _, backend = record.split()
- backends[int(tid)] = backend
+ backend_fullname = record.split()[1]
+ backend_name = backend_fullname.split('.')[-1]
+
+ backends[transaction_id] = backend_name
if len(backends) > MAX_BACKLOG:
backends.popitem(last=False)
- elif tag == 'BackendXID':
- # Associate the backend XID with its transaction ID.
- xid = int(record) & 0xffffffff
- xids[xid] = transaction_id
- if len(xids) > MAX_BACKLOG:
- xids.popitem(last=False)
-
- elif tag == 'TxRequest' and remote_party == 'backend':
+ elif tag == "BereqMethod":
# Associate the transaction ID with the request method.
tids[transaction_id] = record
if len(tids) > MAX_BACKLOG:
tids.popitem(last=False)
- elif tag == 'RxStatus' and remote_party == 'backend':
+ elif tag == "BerespStatus":
# Associate the transaction ID with the response status code.
if record[0] in '12345':
statuses[transaction_id] = record[0] + 'xx'
if len(statuses) > MAX_BACKLOG:
statuses.popitem(last=False)
- elif tag == 'ReqEnd':
+ # For our purposes this is like ReqEnd
+ elif tag == "Timestamp" and record.startswith('BerespBody:'):
# Collate data and emit metric.
parts = record.split()
- xid = int(parts[0])
try:
- tid = xids.pop(xid)
fields = {
'key_prefix': args.key_prefix,
- 'method': tids.pop(tid),
- 'backend': backends.pop(tid),
- 'status': statuses.pop(tid),
- 'ttfb': round(1000 * float(parts[4])),
+ 'method': tids.pop(transaction_id),
+ 'backend': backends.pop(transaction_id),
+ 'status': statuses.pop(transaction_id),
+ 'ttfb': round(1000 * float(parts[2])),
}
except KeyError:
return 0
@@ -168,4 +157,5 @@
return 0
-varnishlog(vsl_args, vsl_callback)
+if __name__ == "__main__":
+ varnishlog(vsl_args, vsl_callback)
diff --git a/modules/varnish/files/varnishstatsd4
b/modules/varnish/files/varnishstatsd4
deleted file mode 100755
index 9a0089b..0000000
--- a/modules/varnish/files/varnishstatsd4
+++ /dev/null
@@ -1,161 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-"""
- varnishstatsd
- ~~~~~~~~~~~~~
- Report backend response times and request counts aggregated by status.
-
- Usage: varnishstatsd [--varnish-name NAME] [--statsd-server SERVER]
- [--key-prefix PREFIX]
-
- --varnish-name NAME varnish name
- --statsd-server SERVER statsd server
- --key-prefix PREFIX metric key prefix
-
- If no statsd server is specified, prints stats to stdout instead.
-
- Copyright 2015-2016 Ori Livneh <[email protected]>
- 2016 Emanuele Rocca <[email protected]>
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-"""
-import argparse
-import collections
-import io
-import socket
-import urlparse
-from varnishlog import varnishlog
-
-
-METRIC_FORMAT = (
- '%(key_prefix)s%(backend)s.%(method)s:%(ttfb)d|ms\n'
- '%(key_prefix)s%(backend)s.%(status)s:1|c\n'
-)
-
-UDP_MTU_BYTES = 1472
-
-vsl_args = [
- # Backend HTTP response status code (eg: 200, 404)
- ('i', 'BerespStatus'),
- # Backend HTTP request method (eg: GET, POST)
- ('i', 'BereqMethod'),
- # The following two tags are logged when a new backend connection is opened
- # or put up for reuse by a later connection. We need those to get the
- # backend name
- ('i', 'BackendOpen'),
- ('i', 'BackendReuse'),
- # Timestamp to compute TTFB (BerespBody)
- ('i', 'Timestamp'),
-]
-
-sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-
-
-def parse_statsd_server_string(server_string):
- parsed = urlparse.urlparse('//' + server_string)
- return parsed.hostname, parsed.port or 8125
-
-
-def parse_key_prefix(key_prefix):
- return key_prefix.strip('.') + '.'
-
-
-ap = argparse.ArgumentParser(
- description='Varnish backend response time metric logger',
- epilog='If no statsd server is specified, prints stats to stdout instead.'
-)
-ap.add_argument('--varnish-name', help='varnish name')
-ap.add_argument('--statsd-server', help='statsd server',
- type=parse_statsd_server_string, default=None)
-ap.add_argument('--key-prefix', help='metric key prefix',
- default='varnish.backends',
- type=parse_key_prefix)
-args = ap.parse_args()
-
-if args.varnish_name:
- vsl_args.append(('n', args.varnish_name))
-
-# Maximum number of log records to keep in memory.
-MAX_BACKLOG = 100
-
-# Map of transaction ID: request method ('GET', 'POST', etc.)
-tids = collections.OrderedDict()
-
-# Map of backend XID: transaction ID
-xids = collections.OrderedDict()
-
-# Map of transaction ID: backend name
-backends = collections.OrderedDict()
-
-# Map of transaction ID: response status code (200, 404, etc.)
-statuses = collections.OrderedDict()
-
-buf = io.BytesIO()
-
-
-def vsl_callback(transaction_id, tag, record, remote_party):
- global buf
-
- if tag in ("BackendOpen", "BackendReuse"):
- # Associate the transaction ID with the backend name.
- backend_fullname = record.split()[1]
- backend_name = backend_fullname.split('.')[-1]
-
- backends[transaction_id] = backend_name
- if len(backends) > MAX_BACKLOG:
- backends.popitem(last=False)
-
- elif tag == "BereqMethod":
- # Associate the transaction ID with the request method.
- tids[transaction_id] = record
- if len(tids) > MAX_BACKLOG:
- tids.popitem(last=False)
-
- elif tag == "BerespStatus":
- # Associate the transaction ID with the response status code.
- if record[0] in '12345':
- statuses[transaction_id] = record[0] + 'xx'
- if len(statuses) > MAX_BACKLOG:
- statuses.popitem(last=False)
-
- # For our purposes this is like ReqEnd
- elif tag == "Timestamp" and record.startswith('BerespBody:'):
- # Collate data and emit metric.
- parts = record.split()
-
- try:
- fields = {
- 'key_prefix': args.key_prefix,
- 'method': tids.pop(transaction_id),
- 'backend': backends.pop(transaction_id),
- 'status': statuses.pop(transaction_id),
- 'ttfb': round(1000 * float(parts[2])),
- }
- except KeyError:
- return 0
-
- metric_string = (METRIC_FORMAT % fields).encode('utf-8')
- if buf.tell() + len(metric_string) >= UDP_MTU_BYTES:
- buf.seek(io.SEEK_SET)
- if args.statsd_server:
- sock.sendto(buf.read(), args.statsd_server)
- else:
- print(buf.read().decode('utf-8', errors='replace').rstrip())
- buf = io.BytesIO()
- buf.write(metric_string)
-
- return 0
-
-if __name__ == "__main__":
- varnishlog(vsl_args, vsl_callback)
diff --git a/modules/varnish/files/varnishxcache
b/modules/varnish/files/varnishxcache
index 3f40633..c2b3ec3 100755
--- a/modules/varnish/files/varnishxcache
+++ b/modules/varnish/files/varnishxcache
@@ -120,7 +120,6 @@
varnishlog.varnishlog((
- ('i', 'TxHeader'),
- ('I', '^X-Cache:'),
+ ('I', 'RespHeader:^X-Cache:'),
('n', 'frontend'),
), vsl_callback)
diff --git a/modules/varnish/files/varnishxcache4
b/modules/varnish/files/varnishxcache4
deleted file mode 100755
index c2b3ec3..0000000
--- a/modules/varnish/files/varnishxcache4
+++ /dev/null
@@ -1,125 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-"""
- varnishxcache
- ~~~~~~~~~~~
-
- Accumulate X-Cache stats and report them to StatsD.
-
- Usage: varnishxcache [--statsd-server SERVER] [--key-prefix PREFIX]
-
- --statsd-server SERVER statsd server (default: none; echo to stdout)
- --key-prefix PREFIX metric key prefix (default: varnish.xcache)
-
- Copyright 2016 Brandon Black <[email protected]>
- Copyright 2015 Ori Livneh <[email protected]>
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-"""
-import argparse
-import io
-import re
-import socket
-import threading
-import urlparse
-import time
-
-import varnishlog
-
-
-def parse_statsd_server_string(server_string):
- parsed = urlparse.urlparse('//' + server_string)
- return parsed.hostname, parsed.port or 8125
-
-
-def parse_prefix_string(key_prefix):
- key_prefix = key_prefix.strip('.')
- if not key_prefix:
- raise ValueError('Key prefix must not be empty')
- return key_prefix
-
-
-ap = argparse.ArgumentParser(
- description='X-Cache StatsD reporter',
- epilog='If no statsd server is specified, prints stats to stdout instead.'
-)
-ap.add_argument('--statsd-server', help='statsd server',
- type=parse_statsd_server_string, default=None)
-ap.add_argument('--key-prefix', help='metric key prefix',
- type=parse_prefix_string, default='test.varnish.xcache')
-ap.add_argument('--interval', help='send interval',
- type=int, default=30)
-args = ap.parse_args()
-
-sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-key_value_pairs = re.compile(r'([A-Z][A-Z0-9]*)=([^;]+)')
-stats = {
- 'unknown': 0,
- 'hit-front': 0,
- 'hit-local': 0,
- 'hit-remote': 0,
- 'int-front': 0,
- 'int-local': 0,
- 'int-remote': 0,
- 'pass': 0,
- 'miss': 0,
-}
-
-re_simplify = re.compile('cp[0-9]{4} (hit|miss|pass|int)(?:/[0-9]+)?')
-state_finder = [
- [re.compile(r'hit$'), 'hit-front'],
- [re.compile(r'hit,[^,]+$'), 'hit-local'],
- [re.compile(r'hit'), 'hit-remote'],
- [re.compile(r'int$'), 'int-front'],
- [re.compile(r'int,[^,]+$'), 'int-local'],
- [re.compile(r'int'), 'int-remote'],
- [re.compile(r'pass,[^,]+$'), 'pass'],
- [re.compile(r'miss'), 'miss'],
-]
-
-
-def vsl_callback(transaction_id, tag, record, remote_party):
- record = record.split(': ')[1]
-
- record = re_simplify.sub(r'\1', record)
- state = 'unknown'
- for sf in state_finder:
- if sf[0].search(record):
- state = sf[1]
- break
- stats[state] += 1
-
- now = time.time()
- if now >= vsl_callback.next_pub:
- vsl_callback.next_pub = now + args.interval
- buf = io.BytesIO()
- for k, v in stats.iteritems():
- metric = '%s.%s:%s|c\n' % (args.key_prefix, k, v)
- buf.write(metric.encode('utf-8'))
- stats[k] = 0
- buf.seek(io.SEEK_SET)
- if args.statsd_server:
- sock.sendto(buf.read(), args.statsd_server)
- else:
- print(buf.read().decode('utf-8', errors='replace').rstrip())
-
- return 0
-
-vsl_callback.next_pub = time.time() + args.interval
-
-
-varnishlog.varnishlog((
- ('I', 'RespHeader:^X-Cache:'),
- ('n', 'frontend'),
-), vsl_callback)
diff --git a/modules/varnish/files/varnishxcps
b/modules/varnish/files/varnishxcps
index e23e573..73ddf8d 100755
--- a/modules/varnish/files/varnishxcps
+++ b/modules/varnish/files/varnishxcps
@@ -97,7 +97,6 @@
vsl_callback.next_pub = time.time() + args.interval
varnishlog.varnishlog((
- ('i', 'RxHeader'),
- ('I', '^X-Connection-Properties:'),
+ ('I', 'ReqHeader:^X-Connection-Properties:'),
('n', 'frontend'),
), vsl_callback)
diff --git a/modules/varnish/files/varnishxcps4
b/modules/varnish/files/varnishxcps4
deleted file mode 100755
index 73ddf8d..0000000
--- a/modules/varnish/files/varnishxcps4
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-"""
- varnishxcps
- ~~~~~~~~~~~
-
- Accumulate X-Client-Connection stats and report them to StatsD.
-
- Usage: varnishxcps [--statsd-server SERVER] [--key-prefix PREFIX]
-
- --statsd-server SERVER statsd server (default: none; echo to stdout)
- --key-prefix PREFIX metric key prefix (default: varnish.clients)
-
- Copyright 2015 Ori Livneh <[email protected]>
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
-"""
-import argparse
-import io
-import re
-import socket
-import threading
-import urlparse
-import time
-
-import varnishlog
-
-
-def parse_statsd_server_string(server_string):
- parsed = urlparse.urlparse('//' + server_string)
- return parsed.hostname, parsed.port or 8125
-
-
-def parse_prefix_string(key_prefix):
- key_prefix = key_prefix.strip('.')
- if not key_prefix:
- raise ValueError('Key prefix must not be empty')
- return key_prefix
-
-
-ap = argparse.ArgumentParser(
- description='X-Connection-Properties StatsD reporter',
- epilog='If no statsd server is specified, prints stats to stdout instead.'
-)
-ap.add_argument('--statsd-server', help='statsd server',
- type=parse_statsd_server_string, default=None)
-ap.add_argument('--key-prefix', help='metric key prefix',
- type=parse_prefix_string, default='varnish.clients')
-ap.add_argument('--interval', help='send interval',
- type=int, default=30)
-args = ap.parse_args()
-
-sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-key_value_pairs = re.compile('([A-Z][A-Z0-9]*)=([^;]+)')
-stats = {}
-
-
-def vsl_callback(transaction_id, tag, record, remote_party):
- for k, v in key_value_pairs.findall(record):
- if k == 'SSR':
- k = 'ssl_sessions'
- v = 'reused' if v == '1' else 'negotiated'
- elif k == 'C':
- k = 'ssl_cipher'
- elif k == 'EC':
- k = 'ssl_ecdhe_curve'
- v = v.replace('.', '_')
- s = '.'.join((args.key_prefix, k, v)).lower()
- stats[s] = stats.get(s, 0) + 1
-
- now = time.time()
- if now >= vsl_callback.next_pub:
- vsl_callback.next_pub = now + args.interval
- buf = io.BytesIO()
- while stats:
- metric = '%s:%s|c\n' % stats.popitem()
- buf.write(metric.encode('utf-8'))
- buf.seek(io.SEEK_SET)
- if args.statsd_server:
- sock.sendto(buf.read(), args.statsd_server)
- else:
- print(buf.read().decode('utf-8', errors='replace').rstrip())
-
- return 0
-
-vsl_callback.next_pub = time.time() + args.interval
-
-varnishlog.varnishlog((
- ('I', 'ReqHeader:^X-Connection-Properties:'),
- ('n', 'frontend'),
-), vsl_callback)
diff --git a/modules/varnish/manifests/common.pp
b/modules/varnish/manifests/common.pp
index 64909b9..5f3faf7 100644
--- a/modules/varnish/manifests/common.pp
+++ b/modules/varnish/manifests/common.pp
@@ -60,7 +60,7 @@
}
file { '/usr/local/lib/python2.7/dist-packages/varnishprocessor':
- source => 'puppet:///modules/varnish/varnishprocessor4',
+ source => 'puppet:///modules/varnish/varnishprocessor',
owner => 'root',
group => 'root',
mode => '0755',
diff --git a/modules/varnish/manifests/logging/media.pp
b/modules/varnish/manifests/logging/media.pp
index 9d4153b..f39e0a1 100644
--- a/modules/varnish/manifests/logging/media.pp
+++ b/modules/varnish/manifests/logging/media.pp
@@ -19,7 +19,7 @@
include varnish::common
file { '/usr/local/bin/varnishmedia':
- source => 'puppet:///modules/varnish/varnishmedia4',
+ source => 'puppet:///modules/varnish/varnishmedia',
owner => 'root',
group => 'root',
mode => '0555',
diff --git a/modules/varnish/manifests/logging/reqstats.pp
b/modules/varnish/manifests/logging/reqstats.pp
index a324219..7c1cf07 100644
--- a/modules/varnish/manifests/logging/reqstats.pp
+++ b/modules/varnish/manifests/logging/reqstats.pp
@@ -36,7 +36,7 @@
if ! defined(File['/usr/local/bin/varnishreqstats']) {
file { '/usr/local/bin/varnishreqstats':
- source => 'puppet:///modules/varnish/varnishreqstats4',
+ source => 'puppet:///modules/varnish/varnishreqstats',
owner => 'root',
group => 'root',
mode => '0555',
diff --git a/modules/varnish/manifests/logging/rls.pp
b/modules/varnish/manifests/logging/rls.pp
index 245a161..6e70173 100644
--- a/modules/varnish/manifests/logging/rls.pp
+++ b/modules/varnish/manifests/logging/rls.pp
@@ -19,7 +19,7 @@
include varnish::common
file { '/usr/local/bin/varnishrls':
- source => 'puppet:///modules/varnish/varnishrls4',
+ source => 'puppet:///modules/varnish/varnishrls',
owner => 'root',
group => 'root',
mode => '0555',
diff --git a/modules/varnish/manifests/logging/statsd.pp
b/modules/varnish/manifests/logging/statsd.pp
index a06324f..a053876 100644
--- a/modules/varnish/manifests/logging/statsd.pp
+++ b/modules/varnish/manifests/logging/statsd.pp
@@ -38,7 +38,7 @@
if ! defined(File['/usr/local/bin/varnishstatsd']) {
file { '/usr/local/bin/varnishstatsd':
- source => 'puppet:///modules/varnish/varnishstatsd4',
+ source => 'puppet:///modules/varnish/varnishstatsd',
owner => 'root',
group => 'root',
mode => '0555',
diff --git a/modules/varnish/manifests/logging/xcache.pp
b/modules/varnish/manifests/logging/xcache.pp
index 0876091..a69bd65 100644
--- a/modules/varnish/manifests/logging/xcache.pp
+++ b/modules/varnish/manifests/logging/xcache.pp
@@ -27,7 +27,7 @@
include varnish::common
file { '/usr/local/bin/varnishxcache':
- source => 'puppet:///modules/varnish/varnishxcache4',
+ source => 'puppet:///modules/varnish/varnishxcache',
owner => 'root',
group => 'root',
mode => '0555',
diff --git a/modules/varnish/manifests/logging/xcps.pp
b/modules/varnish/manifests/logging/xcps.pp
index 1d4ec95..6822c6d 100644
--- a/modules/varnish/manifests/logging/xcps.pp
+++ b/modules/varnish/manifests/logging/xcps.pp
@@ -19,7 +19,7 @@
include varnish::common
file { '/usr/local/bin/varnishxcps':
- source => 'puppet:///modules/varnish/varnishxcps4',
+ source => 'puppet:///modules/varnish/varnishxcps',
owner => 'root',
group => 'root',
mode => '0555',
--
To view, visit https://gerrit.wikimedia.org/r/323423
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I5b1024c268a9ddf21d5596bc5338d54e9286ea97
Gerrit-PatchSet: 3
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Ema <[email protected]>
Gerrit-Reviewer: BBlack <[email protected]>
Gerrit-Reviewer: Ema <[email protected]>
Gerrit-Reviewer: Volans <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits