Changeset 1346
- Timestamp:
- 10/22/07 21:31:01 (4 years ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
people/jo/multilevel-groups-2/server/Munin.pm.in
r1345 r1346 54 54 'munin_get_field_order', 55 55 'munin_get_rrd_filename', 56 'munin_find_field',57 56 'munin_get_node_name', 58 57 'munin_get_parent_name', … … 63 62 'munin_get_separated_node', 64 63 'munin_mkdir_p', 64 'munin_find_field', 65 65 'munin_get_parent', 66 'munin_get_children', 66 67 'munin_get_node_partialpath' 67 68 ); … … 417 418 # - Success: A ref to an array of the hash nodes containing $field. 418 419 # - Failure: undef 419 sub munin_find_field 420 { 420 sub munin_find_field { 421 421 my $hash = shift; 422 422 my $field = shift; … … 434 434 push @$res, @{munin_find_field ($hash->{$key}, $field, $avoid)}; 435 435 } 436 } 437 } 438 439 return $res; 440 } 441 442 # munin_get_children: Get all child hash nodes 443 # Parameters: 444 # - $hash: A hash ref to the parent node 445 # Returns: 446 # - Success: A ref to an array of the child nodes 447 # - Failure: undef 448 sub munin_get_children { 449 my $hash = shift; 450 my $res = []; 451 452 return undef if (ref ($hash) ne "HASH"); 453 454 foreach my $key (keys %{$hash}) { 455 next if $key =~ /^#%#/; 456 if (defined $hash->{$key} and ref ($hash->{$key}) eq "HASH") { 457 push @$res, $hash->{$key}; 436 458 } 437 459 } … … 796 818 my $loc = munin_get_node_loc ($hash); 797 819 my $ret = munin_get ($hash, 'htmldir'); 820 my $plugin = "index"; 798 821 799 822 # Sanitise … … 803 826 @$loc = map { s/^\./_/g; $_ } @$loc; 804 827 805 my $plugin = pop @$loc or return undef; 806 my $node = pop @$loc or return undef; 828 if (defined $hash->{'graph_title'}) { 829 $plugin = pop @$loc or return undef; 830 } 807 831 808 832 if (@$loc) { # The rest is used as directory names... … … 810 834 } 811 835 812 return "$ret/$ node/$plugin.html";836 return "$ret/$plugin.html"; 813 837 } 814 838 … … 1110 1134 } 1111 1135 1112 sub munin_category_status 1113 { 1114 my ($config, $limits, $domain, $node, $category, $check_draw) = @_; 1115 my $state = "ok"; 1116 1117 return undef unless defined $config->{domain}->{$domain}->{node}->{$node}; 1118 my $snode = $config->{domain}->{$domain}->{node}->{$node}; 1119 1120 foreach my $service (keys %{$snode->{client}}) 1121 { 1122 next if ((not defined $snode->{client}->{$service}->{graph_category}) and 1123 $category ne 'other'); 1124 next if ((defined $snode->{client}->{$service}->{graph_category}) and 1125 ($snode->{client}->{$service}->{graph_category} ne $category)); 1126 1127 my $fres = &munin_service_status ($config, $limits, $domain, $node, $service, $check_draw); 1128 if (defined $fres) 1129 { 1130 if ($fres eq "critical") 1131 { 1136 # munin_category_status: Gets current status of a category 1137 # Parameters: 1138 # - $hash: A ref to the hash node whose children to check 1139 # - $limits: A ref to the root node of the limits tree 1140 # - $category: The category to review 1141 # - $check_draw: [optional] Ignore undrawn fields 1142 # Returns: 1143 # - Success: The status of the field 1144 # - Failure: undef 1145 sub munin_category_status { 1146 my $hash = shift || return undef; 1147 my $limits = shift || return undef; 1148 my $category = shift || return undef; 1149 my $check_draw = 0; 1150 my $state = "ok"; 1151 1152 return undef unless (defined $hash and ref ($hash) eq "HASH"); 1153 1154 foreach my $service (munin_get_children ($hash)) { 1155 next if (!defined $service or ref ($service) ne "HASH"); 1156 next if (!defined $service->{'graph_title'}); 1157 next if ($category ne munin_get ($service, "graph_category", "other")); 1158 next if ($check_draw and not munin_get_bool ($service, "graph", 1)); 1159 1160 my $fres = munin_service_status ($service, $limits, $check_draw); 1161 if (defined $fres) { 1162 if ($fres eq "critical") { 1132 1163 $state = $fres; 1133 1164 last; 1134 } 1135 elsif ($fres eq "warning")1136 {1165 } elsif ($fres eq "warning") { 1166 $state = $fres; 1167 } elsif ($fres eq "unknown" and $state eq "ok") { 1137 1168 $state = $fres; 1138 1169 } people/jo/multilevel-groups-2/server/munin-html.in
r1345 r1346 188 188 my @graph_info; 189 189 my @field_info; 190 my @loc = munin_get_node_loc ($service);190 my @loc = munin_get_node_loc ($service); 191 191 my $pathnodes = get_path_nodes ($service); 192 192 my $peers = get_peer_nodes ($service, lc munin_get ($service, "graph_category", "other")); … … 308 308 close FILE; 309 309 } 310 311 # Preparing the group tree... 312 my $groups = get_group_tree ($config); 313 if (defined $groups->{"name"} and $groups->{"name"} eq "root") { 314 $groups = $groups->{"groups"}; # root->groups 315 } 316 317 print Dumper ($groups); 318 319 # Draw main index 320 $template->param(GROUPS => $groups, 321 TIMESTAMP => $timestamp); 322 my $filename = munin_get_html_filename ($config); 323 open (FILE, ">$filename") or 324 die "Cannot open $filename for writing: $!"; 325 print FILE $template->output; 326 close FILE; 310 327 311 328 exit 0; … … 625 642 } 626 643 644 sub get_group_tree { 645 my $hash = shift; 646 my $base = shift || ""; 647 my $graphs = []; 648 my $groups = []; 649 my $cattrav = {}; 650 my $cats = []; 651 652 foreach my $child (@{munin_get_children ($hash)}) { 653 if (defined $child->{"graph_title"}) { 654 push @$graphs, { "name" => munin_get_node_name ($child) }; 655 $cattrav->{ lc munin_get ($child, "graph_category", "other") } = 1; 656 } elsif (ref ($child) eq "HASH") { 657 push @$groups, get_group_tree ($child, $base . munin_get_node_name ($child) . "/"); 658 } 659 } 660 661 # We need the categories in another format. 662 @$cats = map { { "name" => $_, "url" => $base."index.html#".$_, "state_".lc munin_category_status ($hash, $limits, $_, 1) => 1 } } sort keys %$cattrav; 663 664 return { 665 "name" => munin_get_node_name ($hash), 666 "url" => $base . "index.html", 667 "groups" => $groups, 668 "graphs" => $graphs, 669 "categories" => $cats, 670 "ngroups" => scalar (@$groups), 671 "ngraphs" => scalar (@$graphs), 672 "ncategories" => scalar (@$cats), 673 }; 674 } 675 627 676 sub get_path_nodes { 628 677 my $hash = shift || return undef; people/jo/multilevel-groups-2/server/munin-overview.tmpl.in
r860 r1346 18 18 </table> 19 19 <div class="box"> 20 <TMPL_LOOP NAME=" DOMAINS">20 <TMPL_LOOP NAME="GROUPS"> 21 21 <ul> 22 <li><span class="domain"><a href="<TMPL_VAR NAME="DOMAIN">/index.html"><TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"></a></span><TMPL_IF NAME="COMPARE"> :: [ <a href="<TMPL_VAR NAME="DOMAIN">/comparison-day.html">day</a> <a href="<TMPL_VAR NAME="DOMAIN">/comparison-week.html">week</a> <a href="<TMPL_VAR NAME="DOMAIN">/comparison-month.html">month</a> <a href="<TMPL_VAR NAME="DOMAIN">/comparison-year.html">year</a> ]</TMPL_IF> 23 <ul> 24 <TMPL_LOOP NAME="NODES"> 25 <li><span class="host"><a href="<TMPL_VAR NAME="DOMAIN">/<TMPL_VAR NAME="NODE">.html"><TMPL_VAR ESCAPE="HTML" NAME="NODE"></a></span> :: 26 [ <TMPL_LOOP NAME="CATEGORIES"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="<TMPL_VAR NAME="DOMAIN">/<TMPL_VAR NAME="NODE">.html#<TMPL_VAR NAME="NAME">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a> </TMPL_LOOP>]</li> 27 </TMPL_LOOP> 28 </ul> 22 <li><TMPL_IF NAME="NCATEGORIES"><span class="host"><TMPL_ELSE><span class="domain"></TMPL_IF><a href="<TMPL_VAR NAME="URL">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a></span><TMPL_IF NAME="COMPARE"> :: [ <a href="<TMPL_VAR NAME="NAME">/comparison-day.html">day</a> <a href="<TMPL_VAR NAME="NAME">/comparison-week.html">week</a> <a href="<TMPL_VAR NAME="NAME">/comparison-month.html">month</a> <a href="<TMPL_VAR NAME="NAME">/comparison-year.html">year</a> ]</TMPL_IF> <TMPL_IF NAME="NCATEGORIES">[ <TMPL_LOOP NAME="CATEGORIES"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="<TMPL_VAR NAME="URL">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a> </TMPL_LOOP>]</TMPL_IF> 23 <TMLP_IF NAME="NGROUPS"> 24 <TMPL_LOOP NAME="GROUPS"> 25 <ul> 26 <li><TMPL_IF NAME="NCATEGORIES"><span class="host"><TMPL_ELSE><span class="domain"></TMPL_IF><a href="<TMPL_VAR NAME="URL">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a></span><TMPL_IF NAME="COMPARE"> :: [ <a href="<TMPL_VAR NAME="NAME">/comparison-day.html">day</a> <a href="<TMPL_VAR NAME="NAME">/comparison-week.html">week</a> <a href="<TMPL_VAR NAME="NAME">/comparison-month.html">month</a> <a href="<TMPL_VAR NAME="NAME">/comparison-year.html">year</a> ]</TMPL_IF> <TMPL_IF NAME="NCATEGORIES">[ <TMPL_LOOP NAME="CATEGORIES"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="<TMPL_VAR NAME="URL">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a> </TMPL_LOOP>]</TMPL_IF> 27 <TMLP_IF NAME="NGROUPS"> 28 <TMPL_LOOP NAME="GROUPS"> 29 <ul> 30 <li><TMPL_IF NAME="NCATEGORIES"><span class="host"><TMPL_ELSE><span class="domain"></TMPL_IF><a href="<TMPL_VAR NAME="URL">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a></span><TMPL_IF NAME="COMPARE"> :: [ <a href="<TMPL_VAR NAME="NAME">/comparison-day.html">day</a> <a href="<TMPL_VAR NAME="NAME">/comparison-week.html">week</a> <a href="<TMPL_VAR NAME="NAME">/comparison-month.html">month</a> <a href="<TMPL_VAR NAME="NAME">/comparison-year.html">year</a> ]</TMPL_IF> <TMPL_IF NAME="NCATEGORIES">[ <TMPL_LOOP NAME="CATEGORIES"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="<TMPL_VAR NAME="URL">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a> </TMPL_LOOP>]</TMPL_IF> 31 <TMLP_IF NAME="NGROUPS"> 32 <TMPL_LOOP NAME="GROUPS"> 33 <ul> 34 <li><TMPL_IF NAME="NCATEGORIES"><span class="host"><TMPL_ELSE><span class="domain"></TMPL_IF><a href="<TMPL_VAR NAME="URL">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a></span><TMPL_IF NAME="COMPARE"> :: [ <a href="<TMPL_VAR NAME="NAME">/comparison-day.html">day</a> <a href="<TMPL_VAR NAME="NAME">/comparison-week.html">week</a> <a href="<TMPL_VAR NAME="NAME">/comparison-month.html">month</a> <a href="<TMPL_VAR NAME="NAME">/comparison-year.html">year</a> ]</TMPL_IF> <TMPL_IF NAME="NCATEGORIES">[ <TMPL_LOOP NAME="CATEGORIES"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="<TMPL_VAR NAME="URL">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a> </TMPL_LOOP>]</TMPL_IF> 35 <TMLP_IF NAME="NGROUPS"> 36 <TMPL_LOOP NAME="GROUPS"> 37 <ul> 38 <li><TMPL_IF NAME="NCATEGORIES"><span class="host"><TMPL_ELSE><span class="domain"></TMPL_IF><a href="<TMPL_VAR NAME="URL">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a></span><TMPL_IF NAME="COMPARE"> :: [ <a href="<TMPL_VAR NAME="NAME">/comparison-day.html">day</a> <a href="<TMPL_VAR NAME="NAME">/comparison-week.html">week</a> <a href="<TMPL_VAR NAME="NAME">/comparison-month.html">month</a> <a href="<TMPL_VAR NAME="NAME">/comparison-year.html">year</a> ]</TMPL_IF> <TMPL_IF NAME="NCATEGORIES">[ <TMPL_LOOP NAME="CATEGORIES"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="<TMPL_VAR NAME="URL">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a> </TMPL_LOOP>]</TMPL_IF> 39 <TMLP_IF NAME="NGROUPS"> 40 <TMPL_LOOP NAME="GROUPS"> 41 <ul> 42 <li><TMPL_IF NAME="NCATEGORIES"><span class="host"><TMPL_ELSE><span class="domain"></TMPL_IF><a href="<TMPL_VAR NAME="URL">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a></span><TMPL_IF NAME="COMPARE"> :: [ <a href="<TMPL_VAR NAME="NAME">/comparison-day.html">day</a> <a href="<TMPL_VAR NAME="NAME">/comparison-week.html">week</a> <a href="<TMPL_VAR NAME="NAME">/comparison-month.html">month</a> <a href="<TMPL_VAR NAME="NAME">/comparison-year.html">year</a> ]</TMPL_IF> <TMPL_IF NAME="NCATEGORIES">[ <TMPL_LOOP NAME="CATEGORIES"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="<TMPL_VAR NAME="URL">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a> </TMPL_LOOP>]</TMPL_IF> 43 </li> 44 </ul> 45 </TMPL_LOOP> 46 </TMLP_IF> 47 </li> 48 </ul> 49 </TMPL_LOOP> 50 </TMLP_IF> 51 </li> 52 </ul> 53 </TMPL_LOOP> 54 </TMLP_IF> 55 </li> 56 </ul> 57 </TMPL_LOOP> 58 </TMLP_IF> 59 </li> 60 </ul> 61 </TMPL_LOOP> 62 </TMLP_IF> 29 63 </li> 30 64 </ul>
