From d4038a7e64af3aee33c4ab67e21f03733e626ce2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20=C5=A0karvada?= Date: Tue, 19 May 2015 15:51:04 +0200 Subject: [PATCH] plugin_script: added support for verify MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added 'verify' shell function to the 'functions' API. This function is optional, if defined in the script, it is called during the verification. It's return code is checked. Function return code '0' means verification passed, other value means failure. Signed-off-by: Jaroslav Škarvada --- profiles/functions | 11 ++++++++++- tuned/consts.py | 10 ++++++---- tuned/plugins/plugin_script.py | 17 ++++++++++++++++- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/profiles/functions b/profiles/functions index 9a7fc90..957dfb6 100644 --- a/profiles/functions +++ b/profiles/functions @@ -504,8 +504,17 @@ process() { stop RETVAL=$? ;; + verify) + if declare -f verify &> /dev/null; + then + verify + else + : + fi + RETVAL=$? + ;; *) - echo $"Usage: $0 {start|stop}" + echo $"Usage: $0 {start|stop|verify}" RETVAL=2 ;; esac diff --git a/tuned/consts.py b/tuned/consts.py index e7f9a5b..f95dbe6 100644 --- a/tuned/consts.py +++ b/tuned/consts.py @@ -42,7 +42,9 @@ CFG_DEF_SLEEP_INTERVAL = 1 # update interval for dynamic tuning (in seconds) CFG_DEF_UPDATE_INTERVAL = 10 -STR_VERIFY_PROFILE_DEVICE_VALUE_OK = "verify: device %s: %s = %s" -STR_VERIFY_PROFILE_VALUE_OK = "verify: %s = %s" -STR_VERIFY_PROFILE_DEVICE_VALUE_FAIL = "verify: fail: device %s: %s = %s, expected %s" -STR_VERIFY_PROFILE_VALUE_FAIL = "verify: fail: %s = %s, expected %s" +STR_VERIFY_PROFILE_DEVICE_VALUE_OK = "verify: passed: device %s: %s = %s" +STR_VERIFY_PROFILE_VALUE_OK = "verify: passed: %s = %s" +STR_VERIFY_PROFILE_OK = "verify: passed: %s" +STR_VERIFY_PROFILE_DEVICE_VALUE_FAIL = "verify: failed: device %s: %s = %s, expected %s" +STR_VERIFY_PROFILE_VALUE_FAIL = "verify: failed: %s = %s, expected %s" +STR_VERIFY_PROFILE_FAIL = "verify: failed: %s" diff --git a/tuned/plugins/plugin_script.py b/tuned/plugins/plugin_script.py index 1bad579..b1b43b8 100644 --- a/tuned/plugins/plugin_script.py +++ b/tuned/plugins/plugin_script.py @@ -1,3 +1,4 @@ +import tuned.consts as consts import base import tuned.logs import os @@ -35,14 +36,28 @@ class ScriptPlugin(base.Plugin): proc = Popen([script, argument], stdout=PIPE, stderr=PIPE, close_fds=True) out, err = proc.communicate() if proc.returncode: - log.error("script '%s' error: %s" % (script, err[:-1])) + log.error("script '%s' error: %d, '%s'" % (script, proc.returncode, err[:-1])) + return False except (OSError,IOError) as e: log.error("script '%s' error: %s" % (script, e)) + return False + return True def _instance_apply_static(self, instance): super(self.__class__, self)._instance_apply_static(instance) self._call_scripts(instance._scripts, "start") + def _instance_verify_static(self, instance): + ret = True + if super(self.__class__, self)._instance_verify_static(instance) == False: + ret = False + if self._call_scripts(instance._scripts, "verify") == True: + log.info(consts.STR_VERIFY_PROFILE_OK % (instance._scripts)) + else: + log.error(consts.STR_VERIFY_PROFILE_FAIL % (instance._scripts)) + ret = False + return ret + def _instance_unapply_static(self, instance, profile_switch = False): self._call_scripts(reversed(instance._scripts), "stop") super(self.__class__, self)._instance_unapply_static(instance, profile_switch)