function show_statspack($dir, $filename) { //Include require_once "/home/orainf/scripto/php/my_library.php"; // sanity check if (is_file($dir . $filename)) { // open file $fh = fopen($dir . $filename, "r") or die("Could not open file"); //echo "<BR> file: $filename in dir: $dir <BR>"; //some variables $hosts_array = array(); $hosts_array_counter = 0; $data_values1_counter = 0; $data_values2_counter = 0; $data_values3_counter = 0; $data_values4_counter = 0; $data_values5_counter = 0; $section = 0; // Extract from the filename data time of creation nedded for hash view preg_match("/....-..-../", $filename, $match_result); $timestamp = $match_result[0]; //echo "<BR> timestamp: $timestamp"; // Heading //print "<h2>" . substr($dir . $filename, 29) . "</h2>"; // read file while (!feof($fh)) { $data = fgets($fh); // remove any cariage return and new line characters //$data = str_replace("\r",'',$data); //$data = str_replace("\n",'',$data); // remove FF char $data = str_replace("\f", '', $data); if (strlen($data) == 0) { continue; } // Spot sections start if (strstr($data, "SQL ordered by Elapsed Time ")) { echo "<font color='red'>"; $section = 1; } // echo "<br> data: $data <br>"; // Spot sections if (strstr($data, "SQL ordered by Gets ")) { echo "<font color='green'>"; $section_name = "Buffer_Gets"; } if (strstr($data, "SQL ordered by Reads ")) { echo "<font color='green'>"; $section_name = "Physical_Reads"; } if (strstr($data, "SQL ordered by CPU ")) { echo "<font color='green'>"; $section_name = "CPU_Usage"; } if (strstr($data, "SQL ordered by Elapsed ")) { $section_name = "Elapsed_Time"; } if (strstr($data, "SQL ordered by Executions ")) { echo "<font color='green'>"; $section_name = "Executions_Rows"; } if (strstr($data, "SQL ordered by Parse Calls ")) { echo "<font color='green'>"; $section_name = "Parse_Calls"; } if (strstr($data, "SQL ordered by Sharable Memory ")) { echo "<font color='green'>"; $section_name = "Sharable_Mem"; } if ($section) { // I need to stripe multiple spaces $data = preg_replace('/\\s\\s+/', ' ', $data); // Delete the leading space $data = trim($data); // Separate the string into pieces list($trash1, $trash2, $trash3, $trash4, $trash5, $trash6, $trash7) = split(' ', $data); // If the all the tokens are number I assume we are in the first line describing // SQL with values. This is a bit naive, but I see no other way $trash1 = str_replace(",", "", $trash1); // | Buffer Gets | $trash2 = str_replace(",", "", $trash2); // | Executions | $trash3 = str_replace(",", "", $trash3); // | Gets per Exec| $trash4 = str_replace(",", "", $trash4); // | %Total | $trash5 = str_replace(",", "", $trash5); // | CPU Time (s) | $trash6 = str_replace(",", "", $trash6); // | Elapsd Time (| if (is_numeric($trash1) && is_numeric($trash2) && is_numeric($trash3)) { //echo "<BR> section_name: $section_name , trash1: $trash1 , trash2: $trash2 , trash3: $trash3 , trash4: $trash4 , trash5: $trash5 , trash6: $trash6 , trash7: $trash7 <BR>"; //If this is a numeric value, then the next is module name, we need it so I take it $module_name = fgets($fh); if (strstr($module_name, "Module: ")) { $module_name = str_replace("Module: ", "", $module_name); $module_name = substr($module_name, 0, 13); //Trimint to first 13 char } else { $module_name = "NA"; } //If this was the module name then the next is SQL text, I take it $sql_text = fgets($fh); //echo "<BR>Moooodul name: $module_name <BR>"; // Bulding arrays with hash and values if ($section_name == "Buffer_Gets") { $data_values1[$data_values1_counter] = $trash1; //Buffer Gets $data_values1_label[$data_values1_counter] = $trash7; //SQL Id $data_values1_module[$data_values1_counter] = $module_name; $data_values1_sql[$data_values1_counter] = $sql_text; $data_values1_executions[$data_values1_counter] = $trash2; //Executions $data_values1_elapsedtime[$data_values1_counter] = $trash6; //Elapsed Time (s) $data_values1_counter++; } if ($section_name == "Physical_Reads") { $data_values2[$data_values2_counter] = $trash1; //Physical Reads $data_values2_label[$data_values2_counter] = $trash7; //SQL Id $data_values2_module[$data_values2_counter] = $module_name; $data_values2_sql[$data_values2_counter] = $sql_text; $data_values2_executions[$data_values2_counter] = $trash2; //Executions $data_values2_elapsedtime[$data_values2_counter] = $trash6; //Elapsed Time (s) $data_values2_counter++; } if ($section_name == "CPU_Usage") { $data_values3[$data_values3_counter] = $trash1; // CPU Time (s) $data_values3_label[$data_values3_counter] = $trash6; //sql_id $data_values3_module[$data_values3_counter] = $module_name; //module name $data_values3_sql[$data_values3_counter] = $sql_text; $data_values3_executions[$data_values3_counter] = $trash3; $data_values3_counter++; } if ($section_name == "Parse_Calls") { $data_values4[$data_values4_counter] = $trash1; $data_values4_label[$data_values4_counter] = $hash_value; $data_values4_module[$data_values4_counter] = $module_name; $data_values4_sql[$data_values4_counter] = $sql_text; $data_values4_counter++; } if ($section_name == "Elapsed_Time") { $data_values5[$data_values5_counter] = $trash1; //Elapsed Time (s) $data_values5_label[$data_values5_counter] = $trash6; //sql_id $data_values5_module[$data_values5_counter] = $module_name; $data_values5_sql[$data_values5_counter] = $sql_text; $data_values5_executions[$data_values5_counter] = $trash3; $data_values5_counter++; } } // if ( is_numeric($trash1) } // if ( $section ) // Spot sections end if (strstr($data, "Instance Activity Stats ")) { echo "<font color='blue'>"; $section = 0; } //echo $data . "</font>"; echo "</font>"; // End the line //echo "<BR></a>"; } // close file fclose($fh); //show_array($data_values2); //show_array($data_values2_label); //show_array($data_values2_elapsedtime); //show_array($data_values2_executions); echo "<table><tr><td>"; draw_chart_section($dir, $filename, $data_values3, $data_values3_label, $data_values3_module, "CPU_Usage", $data_values3_executions, $timestamp, 400, 500); echo "</td><td>"; draw_chart_section($dir, $filename, $data_values1, $data_values1_label, $data_values1_module, "Buffer_Gets", $data_values1_executions, $timestamp, 400, 500); echo "</td>"; echo "</tr><tr>"; echo "<td>"; draw_chart_section($dir, $filename, $data_values2, $data_values2_label, $data_values2_module, "Physical_Reads", $data_values2_executions, $timestamp, 400, 500); echo "</td><td>"; draw_chart_section($dir, $filename, $data_values5, $data_values5_label, $data_values5_module, "Elapsed_Time", $data_values5_executions, $timestamp, 400, 500); echo "</td></tr><tr><td>"; //Now I need to build a large array and sort it by time elapsed // not needed from 10g //$data_merged_label = array_merge($data_values1_label, $data_values2_label); //$data_merged_elapsedtime = array_merge($data_values1_elapsedtime, $data_values2_elapsedtime); //$data_merged_module = array_merge($data_values1_module, $data_values2_module); //$data_merged_executions = array_merge($data_values1_executions, $data_values2_executions); //array_multisort($data_merged_elapsedtime, $data_merged_label, $data_merged_module, $data_merged_executions); //draw_chart_section($dir, array_reverse($data_merged_elapsedtime), array_reverse($data_merged_label), array_reverse($data_merged_module), "Elapsed time - in seconds", array_reverse($data_merged_executions), $timestamp, 400, 900); echo "</td></tr></table>"; } else { echo "File could not be found. <BR>"; } }
function show_statspack($dir, $filename) { //Include require_once "/home/orainf/scripto/php/my_library.php"; // sanity check if (is_file($dir . $filename)) { // open file $fh = fopen($dir . $filename, "r") or die("Could not open file"); //echo "<BR> file: $filename in dir: $dir <BR>"; //some variables $hosts_array = array(); $hosts_array_counter = 0; $data_values1_counter = 0; $data_values2_counter = 0; $data_values3_counter = 0; $data_values4_counter = 0; $data_values5_counter = 0; $data_values6_counter = 0; $data_values7_counter = 0; $sql_id_colors_counter = 0; $section = 0; $counter_top = 20; //populate clors $sql_id_colors[0] = '#F781F3'; $sql_id_colors[1] = '#BE81F7'; $sql_id_colors[2] = '#F6CECE'; $sql_id_colors[3] = '#F5BCA9'; $sql_id_colors[4] = '#F5D0A9'; $sql_id_colors[5] = '#F3E2A9'; $sql_id_colors[6] = '#F3F781'; $sql_id_colors[7] = '#D8F781'; $sql_id_colors[8] = '#BEF781'; $sql_id_colors[9] = '#9FF781'; $sql_id_colors[10] = '#81F7BE'; $sql_id_colors[11] = '#81F7D8'; $sql_id_colors[12] = '#81F7F3'; $sql_id_colors[13] = '#81DAF5'; $sql_id_colors[14] = '#81BEF7'; $sql_id_colors[15] = '#819FF7'; $sql_id_colors[16] = '#8181F7'; $sql_id_colors[17] = '#D8D8D8'; $sql_id_colors[18] = '#CBCBCB'; $sql_id_colors[19] = '#B2B2B2'; $sql_id_colors[20] = '#A4A4A4'; // Extract from the filename data time of creation nedded for hash view preg_match("/....-..-../", $filename, $match_result); $timestamp = $match_result[0]; //echo "<BR> timestamp: $timestamp"; // Heading //print "<h2>" . substr($dir . $filename, 29) . "</h2>"; // read file while (!feof($fh)) { $data = fgets($fh); // remove any cariage return and new line characters //$data = str_replace("\r",'',$data); //$data = str_replace("\n",'',$data); // remove FF char $data = str_replace("\f", '', $data); if (strlen($data) == 0) { continue; } // Spot sections start if (strstr($data, "SQL ordered by Elapsed Time ")) { echo "<font color='red'>"; $section = 1; } //WIP // echo "<br> data: $data <br>"; // Spot sections if (strstr($data, "SQL ordered by Gets ")) { echo "<font color='green'>"; $section_name = "Buffer_Gets"; } if (strstr($data, "SQL ordered by Physical Reads ")) { echo "<font color='green'>"; $section_name = "Physical_Reads"; } if (strstr($data, "SQL ordered by CPU ")) { echo "<font color='green'>"; $section_name = "CPU_Usage"; } if (strstr($data, "SQL ordered by Elapsed ")) { $section_name = "Elapsed_Time"; } if (strstr($data, "SQL ordered by Executions ")) { echo "<font color='green'>"; $section_name = "Executions"; } if (strstr($data, "SQL ordered by Parse Calls ")) { echo "<font color='green'>"; $section_name = "Parse_Calls"; } if (strstr($data, "SQL ordered by Sharable Memory ")) { echo "<font color='green'>"; $section_name = "Sharable_Mem"; } if (strstr($data, "SQL ordered by User I/O Wait Time ")) { echo "<font color='green'>"; $section_name = "User_IO_Wait"; } if (strstr($data, "SQL ordered by Version Count ")) { echo "<font color='green'>"; $section_name = "Version_Count"; } if (strstr($data, "SQL ordered by Cluster Wait Time ")) { echo "<font color='green'>"; $section_name = "Cluster_Wait"; } if (strstr($data, "Total - Physical Reads as a percentage of Total Disk ")) { echo "<font color='green'>"; $section_name = "TotalPhysical"; } //if (strstr ( $data, "Key Instance Activity Stats ")) { continue; } if (strstr($data, "Key Instance Activity Stats ")) { echo "<font color='green'>"; $section = 0; continue; } if ($section) { // I need to stripe multiple spaces $data = preg_replace('/\\s\\s+/', ' ', $data); // Delete the leading space $data = trim($data); // Separate the string into pieces list($trash1, $trash2, $trash3, $trash4, $trash5, $trash6, $trash7, $trash8) = split(' ', $data); // If the all the tokens are number I assume we are in the first line describing // SQL with values. This is a bit naive, but I see no other way // because of the trash3, which can be N/A if number of executions is 0, I check for trash4 instead $trash1 = str_replace(",", "", $trash1); // | Buffer Gets | $trash2 = str_replace(",", "", $trash2); // | Executions | $trash3 = str_replace(",", "", $trash3); // | Gets per Exec| $trash4 = str_replace(",", "", $trash4); // | %Total | $trash5 = str_replace(",", "", $trash5); // | CPU Time (s) | $trash6 = str_replace(",", "", $trash6); // | Elapsd Time (| // echo "<BR>RAW section_name: $section_name , trash1: $trash1 , trash2: $trash2 , trash3: $trash3 , trash4: $trash4 , trash5: $trash5 , trash6: $trash6 , trash7: $trash7 , trash8: $trash8 <BR>"; if (is_numeric($trash1) && is_numeric($trash2) && is_numeric($trash5)) { // echo "<BR> section_name: $section_name , trash1: $trash1 , trash2: $trash2 , trash3: $trash3 , trash4: $trash4 , trash5: $trash5 , trash6: $trash6 , trash7: $trash7 , trash8: $trash8 <BR>"; //If this is a numeric value, then the next is module name, we need it so I take it $module_name = fgets($fh); if (strstr($module_name, "Module: ")) { $module_name = str_replace("Module: ", "", $module_name); $module_name = substr($module_name, 0, 25); //Trimint to first 25 char } else { $module_name = "NA"; } //If this was the module name then the next is SQL text, I take it $sql_text = fgets($fh); //echo "<BR>Moooodul name: $module_name <BR>"; // Bulding arrays with hash and values if ($section_name == "Buffer_Gets") { if ($data_values1_counter > $counter_top) { continue; } //I just want to see top 20 $data_values1[$data_values1_counter] = $trash1; //Buffer Gets $data_values1_label[$data_values1_counter] = $trash8; //SQL Id $data_values1_module[$data_values1_counter] = $module_name; $data_values1_sql[$data_values1_counter] = $sql_text; $data_values1_executions[$data_values1_counter] = (double) $trash2; //Executions $data_values1_elapsedtime[$data_values1_counter] = $trash6; //Elapsed Time (s) $data_values1_counter++; } if ($section_name == "Physical_Reads") { if ($data_values2_counter > $counter_top) { continue; } //I just want to see top 20 $data_values2[$data_values2_counter] = $trash1; //Physical Reads $data_values2_label[$data_values2_counter] = $trash7; //SQL Id $data_values2_module[$data_values2_counter] = $module_name; $data_values2_sql[$data_values2_counter] = $sql_text; $data_values2_executions[$data_values2_counter] = (double) $trash3; //Executions $data_values2_elapsedtime[$data_values2_counter] = $trash6; //Elapsed Time (s) $data_values2_counter++; } if ($section_name == "CPU_Usage") { if ($data_values3_counter > $counter_top) { continue; } //I just want to see top 20 $data_values3[$data_values3_counter] = $trash1; // CPU Time (s) $data_values3_label[$data_values3_counter] = $trash8; //sql_id $data_values3_module[$data_values3_counter] = $module_name; //module name $data_values3_sql[$data_values3_counter] = $sql_text; $data_values3_executions[$data_values3_counter] = (double) $trash2; $data_values3_counter++; } if ($section_name == "Parse_Calls") { if ($data_values4_counter > $counter_top) { continue; } //I just want to see top 20 $data_values4[$data_values4_counter] = $trash1; $data_values4_label[$data_values4_counter] = $hash_value; $data_values4_module[$data_values4_counter] = $module_name; $data_values4_sql[$data_values4_counter] = $sql_text; $data_values4_counter++; } if ($section_name == "Elapsed_Time") { if ($data_values5_counter > $counter_top) { continue; } //I just want to see top 20 $data_values5[$data_values5_counter] = $trash1; //Elapsed Time (s) $data_values5_label[$data_values5_counter] = $trash7; //sql_id $data_values5_module[$data_values5_counter] = $module_name; $data_values5_sql[$data_values5_counter] = $sql_text; $data_values5_executions[$data_values5_counter] = (double) $trash2; $data_values5_counter++; //Start to color SQLIDs $sql_id[$trash7] = $sql_id_colors[$sql_id_colors_counter]; $sql_id_colors_counter++; } if ($section_name == "Executions") { if ($data_values6_counter > $counter_top) { continue; } //I just want to see top 20 $data_values6[$data_values6_counter] = (double) $trash1; //Executions $data_values6_label[$data_values6_counter] = $trash7; //sql_id $data_values6_module[$data_values6_counter] = $module_name; $data_values6_sql[$data_values6_counter] = $sql_text; $data_values6_counter++; } if ($section_name == "Cluster_Wait") { if ($data_values7_counter > $counter_top) { continue; } //I just want to see top 20 $data_values7[$data_values7_counter] = $trash1; //Cluster Wait Time $data_values7_label[$data_values7_counter] = $trash8; //sql_id $data_values7_module[$data_values7_counter] = $module_name; $data_values7_sql[$data_values7_counter] = $sql_text; $data_values7_executions[$data_values7_counter] = (double) $trash2; $data_values7_counter++; } } // if ( is_numeric($trash1) } // if ( $section ) // Spot sections end if (strstr($data, "Key Instance Activity Stats ")) { echo "<font color='blue'>"; $section = 0; } //echo $data . "</font>"; echo "</font>"; // End the line //echo "<BR></a>"; } // close file fclose($fh); //show_array($data_values2); //show_array($data_values2_label); //show_array($data_values2_elapsedtime); //show_array($data_values2_executions); echo "<table><tr><td>"; draw_chart_section($dir, $filename, $data_values5, $data_values5_label, $data_values5_module, "Elapsed_Time", $data_values5_executions, $timestamp, 400, 500, $sql_id); echo "</td><td>"; draw_chart_section($dir, $filename, $data_values1, $data_values1_label, $data_values1_module, "Buffer_Gets", $data_values1_executions, $timestamp, 400, 500, $sql_id); echo "</td>"; echo "</tr><tr>"; echo "<td>"; draw_chart_section($dir, $filename, $data_values2, $data_values2_label, $data_values2_module, "Physical_Reads", $data_values2_executions, $timestamp, 400, 500, $sql_id); echo "</td><td>"; draw_chart_section($dir, $filename, $data_values3, $data_values3_label, $data_values3_module, "CPU_Usage", $data_values3_executions, $timestamp, 400, 500, $sql_id); echo "</td>"; echo "</tr><tr>"; echo "<td>"; draw_chart_section($dir, $filename, $data_values6, $data_values6_label, $data_values6_module, "Executions", $data_values6, $timestamp, 400, 500, $sql_id); echo "</td><td>"; draw_chart_section($dir, $filename, $data_values7, $data_values7_label, $data_values7_module, "Cluster_Wait", $data_values7_executions, $timestamp, 400, 500, $sql_id); echo "</td></tr><tr><td>"; //Now I need to build a large array and sort it by time elapsed // not needed from 10g //$data_merged_label = array_merge($data_values1_label, $data_values2_label); //$data_merged_elapsedtime = array_merge($data_values1_elapsedtime, $data_values2_elapsedtime); //$data_merged_module = array_merge($data_values1_module, $data_values2_module); //$data_merged_executions = array_merge($data_values1_executions, $data_values2_executions); //array_multisort($data_merged_elapsedtime, $data_merged_label, $data_merged_module, $data_merged_executions); //draw_chart_section($dir, array_reverse($data_merged_elapsedtime), array_reverse($data_merged_label), array_reverse($data_merged_module), "Elapsed time - in seconds", array_reverse($data_merged_executions), $timestamp, 400, 900); echo "</td></tr></table>"; } else { echo "File could not be found. <BR>"; } }