Dzahn has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/376151 )
Change subject: jsbench: Prep osmium for decom and remove 've' and 'jsbench' roles ...................................................................... jsbench: Prep osmium for decom and remove 've' and 'jsbench' roles The 've' and 'jsbench' roles are no longer used. Prepare osmium for decom. Bug: T175093 Change-Id: I99356298ba12d574d84528306e9dbc33c270873c --- M manifests/site.pp D modules/role/files/jsbench/benchmarks/README D modules/role/files/jsbench/benchmarks/ve.js D modules/role/files/jsbench/devwiki.conf D modules/role/files/jsbench/jsbench D modules/role/files/jsbench/systemd D modules/role/files/jsbench/upstart D modules/role/files/ve/devwiki.conf D modules/role/files/ve/vb D modules/role/manifests/jsbench.pp D modules/role/manifests/ve.pp 11 files changed, 2 insertions(+), 751 deletions(-) Approvals: jenkins-bot: Verified Dzahn: Looks good to me, approved diff --git a/manifests/site.pp b/manifests/site.pp index 4d62b1c..0466759 100644 --- a/manifests/site.pp +++ b/manifests/site.pp @@ -1918,11 +1918,9 @@ include ::standard } -# VisualEditor performance testing rig +# To be decommissioned in T175093 node 'osmium.eqiad.wmnet' { - role(ve) - include ::standard - include ::base::firewall + role(spare::system) } # oxygen runs a kafkatee instance that consumes webrequest from Kafka diff --git a/modules/role/files/jsbench/benchmarks/README b/modules/role/files/jsbench/benchmarks/README deleted file mode 100644 index 85bd91b..0000000 --- a/modules/role/files/jsbench/benchmarks/README +++ /dev/null @@ -1,6 +0,0 @@ -A benchmark is a piece of Javascript that can be run with the - jsbench --benchmark <benchmark> <url> -command. The script will be executed when the browser opens the page. -It needs to contain a console.profile and a console.profileEnd call; -otherwise it can be arbitrary. The output of the profileEnd call will be -returned by jsbench. diff --git a/modules/role/files/jsbench/benchmarks/ve.js b/modules/role/files/jsbench/benchmarks/ve.js deleted file mode 100644 index fb7b43e..0000000 --- a/modules/role/files/jsbench/benchmarks/ve.js +++ /dev/null @@ -1,23 +0,0 @@ -window.onload = function () { - var stage = jsbench.stage; - ve.trackSubscribe( 'trace.' + stage + '.', function ( topic ) { - switch ( topic.split( '.' ).pop() ) { - case 'enter': - console.profile( stage ); - break; - case 'exit': - console.profileEnd( stage ); - break; - } - } ); - - // Don't show the welcome dialog. - localStorage.clear() - localStorage.setItem( 've-beta-welcome-dialog', 1 ); - - // Wait 200ms for any load handlers to run, then start VE. - setTimeout( function () { - mw.libs.ve.onEditTabClick( { preventDefault: $.noop } ); - }, 200 ); -}; - diff --git a/modules/role/files/jsbench/devwiki.conf b/modules/role/files/jsbench/devwiki.conf deleted file mode 100644 index 67bcfac..0000000 --- a/modules/role/files/jsbench/devwiki.conf +++ /dev/null @@ -1,31 +0,0 @@ -<VirtualHost *:80> - ServerName osmium - DocumentRoot /var/www - - <Directory /> - Options FollowSymLinks - AllowOverride None - </Directory> - - <Directory /var/www> - Require all granted - </Directory> - - <Directory /srv/mediawiki-local> - Require all granted - </Directory> - - <Directory /srv/images> - Require all granted - </Directory> - - AllowEncodedSlashes on - RewriteEngine On - - Alias /images "/srv/images" - - ProxyPass /wiki fcgi://127.0.0.1:9000/var/www/w/index.php retry=0 - ProxyPass /w/extensions ! - ProxyPassMatch ^/w/(.*\.(php|hh))$ fcgi://127.0.0.1:9000/var/www/w/$1 retry=0 - RewriteRule ^/$ fcgi://127.0.0.1:9000/var/www/w/index.php [P] -</VirtualHost> diff --git a/modules/role/files/jsbench/jsbench b/modules/role/files/jsbench/jsbench deleted file mode 100755 index f58e282..0000000 --- a/modules/role/files/jsbench/jsbench +++ /dev/null @@ -1,455 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" - jsbench - Javascript performance benchmarking tool - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Usage: jsbench [OPTIONS] URL - -h, --help show this help message and exit - --verbose log verbosely - --benchmark-file FILE benchmark file (default: standard input) - --host HOST Chromium host (default: localhost) - --port PORT Chromium port (default: 9222) - --repeat N times to repeat (default: 5) - --warmups N number of warm-up runs (default: 3) - --write-profile-data save profiling data as .cpuprofile files. - --display DISPLAY set device display metrics to WIDTHxHEIGHT or - WIDTHxHEIGHT*SCALE_FACTOR - --disable-cache disable network cache - --jsvar NAME VALUE make VALUE available in the benchmark script as - jsbench[NAME]; can be used multiple times - - A benchmark must be specified via --benchmark or on the standard input. - jsbench will remote-control Chromium (which needs to be running and - listening for a remote debugger on the given host/port) to go to the - specified URL, execute the benchmark script, and return performance - profiling data. - - - Copyright 2015 Ori Livneh <o...@wikimedia.org> - - 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, print_function - -import sys -reload(sys) -sys.setdefaultencoding('utf-8') - -import argparse -import functools -import itertools -import json -import logging -import re -import string -import time -import urllib2 -import weakref - -try: - from twisted.internet import defer, reactor - from twisted.python.log import PythonLoggingObserver - - from autobahn.twisted.websocket import (WebSocketClientProtocol, - WebSocketClientFactory) -except ImportError: - print('jsbench requires autobahn (https://pypi.python.org/pypi/autobahn/) ' - 'and twisted (https://pypi.python.org/pypi/Twisted/).') - sys.exit(1) - - -class Highlighter(object): - RED, GREEN, YELLOW, BLUE, WHITE = ('\x1b[1;3%sm' % n for n in '12347') - RESET = '\x1b[0m' - SUBS = {'^': RED, '@': GREEN, '_': YELLOW, '~': BLUE, '*': WHITE} - RE = re.compile(r'(?P<meta>[%s])\((?P<text>.+?)\)(?P=meta)' - % ''.join(SUBS)) - - def __init__(self, use_color=True): - self.use_color = use_color - - def repl(self, match): - start = self.SUBS[match.group('meta')] if self.use_color else '' - end = self.RESET if self.use_color else '' - return start + match.group('text') + end - - def highlight(self, s): - return self.RE.sub(self.repl, s) - - -class HighlightingFormatter(logging.Formatter, Highlighter): - """A formatter for the Python standard library's logging module - that uses `Highlighter` to colorize text.""" - - def __init__(self, use_color=False): - self.use_color = use_color - super(HighlightingFormatter, self).__init__( - self.highlight('[_(%(asctime)s)_] %(message)s'), '%H:%M:%S') - - def format(self, record): - if isinstance(record.msg, basestring): - record.msg = self.highlight(record.msg) - return super(HighlightingFormatter, self).format(record) - - -def mean(data): - """Compute arithmetic mean ("average") of data.""" - data = list(data) - n = len(data) - if not n: - raise ValueError('cannot compute mean of empty set') - return sum(data) / n - - -def median(data): - """Compute median (middle value) of data.""" - data = list(data) - n = len(data) - if not n: - raise ValueError('cannot compute median of empty set') - data.sort() - i = n // 2 - return data[i] if n % 2 == 1 else (data[i - 1] + data[i]) / 2 - - -def std(data): - """Compute the population standard deviation.""" - data = list(data) - n = len(data) - if n == 0: - raise ValueError('cannot compute stdev of empty set') - m = mean(data) - ss = sum((x - m) ** 2 for x in data) - return (ss / n) ** 0.5 - - -def parse_display_opts(opt_string): - """Parse display options in format WIDTHxHEIGHT or WIDTHxHEIGHT*FACTOR.""" - opts = {'deviceScaleFactor': 1, 'emulateViewport': False, - 'fitWindow': False, 'mobile': False} - match = re.match(r'(?P<width>\d+)x(?P<height>\d+)(\*(?P<deviceScaleFactor' - r'>\d+))?', opt_string) - if match is None: - raise ValueError('Invalid display options string.') - opts.update(((k, int(v)) for k, v in match.groupdict().items())) - return opts - - -def upper_first(s): - """Returns a copy of a string with the first letter capitalized.""" - return s[0:1].upper() + s[1:] - - -def summarize(data): - data = list(data) - template = ('min: *({: >7.2f})* max: *({: >7.2f})* ' - 'avg: *({: >7.2f})* med: *({: >7.2f})* ' - 'std: *({: >7.2f})*') - return template.format(min(data), max(data), mean(data), - median(data), std(data)) - - -class ChromeCPUProfile(object): - """Represents the result of a Chrome CPU profiler run.""" - - def __init__(self, profile, title=None): - self.profile = profile - self.title = title - self.total_hit_count = self.get_hit_count(profile['head']) - self.wall_time = (profile['endTime'] - profile['startTime']) * 1000 - self.sampling_interval = self.wall_time / self.total_hit_count - self.cpu_time = 0 - self.gc_time = 0 - self.idle_time = 0 - - for node in profile['head']['children']: - if node['functionName'] == '(garbage collector)': - self.gc_time = self.get_time(node) - elif node['functionName'] == '(idle)': - self.idle_time = self.get_time(node) - else: - self.cpu_time += self.get_time(node) - - def get_hit_count(self, node): - children = node.get('children', ()) - return node['hitCount'] + sum(self.get_hit_count(x) for x in children) - - def get_time(self, node): - return self.get_hit_count(node) * self.sampling_interval - - def write(self, file_name=None): - if file_name is None: - prefix = self.title or 'profile' - file_name = '%s.%d.cpuprofile' % (prefix, time.time()) - with open(file_name, 'w') as f: - json.dump(self.profile, f, sort_keys=True, indent=2) - - -class ChromeRemoteDebuggingDomain(object): - """Represents a Chrome Remote Debugging API domain.""" - - def __init__(self, domain, proto): - self.domain = upper_first(domain) - self.proto = weakref.proxy(proto) - - def __getattr__(self, name): - command = self.domain + '.' + name - return functools.partial(self.proto.sendCommand, command) - - -class ChromeRemoteDebuggingProtocol(WebSocketClientProtocol): - """Protocol for communicating with Chrome via the Remote Debugging API.""" - - domain_names = ( - 'heapProfiler', - 'inspector', - 'network', - 'page', - 'profiler', - 'console', - ) - - def sendCommand(self, method, **params): - id = next(self.message_ids) - deferred = self.deferreds[id] = defer.Deferred() - command = {'id': id, 'method': method, 'params': params} - self.sendMessage(json.dumps(command)) - return deferred - - def onConnect(self, response): - self.message_ids = itertools.count() - self.deferreds = {} - self.profiles = [] - reactor.addSystemEventTrigger('after', 'shutdown', self.showSummary) - - - def onConsoleMessageAdded(self, message): - level = message['level'] - text = message.get('text', '') - meta = dict(log='~', error='^', warning='_', debug='@').get(level, '') - log_level = getattr(logging, level.upper(), logging.DEBUG) - log.log(log_level, '[%s(console.%s)%s] %s' % (meta, level, meta, text)) - - def onInspectorTargetCrashed(self): - log.critical('^(Aw, snap!)^ Target has crashed. Trying to recover...') - return self.onProfilerReady() - - @defer.inlineCallbacks - def onOpen(self): - log.info('Loading *(%s)*...', self.factory.target_url) - - for domain_name in self.domain_names: - domain = ChromeRemoteDebuggingDomain(domain_name, self) - self.__dict__[domain_name] = domain - yield domain.enable() - - scriptSource = 'var jsbench=%s;\n\n%s' % (json.dumps(dict(self.factory.jsvar)), - self.factory.benchmark_file.read()) - yield self.page.addScriptToEvaluateOnLoad(scriptSource=scriptSource) - yield self.profiler.setSamplingInterval(interval=100) - - if self.factory.disable_cache: - yield self.network.setCacheDisabled(cacheDisabled=True) - - if self.factory.display: - yield self.page.setDeviceMetricsOverride(**self.factory.display) - - yield self.onProfilerReady() - - @defer.inlineCallbacks - def onProfilerReady(self): - yield self.network.clearBrowserCache() - yield self.heapProfiler.collectGarbage() - yield self.page.navigate(url=self.factory.target_url) - - def onProfilerConsoleProfileFinished(self, id, location, profile, - title=None): - profile = ChromeCPUProfile(profile, title) - - if self.factory.warmups > 0: - t = 'XX/{:02d}: CPU: {: <7.2f} Wall: {: >7.2f} GC: {: >7.2f}' - log.info(t.format(self.factory.repetitions, profile.cpu_time, - profile.wall_time, profile.gc_time)) - self.factory.warmups -= 1 - return self.onProfilerReady() - - self.profiles.append(profile) - - if self.factory.write_profile_data: - profile.write() - - if self.factory.repetitions > 1: - t = '{:02d}/{:02d}: CPU: {: <7.2f} Wall: {: >7.2f} GC: {: >7.2f}' - log.info(t.format(len(self.profiles), self.factory.repetitions, - profile.cpu_time, profile.wall_time, - profile.gc_time)) - if len(self.profiles) < self.factory.repetitions: - return self.onProfilerReady() - else: - reactor.stop() - - def getHandler(self, method): - object, event = method.split('.') - handler = 'on' + object + upper_first(event) - return getattr(self, handler, None) - - def onMessage(self, payload, isBinary): - message = json.loads(payload.decode('utf-8')) - - id = message.get('id') - error = message.get('error') - method = message.get('method') - params = message.get('params') - result = message.get('result') - deferred = self.deferreds.get(id) - - if deferred: - if error: - log.error(error) - return deferred.errback(error) - else: - return deferred.callback(result) - - if method: - handler = self.getHandler(method) - if handler: - return handler(**params) - - def showSummary(self): - if not len(self.profiles): - return - log.info('CPU: ' + summarize(p.cpu_time for p in self.profiles)) - log.info('Wall: ' + summarize(p.wall_time for p in self.profiles)) - - -class ChromeRemoteDebuggingFactory(WebSocketClientFactory): - - def __init__(self, target_url, **kwargs): - self.__dict__.update(kwargs) - self.target_url = target_url.replace('https://', 'http://', 1) - WebSocketClientFactory.__init__(self, self.getConnectableTabUrl()) - self.protocol = ChromeRemoteDebuggingProtocol - - def getConnectableTabUrl(self): - for tab in self.getTabs(): - if 'webSocketDebuggerUrl' in tab: - return tab['webSocketDebuggerUrl'] - - def getTabs(self): - req = urllib2.urlopen('http://%s:%s/json' % (self.host, self.port)) - return json.load(req) - - -ap = argparse.ArgumentParser(fromfile_prefix_chars='@', - description='Javascript performance benchmarking tool', - epilog='A benchmark must be specified via --benchmark or on the standard input. ' - 'jsbench will remote-control Chromium (which needs to be running and ' - 'listening for a remote debugger on the given host/port) to go to the ' - 'specified URL, execute the benchmark script, and return performance ' - 'profiling data.') -ap.add_argument( - '--verbose', - action='store_const', - const=logging.DEBUG, - default=logging.INFO, - dest='log_level', - help='log verbosely', -) -ap.add_argument( - '--benchmark-file', - action='store', - type=argparse.FileType('r'), - default=sys.stdin, - help='benchmark file (default: standard input)', - metavar='FILE', -) -ap.add_argument( - '--host', - default='localhost', - help='Chromium host (default: localhost)', -) -ap.add_argument( - '--port', - default=9222, - help='Chromium port (default: 9222)', - type=int, -) -ap.add_argument( - '--repeat', - default=5, - dest='repetitions', - help='times to repeat (default: 5)', - metavar='N', - type=int, -) -ap.add_argument( - '--warmups', - default=2, - help='number of warm-up runs (default: 3)', - metavar='N', - type=int, -) -ap.add_argument( - '--write-profile-data', - action='store_true', - default=False, - help='save profiling data as .cpuprofile files', -) -ap.add_argument( - '--display', - type=parse_display_opts, - help='set device display metrics to WIDTHxHEIGHT or ' - 'WIDTHxHEIGHT*SCALE_FACTOR', -) -ap.add_argument( - '--disable-cache', - action='store_true', - default=False, - help='disable network cache', -) -ap.add_argument( - '--jsvar', - action='append', - nargs=2, - help='make VALUE available in the benchmark script as' - 'jsbench[NAME]; can be used multiple times', - metavar=('NAME', 'VALUE'), -) -ap.add_argument( - 'target_url', - metavar='URL', - help='URL to load', -) - -args = ap.parse_args() - -log = logging.getLogger('jsbench') -log.setLevel(args.log_level) - -is_tty = sys.stdout.isatty() -stdout_handler = logging.StreamHandler(stream=sys.stdout) -stdout_handler.setFormatter(HighlightingFormatter(use_color=is_tty)) -log.addHandler(stdout_handler) -if not is_tty: - stderr_handler = logging.StreamHandler(stream=sys.stderr) - stderr_handler.setFormatter(HighlightingFormatter(use_color=True)) - log.addHandler(stderr_handler) - -observer = PythonLoggingObserver('jsbench') -observer.start() - -factory = ChromeRemoteDebuggingFactory(**vars(args)) -reactor.connectTCP(args.host, args.port, factory) -reactor.run() diff --git a/modules/role/files/jsbench/systemd b/modules/role/files/jsbench/systemd deleted file mode 100644 index 0f4f2dd..0000000 --- a/modules/role/files/jsbench/systemd +++ /dev/null @@ -1,35 +0,0 @@ -[Unit] -Description="Headless Chromium as a benchmark runner service for jsbench" -After=xvfb.service - -[Service] -WorkingDirectory=/srv/profile/jsbench -User=jsbench -Restart=always -ExecStart=/usr/lib/chromium/chromium \ - --incognito \ - --remote-debugging-port=9222 \ - --display=:99 \ - --disable-background-networking \ - --disable-client-side-phishing-detection \ - --disable-component-update \ - --disable-default-apps \ - --disable-extensions \ - --disable-hang-monitor \ - --disable-infobars \ - --disable-plugins-discovery \ - --disable-prompt-on-repost \ - --disable-suggestions-service \ - --disable-sync \ - --disable-translate \ - --disable-v8-idle-tasks \ - --disable-web-resources \ - --no-default-browser-check \ - --no-first-run \ - `#--host-rules="MAP * localhost, EXCLUDE upload.wikimedia.org"` \ - --safebrowsing-disable-auto-update \ - --safebrowsing-disable-download-protection \ - --no-sandbox - -[Install] -WantedBy=multi-user.target diff --git a/modules/role/files/jsbench/upstart b/modules/role/files/jsbench/upstart deleted file mode 100755 index 88c4652..0000000 --- a/modules/role/files/jsbench/upstart +++ /dev/null @@ -1,48 +0,0 @@ -##################################################################### -### THIS FILE IS MANAGED BY PUPPET -##################################################################### - -description "Headless Chromium as a benchmark runner service for jsbench" - -start on started xvfb - -setuid jsbench -setgid jsbench - -respawn -respawn limit 10 5 - -script - cd /srv/profile/jsbench - exec /usr/lib/chromium-browser/chromium-browser \ - --incognito \ - --remote-debugging-port=9222 \ - --display=:99 \ - --disable-background-networking \ - --disable-client-side-phishing-detection \ - --disable-component-update \ - --disable-default-apps \ - --disable-extensions \ - --disable-hang-monitor \ - --disable-infobars \ - --disable-plugins-discovery \ - --disable-prompt-on-repost \ - --disable-suggestions-service \ - --disable-sync \ - --disable-translate \ - --disable-v8-idle-tasks \ - --disable-web-resources \ - --no-default-browser-check \ - --no-first-run \ - `#--host-rules="MAP * localhost, EXCLUDE upload.wikimedia.org"` \ - --safebrowsing-disable-auto-update \ - --safebrowsing-disable-download-protection \ - --no-sandbox -end script - -post-start script - if [[ -n $JSBENCH_CPU ]]; then - taskset -p -c $JSBENCH_CPU `cat /var/run/jsbench-browser.pid` - fi -end script - diff --git a/modules/role/files/ve/devwiki.conf b/modules/role/files/ve/devwiki.conf deleted file mode 100644 index 67bcfac..0000000 --- a/modules/role/files/ve/devwiki.conf +++ /dev/null @@ -1,31 +0,0 @@ -<VirtualHost *:80> - ServerName osmium - DocumentRoot /var/www - - <Directory /> - Options FollowSymLinks - AllowOverride None - </Directory> - - <Directory /var/www> - Require all granted - </Directory> - - <Directory /srv/mediawiki-local> - Require all granted - </Directory> - - <Directory /srv/images> - Require all granted - </Directory> - - AllowEncodedSlashes on - RewriteEngine On - - Alias /images "/srv/images" - - ProxyPass /wiki fcgi://127.0.0.1:9000/var/www/w/index.php retry=0 - ProxyPass /w/extensions ! - ProxyPassMatch ^/w/(.*\.(php|hh))$ fcgi://127.0.0.1:9000/var/www/w/$1 retry=0 - RewriteRule ^/$ fcgi://127.0.0.1:9000/var/www/w/index.php [P] -</VirtualHost> diff --git a/modules/role/files/ve/vb b/modules/role/files/ve/vb deleted file mode 100755 index b0fa9bf..0000000 --- a/modules/role/files/ve/vb +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash -repo_status() { - pushd $1 >/dev/null 2>&1 - local project_name="$(git remote -v | grep -Po '(?<=/r/)\S+' | head -1)" - echo "${project_name}:" - git show --oneline --no-patch - popd >/dev/null 2>&1 - echo -} - -echo -repo_status "/srv/mediawiki-local/extensions/VisualEditor" -repo_status "/srv/mediawiki-local" - -export JSBENCH_CPU=15 - -sudo service jsbench-browser start -sleep 1 -jsbench --benchmark /usr/local/share/jsbench/ve.js --repeat=30 --write-profile-data --jsvar stage activate "http://osmium/wiki/Barack_Obama" - -sudo service jsbench-browser start diff --git a/modules/role/manifests/jsbench.pp b/modules/role/manifests/jsbench.pp deleted file mode 100644 index e68021e..0000000 --- a/modules/role/manifests/jsbench.pp +++ /dev/null @@ -1,72 +0,0 @@ -# == Class: role::jsbench -# -# Sets up a Javascript performance testing rig with a headless -# Chromium instance that supports remote debugging. -# -class role::jsbench { - # jsbench is a CLI tool for benchmarking Javascript performance. - # It uses `autobahn` and `twisted` for WebSocket support, which - # it needs so it can speak Chrome's remote debugging protocol. - # It uses `numpy` to calculate summary statistics. - require_package('python-autobahn', 'python-twisted', 'python-numpy') - - # it's chromium on Debian but chromium-browser on Ubuntu (T141023) - if os_version('debian >= jessie') { - require_package('chromium') - } else { - require_package('chromium-browser') - } - - # 1366x768 is the most common display resolution, according - # to http://gs.statcounter.com/. - class { 'xvfb': - resolution => '1366x768x24', - } - - file { '/srv/profile': - ensure => directory, - } - - ferm::service { 've-xvfb': - proto => 'tcp', - port => '6099', - srange => '$PRODUCTION_NETWORKS', - } - - user { 'jsbench': - ensure => present, - comment => 'Chromium service user for jsbench', - home => '/srv/profile/jsbench', - system => true, - managehome => true, - require => File['/srv/profile'], - } - - file { '/usr/local/bin/jsbench': - source => 'puppet:///modules/role/jsbench/jsbench', - owner => 'root', - group => 'root', - mode => '0555', - } - - if $::initsystem == 'upstart' { - file { '/etc/init/jsbench-browser.conf': - ensure => present, - source => 'puppet:///modules/role/jsbench/upstart', - mode => '0444', - } - } - - if $::initsystem == 'systemd' { - file { '/etc/systemd/system/jsbench-browser.service': - ensure => present, - source => 'puppet:///modules/role/jsbench/systemd', - mode => '0444', - } - } - - file { '/usr/local/share/jsbench': - source => 'puppet:///modules/role/jsbench/benchmarks', - recurse => true, - } -} diff --git a/modules/role/manifests/ve.pp b/modules/role/manifests/ve.pp deleted file mode 100644 index c44fa63..0000000 --- a/modules/role/manifests/ve.pp +++ /dev/null @@ -1,25 +0,0 @@ -# == Class: role::ve -# -# Sets up a Visual Editor performance testing rig with a headless -# Chromium instance that supports remote debugging. -# -class role::ve { - include ::standard - include ::role::jsbench - include ::mediawiki - include ::mediawiki::web - include ::mediawiki::web::sites - include ::mediawiki::web::prod_sites - - file { '/usr/local/bin/vb': - source => 'puppet:///modules/role/ve/vb', - owner => 'root', - group => 'root', - mode => '0555', - } - - apache::site { 'devwiki': - source => 'puppet:///modules/role/ve/devwiki.conf', - priority => 4, - } -} -- To view, visit https://gerrit.wikimedia.org/r/376151 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I99356298ba12d574d84528306e9dbc33c270873c Gerrit-PatchSet: 4 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: Krinkle <krinklem...@gmail.com> Gerrit-Reviewer: Dzahn <dz...@wikimedia.org> Gerrit-Reviewer: Giuseppe Lavagetto <glavage...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits