Yuvipanda has submitted this change and it was merged. Change subject: Revert "Extend Exim diamond collector for Tool Labs" ......................................................................
Revert "Extend Exim diamond collector for Tool Labs" Is broken. This reverts commit e69bf03b6a002340b8b856c6e90381b9cd9cc27c. Change-Id: I8fc06ea7c24d3e725891b10954eae97e871bfd41 --- D modules/diamond/files/collector/extendedexim.py D modules/diamond/manifests/collector/extendedexim.pp M modules/toollabs/manifests/mailrelay.pp 3 files changed, 11 insertions(+), 211 deletions(-) Approvals: Yuvipanda: Verified; Looks good to me, approved diff --git a/modules/diamond/files/collector/extendedexim.py b/modules/diamond/files/collector/extendedexim.py deleted file mode 100644 index 87f63e8..0000000 --- a/modules/diamond/files/collector/extendedexim.py +++ /dev/null @@ -1,173 +0,0 @@ -# coding=utf-8 - -""" -Exim collector. Collects queue properties and paniclog size. - -Queue properties: - - queue.oldest: age of oldest e-mail in queue (seconds) - - queue.youngest: age of youngest e-mail in queue (seconds) - - queue.size: total size of the queue (bytes) - - queue.length: total number of e-mails in the queue - - queue.num_frozen: number of frozen e-mails in the queue - -Paniclog properties: - - paniclog.length: number of lines in /var/log/exim4/paniclog - -Queue length is retrieved from exim; the paniclog is read directly. -Both support the use of sudo, so diamond can run as unprivileged user. - -#### History -Based on EximCollector bundled with Diamond (collectors/exim/exim.py) -Extended by Merlijn van Deen <valhall...@arctus.nl> - -#### Dependencies - * /usr/sbin/exim - -""" - -import diamond.collector -import subprocess -import os -from datetime import timedelta -from collections import namedtuple -from diamond.collector import str_to_bool - - -class EximCollectorException(Exception): - pass - - -EximQueueLine = namedtuple('EximQueueLine', - ['age', 'size', 'mail_id', 'frozen']) - - -class ExtendedEximCollector(diamond.collector.Collector): - def get_default_config_help(self): - config_help = super(ExtendedEximCollector, self).get_default_config_help() # noqa - config_help.update({ - 'bin': 'The path to the exim binary', - 'use_sudo': 'Use sudo?', - 'sudo_cmd': 'Path to sudo', - 'sudo_user': 'User to sudo as', - }) - return config_help - - def get_default_config(self): - """ - Returns the default collector settings - """ - config = super(ExtendedEximCollector, self).get_default_config() - config.update({ - 'path': 'exim', - 'bin': '/usr/sbin/exim', - 'use_sudo': False, - 'sudo_cmd': '/usr/bin/sudo', - 'sudo_user': 'root', - }) - return config - - def _get_file(self, file): - if not str_to_bool(self.config['use_sudo']): - return open(file).read() - else: - command = [self.config['sudo_cmd'], "-u", self.config['sudo_user'], - "cat", file] - self.log.debug('Running %s' % (' '.join(command))) - try: - return subprocess.check_output( - command, - stderr=subprocess.STDOUT - ) - except subprocess.CalledProcessError as e: - raise IOError(e) - - def _get_queue(self): - if not os.access(self.config['bin'], os.X_OK): - raise EximCollectorException('exim not found') - - command = [self.config['bin'], '-bpr'] - - if str_to_bool(self.config['use_sudo']): - command = [ - self.config['sudo_cmd'], - '-u', - self.config['sudo_user'] - ] + command - self.log.debug('Running %s' % (' '.join(command))) - queue = subprocess.check_output(command) - - # remove empty lines - queue = [l.strip() for l in queue.split("\n")] - queue = [l for l in queue if l] - - # remove indented lines - queue = [l for l in queue if l[0] != " "] - - return queue - - def _parse_age(self, age): - postfix = age[-1] - if postfix == "m": - return timedelta(minutes=int(age[:-1])) - elif postfix == "h": - return timedelta(hours=int(age[:-1])) - elif postfix == "d": - return timedelta(days=int(age[:-1])) - elif postfix == "w": - return timedelta(weeks=int(age[:-1])) - - def _parse_size(self, size): - postfix = size[-1] - if postfix == "K": - return float(size[:-1]) * 1024 - elif postfix == "M": - return float(size[:-1]) * 1024 - else: - return float(size) - - def _parse_line(self, line): - parts = [x for x in line.split(" ") if x] - age = self._parse_age(parts[0]) - size = self._parse_size(parts[1]) - mail_id = parts[2] - frozen = "*** frozen ***" in line - - return EximQueueLine(age=age, size=size, - mail_id=mail_id, frozen=frozen) - - def collect_queue(self): - try: - queue = self._get_queue() - except EximCollectorException: - return - - parsed_queue = [self._parse_line(line) for line in queue] - - if parsed_queue: - oldest = max(l.age for l in parsed_queue) - youngest = min(l.age for l in parsed_queue) - size = sum(l.size for l in parsed_queue) - length = len(parsed_queue) - num_frozen = sum(l.frozen for l in parsed_queue) - else: - oldest = youngest = size = length = num_frozen = 0 - - self.publish('queue.oldest', oldest) - self.publish('queue.youngest', youngest) - self.publish('queue.size', size) - self.publish('queue.length', length) - self.publish('queue.num_frozen', num_frozen) - - def collect_paniclog(self): - try: - contents = self._get_file('/var/log/exim4/paniclog') - except IOError: - self.log.warning('Cannot open Exim paniclog!') - return - - num_lines = contents.count("\n") - self.publish('paniclog.length', num_lines) - - def collect(self): - self.collect_queue() - self.collect_paniclog() diff --git a/modules/diamond/manifests/collector/extendedexim.pp b/modules/diamond/manifests/collector/extendedexim.pp deleted file mode 100644 index aff8d58..0000000 --- a/modules/diamond/manifests/collector/extendedexim.pp +++ /dev/null @@ -1,37 +0,0 @@ -# == Define: diamond::collector::extendedexim -# -# Exim collector. Collects queue properties and paniclog size. -# -# Queue properties: -# - queue.oldest: age of oldest e-mail in queue (seconds) -# - queue.youngest: age of youngest e-mail in queue (seconds) -# - queue.size: total size of the queue (bytes) -# - queue.length: total number of e-mails in the queue -# - queue.num_frozen: number of frozen e-mails in the queue -# -# Paniclog properties: -# - paniclog.length: number of lines in /var/log/exim4/paniclog - -include stdlib - -define diamond::collector::extendedexim( - $settings = {}, - $ensure = present, -) { - $default_settings = {'use_sudo' => 'true'} - $merged_settings = merge($default_settings, $settings) - - diamond::collector { 'ExtendedExim': - settings => $merged_settings, - source => 'puppet:///modules/diamond/collector/extendedexim.py', - ensure => $ensure, - } - - if str2bool($merged_settings[use_sudo]) { - sudo::user { 'diamond_sudo_for_exim': - user => 'diamond', - privileges => ['ALL=(root) NOPASSWD: /usr/sbin/exim, /bin/cat /var/log/exim4/paniclog'], - ensure => $ensure, - } - } -} diff --git a/modules/toollabs/manifests/mailrelay.pp b/modules/toollabs/manifests/mailrelay.pp index 46e1b9c..e68f01a 100644 --- a/modules/toollabs/manifests/mailrelay.pp +++ b/modules/toollabs/manifests/mailrelay.pp @@ -62,5 +62,15 @@ notify => Service['exim4'], } - diamond::collector::extendedexim { 'extended_exim_collector': } + # Diamond user needs sudo to access exim + sudo::user { 'diamond_sudo_for_exim': + user => 'diamond', + privileges => ['ALL=(root) NOPASSWD: /usr/sbin/exim'] + } + + diamond::collector { 'Exim': + settings => { + use_sudo => 'true', # used in a template, not a puppet bool + } + } } -- To view, visit https://gerrit.wikimedia.org/r/206976 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I8fc06ea7c24d3e725891b10954eae97e871bfd41 Gerrit-PatchSet: 2 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: Yuvipanda <yuvipa...@gmail.com> Gerrit-Reviewer: Yuvipanda <yuvipa...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits