Changeset 1346

Show
Ignore:
Timestamp:
10/22/07 21:31:01 (4 years ago)
Author:
jo
Message:

The overview template should now work with the new group format.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • people/jo/multilevel-groups-2/server/Munin.pm.in

    r1345 r1346  
    5454           'munin_get_field_order', 
    5555           'munin_get_rrd_filename', 
    56            'munin_find_field', 
    5756           'munin_get_node_name', 
    5857           'munin_get_parent_name', 
     
    6362           'munin_get_separated_node', 
    6463           'munin_mkdir_p', 
     64           'munin_find_field', 
    6565           'munin_get_parent', 
     66           'munin_get_children', 
    6667           'munin_get_node_partialpath' 
    6768           ); 
     
    417418# - Success: A ref to an array of the hash nodes containing $field. 
    418419# - Failure: undef 
    419 sub munin_find_field 
    420 
     420sub munin_find_field { 
    421421    my $hash  = shift; 
    422422    my $field = shift; 
     
    434434                push @$res, @{munin_find_field ($hash->{$key}, $field, $avoid)}; 
    435435            } 
     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 
     448sub 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}; 
    436458        } 
    437459    } 
     
    796818    my $loc     = munin_get_node_loc ($hash); 
    797819    my $ret     = munin_get ($hash, 'htmldir'); 
     820    my $plugin  = "index"; 
    798821 
    799822    # Sanitise 
     
    803826    @$loc = map { s/^\./_/g; $_ } @$loc; 
    804827         
    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    } 
    807831 
    808832    if (@$loc) { # The rest is used as directory names... 
     
    810834    } 
    811835 
    812     return "$ret/$node/$plugin.html"; 
     836    return "$ret/$plugin.html"; 
    813837} 
    814838 
     
    11101134} 
    11111135 
    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 
     1145sub 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") { 
    11321163                $state = $fres; 
    11331164                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")
    11371168                $state = $fres; 
    11381169            } 
  • people/jo/multilevel-groups-2/server/munin-html.in

    r1345 r1346  
    188188    my @graph_info; 
    189189    my @field_info; 
    190     my @loc = munin_get_node_loc ($service); 
     190    my @loc       = munin_get_node_loc ($service); 
    191191    my $pathnodes = get_path_nodes ($service); 
    192192    my $peers     = get_peer_nodes ($service, lc munin_get ($service, "graph_category", "other")); 
     
    308308    close FILE; 
    309309} 
     310 
     311# Preparing the group tree... 
     312my $groups = get_group_tree ($config); 
     313if (defined $groups->{"name"} and $groups->{"name"} eq "root") { 
     314    $groups = $groups->{"groups"}; # root->groups 
     315} 
     316 
     317print Dumper ($groups); 
     318 
     319# Draw main index 
     320$template->param(GROUPS    => $groups, 
     321                 TIMESTAMP => $timestamp); 
     322my $filename = munin_get_html_filename ($config); 
     323open (FILE, ">$filename") or 
     324    die "Cannot open $filename for writing: $!"; 
     325print FILE $template->output; 
     326close FILE; 
    310327 
    311328exit 0; 
     
    625642} 
    626643 
     644sub 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 
    627676sub get_path_nodes { 
    628677    my $hash = shift || return undef; 
  • people/jo/multilevel-groups-2/server/munin-overview.tmpl.in

    r860 r1346  
    1818 </table> 
    1919 <div class="box"> 
    20  <TMPL_LOOP NAME="DOMAINS"> 
     20 <TMPL_LOOP NAME="GROUPS"> 
    2121 <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> 
    2963   </li> 
    3064 </ul>