

supevisorのWebコンソールを使用しています。

デフォルトですと、/etc/supervisord.confファイルでprogramに設定したものが  
そもまま出てしまいますので、  
そこを別名にして、日本語などを使用することは可能でしょうか？  
そのまま、programを直接日本語などを入力しても文字化けしてしまい不可能でした。

![Webコンソールです](https://i.stack.imgur.com/ad8Sg.png)  
よろしくお願いします。


CC BY-SA 3.0
2015-01-31T01:30:11.500
5647
2015-01-31T06:52:32.280
7934
question
python supervisord
supevisorのWebコンソールに別名を出したい


Python 2.x シリーズでは unicode 文字列と ascii
文字列(正しい呼称か不明)が別のモノ(オブジェクト？)として扱われますので、それに合わせた変更を行う必要がありました。以下に記載する方法は対症療法で、根本的な解決にはなっていません。つまり、Supervisor
のバージョンアップなどで無効になる可能性が高いと考えて下さい。  

* * *

  
Supervisor には `web.py` というファイルがありますが、これを一部変更する必要があります。私の方の環境は、

  * Ubutu Linux 12.04
  * Python 2.7
  * Supervisor 3.0b2 (apt でインストールした package)

となっていて、`web.py` のパスは以下です。

`/usr/share/pyshared/supervisor/web.py`

ユーザのローカルディレクリにインストールした場合には `$HOME/.local` 以下などに置かれているかもしれませんので、適宜見つけて下さい。

以下が変更用のパッチになります。

[code]

    --- web.py.org  2013-07-19 12:30:58.000000000 +0900
    +++ web.py  2015-01-31 14:55:42.482416837 +0900
    @@ -203,7 +203,7 @@
             root = self.clone()
    
             title = root.findmeld('title')
    -        title.content('Supervisor tail of process %s' % processname)
    +        title.content('Supervisor tail of process %s' % processname.decode('utf-8'))
             tailbody = root.findmeld('tailbody')
             tailbody.content(tail)
    
    @@ -426,7 +426,7 @@
             if message is not None:
                 statusarea = root.findmeld('statusmessage')
                 statusarea.attrib['class'] = 'status_msg'
    -            statusarea.content(message)
    +            statusarea.content(message.decode('utf-8'))
    
             if data:
                 iterator = root.findmeld('tr').repeat(data)
    @@ -445,7 +445,7 @@
                     processname = make_namespec(item['group'], item['name'])
                     anchor.attributes(href='tail.html?processname=%s' %
                                       urllib.quote(processname))
    -                anchor.content(processname)
    +                anchor.content(processname.decode('utf-8'))
    
                     actions = item['actions']
                     actionitem_td = tr_element.findmeld('actionitem_td')
    
[/code]

これを、例えば `supervisor_utf-8.patch` として保存して、以下を実行します。

[code]

    $ cd [directory where web.py exists]
    $ cp -pv web.py web.py.org
    $ patch < supervisor_utf-8.patch
    
[/code]

# 質問者様の環境が UNIX 系でない場合には手動でパッチを当てていただくことになります

それから、Supervisor が Web コンソールで使用しているテンプレートファイル(HTML)に `charset`
を設定しておいたほうが良いかと思います。以下では `UTF-8` としていますが、適宜変更して下さい。

対象ファイル:

[code]

    /usr/share/pyshared/supervisor/ui/status.html
    /usr/share/pyshared/supervisor/ui/tail.html
    
[/code]

追加内容:(`meta http-equiv=...` の部分)

[code]

    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
      <title>Supervisor Status</title>
                  :
    </head>
    
[/code]

また、Supervisor から起動されるプログラム(プロセス)にもロケールを設定しておいた方が良いでしょう。以下は `ja_JP.UTF-8`
としていますが、同様に適宜変更して下さい。

対象ファイル:

[code]

    /etc/supervisor/supervisord.conf
    
[/code]

追加内容:(`environment=...` の部分)

[code]

    [supervisord]
    environment=LANG='ja_JP.UTF-8',LC_ALL='ja_JP.UTF-8'
    
[/code]

* * *

  
Supervisor UTF-8 patch 適用後のウェブコンソール

![Supervisor UTF-8 patch 適用後](https://i.stack.imgur.com/eyBmt.png)


CC BY-SA 3.0
2015-01-31T06:34:28.390
5653
2015-01-31T06:52:32.280
2015-01-31T06:52:32.280
5647
answer