让monit支持中文

现在很多rails的应用都用monit来做监控,monit提供了一个简单的web server可以很好的远程看到监控资源的情况。

但是有一个问题就是这个web server实现的比较简单,没有考虑多语言的支持。不过,我们可以通过简单修改一下monit的源代码,让它支持中文。

修改的方法有两个:
1、http/cervlet.h里面HEAD_HTML这个宏,是monit页面的html头,可以考虑增加:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
然后,用unicode的方式来编辑monit的控制文件,这样,就能够在页面上用unicode的方式来访问了

这个方法有一个不方便的地方就是必须要用unicode的方式来编辑控制文件。

2、对cervlet.c进行修改,用iconv库把url进行编码转换。在cervlet.c增加如下函数

  1. #include <iconv.h>
  2. int  code_convert( char  *from_charset, char  *to_charset, char  *inbuf, int  inlen, char  *outbuf, int  outlen)
  3. {
  4.     iconv_t cd;
  5.      //int rc;
  6.      char  **pin = &inbuf;
  7.      char  **pout = &outbuf;
  8.     cd = iconv_open(to_charset,from_charset);
  9.      if  (cd==0)  return  -1;
  10.     
  11.     memset(outbuf, 0, outlen);
  12.      if  (iconv(cd, ( const   char  **)pin, (unsigned  int  *)&inlen, pout, &outlen) == -1) 
  13.     {   
  14.         perror( "iconv error:" );
  15.          return  -1;
  16.     }
  17.     iconv_close(cd);
  18.      return  0;
  19. }


再把handle_action函数的前面几行进行修改

  1. static   void  handle_action(HttpRequest req, HttpResponse res) {
  2.    char  *org_name= req->url;
  3.    const   char  *action= get_parameter(req,  "action" );
  4.   
  5.    char  new_name[512];
  6.   code_convert( "UTF-8""GBK" , org_name, strlen(org_name), new_name, 512);
  7.    char  *name = new_name;

重新编译之后就可以使用了,这个方式的缺点是修改的量有点大,但是以后使用起来就比较方便了。


注:以上代码基于monit-4.6

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值