= 詳細設定 = インストールした状態でも一般的な使用は可能なので、そのまま使っても問題はないが、修正する場合の変更点を記述する。[[br]] botlog,PrintAnyServer共に設定を変更した際には、必ずhttpdを再起動する必要がある。 {{{ [root@localhost ~]# service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ] }}} == botlog == === DB === デフォルトでは、sqlite3が動作確認用DBとして設定されている。[[br]] sqlite3のDBは単一ファイルなので、ファイルの保存ディレクトリを変更すればいい。[[br]] {{{ # sqlite3用DB設定 def getSqlite3Cfg(self): # file: db file # dbファイルのフルパスを設定 # * 作成したファイルとファイルのあるディレクトリのパーミッションは"777"にしておくか # Webサーバーのユーザー(通常はapache/apache)が読み書きできるようにしておくこと return {'file':'/opt/OperationLog/data/botlog/db/sqlite3/botlog.sqlite3'} }}} コメントにも書いてあるように、DBファイルとディレクトリのパーミッションは"777"にしないと動作しなくなるので注意。[[br]] DBをPostgreSQLに変更する場合には、 {{{ # DB種別設定 def getDbCfg(self): # type: [ sqlite3 | postgresql ] #return {'type':'sqlite3'} return {'type':'postgresql'} # postgresql用設定 # userは設定しないとhttpd user(apache)で書き込むので、 # DB管理用ユーザー(作成ユーザー)を設定すること def getPostgresqlCfg(self): return {'host':'localhost', <-- DBホスト 'port':5432, <-- 接続ポート番号 'db':'botlog', <-- DB名(これは変えなくてもいい) 'user':'logoper', <-- DB接続ユーザー名 'passwd':''} <-- DB接続パスワード }}} の設定を変更する。[[br]] PostgreSQL自体の設定はここでは説明しない。 === セクション(グルーブ)設定 === セクション名の設定は、SQLを直接実行するか、{{{/opt/OperationLog/botlog/sql/[sqlite3|PostgreSQL]/section.sql}}}を編集したデータを各DB用のコンソールから設定する。[[br]] 但し、idが0,1は特別な意味を持っているので、設定は変更しないこと。[[br]] データがない初期状態ならば、テーブルを一括で作成するスクリプトを作成しているので、それを利用すると一括でテーブルを再構築する。[[br]] '''このスクリプトは一度全てのテーブルを削除するので、消してもいいデータしかない場合以外は実行しないこと。'''[[br]] * sqlite3 の場合 {{{ [user@localhost ~]$ /opt/OperationLog/botlog/sql/sqlite3/createTable.sh /opt/OperationLog/data/botlog/db/sqlite3/botlog.sqlite3 }}} * PostgreSQLの場合 PostgreSQLの場合には、DBへ接続するための設定をシェルスクリプト内に記述してから実行すること。 {{{ [user@localhost ~]$ /opt/OperationLog/botlog/sql/PostgreSQL/createTable.sh }}} テーブルがない状態でこれらのスクリプトを起動すると、いくつかエラーが表示されるが、無視してもいい。 === その他の設定 === 基本的な設定以外にも、[wiki:misc/botlog_pas/client_download クライアント用プログラムのダウンロード機能]と[wiki:misc/botlog_pas/printer 同時印刷機能]があるが、これらは別ページで解説する。 == EPICS record monitor == EPICS record monitor は、botlog用Web APIを使用した外部プログラムで、登録されているEPICSレコードに変化があった場合、botlogに自動的にメッセージを登録する。[[br]] 監視するレコードとメッセージの関連付けは、pythonで記述し、1メッセージにつき、1ファイルを作成する必要がある。[[br]] プログラム本体は、{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor}}}の{{{epicsRecordMonitor.py}}}で、各設定は{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor/Modules}}}に設定する。 === 設定ファイル === 設定ファイルは、{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor/test_ermi.py}}}をひな型にして作成し、{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor/Modules}}}に保存すれば、{{{epicsRecordMonitor.py}}}を起動した際に読み込まれ、実行される。 {{{ # -*- coding: utf-8 -*- # """ このプログラムを EPICS Record Monitor 定義のひな型として使用すること 各設定に使用する場合に変更する箇所は、pvs変数とexecFunc関数 クラス名は変更しないこと """ from epicsRecordMonitorItem import * # # # class ermi(epicsRecordMonitorItemIF): # # クラスコンストラクタ # ここで使用するレコード名を設定 # def __init__(self): pvs = ['jane', 'fred'] # ここに使用するレコード名をリスト形式で設定 self.setPvs(pvs) # # メッセージ出力条件を記述 # 関数の引き数 pvs に関数実行時のデータが渡される # データの形式は辞書型を含んだリストで、構造は以下のようになっている # # [ # { # 'name' : record name, # 'prevVal': previos value, # 'val' : current value, # 'time' : record process time # }, # : # ] # # リストの順番はコンストラクタで設定した順番 # # 戻り値はメッセージのみを返すようにして、メッセージがない場合には None を返すこと # def execFunc(self, pvs): janePv = pvs[0] fredPv = pvs[1] rtn = None if janePv['val'] < fredPv['val'] and fredPv['prevVal'] != fredPv['val']: rtn = "fred is over jane!!!" return rtn }}} 設定ファイルのチェック機能はまだ作成していないので、動作チェックは実際に動かしてみるしか方法が無い。[[br]] === 動作確認 === 動作テストは、{{{/opt/OperationLog/botlog/tools/epicsRecordMonitor/test_ermi.py}}}を{{{Modules}}}にコピーして、プログラムを実行することで行う。 {{{ [user@localhost ~]$ source /opt/OperationLog/etc/env.sh [user@localhost ~]$ cd /opt/OperationLog/botlog/tools/epicsRecordMonitor [user@localhost epicsRecordMonitor]$ cp test_ermi.py Modules [user@localhost epicsRecordMonitor]$ python2.7 epicsRecordMonitor.py }}} プログラムを実行すると、botlogに{{{Initial Disconnect Pvs:jane, fred}}}というメッセージが表示される。[[br]] 一旦プログラムを終了し、{{{excas}}}を別画面で起動する。[[br]] 再度プログラムを起動し、{{{test_ermi.py}}}に設定してある条件が満たされると、{{{fred is over jane!!!}}}というメッセージが追加される。[[br]] 後は、{{{Modules/test_ermi.py}}}を削除してから、設定ファイルを作成後にプログラムを実行すれば、メッセージが自動的にbotlogに追加される。[[br]] このプログラム用の起動スクリプトは作成していないので、ユーザーが作成すること。