Yuvipanda has submitted this change and it was merged.

Change subject: Add local crontab monitoring
......................................................................


Add local crontab monitoring

Bug: T96472
Change-Id: I6758673ff611a86ed67af23e599e1945227e97fe
---
A modules/diamond/files/collector/localcrontab.py
A modules/diamond/manifests/collector/localcrontab.pp
M modules/toollabs/manifests/init.pp
3 files changed, 102 insertions(+), 0 deletions(-)

Approvals:
  Yuvipanda: Verified; Looks good to me, approved



diff --git a/modules/diamond/files/collector/localcrontab.py 
b/modules/diamond/files/collector/localcrontab.py
new file mode 100644
index 0000000..17ef717
--- /dev/null
+++ b/modules/diamond/files/collector/localcrontab.py
@@ -0,0 +1,64 @@
+# coding=utf-8
+
+"""
+LocalCrontabCollector. Collects the number of local user cron tabs.
+
+Main use is tool labs, where there should be no cron tabs on any
+host other than tools-submit.
+"""
+
+import subprocess
+import os
+import diamond.collector
+from diamond.collector import str_to_bool
+
+
+class LocalCrontabCollector(diamond.collector.Collector):
+    def get_default_config_help(self):
+        config_help = super(LocalCrontabCollector, 
self).get_default_config_help()  # noqa
+        config_help.update({
+            'administrative':  'List of user names to report'
+                               'as administrative crontabs',
+            '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(LocalCrontabCollector, self).get_default_config()
+        config.update({
+            'path':             'localcrontab',
+            'administrative':   ['root', 'puppet'],
+            'use_sudo':         False,
+            'sudo_cmd':         '/usr/bin/sudo',
+            'sudo_user':        'root',
+        })
+        return config
+
+    def collect(self):
+        command = ['/bin/ls', '/var/spool/cron/crontabs/']
+
+        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)))
+        crontabs = subprocess.check_output(command).split("\n")
+        crontabs = [c.strip() for c in crontabs]
+        crontabs = [c for c in crontabs if c]
+
+        total_crontabs = len(crontabs)
+        admin_crontabs = len([c for c in crontabs
+                              if c in self.config['administrative']])
+        other_crontabs = total_crontabs - admin_crontabs
+
+        self.publish('total', total_crontabs)
+        self.publish('administrative', admin_crontabs)
+        self.publish('other', other_crontabs)
diff --git a/modules/diamond/manifests/collector/localcrontab.pp 
b/modules/diamond/manifests/collector/localcrontab.pp
new file mode 100644
index 0000000..a2c3a2a
--- /dev/null
+++ b/modules/diamond/manifests/collector/localcrontab.pp
@@ -0,0 +1,37 @@
+# == 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::localcrontab(
+    $settings = {},
+    $ensure   = present,
+) {
+    $default_settings = {'use_sudo' => 'true'}
+    $merged_settings = merge($default_settings, $settings)
+
+    diamond::collector { 'LocalCrontabCollector':
+        settings => $merged_settings,
+        source   => 'puppet:///modules/diamond/collector/localcrontab.py',
+        ensure   => $ensure,
+    }
+
+    if str2bool($merged_settings[use_sudo]) {
+        sudo::user { 'diamond_sudo_for_localcrontab':
+            user       => 'diamond',
+            privileges => ["ALL=(root) NOPASSWD: /bin/ls 
/var/spool/cron/crontabs/"],
+            ensure     => $ensure,
+        }
+    }
+}
diff --git a/modules/toollabs/manifests/init.pp 
b/modules/toollabs/manifests/init.pp
index 96c483e..1cc220b 100644
--- a/modules/toollabs/manifests/init.pp
+++ b/modules/toollabs/manifests/init.pp
@@ -198,4 +198,5 @@
         mode   => '0644'
     }
 
+    diamond::collector::localcrontab { 'localcrontabcollector': }
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/206833
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I6758673ff611a86ed67af23e599e1945227e97fe
Gerrit-PatchSet: 3
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Merlijn van Deen <valhall...@arctus.nl>
Gerrit-Reviewer: Yuvipanda <yuvipa...@gmail.com>
Gerrit-Reviewer: coren <mpellet...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to