ganglia web端代码阅读(部分)

 

Ganglia web代码分析

www/ganglia/目录下:

1、auth.php

认证用户;返回一个集群数组(期望成为私有的);获取私有集群,输入$private[cluster name]="password"

 

第一个函数embarrassed() ,global $gmetad_root;以只读形式打开当前文件夹下的private_clusters文件,以255个字节逐行读取数据并去除其中的空白字符,赋值给$line,如果$line空或者$line以#开头,跳出循环continue;将$line以“=”分成字符串数组$list,……

说白了,就是创建一个private数组(字典),关键字是private_clusters每一行中“=”前的name部分,值是“=”后面的pass部分

 

第二个函数authenticate()函数,global $clustername, $cluster;从embarrassed()函数中获取键值数组,应该是name部分数组吧,如果全局的$clustername能匹配,并且全局$clustername == $cluster['NAME'],就给$auth_header      = "WWW-authenticate: basic realm=\"Ganglia Private Cluster: " . $clustername . "\""; 否则$auth_header   = "WWW-authenticate: basic realm=\"Ganglia Private Cluster\"";并向客户端发送http头header( $auth_header );

 

第三个函数checkprivate(),global $clustername, $context;测试输入的密码的md5值是否匹配

 

第四个函数checkcontrol(),global $context;在控制$context==”control”时调用。假设密码文件$gmetad_root/etc/private_clusters有个实体叫做controlroom,is always embarrassed,,,,,功能上与上类似。

 

2、 class.TemplatePower.inc.php

定义宏 T_BYFILE=0、T_BYVAR=1、TP_ROOTBLOCK=_ROOT

第一个类 TemplatePowerParser

数据成员:

var $tpl_base;  //Array( [filename/varcontent], [T_BYFILE/T_BYVAR] )

var $tpl_include; //Array( [filename/varcontent], [T_BYFILE/T_BYVAR] )

var $tpl_count;

var $parent   = Array();    // $parent[{blockname}] = {parentblockname}

var $defBlock = Array();

var $rootBlockName;

var $ignore_stack;

var $version;

成员函数:

function TemplatePowerParser( $tpl_file, $type )设置version = ‘3.0.1’,tpl_base = Array($tpl_file, $type), tpl_count = 0, ignore_stack = Array(false)

function __errorAlert( $message ), 打印$message

function __prepare()

function __cleanUp()

function __prepareTemplate( $tpl_file, $type )

function __parseTemplate( $tplvar, $blockname, $initdev )

function version()

function assignInclude( $iblockname, $value, $type=T_BYFILE )

 

第二个类class TemplatePower extends TemplatePowerParser

数据成员:

var $index    = Array();        // $index[{blockname}]  = {indexnumber}

var $content  = Array();       

var $currentBlock;

var $showUnAssigned;

var $serialized;

var $globalvars = Array();

 var $prepared;

成员函数:

function TemplatePower( $tpl_file='', $type= T_BYFILE )

function __deSerializeTPL( $stpl_file, $type )

function __makeContentRoot()

function __assign( $varname, $value)

function __assignGlobal( $varname, $value )

function __outputContent( $blockname )

function __printVars()

function serializedBase()

function showUnAssigned( $state = true )

function prepare()

function newBlock( $blockname )

function assignGlobal( $varname, $value )

function assign( $varname, $value='' )

function gotoBlock( $blockname )

function getVarValue( $varname )

function printToScreen()

function getOutputContent()

 

这个文件做什么的有待考证,初步看来是解析tpl的

 

3、cluster_view.php

貌似解析了cluster_view.tpl和cluster_extra.tpl文件

cluster_view.tpl文件中貌似有{cpu_num} {num_nodes} {num_dead_nodes} {cluster_load} {localtime}

{cluster} {metric} {range} {sort} {cols_menu} {size_menu}

 

{metric_image}{br}

还有六章图片

assign("images","./templates/$template_name/images");

$cpu_num = !$showhosts ? $metrics["cpu_num"]['SUM'] : cluster_sum("cpu_num", $metrics);

assign("num_nodes", intval($cluster['HOSTS_UP']));

assign("num_dead_nodes", intval($cluster['HOSTS_DOWN']));

assign("localtime", date("Y-m-d H:i", $cluster['LOCALTIME']));

assign("cluster_load", "$cluster_load15%, $cluster_load5%, $cluster_load1%");

assign("cluster", $clustername);

$tpl->assign("graph_args", $graph_args);

 

载入图片的url

$graph_args = "c=$cluster_url&$get_metric_string&st=$cluster[LOCALTIME]";

<TD ROWSPAN=2 ALIGN="CENTER" VALIGN=top>

<A HREF="./graph.php?g=load_report&amp;z=large&amp;{graph_args}">

<IMG BORDER=0 ALT="{cluster} LOAD"

   SRC="./graph.php?g=load_report&amp;z=medium&amp;{graph_args}">

</A>

<A HREF="./graph.php?g=cpu_report&amp;z=large&amp;{graph_args}">

<IMG BORDER=0 ALT="{cluster} CPU"

   SRC="./graph.php?g=cpu_report&amp;z=medium&amp;{graph_args}">

</A>

<A HREF="./graph.php?g=mem_report&amp;z=large&amp;{graph_args}">

<IMG BORDER=0 ALT="{cluster} MEM"

   SRC="./graph.php?g=mem_report&amp;z=medium&amp;{graph_args}">

</A>

<A HREF="./graph.php?g=network_report&amp;z=large&amp;{graph_args}">

<IMG BORDER=0 ALT="{cluster} NETWORK"

    SRC="./graph.php?g=network_report&amp;z=medium&amp;{graph_args}">

</A>

<!-- START BLOCK : optional_graphs -->

<A HREF="./graph.php?g={name}_report&amp;z=large&amp;{graph_args}">

<IMG BORDER=0 ALT="{cluster} {name}" SRC="./graph.php?g={name}_report&amp;z=medium&amp;{graph_args}">

</A>

<!-- END BLOCK : optional_graphs -->

</TD>

</TR>

 

<TR>

 <TD align=center valign=top>

  <IMG SRC="./pie.php?{pie_args}" ALT="Pie Chart" BORDER="0">

 

 

传递给__GET[]的参数有:./graph.php  g=network_report  z=large  c=$cluster_url get_metric_String st=$cluster[LOCALTIME]

传递给graph.php

 

 

 

graph.php  eval_config.php  get_context.php  functions.php

 

eval_config.php

文件作用:读取和评估配置文件 conf.php

如果设置了$rrdcached_socket,并且其非空,那么令$rrd_options.=”—daemon $rrdcached_socket”

 

functions.php

本文件包含了一些普通函数,假设Gmeta XML树已经解析了,并且全局变量$metrics, $clusters, and $hosts已经设置了。

函数template($name),允许模板文件的继承机制,如果某个文件在所选模板中没找到,那么使用一个默认的文件,利用file_exists函数

函数hiddenvar($name, $var)创建一个隐藏input field的表单域,用以存储CGI变量(Common Gateway Interface,简称CGI。在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。)rawurlencode — 按照 RFC 1738 对 URL 进行编码

函数uptime($uptimeS),从秒的数目,给出一个可读的时间字符串。

函数findlocation($attrs) 尝试着决定在集群中一个节点位置。首先尝试着找出LOCATION属性,从$hosts[$cluster][$name]中请求主机属性数组,其中$name是主机名,如果不能决定位置就返回[-1,-1,-1],参数有$rack,$rank,$plane

函数cluster_sum($name,$metrics),计算并返回$host=>$val[$name][‘VAL’]的总和

函数cluster_min($name, $metrics)遍历$host => $val,计算最小的$val[$name][‘VAL’]及相应的主机$host,返回数组array($min, $minhost);

函数load_image ($scope, $value)在给定的负载下给出正确的图片,Scope is "node | cluster | grid". Value is 0 <= v <= 1. $image = template("images/${scope}_25-49.jpg");

函数load_color ($value)指定不同负载下的图片的背景颜色,有六种设置$color = $load_colors["75-100"];

函数node_image ($metrics)为一个集群节点打印HTML,返回的是$image,template("images/node_dead.jpg")或者load_image("node", $value);    global $hosts_down;

函数find_limits($nodes, $metricname),找出一个metric graphs集合中min/max值,nodes是一个以主机名为key的数组。global $metrics, $clustername, $rrds, $rrd_dir, $start, $end, $rrd_options;

函数nodebox($hostname, $verbose, $title="", $extrarow=""),产生配了色的Node cell HTML。用于physical view及其他的视图中。打算使用于表格中时利用<tr><td></td></tr>

函数rowstyle(),奇偶row风格间的转换

函数physical_racks(),通过架子rack组织主机。利用或者不利用"location" host attributes

函数clean_string( $string),返回一个string版本,用于网页中安全展示。潜在的危险characters转换成HTML实体。Resulting string不是URL-encoded。return htmlentities( $string );

函数sanitize($string),rawurldecode — 对已编码的 URL 字符串进行解码,escapeshellcmd(), Escape shell metacharacters除去字符串中的特殊符号, return   escapeshellcmd( clean_string( rawurldecode( $string ) ) )

<?php
system(EscapeShellCmd($cmdline));
?>

函数clean_number( $value ),如果参数是一个有效的数字,返回,否则返回null

函数is_valid_hex_color( $string ),如果字符串是一个3或6个字符的16进制色彩,返回true

函数strip_domainname( $hostname ),返回一个shortened version of a FQDN

 

文件get_context.php

开始时Blocking malicious CGI input.阻塞恶意的CGI输入,使用escapeshellcmd()函数,clean_string()函数,

设置$gridstack[]

设置$hostcols,$metriccols,$showhosts的默认值

设置context值,$context = "control"或”tree” “meta”  “grid”  “physical” “cluster-summary”  “cluster”  “node”  “host”        $range = "$default_time_range"; $end = "N";

$time_ranges 在conf.php中定义了。

由于cluster context中没有选项来选择"by hosts down" 或者 "by hosts up"来排序,所以可以通过"descending"来改变排序规则。

 

文件:ganglia.php

 

文件ganglia.php用于解析ganglia XML树,文件开始部分定义的一些数组用于保存XML信息。这些信息都是内容敏感的,只包含了我们所需的完成页面的信息。

 

 

 

 

 

文件conf.php:

首先给出了$template_name = "default"; 可能是“./templates”

要求gmetad的安装目录$gmetad_root = "/var/lib/ganglia";而$rrds = "$gmetad_root/rrds";

模块化的图片文件的位置$graphdir='./graph.d';

设置了ip和端口:

$ganglia_ip = "127.0.0.1";

$ganglia_port = 8652;

设置动态图片展示数目$max_graphs = 0;如果设为0就表示全部载入。

设置演示的主机grid的列数$hostcols = 4;

展示metric grid列数$metriccols = 2;

是否开启Grid Snapshot:$show_meta_snapshot = "yes";

设置默认刷新频率:$default_refresh = 300;

 

CPU报告图颜色:

$cpu_user_color = "3333bb";

$cpu_nice_color = "ffea00";

$cpu_system_color = "dd0000";

$cpu_wio_color = "ff8a60";

$cpu_idle_color = "e2e2f2";

 

Memory报告图颜色:

$mem_used_color = "5555cc";

$mem_shared_color = "0000aa";

$mem_cached_color = "33cc33";

$mem_buffered_color = "99ff33";

$mem_free_color = "00ff00";

$mem_swapped_color = "9900CC";

 

Load报告图颜色:

$load_one_color = "CCCCCC";

$proc_run_color = "0000FF";

$cpu_num_color  = "FF0000";

$num_nodes_color = "00FF00";

 

其他颜色:

$jobstart_color = "ff3300";

 

Load rank的颜色:

$load_colors = array(

   "100+" => "ff634f",

   "75-100" =>"ffa15e",

   "50-75" => "ffde5e",

   "25-50" => "caff98",

   "0-25" => "e2ecff",

   "down" => "515151"

);

 

Load缩放比例:$load_scale = 1.0;

 

单个metric图的默认颜色:$default_metric_color = "555555";

 

默认metric:$default_metric = "load_one";

 

从图表中FQDN主机名中删除域名:$strip_domainname = false、

时间范围常量数组:

$time_ranges = array(

   'hour'=>3600,

   'day'=>86400,

   'week'=>604800,

   'month'=>2419200,

   'year'=>31449600

);

 

默认时间范围:$default_time_range = 'hour';

 

图表大小:

$graph_sizes = array(

   'small'=>array(

     'height'=>40,

     'width'=>130,

     'fudge_0'=>0,

     'fudge_1'=>0,

     'fudge_2'=>0

   ),

   'medium'=>array(

     'height'=>75,

     'width'=>300,

     'fudge_0'=>0,

     'fudge_1'=>14,

     'fudge_2'=>28

   ),

   'large'=>array(

     'height'=>600,

     'width'=>800,

     'fudge_0'=>0,

     'fudge_1'=>0,

     'fudge_2'=>0

   ),

   # this was the default value when no other size was provided.

   'default'=>array(

     'height'=>100,

     'width'=>400,

     'fudge_0'=>0,

     'fudge_1'=>0,

     'fudge_2'=>0

   )

);

 

默认图表大小:$default_graph_size = 'default';

$graph_sizes_keys = array_keys( $graph_sizes );

$case_sensitive_hostnames = true;

 

文件get_ganglia.php

搜索和解析来自gmod的XML结果,结果存储于全局变量:$clusters, $hosts, $hosts_down, $metrics,假设之前已经调用了get_context.php.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值