From: Tomas Vondra Date: Wed, 10 Aug 2016 22:06:11 +0000 (+0200) Subject: Handle missing sar stats gracefully X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=e3f40ddd57b3f9751b511fbf3466ddb31e5083b4;p=pgperffarm.git Handle missing sar stats gracefully --- diff --git a/client/collectors/linux.py b/client/collectors/linux.py index 9112a10..605e2c3 100644 --- a/client/collectors/linux.py +++ b/client/collectors/linux.py @@ -1,3 +1,5 @@ +import os.path + from datetime import datetime, timedelta, time from utils.logging import log from utils.misc import run_cmd @@ -23,10 +25,13 @@ class LinuxCollector(object): def result(self): 'build the results' - r = { - 'sar' : self._collect_sar_stats(), - 'sysctl' : self._collect_sysctl() - } + r = {'sysctl' : self._collect_sysctl()} + + # ignore sar if we've not found it + sar = self._collect_sar_stats() + if sar: + r['sar'] = sar + r.update(self._collect_system_info()) return r @@ -44,26 +49,36 @@ class LinuxCollector(object): # FIXME maybe skip if the file does not exist filename = '%(path)s/sa%(day)s' % {'path' : self._sar, 'day' : d.strftime('%d')} - log("extracting sar data from '%s'" % (filename,)) + # if the sar file does not exist, skip it + if os.path.isfile(filename): + + log("extracting sar data from '%s'" % (filename,)) - # need to use the right combination of start/end timestamps - s = self._start_ts.strftime('%H:%M:%S') - e = self._end_ts.strftime('%H:%M:%S') + # need to use the right combination of start/end timestamps + s = self._start_ts.strftime('%H:%M:%S') + e = self._end_ts.strftime('%H:%M:%S') + + if d == self._start_ts.date() and d == self._end_ts.date(): + r = run_cmd(['sar', '-A', '-p', '-s', s, '-e', e, '-f', filename]) + elif d == self._start_ts.date(): + r = run_cmd(['sar', '-A', '-p', '-s', s, '-f', filename]) + elif d == self._end_ts.date(): + r = run_cmd(['sar', '-A', '-p', '-e', e, '-f', filename]) + else: + r = run_cmd(['sar', '-A', '-p', '-f', filename]) + + sar[str(d)] = r[1] - if d == self._start_ts.date() and d == self._end_ts.date(): - r = run_cmd(['sar', '-A', '-p', '-s', s, '-e', e, '-f', filename]) - elif d == self._start_ts.date(): - r = run_cmd(['sar', '-A', '-p', '-s', s, '-f', filename]) - elif d == self._end_ts.date(): - r = run_cmd(['sar', '-A', '-p', '-e', e, '-f', filename]) else: - r = run_cmd(['sar', '-A', '-p', '-f', filename]) - sar[str(d)] = r[1] + log("file '%s' does not exist, skipping" % (filename,)) # proceed to the next day d += timedelta(days=1) + if not sar: + return None + return sar