概述
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&z=large&{graph_args}">
<IMG BORDER=0 ALT="{cluster} LOAD"
SRC="./graph.php?g=load_report&z=medium&{graph_args}">
</A>
<A HREF="./graph.php?g=cpu_report&z=large&{graph_args}">
<IMG BORDER=0 ALT="{cluster} CPU"
SRC="./graph.php?g=cpu_report&z=medium&{graph_args}">
</A>
<A HREF="./graph.php?g=mem_report&z=large&{graph_args}">
<IMG BORDER=0 ALT="{cluster} MEM"
SRC="./graph.php?g=mem_report&z=medium&{graph_args}">
</A>
<A HREF="./graph.php?g=network_report&z=large&{graph_args}">
<IMG BORDER=0 ALT="{cluster} NETWORK"
SRC="./graph.php?g=network_report&z=medium&{graph_args}">
</A>
<!-- START BLOCK : optional_graphs -->
<A HREF="./graph.php?g={name}_report&z=large&{graph_args}">
<IMG BORDER=0 ALT="{cluster} {name}" SRC="./graph.php?g={name}_report&z=medium&{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.
最后
以上就是开放身影为你收集整理的ganglia web端代码阅读(部分)的全部内容,希望文章能够帮你解决ganglia web端代码阅读(部分)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复