Chinaunix首页 | 论坛 | 博客
  • 博客访问: 251979
  • 博文数量: 42
  • 博客积分: 1555
  • 博客等级: 上尉
  • 技术积分: 489
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-10 13:58
文章分类

全部博文(42)

文章存档

2017年(1)

2015年(1)

2014年(1)

2013年(6)

2012年(12)

2011年(3)

2010年(3)

2009年(1)

2007年(7)

2006年(7)

我的朋友

分类: NOSQL

2013-12-03 11:57:37

     Ganglia 由于其对hadoop有着良好的支持,基于不需要太复杂的配置就可以胜任对于hadoop cluster的监控工作。在部署完成以后出现了一个问题,进入某一个监控指标以后点击inspect查看详细图的时候其鼠标事件显示的日期和当前本地时间差了8 个时区。也就是鼠标事件使用的时区是utc时区,但是其它应用所使用的时区肯定是CST(中国位于 世界时区的东八区)。
    基本根本原因是ganglia画图使用了jquery.flot 库,flot在处理时间的时候会将时间换化utc时间。
    Google 了好多次也未能找到比较好的解决办法,后来开始对文件的运行进行分析:
     1 图片的显示使用的是php
     2 鼠标的显示事件使用肯定就是js了。
     3 其开始调用页面为graph_all_periods.php ,根据关键字“inspect”可以得到其在里面的对应的真实的action操作
       inspectGraph()这个函数;在其php文件中只有inspect_graph.php,host_view.php这两个文件调用了此函数,并没有该函数的定义。根据前面的推断,该函数及有可能是在js中定义的。
     4 通过搜索js里面的关键字,在js/ganglia.js找到相关的函数。但是这个函数并未直接操作时间,该js里面另外一个functions进入了我的侦察视野。结果让人意外,这个地方也未能定义,但是却找了另外一个相关的引用页 inspect_graph.php 
     5 打开 inspect_graph.php之后,很快就发现了罪魁祸首 function  utcTimeStr(tstamp) ,就是这个函数活生生的将时间转成了utc。解决办法很简单了,将其utc转换去掉即可
    原函数:
      function utcTimeStr(tstamp) {
    var date = new Date(tstamp);


    var month = date.getUTCMonth() + 1;
    if ( month < 10 )
      month = "0" + month;
    var day = date.getUTCDate();
    if ( day < 10 )
      day = "0" + day;
    var hr = date.getUTCHours();
    if (hr < 10)
      hr = "0" + hr;
    var min = date.getUTCMinutes();
    if (min < 10)
      min = "0" + min;
    var sec = date.getUTCSeconds();
    if (sec < 10)
      sec = "0" + sec;
    return date.getUTCFullYear() + "-" + month + "-" + day + " " + hr + ":" + min + ":" + sec;
  }
     修改为:
function utcTimeStr(tstamp) {
    var date = new Date(tstamp);


    var month = date.getMonth() + 1;
    if ( month < 10 )
      month = "0" + month;
    var day = date.getDate();
    if ( day < 10 )
      day = "0" + day;
    var hr = date.getHours();
    if (hr < 10)
      hr = "0" + hr;
    var min = date.getMinutes();
    if (min < 10)
      min = "0" + min;
    var sec = date.getSeconds();
    if (sec < 10)
      sec = "0" + sec;
    return date.getFullYear() + "-" + month + "-" + day + " " + hr + ":" + min + ":" + sec;
  }
   另外需要将js/jquery.flot.js   js/jquery.flot.js.min 中的UTC去掉
   重新打开ganglia的页面,点击inspect时间显示正常。
  由于blog不支持附件上传,有需要修改好的inspect_graph.php的朋友可以发邮件或是留言索取。


阅读(1823) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~