Changes between Version 3 and Version 4 of misc/botlog_pas
- Timestamp:
- 08/20/18 18:32:24 (6 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
misc/botlog_pas
v3 v4 7 7 KEKBで使用されているZlogの代替として、電子ログシステム(botlog)と画像ログシステム(!PrintAnyServer)を開発した。 8 8 9 = = パッケージインストール ==9 = パッケージインストール = 10 10 11 11 このシステムのインストールやその運用は、サーバーシステム管理者でroot権限を持っていることが前提のシステムなので注意。 12 12 13 13 14 == = インストール環境 ===14 == インストール環境 == 15 15 16 16 インストールするシステムは、 … … 34 34 35 35 36 == = パッケージ展開 ===36 == パッケージ展開 == 37 37 38 38 電子ログシステム関連のプログラムのほとんどは、{{{/opt/OperationLog}}}に置くようにしてある。[[br]] … … 67 67 }}} 68 68 69 展開後、ライブラリパスを設定し、{{{/opt/OperationLog/l ib}}}を使用可能にする。69 展開後、ライブラリパスを設定し、{{{/opt/OperationLog/local/lib}}}を使用可能にする。 70 70 71 71 {{{ … … 89 89 }}} 90 90 91 == = 管理ユーザー設定 ===91 == 管理ユーザー設定 == 92 92 93 93 電子ログの管理ユーザーを設定する。[[br]] … … 96 96 展開した{{{/opt/OperationLog}}}以下のディレクトリは、所有者が{{{uid:501,gid:502}}}になっているので、ファイルは適切な所有者に変更すること。 97 97 98 == = PrintAnyServerの起動 ===98 == PrintAnyServerの起動 == 99 99 100 100 PrintAnyServerの本体は、httpdとは別のプロセスとして動作しているので、事前に起動させておく必要がある。[[br]] … … 114 114 }}} 115 115 116 正常に起動できれば、以上のようなメッセージが表示される。 117 118 119 == = 動作確認 ===116 正常に起動できれば、以上のようなメッセージが表示される。[[br]] 117 118 119 == 動作確認 == 120 120 121 121 同一ネットワーク上のPCでWebブラウザを立ち上げて、それぞれ{{{http://(HOSTNAMEorIPADDR)/TEST/botlog/edit}}}と{{{http://(HOSTNAMEorIPADDR)/printView}}}にアクセスすると画面が表示されるはずである。[[br]] … … 126 126 127 127 128 == 設定 == 128 画面を確認したら、PrintAnyServerは一旦{{{CTRL+C}}}で終了しておく。 129 130 131 = 設定 = 129 132 130 133 この状態でも一般的な使用は可能なので、そのまま使っても問題はないが、最低でも{{{http://(HOSTNAMEorIPADDR)/TEST/botlog/***}}}の{{{/TEST}}}は変更したほうがいいだろう。[[br]] … … 133 136 134 137 {{{ 135 [root@ installtest2~]# service httpd restart138 [root@localhost ~]# service httpd restart 136 139 Stopping httpd: [ OK ] 137 140 Starting httpd: [ OK ] 138 141 }}} 139 142 140 == = botlog ===141 142 === = URL変更 ====143 == botlog == 144 145 === URL変更 === 143 146 接続先URLが、{{{/TEST/botlog/***}}}となっているので、これを変更する。[[br]] 144 147 … … 169 172 170 173 修正箇所は{{{getServerCfg:root}}}。[[br]] 171 修正後に、httpdを再起動し、{{{http://(HOSTNAMEorIPADDR)/EUJP/botlog/edit}}}にアクセス しすると同じデータが表示される。172 173 === = DB ====174 修正後に、httpdを再起動し、{{{http://(HOSTNAMEorIPADDR)/EUJP/botlog/edit}}}にアクセスすると変更前と同じデータが表示される。 175 176 === DB === 174 177 175 178 デフォルトでは、sqlite3が動作確認用DBとして設定されている。[[br]] … … 213 216 PostgreSQL自体の設定はここでは説明しない。 214 217 215 === = セクション(グルーブ)設定 ====218 === セクション(グルーブ)設定 === 216 219 217 220 セクション名の設定は、SQLを直接実行するか、{{{/opt/OperationLog/botlog/sql/[sqlite3|PostgreSQL]/section.sql}}}を編集したデータを各DB用のコンソールから設定する。[[br]] … … 236 239 テーブルがない状態でこれらのスクリプトを起動すると、いくつかエラーが表示されるが、無視してもいい。 237 240 238 === !PrintAnyServer === 239 240 ==== 設定 ==== 241 242 == !PrintAnyServer == 243 244 === URL変更 === 241 245 ''' 242 246 設定の変更は管理ユーザーで行うが、プログラムの実行は{{{root}}}で行うので注意。'''[[br]] 243 247 ディレクトリ名をbotlogと合わせるようにする場合には、設定ファイルと{{{/var/www/html/~}}}のディレクトリ名を変更する。[[br]] 248 249 変更しない場合にはここを読み飛ばして構わない。[[br]] 250 244 251 245 252 ここでは、例としてbotlogと同じく{{{EUJP}}}としておく。[[br]] … … 276 283 [root@localhost ~]$ cd /var/www/html 277 284 [root@localhost html]$ mkdir EUJP 278 [root@localhost html]$ m mv printView EUJP279 }}} 280 281 === = 動作確認 ====285 [root@localhost html]$ mv printView EUJP 286 }}} 287 288 === 動作確認 === 282 289 283 290 PrintAnyServerは、サーバー起動後に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 298 Bottle v0.12.13 server starting up (using PasteServer())... 299 Listening on http://0.0.0.0:9090/ 300 Hit Ctrl-C to quit. 301 302 serving on 0.0.0.0:9090 view at http://127.0.0.1:9090 303 }}} 304 305 Web画面を起動し、クリップボードに画像を読み込んでから、"Paste clipboard image or Drop image file"上で右クリックして、"Paste"を選択する。[[br]] 306 画像のサムネイルとキャプションが入力できるダイアログボックスが表示されるので、"登録"ボタンを押下する。[[br]] 284 307 正常に動作すれば画像が表示され、{{{/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 312 PrintAnyServerをprocServで起動するためのスクリプト"{{{/opt/OperationLog/PrintAnyServer/bootPas.sh}}}"を作成してあるので、通常運用時に使用して欲しい。[[br]] 313 ファイルの内容は以下の通り。 314 315 {{{ 316 #!/bin/sh 317 318 TOP=/opt/OperationLog 319 320 PROCSERV=$TOP/local/bin/procServ 321 PYTHON=$TOP/local/bin/python 322 323 PAS_TOP=$TOP/PrintAnyServer 324 PAS=$PAS_TOP/printAnyServer.py 325 PAS_CONFIG=$PAS_TOP/conf/test.cfg 326 327 PROC_LOG=$TOP/log/pas/procServ.log 328 PROC_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 343 EPICS 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 364 from epicsRecordMonitorItem import * 365 366 # 367 # 368 # 369 class 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