} } $g_end = $time; $g_end_unadjusted = $g_end; if (2 * DAY <= $period) { $tz = date_offset_get(new DateTime()); $ticks_sec = $majorTicks / 1000; $g_end = ceil(($g_end + $tz) / $ticks_sec) * $ticks_sec - $tz; } $g_start = $g_end - $period; $g_canvas->footer_left_text = date("Y-m-d H:i", $g_end); $g_canvas->footer_right_text = date("Y-m-d H:i", $g_end); $jmx_dump = pdf_load_json_dump("Resin|JmxDump", $g_start, $g_end); if (!$jmx_dump) { // a JMX dump was not found, try to find an older one $jmx_dump = pdf_load_json_dump("Resin|JmxDump"); if ($jmx_dump) { $timestamp = $jmx_dump["timestamp"] / 1000; array_push($g_pdf_warnings, "A saved JMX snapshot not was found in the selected data range."); array_push($g_pdf_warnings, "Using an earlier JMX snapshot from " . date("Y-m-d H:i", $timestamp)); } } if ($jmx_dump) { $g_jmx_dump_time = create_timestamp($jmx_dump); $g_jmx_dump =& $jmx_dump["jmx"]; } pdf_header(); pdf_summary(); pdf_threads(); pdf_health(); pdf_draw_cluster_graphs();
function pdf_thread_dump() { global $g_canvas; $g_canvas->writeSection("Thread Dump"); $dump = pdf_load_json_dump("Resin|ThreadDump"); if (!$dump) { $g_canvas->setTextFont(); $g_canvas->newLine(); $g_canvas->writeTextLineIndent(20, "A thread dump was not generated during the selected timeframe."); return; } $timestamp = create_timestamp($dump); $g_canvas->setFont("Courier-Bold", "8"); $g_canvas->writeTextLine("Timestamp: {$timestamp}"); $g_canvas->newLine(); $entries =& $dump["thread_dump"]; pdf_analyze_thread_dump($entries); usort($entries, "thread_dump_cmp"); $max = 100; $max_stack = 32; $size = sizeof($entries); $i = 0; while ($i < $size) { if ($i > $max) { break; } $entry =& $entries[$i]; $g_canvas->setDataFont(8); $i = pdf_shared_entries($i, &$entries, $g_canvas); $stack = pdf_thread_stack($entry, $max_stack); $g_canvas->setDataFont(7); $g_canvas->writeTextWrapIndent(20, $stack); } }