1<?php 2include_once "./eval_conf.php"; 3include_once("./functions.php"); 4include_once "./get_context.php"; 5include_once "./ganglia.php"; 6include_once "./get_ganglia.php"; 7?> 8<?php 9/////////////////////////////////////////////////////////////////////////////// 10// Generating mobile view 11/////////////////////////////////////////////////////////////////////////////// 12if ( isset($_GET['view_name'])) { 13?> 14 <div data-role="page" class="ganglia-mobile" id="view-home"> 15 <div data-role="header"> 16 <a href="#" class="ui-btn-left" data-icon="arrow-l" onclick="history.back(); return false">Back</a> 17 <h1>View <?php print htmlspecialchars($_GET['view_name']); ?></h1> 18 <a href="#mobile-home">Home</a> 19 <div data-role="navbar"> 20 <ul> 21 <?php 22 23 $view_name = $_GET['view_name']; 24 $available_views = get_available_views(); 25 26 // Header bar support up to 5 items. 5+ items will be shown in multiple 27 // rows. Thus we'll limit to first 5 time ranges 28 $my_ranges = array_keys( $conf['time_ranges'] ); 29 for ( $i = 0 ; $i < 5 ; $i++ ) { 30 $context_ranges[] = $my_ranges[$i]; 31 } 32 33 $range_menu = ""; 34 $range = $_GET['r']; 35 36 foreach ($context_ranges as $v) { 37 $url=rawurlencode($v); 38 if ($v == $range) { 39 $checked = "class=\"ui-btn-active\""; 40 $range_menu .= "<li><a $checked href='#' onclick='return false;'>$v</a></li>"; 41 } else { 42 $range_menu .= "<li><a href='mobile_helper.php?view_name=" . rawurlencode($_GET['view_name']) . "&r=" . $v . "&cs=&ce='>$v</a></li>"; 43 } 44 45 } 46 print $range_menu; 47 ?> 48 </ul> 49 </div><!-- /navbar --> 50 </div><!-- /header --> 51 52 <div data-role="content"> 53 <?php 54 55 // Let's find the view definition 56 foreach ( $available_views as $view_id => $view ) { 57 58 if ( $view['view_name'] == $view_name ) { 59 60 $view_elements = get_view_graph_elements($view); 61 62 $range_args = ""; 63 if ( isset($_GET['r']) && $_GET['r'] != "" ) 64 $range_args .= "&r=" . rawurlencode($_GET['r']); 65 if ( isset($_GET['cs']) && isset($_GET['ce']) ) 66 $range_args .= "&cs=" . rawurlencode($_GET['cs']) . "&ce=" . rawurlencode($_GET['ce']); 67 68 if ( count($view_elements) != 0 ) { 69 foreach ( $view_elements as $id => $element ) { 70 print " 71 <A HREF=\"./graph_all_periods.php?mobile=1&" . $element['graph_args'] ."&z=mobile\"> 72 <IMG ALT=\"" . $element['hostname'] . " - " . $element['name'] . "\" BORDER=0 SRC=\"./graph.php?" . $element['graph_args'] . "&z=mobile" . $range_args . "\"></A>"; 73 } 74 } else { 75 print "No graphs defined for this view. Please add some"; 76 } 77 78 79 80 } // end of if ( $view['view_name'] == $view_name 81 } // end of foreach ( $views as $view_id 82 83 84 print "</div><!-- /content --> 85 </div> <!-- /page -->"; 86} // end of if ( isset($_GET['view_name'])) 87/////////////////////////////////////////////////////////////////////////////// 88// Generate cluster summary view 89/////////////////////////////////////////////////////////////////////////////// 90if ( isset($_GET['show_cluster_metrics'])) { 91 $clustername = $_GET['c']; 92?> 93 <div data-role="page" class="ganglia-mobile" id="viewhost-<?php print $hostname; ?>"> 94 <div data-role="header" data-position="fixed"> 95 <a href="#" class="ui-btn-left" data-icon="arrow-l" onclick="history.back(); return false">Back</a> 96 <h3>Cluster <?php print htmlspecialchars($clustername); ?></h3> 97 <a href="#mobile-home">Home</a> 98 <div data-role="navbar"> 99 <ul> 100 <?php 101 // Header bar support up to 5 items. 5+ items will be shown in multiple 102 // rows. Thus we'll limit to first 5 time ranges 103 $my_ranges = array_keys( $conf['time_ranges'] ); 104 for ( $i = 0 ; $i < 5 ; $i++ ) { 105 $context_ranges[] = $my_ranges[$i]; 106 } 107 108 $range_menu = ""; 109 $range = $_GET['r']; 110 111 foreach ($context_ranges as $v) { 112 $url=rawurlencode($v); 113 if ($v == $range) { 114 $checked = "class=\"ui-btn-active\""; 115 $range_menu .= "<li><a $checked href='#'>$v</a></li>"; 116 } else { 117 $range_menu .= "<li><a href='mobile_helper.php?show_cluster_metrics=1&c=" . rawurlencode($clustername) . "&r=" . $v . "&cs=&ce='>$v</a></li>"; 118 } 119 } 120 print $range_menu; 121 ?> 122 </ul> 123 </div><!-- /navbar --> 124 </div><!-- /header --> 125 126 <div data-role="content"> 127<?php 128 $graph_args = "c=".rawurlencode($clustername)."&r=".rawurlencode($range); 129 130 /////////////////////////////////////////////////////////////////////////// 131 // Let's find out what optional reports are included 132 // First we find out what the default (site-wide) reports are then look 133 // for host specific included or excluded reports 134 /////////////////////////////////////////////////////////////////////////// 135 $default_reports = array("included_reports" => array(), "excluded_reports" => array()); 136 if ( is_file($conf['conf_dir'] . "/default.json") ) { 137 $default_reports = array_merge($default_reports,json_decode(file_get_contents($conf['conf_dir'] . "/default.json"), TRUE)); 138 } 139 140 $cluster_file = $conf['conf_dir'] . "/cluster_" . preg_replace('/[^a-zA-Z0-9_-]/', '', $clustername) . ".json"; 141 if ( pathinfo( $cluster_file, PATHINFO_DIRNAME ) != $conf['conf_dir'] ) { 142 die('Invalid path detected'); 143 } 144 $override_reports = array("included_reports" => array(), "excluded_reports" => array()); 145 if ( is_file($cluster_file) ) { 146 $override_reports = array_merge($override_reports, json_decode(file_get_contents($cluster_file), TRUE)); 147 } 148 149 # Merge arrays 150 $reports["included_reports"] = array_merge( $default_reports["included_reports"] , $override_reports["included_reports"]); 151 $reports["excluded_reports"] = array_merge($default_reports["excluded_reports"] , $override_reports["excluded_reports"]); 152 153 # Remove duplicates 154 $reports["included_reports"] = array_unique($reports["included_reports"]); 155 $reports["excluded_reports"] = array_unique($reports["excluded_reports"]); 156 157 foreach ( $reports["included_reports"] as $index => $report_name ) { 158 if ( ! in_array( $report_name, $reports["excluded_reports"] ) ) { 159 print "<a name=metric_" . $report_name . "> 160 <A HREF=\"./graph_all_periods.php?mobile=1&$graph_args&g=" . $report_name . "&z=mobile&c=".rawurlencode($clustername)."\"> 161 <IMG BORDER=0 ALT=\"".rawurlencode($clustername)."\" SRC=\"./graph.php?$graph_args&g=" . $report_name ."&z=mobile&c=".rawurlencode($clustername)."\"></A> 162 "; 163 } 164 165 } 166 167?> 168 </div><!-- /content --> 169 </div> <!-- /page -->"; 170<?php 171} 172/////////////////////////////////////////////////////////////////////////////// 173// Generate host view 174/////////////////////////////////////////////////////////////////////////////// 175if ( isset($_GET['show_host_metrics'])) { 176 $hostname = $_GET['h']; 177 $clustername = $_GET['c']; 178?> 179 <div data-role="page" class="ganglia-mobile" id="viewhost-<?php print htmlspecialchars($hostname); ?>"> 180 <div data-role="header" data-position="fixed"> 181 <a href="#" class="ui-btn-left" data-icon="arrow-l" onclick="history.back(); return false">Back</a> 182 <h3>Host <?php print htmlspecialchars($hostname); ?></h3> 183 <a href="#mobile-home">Home</a> 184 <div data-role="navbar"> 185 <ul> 186 <?php 187 // Header bar support up to 5 items. 5+ items will be shown in multiple 188 // rows. Thus we'll limit to first 5 time ranges 189 $my_ranges = array_keys( $conf['time_ranges'] ); 190 for ( $i = 0 ; $i < 5 ; $i++ ) { 191 $context_ranges[] = $my_ranges[$i]; 192 } 193 194 $range_menu = ""; 195 $range = $_GET['r']; 196 197 foreach ($context_ranges as $v) { 198 $url=rawurlencode($v); 199 if ($v == $range) { 200 $checked = "class=\"ui-btn-active\""; 201 $range_menu .= "<li><a $checked href='#'>$v</a></li>"; 202 } else { 203 $range_menu .= "<li><a href='mobile_helper.php?show_host_metrics=1&h=" . rawurlencode($hostname) . "&c=" . rawurlencode($clustername) . "&r=" . $v . "&cs=&ce='>$v</a></li>"; 204 } 205 } 206 print $range_menu; 207 ?> 208 </ul> 209 </div><!-- /navbar --> 210 </div><!-- /header --> 211 212 <div data-role="content"> 213<?php 214 $graph_args = "h=".rawurlencode($hostname)."&c=".rawurlencode($clustername)."&r=".rawurlencode($range); 215 216 /////////////////////////////////////////////////////////////////////////// 217 // Let's find out what optional reports are included 218 // First we find out what the default (site-wide) reports are then look 219 // for host specific included or excluded reports 220 /////////////////////////////////////////////////////////////////////////// 221 $default_reports = array("included_reports" => array(), "excluded_reports" => array()); 222 if ( is_file($conf['conf_dir'] . "/default.json") ) { 223 $default_reports = array_merge($default_reports,json_decode(file_get_contents($conf['conf_dir'] . "/default.json"), TRUE)); 224 } 225 226 $host_file = $conf['conf_dir'] . "/host_" . preg_replace('/[^a-zA-Z0-9_-]/', '', $hostname) . ".json"; 227 if ( pathinfo( $host_file, PATHINFO_DIRNAME ) != $conf['conf_dir'] ) { 228 die('Invalid path detected'); 229 } 230 $override_reports = array("included_reports" => array(), "excluded_reports" => array()); 231 if ( is_file($host_file) ) { 232 $override_reports = array_merge($override_reports, json_decode(file_get_contents($host_file), TRUE)); 233 } 234 235 # Merge arrays 236 $reports["included_reports"] = array_merge( $default_reports["included_reports"] , $override_reports["included_reports"]); 237 $reports["excluded_reports"] = array_merge($default_reports["excluded_reports"] , $override_reports["excluded_reports"]); 238 239 # Remove duplicates 240 $reports["included_reports"] = array_unique($reports["included_reports"]); 241 $reports["excluded_reports"] = array_unique($reports["excluded_reports"]); 242 243 foreach ( $reports["included_reports"] as $index => $report_name ) { 244 245 if ( ! in_array( $report_name, $reports["excluded_reports"] ) ) { 246 print " 247 <A HREF=\"./graph_all_periods.php?mobile=1&$graph_args&g=" . $report_name . "&z=large\"> 248 <IMG BORDER=0 ALT=\"".rawurlencode($clustername)."\" SRC=\"./graph.php?$graph_args&g=" . $report_name ."&z=mobile\"></A>"; 249 } 250 } 251 ?> 252<?php 253 254$g_metrics_group = array(); 255$groups = array(); 256 257$size = "mobile"; 258 259foreach ($metrics as $metric_name => $metric_attributes) { 260 261 if ($metric_attributes['TYPE'] == "string" or $metric_attributes['TYPE']=="timestamp" or 262 (isset($always_timestamp[$metric_name]) and $always_timestamp[$metric_name])) { 263 $s_metrics[$metric_name] = $v; 264 } elseif ($metric_attributes['SLOPE'] == "zero" or (isset($always_constant[$metric_name]) and $always_constant[$metric_name])) { 265 $c_metrics[$metric_name] = $v; 266 } else if (isset($reports[$metric_name]) and $reports[$metric]) 267 continue; 268 else { 269 $metric_graphargs = "c=".rawurlencode($clustername)."&h=".rawurlencode($hostname)."&v=".rawurlencode($metric_attributes[VAL]) 270 ."&m=$metric_name&r=".rawurlencode($range)."&z=$size&jr=$jobrange" 271 ."&js=$jobstart&st=$cluster[LOCALTIME]"; 272 if ($cs) 273 $metric_graphargs .= "&cs=" . rawurlencode($cs); 274 if ($ce) 275 $metric_graphargs .= "&ce=" . rawurlencode($ce); 276 # Adding units to graph 2003 by Jason Smith <smithj4@bnl.gov>. 277 if ($metric_attributes['UNITS']) { 278 $encodeUnits = rawurlencode($metric_attributes['UNITS']); 279 $metric_graphargs .= "&vl=$encodeUnits"; 280 } 281 if (isset($metric_attributes['TITLE'])) { 282 $title = $metric_attributes['TITLE']; 283 $metric_graphargs .= "&ti=$title"; 284 } 285 $g_metrics[$metric_name]['graph'] = $graph_args . "&" . $metric_graphargs; 286 $g_metrics[$metric_name]['description'] = isset($metric_attributes['DESC']) ? $metric_attributes['DESC'] : ''; 287 288 if ( !isset($metrics[$metric_name]['GROUP']) ) 289 $group_name = "no group"; 290 else 291 $group_name = $metrics[$metric_name]['GROUP'][0]; 292 293 // Make an array of groups 294 if ( ! in_array($group_name, $groups) ) { 295 $groups[] = $group_name; 296 } 297 298 $g_metrics_group[$group_name][] = $metric_name; 299 } 300} 301 302ksort($g_metrics_group); 303foreach ( $g_metrics_group as $metric_group_name => $metric_group_members ) { 304?> 305 <div data-role="collapsible" data-collapsed="true"> 306 <h3><?php print $metric_group_name . " (" . count($metric_group_members) . ")"; ?></h3> 307<?php 308 foreach ( $metric_group_members as $index => $metric_name ) { 309 print " 310 <A HREF=\"./graph_all_periods.php?mobile=1&" . $g_metrics[$metric_name]['graph'] . "\"> 311 <IMG BORDER=0 ALT=\"".htmlspecialchars($clustername)."\" SRC=\"./graph.php?" . $g_metrics[$metric_name]['graph'] . "\"></A>"; 312 } 313?> 314 </div> <!-- /collapsible --> 315<?php 316} // end of foreach ( $g_metrics_group 317?> 318 </div><!-- /content --> 319 </div><!-- /page --> 320<?php 321} 322?> 323