/phoronix-test-suite/pts-core/commands/interactive.php
PHP | 271 lines | 217 code | 31 blank | 23 comment | 41 complexity | 94405d8b53f8e23f29258370aee064c9 MD5 | raw file
Possible License(s): GPL-3.0
- <?php
- /*
- Phoronix Test Suite
- URLs: http://www.phoronix.com, http://www.phoronix-test-suite.com/
- Copyright (C) 2011, Phoronix Media
- Copyright (C) 2011, Michael Larabel
- 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/>.
- */
- class interactive implements pts_option_interface
- {
- const doc_section = 'System';
- const doc_description = 'A simple text-driven interactive interface to the Phoronix Test Suite.';
- public static function run($r)
- {
- $is_moscow = pts_flags::os_identifier_hash() == 'b28d6a7148b34595c5b397dfcf5b12ac7932b3dc';
- if($is_moscow)
- {
- // Auto mount?
- $drives = pts_file_io::glob('/dev/sda*');
- sort($drives);
- if(false && count($drives) > 0 && !is_dir('/media/pts-auto-mount') && is_writable('/media/'))
- {
- $last_drive = array_pop($drives);
- echo PHP_EOL . 'Attempting to auto-mount drive: ' . $last_drive . PHP_EOL;
- mkdir('/media/pts-auto-mount');
- exec('mount ' . $last_drive . ' /media/pts-auto-mount');
- putenv('PTS_TEST_INSTALL_ROOT_PATH=/media/pts-auto-mount/');
- }
- // Auto save results
- $test_results_name = phodevi::read_property('motherboard', 'serial-number');
- if($test_results_name == null)
- {
- $test_results_name = phodevi::read_name('motherboard');
- }
- if($test_results_name == null)
- {
- $test_results_name = phodevi::read_property('system', 'vendor-identifier');
- }
- putenv('TEST_RESULTS_NAME=' . str_replace(' ', null, $test_results_name));
- putenv('TEST_RESULTS_IDENTIFIER=' . $test_results_name);
- putenv('TEST_RESULTS_DESCRIPTION=Tests using ' . phodevi::read_property('system', 'operating-system') . ' on ' . date('d F Y') . ' of ' . $test_results_name . '.');
- self::select_drive_mount();
- }
- pts_openbenchmarking_client::refresh_repository_lists();
- pts_client::$display->generic_heading('Interactive Benchmarking');
- echo 'System Hardware:' . PHP_EOL . phodevi::system_hardware(true) . (phodevi::read_property('motherboard', 'serial-number') != null ? PHP_EOL . 'System Serial Number: ' . phodevi::read_property('motherboard', 'serial-number') : null) . PHP_EOL . PHP_EOL . PHP_EOL;
- $reboot_on_exit = pts_flags::is_live_cd() && pts_client::user_home_directory() == '/root/';
- do
- {
- $options = array(
- 'RUN_TEST' => 'Run A Test',
- 'RUN_SUITE' => 'Run A Suite [A Collection Of Tests]',
- 'RUN_SYSTEM_TEST' => 'Run Complex System Test',
- 'SHOW_INFO' => 'Show System Hardware / Software Information',
- 'SHOW_SENSORS' => 'Show Auto-Detected System Sensors',
- 'SET_RUN_COUNT' => 'Set Test Run Repetition'
- );
- if($is_moscow)
- {
- unset($options['RUN_SUITE']);
- // $options['SELECT_DRIVE_MOUNT'] = 'Select Disk Drive To Use For Testing';
- }
- if(count(pts_client::saved_test_results()) > 0)
- {
- $options['BACKUP_RESULTS_TO_USB'] = 'Backup Results To Media Storage';
- }
- $options['EXIT'] = ($reboot_on_exit ? 'Exit & Reboot' : 'Exit');
- $response = pts_user_io::prompt_text_menu('Select Task', $options, false, true);
- switch($response)
- {
- case 'RUN_TEST':
- $supported_tests = pts_openbenchmarking_client::available_tests();
- $supported_tests = pts_types::identifiers_to_test_profile_objects($supported_tests, false, true);
- $longest_title_length = 0;
- foreach($supported_tests as $i => &$test_profile)
- {
- if($test_profile->get_title() == null || pts_test_run_manager::test_profile_system_compatibility_check($test_profile) == false)
- {
- unset($supported_tests[$i]);
- continue;
- }
- if($is_moscow && pts_test_install_request::test_files_available_locally($test_profile) == false)
- {
- // Don't show tests where files need to be downloaded
- unset($supported_tests[$i]);
- continue;
- }
- $longest_title_length = max($longest_title_length, strlen($test_profile->get_title()));
- }
- $t = array();
- foreach($supported_tests as $i => &$test_profile)
- {
- if($test_profile instanceof pts_test_profile)
- {
- $t[$test_profile->get_identifier()] = sprintf('%-' . ($longest_title_length + 1) . 'ls - %-10ls', $test_profile->get_title(), $test_profile->get_test_hardware_type());
- }
- }
- $supported_tests = $t;
- asort($supported_tests);
- $tests_to_run = pts_user_io::prompt_text_menu('Select Test', $supported_tests, true, true);
- $tests_to_run = explode(',', $tests_to_run);
- pts_test_installer::standard_install($tests_to_run);
- $run_manager = pts_test_run_manager::standard_run($tests_to_run, (pts_c::defaults_mode | pts_c::auto_mode));
- if($run_manager != false)
- {
- pts_client::display_web_page(PTS_SAVE_RESULTS_PATH . $run_manager->get_file_name() . '/index.html', null, true, true);
- }
- break;
- case 'RUN_SUITE':
- $possible_suites = pts_openbenchmarking_client::available_suites();
- foreach(array_map('strtolower', pts_types::subsystem_targets()) as $subsystem)
- {
- array_push($possible_suites, 'pts/' . $subsystem);
- }
- $suites_to_run = pts_user_io::prompt_text_menu('Select Suite', $possible_suites, true);
- foreach(explode(',', $suites_to_run) as $suite_to_run)
- {
- pts_test_installer::standard_install($suite_to_run);
- pts_test_run_manager::standard_run($suite_to_run, (pts_c::defaults_mode | pts_c::auto_mode));
- }
- break;
- case 'SELECT_DRIVE_MOUNT':
- self::select_drive_mount();
- break;
- case 'RUN_SYSTEM_TEST':
- pts_client::$display->generic_heading('System Test');
- $system_tests = array('apache', 'c-ray', 'ramspeed', 'postmark');
- pts_test_installer::standard_install($system_tests);
- $run_manager = pts_test_run_manager::standard_run($system_tests, (pts_c::defaults_mode | pts_c::auto_mode));
- if($run_manager != false)
- {
- pts_client::display_web_page(PTS_SAVE_RESULTS_PATH . $run_manager->get_file_name() . '/index.html', null, true, true);
- }
- break;
- case 'SHOW_INFO':
- pts_client::$display->generic_heading('System Software / Hardware Information');
- echo 'Hardware:' . PHP_EOL . phodevi::system_hardware(true) . PHP_EOL . PHP_EOL;
- echo 'Software:' . PHP_EOL . phodevi::system_software(true) . PHP_EOL . PHP_EOL;
- break;
- case 'SHOW_SENSORS':
- pts_client::$display->generic_heading('Detected System Sensors');
- foreach(phodevi::supported_sensors() as $sensor)
- {
- echo phodevi::sensor_name($sensor) . ': ' . phodevi::read_sensor($sensor) . ' ' . phodevi::read_sensor_unit($sensor) . PHP_EOL;
- }
- break;
- case 'SET_RUN_COUNT':
- $run_count = pts_user_io::prompt_user_input('Set the minimum number of times each test should repeat', false);
- putenv('FORCE_TIMES_TO_RUN=' . trim($run_count));
- break;
- case 'BACKUP_RESULTS_TO_USB':
- pts_client::$display->generic_heading('Backing Up Test Results');
- if($is_moscow)
- {
- $drives = pts_file_io::glob('/dev/sd*');
- sort($drives);
- if(count($drives) > 0 && is_writable('/media/'))
- {
- $select_drive = pts_user_io::prompt_text_menu('Select Drive / Partition To Save Results', $drives);
- echo PHP_EOL . 'Attempting to mount: ' . $select_drive . PHP_EOL;
- mkdir('/media/00-results-backup');
- exec('mount ' . $select_drive . ' /media/00-results-backup');
- }
- }
- foreach(pts_file_io::glob('/media/*') as $media_dir)
- {
- if(!is_writable($media_dir))
- {
- echo PHP_EOL . $media_dir . ' is not writable.' . PHP_EOL;
- continue;
- }
- echo PHP_EOL . 'Writing Test Results To: ' . $media_dir . PHP_EOL;
- pts_file_io::copy(PTS_SAVE_RESULTS_PATH, $media_dir . '/');
- break;
- }
- if($is_moscow && is_dir('/media/00-results-backup'))
- {
- exec('umount /media/00-results-backup');
- rmdir('/media/00-results-backup');
- }
- break;
- }
- echo PHP_EOL . PHP_EOL;
- }
- while($response != 'EXIT');
- if($reboot_on_exit)
- {
- if(is_dir('/media/pts-auto-mount'))
- {
- pts_file_io::delete('/media/pts-auto-mount/pts', null, true);
- exec('umount /media/pts-auto-mount 2>&1');
- }
- exec('reboot');
- }
- }
- private static function select_drive_mount()
- {
- $drives = pts_file_io::glob('/dev/sd*');
- if(count($drives) == 0)
- {
- echo PHP_EOL . 'No Disk Drives Found' . PHP_EOL . PHP_EOL;
- }
- else
- {
- array_push($drives, 'No HDD');
- $to_mount = pts_user_io::prompt_text_menu('Select Drive / Partition To Mount', $drives);
- if($to_mount != 'No HDD')
- {
- echo PHP_EOL . 'Attempting to mount: ' . $to_mount . PHP_EOL;
- exec('umount /media/pts-auto-mount 2>&1');
- pts_file_io::delete('/media/pts-auto-mount', null, true);
- pts_file_io::mkdir('/media/pts-auto-mount');
- echo exec('mount ' . $to_mount . ' /media/pts-auto-mount');
- putenv('PTS_TEST_INSTALL_ROOT_PATH=/media/pts-auto-mount/');
- }
- else
- {
- if(is_dir('/media/pts-auto-mount'))
- {
- exec('umount /media/pts-auto-mount');
- @rmdir('/media/pts-auto-mount');
- }
- putenv('PTS_TEST_INSTALL_ROOT_PATH=');
- }
- }
- }
- }
- ?>