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&amp;g=" . $report_name . "&amp;z=mobile&amp;c=".rawurlencode($clustername)."\">
161	<IMG BORDER=0 ALT=\"".rawurlencode($clustername)."\" SRC=\"./graph.php?$graph_args&amp;g=" . $report_name ."&amp;z=mobile&amp;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&amp;g=" . $report_name . "&amp;z=large\">
248	<IMG BORDER=0 ALT=\"".rawurlencode($clustername)."\" SRC=\"./graph.php?$graph_args&amp;g=" . $report_name ."&amp;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)."&amp;h=".rawurlencode($hostname)."&amp;v=".rawurlencode($metric_attributes[VAL])
270      ."&amp;m=$metric_name&amp;r=".rawurlencode($range)."&amp;z=$size&amp;jr=$jobrange"
271      ."&amp;js=$jobstart&amp;st=$cluster[LOCALTIME]";
272    if ($cs)
273       $metric_graphargs .= "&amp;cs=" . rawurlencode($cs);
274    if ($ce)
275       $metric_graphargs .= "&amp;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 .= "&amp;vl=$encodeUnits";
280    }
281    if (isset($metric_attributes['TITLE'])) {
282       $title = $metric_attributes['TITLE'];
283       $metric_graphargs .= "&amp;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