]> git.donarmstrong.com Git - dsa-puppet.git/commitdiff
Kill broken aptitudes on wheezy buildds
authorPeter Palfrader <peter@palfrader.org>
Thu, 2 May 2013 16:17:22 +0000 (18:17 +0200)
committerPeter Palfrader <peter@palfrader.org>
Thu, 2 May 2013 16:17:22 +0000 (18:17 +0200)
modules/buildd/files/buildd-schroot-aptitude-kill [new file with mode: 0755]
modules/buildd/manifests/init.pp

diff --git a/modules/buildd/files/buildd-schroot-aptitude-kill b/modules/buildd/files/buildd-schroot-aptitude-kill
new file mode 100755 (executable)
index 0000000..220e9df
--- /dev/null
@@ -0,0 +1,47 @@
+#!/usr/bin/python
+
+# kills aptitude processes that eat an excessive amount of resources
+
+# Copyright 2013 Peter Palfrader
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+import os
+import psutil
+
+total_mem = psutil.phymem_usage().total
+cutoff_time = 60*10
+
+for p in psutil.process_iter():
+       if p.name != 'aptitude': continue
+       parent = p.parent
+       if parent is None: continue
+       if parent.name != 'schroot': continue
+       #
+       rootdir = os.readlink('/proc/%d/root'%(p.pid,))
+       if not rootdir.startswith('/var/lib/schroot/mount'): continue
+       #
+       used = p.get_memory_info().vms
+       if used < total_mem: continue
+       #
+       cputime = p.get_cpu_times().user
+       if cputime < cutoff_time: continue
+       #
+       p.kill()
index dcf6fe74fbaa72f3ae7d012f318861b2d071d0d1..6b6e7162d6900704b327fd585fd5152364dc9538 100644 (file)
@@ -76,4 +76,17 @@ class buildd ($ensure=present) {
                source  => 'puppet:///modules/buildd/cron.d-dsa-buildd',
                require => Package['debian.org']
        }
+
+       if $::lsbmajdistrelease >= 7 {
+               package { 'python-psutil':
+                       ensure => installed,
+               }
+               file { '/usr/local/sbin/buildd-schroot-aptitude-kill':
+                       source  => 'puppet:///modules/buildd/dupload.conf',
+                       mode    => '0555',
+               }
+               file { '/etc/cron.d/puppet-buildd-aptitude':
+                       content => "*/5 * * * * root /usr/local/sbin/buildd-schroot-aptitude-kill\n",
+               }
+       }
 }