Good database side stuff coming soon. Stay tuned :)
On Thu, Aug 18, 2011 at 1:21 PM, Jeff Squyres <jsquyres_at_[hidden]> wrote:
> Awesome. :-)
>
> On Aug 18, 2011, at 1:20 PM, jjhursey_at_[hidden] wrote:
>
>> Author: jjhursey
>> Date: 2011-08-18 13:20:35 EDT (Thu, 18 Aug 2011)
>> New Revision: 1400
>> URL: https://svn.open-mpi.org/trac/mtt/changeset/1400
>>
>> Log:
>> Add support for Summary tables.
>>
>> * Improve the reporting of execution time (now a float in seconds)
>> * Wire in the Summary table into the query path. Selected only if query is eligible
>> * Report if the summary table was used or direct access in the report header.
>> * Better accounting of time spent doing sql queries.
>>
>>
>>
>> Text files modified:
>> trunk/server/php/database.inc | 45 +++
>> trunk/server/php/index.php | 18 +
>> trunk/server/php/reporter/db_iface.inc | 462 ++++++++++++++++++++++++++++++++++++++-
>> trunk/server/php/reporter/main_reporter.inc | 22 +
>> 4 files changed, 518 insertions(+), 29 deletions(-)
>>
>> Modified: trunk/server/php/database.inc
>> ==============================================================================
>> --- trunk/server/php/database.inc (original)
>> +++ trunk/server/php/database.inc 2011-08-18 13:20:35 EDT (Thu, 18 Aug 2011)
>> @@ -116,7 +116,8 @@
>> function do_pg_query($cmd, $silent) {
>> do_pg_connect();
>>
>> - $start = time();
>> + $start = gettimeofday();
>> + $start = $start['sec'] + ($start['usec'] / 1000000.0);
>>
>> debug("\nSQL: $cmd\n");
>> if (! ($db_res = pg_query($cmd))) {
>> @@ -131,10 +132,12 @@
>> }
>> }
>>
>> - $finish = time();
>> + $finish = gettimeofday();
>> + $finish = $finish['sec'] + ($finish['usec'] / 1000000.0);
>> $elapsed = $finish - $start;
>>
>> - stats("\nExecution time: " . $elapsed . " seconds" .
>> + stats("\ndo_pg_query()".
>> + "\nExecution time: " . round($elapsed, 5) . " seconds" .
>> "\nRows affected: " . pg_affected_rows($db_res) .
>> "\nRows retrieved: " . pg_num_rows($db_res));
>>
>> @@ -160,6 +163,9 @@
>>
>> $rows = null;
>>
>> + $start = gettimeofday();
>> + $start = $start['sec'] + ($start['usec'] / 1000000.0);
>> +
>> debug("\nSQL: $cmd\n");
>> if (! ($result = pg_query($cmd))) {
>> $out = "\nSQL QUERY: " . $cmd .
>> @@ -173,6 +179,23 @@
>> $row = pg_fetch_array($result, $i, PGSQL_NUM);
>> $rows[] = $row[0];
>> }
>> +
>> + $finish = gettimeofday();
>> + $finish = $finish['sec'] + ($finish['usec'] / 1000000.0);
>> + $elapsed = $finish - $start;
>> +
>> + stats("\nsimple_select()".
>> + "\nExecution time: " . round($elapsed, 5) . " seconds" .
>> + "\nRows affected: " . pg_affected_rows($result) .
>> + "\nRows retrieved: " . pg_num_rows($result));
>> +
>> + #if( $elapsed > 0.01 ) {
>> + # print "<pre>SQL:$cmd</pre>\n";
>> + #}
>> +
>> + global $global_sql_time_elapsed;
>> + $global_sql_time_elapsed += $elapsed;
>> +
>> return $rows;
>> }
>>
>> @@ -180,6 +203,9 @@
>> function select($cmd) {
>> do_pg_connect();
>>
>> + $start = gettimeofday();
>> + $start = $start['sec'] + ($start['usec'] / 1000000.0);
>> +
>> debug("\nSQL: $cmd\n");
>> if (! ($result = pg_query($cmd))) {
>> $out = "\nSQL QUERY: " . $cmd .
>> @@ -188,6 +214,19 @@
>> mtt_error($out);
>> return NULL;
>> }
>> +
>> + $finish = gettimeofday();
>> + $finish = $finish['sec'] + ($finish['usec'] / 1000000.0);
>> + $elapsed = $finish - $start;
>> +
>> + stats("\nselect()".
>> + "\nExecution time: " . round($elapsed, 5) . " seconds" .
>> + "\nRows affected: " . pg_affected_rows($result) .
>> + "\nRows retrieved: " . pg_num_rows($result));
>> +
>> + global $global_sql_time_elapsed;
>> + $global_sql_time_elapsed += $elapsed;
>> +
>> return pg_fetch_all($result);
>> }
>>
>>
>> Modified: trunk/server/php/index.php
>> ==============================================================================
>> --- trunk/server/php/index.php (original)
>> +++ trunk/server/php/index.php 2011-08-18 13:20:35 EDT (Thu, 18 Aug 2011)
>> @@ -90,7 +90,8 @@
>> #
>> # Keep track of time
>> #
>> -$start = time();
>> +$start = gettimeofday();
>> +$start = $start['sec'] + ($start['usec'] / 1000000.0);
>>
>> #
>> # Track time elapsed for sql
>> @@ -105,10 +106,10 @@
>> #
>> # Report on script's execution time
>> #
>> -$finish = time();
>> +$finish = gettimeofday();
>> +$finish = $finish['sec'] + ($finish['usec'] / 1000000.0);
>> +
>> $elapsed = $finish - $start;
>> -print("\n<br><p>Total script execution time: " . $elapsed . " second(s)");
>> -print("\n<br><p>Total SQL execution time: " . $global_sql_time_elapsed . " second(s)</p>");
>>
>> #
>> # Display input parameters
>> @@ -123,8 +124,13 @@
>> #
>> # Footer
>> #
>> -print hidden_carryover($_GET) .
>> - "\n<hr></form>$mtt_body_html_suffix</body></html>";
>> +print hidden_carryover($_GET) ."\n".
>> + "<hr></form>\n".
>> + "<p> Time: ".round($elapsed,3)." sec. ".
>> + "(PHP: " .round(($elapsed - $global_sql_time_elapsed), 3)." /".
>> + " SQL: " .round($global_sql_time_elapsed,3).")<br>\n".
>> + "$mtt_body_html_suffix\n".
>> + "</body></html>";
>>
>> exit;
>>
>>
>> Modified: trunk/server/php/reporter/db_iface.inc
>> ==============================================================================
>> --- trunk/server/php/reporter/db_iface.inc (original)
>> +++ trunk/server/php/reporter/db_iface.inc 2011-08-18 13:20:35 EDT (Thu, 18 Aug 2011)
>> @@ -16,7 +16,7 @@
>> function db_iface_compose_sql_select($query, $report_type) {
>> $sql_cmd = "";
>>
>> - #print "<pre>".print_r($query, true)."</pre>\n";
>> + #print "<pre>Type: (".$report_type.")\n".print_r($query, true)."</pre>\n";
>>
>> #
>> # Detail:
>> @@ -24,6 +24,7 @@
>> #
>> if ($report_type == 'detail') {
>> $ret = compose_sql_select($query);
>> + $ret['fast'] = false;
>> }
>> #
>> # Performance:
>> @@ -31,28 +32,40 @@
>> #
>> elseif ($report_type == 'performance') {
>> $ret = compose_sql_select($query);
>> + $ret['fast'] = false;
>> }
>> #
>> # Summary:
>> #
>> else {
>> #
>> - # All Phases
>> + # Determine if 'summary' table eligible
>> #
>> - if( count($query['phases']) > 1 ) {
>> - $sql_cmd = INTERNAL_db_iface_compose_sql_summary_all($query);
>> + if( INTERNAL_db_iface_is_summary_table_eligible($query) ) {
>> + $sql_cmd = INTERNAL_db_iface_compose_sql_summary_all_fast($query);
>> $ret['sql_cmd'] = $sql_cmd;
>> - }
>> - #
>> - # Single Phase:
>> - # Use the old mechanism
>> - #
>> - else {
>> - $ret = compose_sql_select($query);
>> + $ret['fast'] = true;
>> + } else {
>> + #
>> + # All Phases
>> + #
>> + if( count($query['phases']) > 1 ) {
>> + # JJH Turn this off for now, not sure exactly how much of a win
>> + # this is, and it is not quite ready.
>> + #$sql_cmd = INTERNAL_db_iface_compose_sql_summary_all($query);
>> + #$ret['sql_cmd'] = $sql_cmd;
>> + $ret = compose_sql_select($query);
>> + }
>> + #
>> + # Single Phase:
>> + # Use the old mechanism
>> + #
>> + else {
>> + $ret = compose_sql_select($query);
>> + }
>> + $ret['fast'] = false;
>> }
>> }
>> - #print "<pre>\n$sql_cmd\n</pre>";
>> - #exit;
>>
>> return $ret;
>> }
>> @@ -60,6 +73,429 @@
>> # -----------------------------------------------------------------------------
>> # -----------------------------------------------------------------------------
>> # -----------------------------------------------------------------------------
>> +function INTERNAL_db_iface_phase_included($phases, $needle) {
>> + foreach($phases as $key) {
>> + if( 0 == strncmp($key, $needle, strlen($key)) ) {
>> + return true;
>> + }
>> + }
>> + return false;
>> +}
>> +
>> +function INTERNAL_db_iface_get_aggregation_conv() {
>> + return array(
>> + "_mpi_p" => "_mpi_p > 0",
>> + "_mpi_f" => "_mpi_f > 0",
>> + "_build_p" => "_build_p > 0",
>> + "_build_f" => "_build_f > 0",
>> + "_run_p" => "_run_p > 0",
>> + "_run_f" => "_run_f > 0",
>> + "_run_s" => "_run_s > 0",
>> + "_run_t" => "_run_t > 0",
>> + "_run_l" => "_run_l > 0",
>> + );
>> +}
>> +
>> +function INTERNAL_db_iface_get_summary_columns() {
>> + return array(
>> + "start_timestamp" => "start_timestamp",
>> + "trial" => "trial",
>> + # Table: submit
>> + "http_username" => "submit_http_username",
>> + # Table: compute_cluster
>> + "platform_name" => "compute_cluster_platform_name",
>> + "platform_hardware" => "compute_cluster_platform_hardware",
>> + "os_name" => "compute_cluster_os_name",
>> + # Table: mpi_get
>> + "mpi_name" => "mpi_get_mpi_name",
>> + "mpi_version" => "mpi_get_mpi_version",
>> + # Table: mpi_install_configure_args
>> + "bitness" => "mpi_install_configure_args_bitness",
>> + "endian" => "mpi_install_configure_args_endian",
>> + # Table: compiler
>> + "compiler_name" => "compiler_compiler_name",
>> + "compiler_version" => "compiler_compiler_version",
>> + # Table: test_suites
>> + "suite_name" => "test_suites_suite_name",
>> + # Table: test_run
>> + "np" => "np",
>> + # Aggregations
>> + "_mpi_p" => "_mpi_p",
>> + "_mpi_f" => "_mpi_f",
>> + "_build_p" => "_build_p",
>> + "_build_f" => "_build_f",
>> + "_run_p" => "_run_p",
>> + "_run_f" => "_run_f",
>> + "_run_s" => "_run_s",
>> + "_run_t" => "_run_t",
>> + "_run_l" => "_run_l",
>> + );
>> +}
>> +
>> +function INTERNAL_db_iface_is_summary_table_eligible($query) {
>> +
>> + #
>> + # Must be a query within the past 24 hours
>> + #
>> + $valid_start = select_scalar("SELECT ".
>> + "date_trunc('hour', timestamp '".($query['absolute_start'][0])."') >= ".
>> + "date_trunc('hour', now() - interval '24 hours');");
>> + if( 0 != strncmp($valid_start, "t", strlen("t")) ) {
>> + #print "<pre>Invalid Date Range: (".$query['absolute_start'][0].")</pre>\n";
>> + return false;
>> + }
>> +
>> + #
>> + # Get eligible column set
>> + #
>> + $eligible_columns = INTERNAL_db_iface_get_summary_columns();
>> +
>> + $selects = array_unique(
>> + array_merge(
>> + $query['select'],
>> + $query['select_more'],
>> + $query['performance'],
>> + $query['where'],
>> + $query['where_not']
>> + )
>> + );
>> + # Skip the 'row number'
>> + unset($selects['n']);
>> +
>> + #
>> + # Search for outlier columns
>> + #
>> + foreach (array_keys($selects) as $sel_col ) {
>> + $found = false;
>> + foreach (array_keys($eligible_columns) as $e_col ) {
>> + if( 0 == strncmp($e_col,$sel_col, strlen($e_col)) ) {
>> + $found = true;
>> + #print "<pre>Found: (".$sel_col.") as (".$e_col.")</pre>\n";
>> + break;
>> + }
>> + }
>> + # Stop on first column not found
>> + if( !$found ) {
>> + #print "<pre>Missing: (".$sel_col.")</pre>\n";
>> + return false;
>> + }
>> + }
>> + #print "<pre>Query Eligible...</pre>\n";
>> + return true;
>> +}
>> +
>> +function INTERNAL_db_iface_compose_sql_summary_all_fast($query) {
>> + global $nlt, $nltt;
>> +
>> + $sql_cmd = "";
>> + $sql_cmd_debug = "";
>> +
>> + #
>> + # Get eligible column conversions
>> + #
>> + $eligible_columns = INTERNAL_db_iface_get_summary_columns();
>> +
>> + $selects = array_unique(
>> + array_merge(
>> + $query['select'],
>> + $aggregates,
>> + $query['select_more'],
>> + $query['performance']
>> + )
>> + );
>> + # Skip the 'row number'
>> + unset($query['select']['n']);
>> +
>> + #
>> + # Some Debugging Options
>> + #
>> + $explain = isset($_GET['explain']) ? 1 : 0;
>> + $analyze = isset($_GET['analyze']) ? 1 : 0;
>> + if ($explain) {
>> + $sql_cmd_debug .= "EXPLAIN\n";
>> + }
>> + if ($analyze) {
>> + $sql_cmd_debug .= "ANALYZE\n";
>> + }
>> +
>> + #
>> + # SELECT
>> + #
>> + $sql_cmd .= "SELECT";
>> + foreach ($selects as $item ) {
>> + if( 0 == strncmp($item, "nextval('row_number')", strlen($item)) ) {
>> + $sql_cmd .= $nlt . $item.",";
>> + } else {
>> + $sql_cmd .= $nlt . $eligible_columns[$item]." as ".$item.",";
>> + }
>> + }
>> + $sql_cmd .= $nlt;
>> + $sql_cmd .= join(",$nlt", $query['aggregates']);
>> + $sql_cmd .= "\n";
>> +
>> + #
>> + # FROM
>> + #
>> + $sql_cmd .= "FROM ($nlt";
>> +
>> + #
>> + # The aggregates need to be in the external where clause
>> + #
>> + $external_where = array();
>> + $agg_conv = INTERNAL_db_iface_get_aggregation_conv();
>> + foreach(array_keys($query['where']) as $where) {
>> + foreach(array_keys($agg_conv) as $conv) {
>> + if(0 == strncmp($where, $conv, strlen($conv)) ) {
>> + unset($query['where'][$where]);# = $agg_conv[$conv];
>> + $external_where[$conv] = $agg_conv[$conv];
>> + }
>> + }
>> + }
>> +
>> + #
>> + # Substitute the column summary names
>> + #
>> + foreach(array_keys($query['where']) as $where) {
>> + foreach(array_keys($eligible_columns) as $col) {
>> + if( 0 == strncmp($col, $where, strlen($col)) ) {
>> + $query['where'][$where] = preg_replace(("/".$where."/"), $eligible_columns[$col], $query['where'][$where]);
>> + }
>> + }
>> + }
>> +
>> + #
>> + # Access the summary sub-tables
>> + #
>> + $table_mpi_install = NULL;
>> + $table_test_build = NULL;
>> + $table_test_run = NULL;
>> +
>> + unset($selects['n']);
>> + if( INTERNAL_db_iface_phase_included($query['phases'], "mpi_install") ) {
>> + $table_mpi_install = INTERNAL_db_iface_compose_sql_summary_fast_mpi_install($query, $selects);
>> + }
>> + if( INTERNAL_db_iface_phase_included($query['phases'], "test_build") ) {
>> + $table_test_build = INTERNAL_db_iface_compose_sql_summary_fast_test_build($query, $selects);
>> + }
>> + if( INTERNAL_db_iface_phase_included($query['phases'], "test_run") ) {
>> + $table_test_run = INTERNAL_db_iface_compose_sql_summary_fast_test_run($query, $selects);
>> + }
>> +
>> + if( NULL != $table_mpi_install ) {
>> + $sql_cmd .= "($nlt";
>> + $sql_cmd .= $table_mpi_install;
>> + $sql_cmd .= ")".$nlt;
>> + }
>> +
>> + if( NULL != $table_mpi_install && NULL != $table_test_build ) {
>> + $sql_cmd .= "UNION ALL$nlt";
>> + }
>> +
>> + if( NULL != $table_test_build ) {
>> + $sql_cmd .= "($nlt";
>> + $sql_cmd .= $table_test_build ."$nlt";
>> + $sql_cmd .= ")".$nlt;
>> + }
>> +
>> + if( NULL != $table_test_build && NULL != $table_test_run ) {
>> + $sql_cmd .= "UNION ALL$nlt";
>> + }
>> +
>> + if( NULL != $table_test_run ) {
>> + $sql_cmd .= "($nlt";
>> + $sql_cmd .= $table_test_run ."$nlt";
>> + $sql_cmd .= ")".$nlt;
>> + }
>> +
>> + $sql_cmd .= ") as summary\n";
>> +
>> + #
>> + # External where (mostly aggregation options)
>> + #
>> + if( count($external_where) > 0 ) {
>> + $sql_cmd .= "WHERE ".$nlt;
>> + $sql_cmd .= join(" AND $nlt", array_values2($external_where));
>> + $sql_cmd .= "\n";
>> + }
>> +
>> + #
>> + # Group By
>> + #
>> + $groupbys = array_unique(
>> + array_merge(
>> + array_keys($query['select']),
>> + array_keys($query['select_more']),
>> + array_keys($query['performance'])
>> + )
>> + );
>> +
>> + $sql_cmd .= "\n";
>> + if (array_keys($query['select'])) {
>> + $sql_cmd .= "GROUP BY " .$nlt;
>> + $sql_cmd .= join(",$nlt", $groupbys);
>> + }
>> +
>> + #
>> + # Order by
>> + #
>> + $orderbys = array_unique(
>> + array_merge(
>> + array_keys($query['select'])
>> + )
>> + );
>> +
>> + $sql_cmd .= "\n";
>> + if (array_keys($query['select'])) {
>> + $sql_cmd .= "ORDER BY " .$nlt;
>> + $sql_cmd .= join(",$nlt", $orderbys)."\n";;
>> + }
>> +
>> + #
>> + # Row Numbers and offsets
>> + #
>> + if (array_keys($query['select'])) {
>> + if( isset($_GET['rows'] ) ) {
>> + $limit = LIMIT;
>> + $sql_cmd .= "\nLIMIT $limit";
>> + }
>> +
>> + $offset = offset($query);
>> + $sql_cmd .= "\nOFFSET $offset";
>> + }
>> +
>> + $sql_cmd .= ";";
>> +
>> + #
>> + # Explain and Analyze if requested
>> + #
>> + if ($explain || $analyze) {
>> + $sql_cmd_debug .= $sql_cmd;
>> +
>> + #
>> + # Get analysis
>> + #
>> + $resource = do_pg_query($sql_cmd_debug);
>> + $arr = pg_fetch_all($resource);
>> +
>> + foreach (array_keys($arr) as $i) {
>> + foreach ($arr[$i] as $line) {
>> + $plan[] = $line;
>> + }
>> + }
>> +
>> + #
>> + # Write plan to a file (for right-click Save)
>> + #
>> + $filename = 'tmp/' . params2filename($_GET) . '.txt';
>> + $plan_txt = join("\n", $plan);
>> + write_to_file($filename, $plan_txt);
>> +
>> + #
>> + # Write plan to browser with original sql
>> + #
>> + debug_sql($plan_txt, 0);
>> + debug_sql($sql_cmd_debug, 0);
>> +
>> + #
>> + # Link to query plan
>> + #
>> + $top = DOCROOT;
>> + print "<br><a href='$top/$filename'>Query plan</a>";
>> +
>> + }
>> +
>> + return $sql_cmd;
>> +}
>> +
>> +function INTERNAL_db_iface_compose_sql_summary_fast_sub_table_base($query, $selects, $table, $agg) {
>> + global $nlt, $nltt;
>> +
>> + #
>> + # Get eligible column set
>> + #
>> + $eligible_columns = INTERNAL_db_iface_get_summary_columns();
>> +
>> + #
>> + # Build Select
>> + #
>> + $sql_cmd .= "SELECT$nltt";
>> +
>> + $sql_cmd .= "trial,".$nltt;
>> + foreach($selects as $item ) {
>> + $sql_cmd .= $eligible_columns[$item].",".$nltt;
>> + }
>> +
>> + #
>> + # Aggregation fields (for sub-table)
>> + #
>> + for($i = 0; $i < count($agg); ++$i ) {
>> + if( $i == (count($agg)-1) ) {
>> + $sql_cmd .= $agg[$i].$nlt;
>> + } else {
>> + $sql_cmd .= $agg[$i].",".$nltt;
>> + }
>> + }
>> +
>> + #
>> + # FROM
>> + #
>> + $sql_cmd .= "FROM ".$table . $nlt;
>> +
>> + #
>> + # WHERE
>> + #
>> + $sql_cmd .= "WHERE ".$nltt;
>> + $sql_cmd .= join(" AND $nltt", array_values2($query['where']));
>> + $sql_cmd .= join(" AND $nltt", array_values2($query['where_not']));
>> +
>> + return $sql_cmd;
>> +}
>> +
>> +function INTERNAL_db_iface_compose_sql_summary_fast_mpi_install($query, $selects) {
>> + $agg = array(
>> + "pass as _mpi_p",
>> + "fail as _mpi_f",
>> + "(0) as _build_p",
>> + "(0) as _build_f",
>> + "(0) as _run_p",
>> + "(0) as _run_f",
>> + "(0) as _run_s",
>> + "(0) as _run_t",
>> + "(0) as _run_l",
>> + );
>> + return INTERNAL_db_iface_compose_sql_summary_fast_sub_table_base($query, $selects, "summary_mpi_install", $agg);
>> +}
>> +
>> +function INTERNAL_db_iface_compose_sql_summary_fast_test_build($query, $selects) {
>> + $agg = array(
>> + "(0) as _mpi_p",
>> + "(0) as _mpi_f",
>> + "pass as _build_p",
>> + "fail as _build_f",
>> + "(0) as _run_p",
>> + "(0) as _run_f",
>> + "(0) as _run_s",
>> + "(0) as _run_t",
>> + "(0) as _run_l",
>> + );
>> + return INTERNAL_db_iface_compose_sql_summary_fast_sub_table_base($query, $selects, "summary_test_build", $agg);
>> +}
>> +
>> +function INTERNAL_db_iface_compose_sql_summary_fast_test_run($query, $selects) {
>> + $agg = array(
>> + "(0) as _mpi_p",
>> + "(0) as _mpi_f",
>> + "(0) as _build_p",
>> + "(0) as _build_f",
>> + "pass as _run_p",
>> + "fail as _run_f",
>> + "skip as _run_s",
>> + "timeout as _run_t",
>> + "perf as _run_l",
>> + );
>> + return INTERNAL_db_iface_compose_sql_summary_fast_sub_table_base($query, $selects, "summary_test_run", $agg);
>> +}
>> +
>> function INTERNAL_db_iface_compose_sql_summary_all($query) {
>> global $nlt, $nltt;
>>
>>
>> Modified: trunk/server/php/reporter/main_reporter.inc
>> ==============================================================================
>> --- trunk/server/php/reporter/main_reporter.inc (original)
>> +++ trunk/server/php/reporter/main_reporter.inc 2011-08-18 13:20:35 EDT (Thu, 18 Aug 2011)
>> @@ -28,6 +28,8 @@
>> function display_report() {
>> unset($resource);
>>
>> + $is_fast_lookup = false;
>> +
>> # Create or update cookie, and set
>> # definitions accordingly
>> process_cookie($_GET, $_COOKIE);
>> @@ -120,7 +122,8 @@
>> $ret = db_iface_compose_sql_select($query, $report_type);
>>
>> $sql_cmd = $ret['sql_cmd'];
>> - $sql_count_star = $ret['count_star']; # JJH XXXX
>> + $sql_count_star = $ret['count_star']; # JJH Needed?
>> + $is_fast_lookup = $ret['fast'];
>>
>> # Execute query
>> $resource = do_pg_query($sql_cmd);
>> @@ -148,7 +151,7 @@
>> return;
>>
>> # Print some basic, useful info atop each report table
>> - report_header($date_fields, $phases, $n);
>> + report_header($date_fields, $phases, $n, $is_fast_lookup);
>>
>> # Do not print an empty table
>> if (pg_num_rows($resource) < 1) {
>> @@ -2126,9 +2129,9 @@
>> }
>>
>> # Print some basic, useful info atop each report table
>> -function report_header($date_fields, $phases, $n) {
>> +function report_header($date_fields, $phases, $n, $fast) {
>>
>> - $basic_info = basic_info($date_fields, $phases, $n);
>> + $basic_info = basic_info($date_fields, $phases, $n, $fast);
>> $permalinks = permalinks($date_fields);
>>
>> # Print general info/links up top
>> @@ -2200,7 +2203,7 @@
>>
>> # Print current time, date range, phases, and
>> # result filter for the report
>> -function basic_info($date_fields, $phases, $num_rows) {
>> +function basic_info($date_fields, $phases, $num_rows, $fast) {
>>
>> $current = $date_fields["current"];
>> $absolute = $date_fields["absolute"];
>> @@ -2213,10 +2216,15 @@
>> "<tr><td><b>Current time (" . strtoupper(TIMEZONE) . ")</b>:<td>" . $current .
>> "<tr><td><b>Date range (" . strtoupper(TIMEZONE) . ")</b>: <td>" . $absolute .
>> "<tr><td><b>Phase(s)</b>:<td>" . en_join(array_map('label', $phases));
>> + if( $fast ) {
>> + $ret .= " <i>(Via Summary)</i>";
>> + } else {
>> + $ret .= " <i>(Via Direct Access)</i>";
>> + }
>>
>> - if ($_GET["test_result"])
>> + if ($_GET["test_result"]) {
>> $ret .= "<tr><td><b>Result</b>:<td>" . label(label($_GET["test_result"])) . " only";
>> -
>> + }
>> $ret .= "<tr><td><b>Number of rows</b>:<td>" . $num_rows .
>> "</table>";
>>
>> _______________________________________________
>> mtt-svn mailing list
>> mtt-svn_at_[hidden]
>> http://www.open-mpi.org/mailman/listinfo.cgi/mtt-svn
>
>
> --
> Jeff Squyres
> jsquyres_at_[hidden]
> For corporate legal information go to:
> http://www.cisco.com/web/about/doing_business/legal/cri/
>
>
> _______________________________________________
> mtt-devel mailing list
> mtt-devel_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/mtt-devel
>
>
--
Joshua Hursey
Postdoctoral Research Associate
Oak Ridge National Laboratory
http://users.nccs.gov/~jjhursey
|