public static function render_page_process($PATH) { echo '<div style="background: #CCC; padding: 10px; margin: 10px 20px;">Thanks for trying out the Phoronix Test Suite GUI. With Phoronix Test Suite 5.0 the GUI is still considered in an <strong>experimental / tech preview state</strong>. The GUI should be more end-user friendly and reach feature parity with the command-line interface in forthcoming releases. Your feedback is appreciated on the GUI while the command-line interface continues to be our primary focus along with remotely-managed enterprise features like <a href="http://www.phoromatic.com/">Phoromatic</a> and <a href="http://openbenchmarking.org/">OpenBenchmarking.org</a>. <a href="/early">Read more details on the GUI</a>.</div>'; echo '<h1>' . pts_core::program_title(false) . '</h1>'; echo '<div id="pts_side_pane">'; $hw_component_modal = array('CPU' => phodevi::read_property('cpu', 'model'), 'Motherboard' => phodevi::read_property('motherboard', 'identifier'), 'Memory' => phodevi::read_property('memory', 'identifier'), 'Disk' => phodevi::read_property('disk', 'identifier'), 'GPU' => phodevi::read_property('gpu', 'model')); echo '<ul>'; foreach ($hw_component_modal as $type => $component) { echo '<a href="/?component/' . $type . '"><li>' . $component . '</li></a>'; } echo '</ul>'; echo '<hr />'; $sw_component_modal = array(1 => phodevi::read_property('system', 'operating-system'), 2 => phodevi::read_property('system', 'kernel-string'), 3 => phodevi::read_property('system', 'display-driver-string'), 4 => phodevi::read_property('system', 'opengl-driver'), 5 => phodevi::read_property('system', 'compiler')); echo '<ul>'; foreach ($sw_component_modal as $type => $component) { echo '<a href="/?component/Software"><li>' . $component . '</li></a>'; } echo '</ul>'; echo '<div class="pts_pane_window"><strong>OpenBenchmarking.org</strong><br />Log-in to gain access to additional features.</div>'; echo '<ul>'; echo '<a href="/?settings"><li>Software Settings</li></a>'; echo '<a href="/?about"><li>About The Phoronix Test Suite</li></a>'; echo '</ul>'; echo '</div>'; echo '<div id="pts_search_bar">'; echo 'SEARCH: <input type="text" size="30" id="pts_search" name="search" onkeydown="if(event.keyCode == 13) { if(document.getElementById(\'pts_search\').value.length < 3) { alert(\'Please enter a longer search query.\'); return false; } else { window.location.href = \'/?search/\' + document.getElementById(\'pts_search\').value; } return false; }" />'; echo '</div>'; // Graphs echo '<div id="svg_graphs" style="margin: 10px 0; text-align: right;"></div>'; echo '<div style="overflow: hidden;">'; echo '<div class="pts_list_box">'; $results = pts_tests::test_results_by_date(); $result_count = count($results); $results = array_slice($results, 0, 10, true); echo '<ol>'; echo '<li><u>Recent Benchmark Results</u></li>'; foreach ($results as $result) { $result_file = new pts_result_file($result); echo '<a href="?result/' . $result . '"><li>' . $result_file->get_title() . '</li></a>'; } echo '<a href="?results"><li><strong>' . $result_count . ' Results Saved</strong></li></a>'; echo '</ol>'; echo '</div>'; echo '<div class="pts_list_box">'; $tests = pts_openbenchmarking_client::recently_updated_tests(10); echo '<ol>'; echo '<li><u>Recently Updated Tests</u></li>'; foreach ($tests as $test) { $test_profile = new pts_test_profile($test); echo '<a href="?test/' . $test . '"><li>' . $test_profile->get_title() . '</li></a>'; } echo '<a href="?tests"><li><strong>' . pts_openbenchmarking_client::tests_available() . ' Tests Available</strong></li></a>'; echo '</ol>'; echo '</div>'; echo '<div class="pts_list_box">'; $tests = pts_openbenchmarking_client::popular_tests(10); echo '<ol>'; echo '<li><u>Most Popular Tests</u></li>'; foreach ($tests as $test) { $test_profile = new pts_test_profile($test); echo '<a href="?test/' . $test . '"><li>' . $test_profile->get_title() . '</li></a>'; } echo '<a href="?tests"><li><strong>' . pts_openbenchmarking_client::tests_available() . ' Tests Available</strong></li></a>'; echo '</ol>'; echo '</div>'; echo '</div>'; echo '<script text="text/javascript"> pts_web_socket.add_onopen_event("user-svg-system-graphs"); setInterval(function(){if(pts_web_socket.is_connected()) { pts_web_socket.send("user-svg-system-graphs"); }},1000); pts_web_socket.add_onmessage_event("svg_graphs", "update_svg_graph_space"); </script>'; }
public static function run($r) { pts_client::$display->generic_heading('Random Test Execution'); $allow_new_tests_to_be_installed = pts_user_io::prompt_bool_input('Allow new tests to be installed', true); $allow_new_dependencies_to_be_installed = $allow_new_tests_to_be_installed ? pts_user_io::prompt_bool_input('Allow new test external dependencies to be installed', false) : false; $limit_test_subsystem = pts_user_io::prompt_bool_input('Limit tests to a given subsystem', false); $limit_test_subsystem = $limit_test_subsystem ? pts_user_io::prompt_text_menu('Select subsystem(s) to test', pts_types::subsystem_targets(), true) : false; $upload_to_openbenchmarking = pts_user_io::prompt_bool_input('Auto-upload test results to OpenBenchmarking.org', true); while (1) { $to_test = array(); if ($limit_test_subsystem) { foreach (explode(',', $limit_test_subsystem) as $test_type) { $tests = pts_openbenchmarking_client::popular_tests(-1, $test_type); $to_test = array_merge($to_test, $tests); } if (empty($to_test)) { pts_client::$display->generic_sub_heading('No tests could be found to run.'); return false; } shuffle($to_test); $to_test = array_slice($to_test, 0, rand(1, 12)); } else { if (rand(1, 6) == 2) { $ob_ids = pts_openbenchmarking_client::popular_openbenchmarking_results(); $ob_type = rand(0, 1) == 1 ? 'recent_popular_results' : 'recent_results'; if (isset($ob_ids[$ob_type]) && !empty($ob_ids[$ob_type])) { shuffle($ob_ids[$ob_type]); $to_test = array(array_pop($ob_ids[$ob_type])); } } } if (empty($to_test)) { // Randomly pick some installed tests $installed_tests = pts_tests::installed_tests(); if ($installed_tests > 3) { shuffle($installed_tests); $to_test = array_slice($installed_tests, 0, rand(1, 8)); } if (!isset($to_test[2]) && $allow_new_tests_to_be_installed) { $available_tests = pts_openbenchmarking::available_tests(); shuffle($available_tests); $to_test = array_merge($to_test, array_slice($available_tests, 0, rand(1, 10))); } } if (empty($to_test)) { pts_client::$display->generic_sub_heading('No tests could be found to run.'); return false; } echo PHP_EOL; pts_client::$display->generic_sub_heading('Tests To Run: ' . implode(', ', $to_test)); // QUERY FROM OB $random_titles = array(phodevi::read_property('cpu', 'model') . ' Benchmarks', phodevi::read_property('system', 'operating-system') . ' Benchmarks', phodevi::read_property('system', 'operating-system') . ' Performance', phodevi::read_property('cpu', 'model') . ' Performance', phodevi::read_property('cpu', 'model') . ' + ' . phodevi::read_property('gpu', 'model') . ' + ' . phodevi::read_property('motherboard', 'identifier'), phodevi::read_property('motherboard', 'identifier') . ' On ' . phodevi::read_property('system', 'operating-system'), phodevi::read_property('cpu', 'model') . ' On ' . phodevi::read_property('system', 'operating-system'), phodevi::read_property('system', 'kernel') . ' + ' . phodevi::read_property('system', 'operating-system') . ' Tests'); shuffle($random_titles); $title = array_pop($random_titles); if ($limit_test_subsystem) { $subsystems_to_test = explode(',', $limit_test_subsystem); $subsystems_to_avoid = array_diff(pts_types::subsystem_targets(), $subsystems_to_test); pts_client::pts_set_environment_variable('SKIP_TESTING_SUBSYSTEMS', implode(',', $subsystems_to_avoid)); } if ($allow_new_tests_to_be_installed) { pts_test_installer::standard_install($to_test, false, true, $allow_new_dependencies_to_be_installed); } $batch_mode_settings = array('UploadResults' => false, 'SaveResults' => true, 'PromptForTestDescription' => false, 'RunAllTestCombinations' => false, 'PromptSaveName' => false, 'PromptForTestIdentifier' => false, 'OpenBrowser' => false); if ($upload_to_openbenchmarking) { $batch_mode_settings['UploadResults'] = true; pts_openbenchmarking_client::override_client_setting('UploadSystemLogsByDefault', true); } pts_test_run_manager::set_batch_mode($batch_mode_settings); $test_run_manager = new pts_test_run_manager($batch_mode_settings, 2); if ($test_run_manager->initial_checks($to_test) != false) { if ($test_run_manager->load_tests_to_run($to_test)) { // SETUP $test_run_manager->auto_save_results($title, null, 'Various open-source benchmarks by the ' . pts_core::program_title(true) . '.', true); $test_run_manager->auto_generate_results_identifier(); echo PHP_EOL; pts_client::$display->generic_sub_heading('Result File: ' . $test_run_manager->get_file_name()); pts_client::$display->generic_sub_heading('Result Identifier: ' . $test_run_manager->get_results_identifier()); // BENCHMARK $test_run_manager->pre_execution_process(); $test_run_manager->call_test_runs(); $test_run_manager->post_execution_process(); pts_client::remove_saved_result_file($test_run_manager->get_file_name()); } } echo PHP_EOL; sleep(30); } }
protected function process_data(&$user, &$msg) { $decoded_msg = $this->decode_data($user, $msg); //echo 'DECODED MSG: ' . $decoded_msg . PHP_EOL; foreach (explode(' ;; ', $decoded_msg) as $single_msg) { //echo strstr($single_msg . ' ', ' ', true) . PHP_EOL; $args = trim(strstr($single_msg, ' ')); switch (strstr($single_msg . ' ', ' ', true)) { case 'search': $this->search_pts($user, $args); case 'result_file': foreach (explode(',', $args) as $result) { if ($result == null) { continue; } $result_file = new pts_result_file($result); $json['pts']['msg']['name'] = 'result_file'; $json['pts']['msg']['result'] = $result; $json['pts']['msg']['result_file'] = base64_encode($result_file->to_json()); $this->send_json_data($user->socket, $json); } break; case 'results_by_date': $results = pts_tests::test_results_by_date(); $json['pts']['msg']['name'] = 'results_by_date'; $json['pts']['msg']['result_count'] = count($results); $json['pts']['msg']['results'] = base64_encode(json_encode($results)); $this->send_json_data($user->socket, $json); break; case 'results_grouped_by_date': $results = pts_tests::test_results_by_date(); $json['pts']['msg']['name'] = 'results_grouped_by_date'; $json['pts']['msg']['result_count'] = count($results); $sections = array(mktime(date('H'), date('i') - 10, 0, date('n'), date('j')) => 'Just Now', mktime(0, 0, 0, date('n'), date('j')) => 'Today', mktime(0, 0, 0, date('n'), date('j') - date('N') + 1) => 'This Week', mktime(0, 0, 0, date('n'), 1) => 'This Month', mktime(0, 0, 0, date('n') - 1, 1) => 'Last Month', mktime(0, 0, 0, 1, 1) => 'This Year', mktime(0, 0, 0, 1, 1, date('Y') - 1) => 'Last Year'); $section = current($sections); foreach ($results as $result_time => &$result) { if ($result_time < key($sections)) { while ($result_time < key($sections) && $section !== false) { $section = next($sections); } if ($section === false) { break; } } if (!isset($json['pts']['msg']['results'][current($sections)])) { $json['pts']['msg']['results'][current($sections)] = array(); } if ($result != null) { $json['pts']['msg']['results'][current($sections)][] = $result; } } $this->send_json_data($user->socket, $json); break; case 'user-svg-system-graphs': // pts_client::timed_function(array($this, 'generate_system_svg_graphs'), array($user), 1, array($this, 'sensor_logging_continue'), array($user)); $this->generate_system_svg_graphs($user, $args); break; case 'user-large-svg-system-graphs': // pts_client::timed_function(array($this, 'generate_system_svg_graphs'), array($user), 1, array($this, 'sensor_logging_continue'), array($user)); $this->generate_large_system_svg_graphs($user, $args); break; case 'tests-by-popularity': $args = explode(' ', $args); $limit = isset($args[0]) && is_numeric($args[0]) ? $args[0] : 10; $test_type = isset($args[1]) && $args[1] != null ? $args[1] : null; $tests = pts_openbenchmarking_client::popular_tests($limit, $test_type); $json['pts']['msg']['name'] = 'tests_by_popularity'; $json['pts']['msg']['test_count'] = count($tests); $json['pts']['msg']['test_type'] = $test_type; $json['pts']['msg']['tests'] = array(); $json['pts']['msg']['test_profiles'] = array(); foreach ($tests as $test) { $json['pts']['msg']['tests'][] = $test; $tp = new pts_test_profile($test); $json['pts']['msg']['test_profiles'][] = base64_encode($tp->to_json()); } $this->send_json_data($user->socket, $json); break; case 'available-system-logs': if ($this->phodevi_vfs instanceof phodevi_vfs) { $json['pts']['msg']['name'] = 'available_system_logs'; $json['pts']['msg']['logs'] = $this->phodevi_vfs->list_cache_nodes($args); $this->send_json_data($user->socket, $json); } break; case 'fetch-system-log': if ($this->phodevi_vfs instanceof phodevi_vfs && $args != null && $this->phodevi_vfs->cache_isset_names($args)) { $json['pts']['msg']['name'] = 'fetch_system_log'; $json['pts']['msg']['log_name'] = $args; $json['pts']['msg']['log'] = base64_encode($this->phodevi_vfs->__get($args)); $this->send_json_data($user->socket, $json); } break; case 'pts-version': $json['pts']['msg']['name'] = 'pts_version'; $json['pts']['msg']['version'] = pts_core::program_title(true); $this->send_json_data($user->socket, $json); break; case 'core-version': $version = PTS_CORE_VERSION; $this->send_data($user->socket, $version); break; case 'run-benchmark-queue': // BENCHMARK //$this->run_benchmark($user, $args); pts_client::fork(array($this, 'run_benchmark'), array($user, $args)); break; } } }
public static function render_page_process($PATH) { $local_only = false; switch (isset($PATH[0]) ? $PATH[0] : null) { case 'locally_available_tests': $local_only = true; $selected = 'Locally Available Tests'; $tests = pts_openbenchmarking::available_tests(); break; case 'available_tests': $selected = 'Available Tests'; $tests = pts_openbenchmarking::available_tests(); break; case 'installed_tests': default: $tests = pts_tests::installed_tests(); $selected = 'Installed Tests'; break; } echo '<h2>'; $sub_links = array('Available Tests' => 'tests/available_tests', 'Locally Available Tests' => 'tests/locally_available_tests', 'Installed Tests' => 'tests/installed_tests'); foreach ($sub_links as $txt => $loc) { echo '<a href="/?' . $loc . '">' . ($selected == $txt ? '<span class="alt">' : null) . $txt . ($selected == $txt ? '<span class="alt">' : null) . '</a> '; } echo '</h2>'; $installed_dependencies = pts_external_dependencies::installed_dependency_names(); $tests_to_show = array(); foreach ($tests as $identifier) { $test_profile = new pts_test_profile($identifier); if (!$test_profile->is_supported(false) || $test_profile->get_title() == null) { // Don't show unsupported tests continue; } if ($local_only && count($test_dependencies = $test_profile->get_dependencies()) > 0) { $dependencies_met = true; foreach ($test_dependencies as $d) { if (!in_array($d, $installed_dependencies)) { $dependencies_met = false; break; } } if ($dependencies_met == false) { continue; } } if ($local_only && pts_test_install_request::test_files_available_locally($test_profile) == false) { continue; } array_push($tests_to_show, $test_profile); } echo '<div style="overflow: hidden;">'; $tests_to_show = array_unique($tests_to_show); usort($tests_to_show, array('pts_webui_tests', 'cmp_result_object_sort')); $category = null; foreach ($tests_to_show as &$test_profile) { if ($category != $test_profile->get_test_hardware_type()) { $category = $test_profile->get_test_hardware_type(); echo '</div><a name="' . $category . '"></a>' . PHP_EOL . '<h2>' . $category . '</h2>' . PHP_EOL . '<div style="overflow: hidden;">'; $popularity_index = pts_openbenchmarking_client::popular_tests(-1, pts_openbenchmarking_client::read_repository_test_profile_attribute($test_profile, 'test_type')); } $last_updated = pts_openbenchmarking_client::read_repository_test_profile_attribute($test_profile, 'last_updated'); $popularity = array_search($test_profile->get_identifier(false), $popularity_index); $secondary_message = null; if ($last_updated > time() - 60 * 60 * 24 * 21) { // Mark it as newly updated if uploaded in past 3 weeks $secondary_message = '<strong>Newly Updated.</strong>'; } else { if ($popularity === 0) { $secondary_message = '<strong>Most Popular.</strong>'; } else { if ($popularity < 4) { $secondary_message = '<strong>Very Popular.</strong>'; } } } echo '<a href="?test/' . $test_profile->get_identifier() . '"><div class="pts_blue_bar"><strong>' . trim($test_profile->get_title() . ' ' . $test_profile->get_app_version()) . '</strong><br /><span style="">~' . max(1, round($test_profile->get_estimated_run_time() / 60)) . ' mins To Run. ' . $secondary_message . '</span></div></a>'; } echo '</div>'; }