/usr/share/phoronix-test-suite/pts-core/modules/result_notifier.php is in phoronix-test-suite 4.8.3-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | <?php
/*
Phoronix Test Suite
URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
Copyright (C) 2010 - 2011, Michael Larabel
Copyright (C) 2010 - 2011, Phoronix Media
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
SETUP STEPS:
1.) Run 'phoronix-test-suite module-setup result_notifier'
2.) This will prompt you through inputting the commands / absolute file paths to executables to run for each step. Leave empty for irrelevant ones.
3.) To have this module always load automatically by the phoronix-test-suite command, add result_notifier to the LoadModules tag in ~/.phoronix-test-suite/user-config.xml
i.e. my config portion looked like: <LoadModules>toggle_screensaver, update_checker, result_notifier</LoadModules>
4.) Should be all set for testing... My initial tests (just using some scripts that wrote some temporary files of the different exported env variables all worked fine.
*/
class result_notifier extends pts_module_interface
{
const module_name = 'Result Notifier';
const module_version = '1.1.0';
const module_description = 'A notification module.';
const module_author = 'Michael Larabel';
public static function module_info()
{
return null;
}
public static function module_setup()
{
return array(
new pts_module_option('pre_test_process', 'Pre-test process hook', null),
new pts_module_option('pre_test_run_process', 'Pre-test run execution hook', null),
new pts_module_option('interim_test_run_process', 'Interim-test run execution hook', null),
new pts_module_option('post_test_run_process', 'Post-test run execution hook', null),
new pts_module_option('post_test_process', 'Post-test process script', null)
);
}
public static function __startup()
{
// NOTE: This will just print to the terminal when PTS has loaded this module, so you know in fact it's being loaded/should be working
echo PHP_EOL . 'The result_notifier module for providing external hooks has been loaded.' . PHP_EOL;
}
public static function __pre_run_process(&$object)
{
$executable = pts_module::read_option('pre_test_process');
self::process_user_config_external_hook_process('pre_test_process', $executable, 'Running the pre-test process external hook', $object);
}
public static function __pre_test_run(&$object)
{
$executable = pts_module::read_option('pre_test_run_process');
self::process_user_config_external_hook_process('pre_test_run_process', $executable, 'Running the pre-test external hook', $object);
}
public static function __interim_test_run(&$object)
{
$executable = pts_module::read_option('interim_test_run_process');
self::process_user_config_external_hook_process('interim_test_run_process', $executable, 'Running the interim-test external hook', $object);
}
public static function __post_test_run(&$object)
{
$executable = pts_module::read_option('post_test_run_process');
self::process_user_config_external_hook_process('post_test_run_process', $executable, 'Running the post-test external hook', $object);
}
public static function __post_run_process(&$object)
{
$executable = pts_module::read_option('post_test_process');
self::process_user_config_external_hook_process('post_test_process', $executable, 'Running the post-test process external hook', $object);
}
// This is called after the XML save, but not sure Intel needs this since __post_run_process is there too...
/*
public static function __post_test_run_process(&$object)
{
$executable = pts_module::read_option('post_test_process');
self::process_user_config_external_hook_process($executable, 'Doing external post test process', $object);
}
*/
protected static function process_user_config_external_hook_process($process, $cmd_value, $description_string = null, &$passed_obj = null)
{
if(!empty($cmd_value) && (is_executable($cmd_value) || ($cmd_value = pts_client::executable_in_path($cmd_value))))
{
$descriptor_spec = array(
0 => array('pipe', 'r'),
1 => array('pipe', 'w'),
2 => array('pipe', 'w')
);
$env_vars = array('PTS_EXTERNAL_TEST_HOOK' => $process);
if($passed_obj instanceof pts_test_result)
{
$env_vars['PTS_EXTERNAL_TEST_IDENTIFIER'] = $passed_obj->test_profile->get_identifier();
$env_vars['PTS_EXTERNAL_TEST_RUN_POSITION'] = $passed_obj->test_result_buffer->get_count() + 1;
$env_vars['PTS_EXTERNAL_TEST_RUN_COUNT'] = $passed_obj->test_profile->get_times_to_run();
$env_vars['PTS_EXTERNAL_TEST_ARGS'] = $passed_obj->get_arguments();
$env_vars['PTS_EXTERNAL_TEST_DESCRIPTION'] = $passed_obj->get_arguments_description();
$env_vars['PTS_EXTERNAL_TEST_RESULT_SET'] = $passed_obj->test_result_buffer->get_values_as_string();
$env_vars['PTS_EXTERNAL_TEST_RESULT'] = $passed_obj->get_result() != 0 ? $passed_obj->get_result() : pts_arrays::last_element($passed_obj->test_result_buffer->get_values());
$env_vars['PTS_EXTERNAL_TEST_HASH'] = bin2hex($passed_obj->get_comparison_hash());
$env_vars['PTS_EXTERNAL_TEST_STD_DEV_PERCENT'] = pts_math::percent_standard_deviation($passed_obj->test_result_buffer->get_values());
if(is_file($passed_obj->test_profile->get_install_dir() . 'cache-share-' . PTS_INIT_TIME . '.pt2so'))
{
// There's a cache share present
$env_vars['PTS_EXTERNAL_TEST_CACHE_SHARE'] = 1;
}
}
else if($passed_obj instanceof pts_test_run_manager)
{
$env_vars['PTS_EXTERNAL_TESTS_IN_QUEUE'] = implode(':', $passed_obj->get_tests_to_run_identifiers());
$env_vars['PTS_EXTERNAL_TEST_FILE_NAME'] = $passed_obj->get_file_name();
$env_vars['PTS_EXTERNAL_TEST_IDENTIFIER'] = $passed_obj->get_results_identifier();
}
$description_string != null && pts_client::$display->test_run_instance_error($description_string);
$proc = proc_open($cmd_value, $descriptor_spec, $pipes, null, $env_vars);
$std_output = stream_get_contents($pipes[1]);
$return_value = proc_close($proc);
// If you want PTS to exit or something when your script returns !0, you could add an 'exit;' or whatever you want below
// The contents of $std_output is anything that may have been written by your script, if you want it to be interpreted by anything in this module
if($return_value != 0)
{
return false;
}
}
return true;
}
}
?>
|