Changes between Version 3 and Version 4 of misc/botlog_pas


Ignore:
Timestamp:
08/20/18 18:32:24 (7 years ago)
Author:
Tetsuya Michikawa
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • misc/botlog_pas

    v3 v4  
    77KEKBで使用されているZlogの代替として、電子ログシステム(botlog)と画像ログシステム(!PrintAnyServer)を開発した。
    88
    9 == パッケージインストール ==
     9= パッケージインストール =
    1010
    1111このシステムのインストールやその運用は、サーバーシステム管理者でroot権限を持っていることが前提のシステムなので注意。
    1212
    1313
    14 === インストール環境 ===
     14== インストール環境 ==
    1515
    1616インストールするシステムは、
     
    3434
    3535
    36 === パッケージ展開 ===
     36== パッケージ展開 ==
    3737
    3838電子ログシステム関連のプログラムのほとんどは、{{{/opt/OperationLog}}}に置くようにしてある。[[br]]
     
    6767}}}
    6868
    69 展開後、ライブラリパスを設定し、{{{/opt/OperationLog/lib}}}を使用可能にする。
     69展開後、ライブラリパスを設定し、{{{/opt/OperationLog/local/lib}}}を使用可能にする。
    7070
    7171{{{
     
    8989}}}
    9090
    91 === 管理ユーザー設定 ===
     91== 管理ユーザー設定 ==
    9292
    9393電子ログの管理ユーザーを設定する。[[br]]
     
    9696展開した{{{/opt/OperationLog}}}以下のディレクトリは、所有者が{{{uid:501,gid:502}}}になっているので、ファイルは適切な所有者に変更すること。
    9797
    98 === PrintAnyServerの起動 ===
     98== PrintAnyServerの起動 ==
    9999
    100100PrintAnyServerの本体は、httpdとは別のプロセスとして動作しているので、事前に起動させておく必要がある。[[br]]
     
    114114}}}
    115115
    116 正常に起動できれば、以上のようなメッセージが表示される。
    117 
    118 
    119 === 動作確認 ===
     116正常に起動できれば、以上のようなメッセージが表示される。[[br]]
     117
     118
     119== 動作確認 ==
    120120
    121121同一ネットワーク上のPCでWebブラウザを立ち上げて、それぞれ{{{http://(HOSTNAMEorIPADDR)/TEST/botlog/edit}}}と{{{http://(HOSTNAMEorIPADDR)/printView}}}にアクセスすると画面が表示されるはずである。[[br]]
     
    126126
    127127
    128 == 設定 ==
     128画面を確認したら、PrintAnyServerは一旦{{{CTRL+C}}}で終了しておく。
     129
     130
     131= 設定 =
    129132
    130133この状態でも一般的な使用は可能なので、そのまま使っても問題はないが、最低でも{{{http://(HOSTNAMEorIPADDR)/TEST/botlog/***}}}の{{{/TEST}}}は変更したほうがいいだろう。[[br]]
     
    133136
    134137{{{
    135 [root@installtest2 ~]# service httpd restart
     138[root@localhost ~]# service httpd restart
    136139Stopping httpd:                                            [  OK  ]
    137140Starting httpd:                                            [  OK  ]
    138141}}}
    139142
    140 === botlog ===
    141 
    142 ==== URL変更 ====
     143== botlog ==
     144
     145=== URL変更 ===
    143146接続先URLが、{{{/TEST/botlog/***}}}となっているので、これを変更する。[[br]]
    144147
     
    169172
    170173修正箇所は{{{getServerCfg:root}}}。[[br]]
    171 修正後に、httpdを再起動し、{{{http://(HOSTNAMEorIPADDR)/EUJP/botlog/edit}}}にアクセスしすると同じデータが表示される。
    172 
    173 ==== DB ====
     174修正後に、httpdを再起動し、{{{http://(HOSTNAMEorIPADDR)/EUJP/botlog/edit}}}にアクセスすると変更前と同じデータが表示される。
     175
     176=== DB ===
    174177
    175178デフォルトでは、sqlite3が動作確認用DBとして設定されている。[[br]]
     
    213216PostgreSQL自体の設定はここでは説明しない。
    214217
    215 ==== セクション(グルーブ)設定 ====
     218=== セクション(グルーブ)設定 ===
    216219
    217220セクション名の設定は、SQLを直接実行するか、{{{/opt/OperationLog/botlog/sql/[sqlite3|PostgreSQL]/section.sql}}}を編集したデータを各DB用のコンソールから設定する。[[br]]
     
    236239テーブルがない状態でこれらのスクリプトを起動すると、いくつかエラーが表示されるが、無視してもいい。
    237240
    238 === !PrintAnyServer ===
    239 
    240 ==== 設定 ====
     241
     242== !PrintAnyServer ==
     243
     244=== URL変更 ===
    241245'''
    242246設定の変更は管理ユーザーで行うが、プログラムの実行は{{{root}}}で行うので注意。'''[[br]]
    243247ディレクトリ名をbotlogと合わせるようにする場合には、設定ファイルと{{{/var/www/html/~}}}のディレクトリ名を変更する。[[br]]
     248
     249変更しない場合にはここを読み飛ばして構わない。[[br]]
     250
    244251
    245252ここでは、例としてbotlogと同じく{{{EUJP}}}としておく。[[br]]
     
    276283[root@localhost ~]$ cd /var/www/html
    277284[root@localhost html]$ mkdir EUJP
    278 [root@localhost html]$ mmv printView EUJP
    279 }}}
    280 
    281 ==== 動作確認 ====
     285[root@localhost html]$ mv printView EUJP
     286}}}
     287
     288=== 動作確認 ===
    282289
    283290PrintAnyServerは、サーバー起動後にWeb画面から画像を登録して動作を確認する。[[br]]
     291
     292まずは、rootになってからPrintAnyServerを再起動する。
     293
     294{{{
     295[root@localhost ~]# cd /opt/OperationLog/PrintAnyServer
     296[root@localhost PrintAnyServer]# source /opt/OperationLog/etc/env.sh
     297[root@localhost PrintAnyServer]# python2.7 printAnyServer.py conf/eujp.cfg
     298Bottle v0.12.13 server starting up (using PasteServer())...
     299Listening on http://0.0.0.0:9090/
     300Hit Ctrl-C to quit.
     301
     302serving on 0.0.0.0:9090 view at http://127.0.0.1:9090
     303}}}
     304
     305Web画面を起動し、クリップボードに画像を読み込んでから、"Paste clipboard image or Drop image file"上で右クリックして、"Paste"を選択する。[[br]]
     306画像のサムネイルとキャプションが入力できるダイアログボックスが表示されるので、"登録"ボタンを押下する。[[br]]
    284307正常に動作すれば画像が表示され、{{{/opt/OperationLog/data/pas}}}に日付ディレクトリとindex_list.txtというファイルが作成される。[[br]]
    285 動作しない場合は、ほとんどがログファイル周りなので、{{{/var/log/httpd/error_log}}}でエラーが発生していないかを確認する。[[br]]
    286 エラーが発生している場合には、{{{/opt/OperationLog/log/pas/*.log}}}のパーミッションを755にして、
    287 
    288 
     308
     309
     310=== 起動スクリプト ===
     311
     312PrintAnyServerをprocServで起動するためのスクリプト"{{{/opt/OperationLog/PrintAnyServer/bootPas.sh}}}"を作成してあるので、通常運用時に使用して欲しい。[[br]]
     313ファイルの内容は以下の通り。
     314
     315{{{
     316#!/bin/sh
     317
     318TOP=/opt/OperationLog
     319
     320PROCSERV=$TOP/local/bin/procServ
     321PYTHON=$TOP/local/bin/python
     322
     323PAS_TOP=$TOP/PrintAnyServer
     324PAS=$PAS_TOP/printAnyServer.py
     325PAS_CONFIG=$PAS_TOP/conf/test.cfg
     326
     327PROC_LOG=$TOP/log/pas/procServ.log
     328PROC_PORT=20200
     329
     330$PROCSERV -P $PROC_PORT -L $PROC_LOG $PYTHON $PAS $PAS_CONFIG
     331}}}
     332
     333通常は、{{{PAS_CONFIG}}}で設定ファイルの名前を変更する程度だが、実際に使用する際には、環境に合わせてスクリプトの内容は変更してから使用すること。[[br]]
     334
     335
     336=== その他の設定 ===
     337
     338基本的な設定以外にも、[wiki:misc/botlog_pas/client_download Windowsクライアント用プログラムのダウンロード機能]と[wiki:misc/botlog_pas/printer 同時印刷機能]があるが、これらは別ページで解説する。
     339
     340
     341== EPICS record monitor ==
     342
     343EPICS record monitor は、botlog用Web APIを使用した外部プログラムで、登録されているEPICSレコードに変化があった場合、botlogに自動的にメッセージを登録する。[[br]]
     344監視するレコードとメッセージの関連付けは、pythonで記述し、1メッセージにつき、1ファイルを作成する必要がある。[[br]]
     345
     346プログラム本体は、{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor}}}の{{{epicsRecordMonitor.py}}}で、各設定は{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor/Modules}}}に設定する。
     347
     348=== 設定ファイル ===
     349
     350設定ファイルは、{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor/test_ermi.py}}}をひな型にして作成し、{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor/Modules}}}に保存すれば、{{{epicsRecordMonitor.py}}}を起動した際に読み込まれ、実行される。
     351
     352{{{
     353# -*- coding: utf-8 -*-
     354#
     355
     356"""
     357このプログラムを EPICS Record Monitor 定義のひな型として使用すること
     358
     359各設定に使用する場合に変更する箇所は、pvs変数とexecFunc関数
     360クラス名は変更しないこと
     361
     362"""
     363
     364from epicsRecordMonitorItem import *
     365
     366#
     367#
     368#
     369class ermi(epicsRecordMonitorItemIF):
     370    #
     371    # クラスコンストラクタ
     372    # ここで使用するレコード名を設定
     373    #
     374    def __init__(self):
     375        pvs = ['jane', 'fred']    # ここに使用するレコード名をリスト形式で設定
     376        self.setPvs(pvs)
     377
     378    #
     379    # メッセージ出力条件を記述
     380    # 関数の引き数 pvs に関数実行時のデータが渡される
     381    # データの形式は辞書型を含んだリストで、構造は以下のようになっている
     382    #
     383    # [
     384    #   {
     385    #     'name'   : record name,
     386    #     'prevVal': previos value,
     387    #     'val'    : current value,
     388    #     'time'   : record process time
     389    #   },
     390    #     :
     391    # ]
     392    #
     393    # リストの順番はコンストラクタで設定した順番
     394    #
     395    # 戻り値はメッセージのみを返すようにして、メッセージがない場合には None を返すこと
     396    #
     397    def execFunc(self, pvs):
     398        janePv = pvs[0]
     399        fredPv = pvs[1]
     400
     401        rtn = None
     402        if janePv['val'] < fredPv['val'] and fredPv['prevVal'] != fredPv['val']:
     403            rtn = "fred is over jane!!!"
     404
     405        return rtn
     406
     407}}}
     408
     409
     410
     411