⚙️ ❮ ZShell用の高速ログフレームワーク❯




https://z.digitalclouds.dev | GitHub |
  • How Zflai Solves The Performance Issue
  • How To Use

  • The Backend (Database) Definitions
  • File Backend
  • MySQL Backend
  • SQLite3 Backend
  • ElasticSearch Backend
  • Configuration
  • Installation
  • ZShellのための高速ログフレームワークスクリプトへのログ記録の追加は問題を構成する
    より遅い.スクリプトがいくつかの大きな仕事を実行すること
    例えば10 - 20 %の実行時間は大きな違いにつながる.
    このため、このような大きな作業スクリプトは、ファイルログのみに制限されます.
    メッセージを送信します.mysql データベースが増加する
    さらに実行時間.

    Zflaiがパフォーマンス問題を解決する方法
    ZFLAIは以下のように動作します.
  • バックグラウンドログ処理は>( … function …)置換
  • ファイル記述子は、スクリプトプロセスで記憶されます.
  • このような記述子への書き込みは非常に高速です.
  • 効用関数zflai-log が指定された場合、
    記述子によるバックグラウンドプロセス.
  • バックグラウンドプロセスは、データを読み取り、メモリ内で記憶します.
  • 各間隔(設定可能)の後、それは1から1にメモリからデータを移動します
    サポートされるバックエンドの
  • ファイル-通常のログファイル、
  • SQLITE 3
  • MySQL
  • 弾性検索.
  • より多くの、バックグラウンドプロセスは、設定可能なアイドル時間後
    (デフォルトでは45秒).それは自動的に再zflai-log 必要に応じて呼び出します.
  • これはzflai 以下のように使用できます:全てのシェルでは
    プロセスは2倍にはならない.背景プロセスは
    ゼロラグロギングは継続的に使用できるようになりますが必要です.
  • この方法では、スクリプトの機能を最小限に抑えながら最小化されます
    MySQLやエラスティックサーチのようなデータベースへのログインが可能です.

    使い方
    現在、2つのエンドユーザ呼び出しがあります.
  • zflai-ctable "{TABLE-NAME} :: {FIELD1}:{TYPE} / {FIELD2}:{TYPE} / … / {FIELDN}:{TYPE}"
  • タイプはSQLから借りられますvarchar(…) , integer , など
    この関数はテーブルを定義し、テーブルを定義します
    (例: SQLite 3またはエラスティックサーチ)最初に保存する前に作成されます
    データ.
    テーブルは特定のバックエンドにバインドされません.それらは
    複数のバックエンドまたはそれらの1つだけ.
  • zflai-log "@{DB-NAME} / {TABLE} :: {FIELD1 TEXT…} | {FIELD2 TEXT…} | … | {FIELDN TEXT…}
  • データベースに格納するマルチカラムメッセージをスケジュールしますDB-NAME , その中で
    テーブルTABLE .

    バックエンド(データベース)定義
    zfliディレクトリを使用する~/.config/zflai 設定ファイルを保存する
    if the $XDG_CONFIG_HOME でない~/.config ). そこにini 定義するファイル
    データベース@{DB-NAME} からzflai-log コールは、
    名称DB-NAME.def . 以下は例ですini サポートされる各ファイル
    データベースバックエンド.

    ファイルバックエンド
    ; Contents of ~/.config/zflai/myfile.def
    [access]
    engine = file
    file = %TABLE%.log
    path = %XDG_CACHE_HOME%/zflai/
    
    [hooks]
    on_open = STATUS: Opening file %TABLE%.log
    on_open_sh = print Hello world! >> ~/.cache/zflai/file_backend.nfo
    on_close = STATUS: Closing file %TABLE%.log
    on_close_sh = print Hello world! >> ~/.cache/zflai/file_backend.nfo
    
    ; vim:ft=dosini
    
    以下の例のファイル内容
    % zflai-ctable  "mytable :: timestamp:integer / message:varchar(288) / message2:varchar(20)"
    % zflai-log "@myfile / mytable :: HELLO | WORLD"
    

    % cat ~/.cache/zflai/mytable.log
    STATUS: Opening file mytable.log
    1572797669: HELLO WORLD
    STATUS: Closing file mytable.log
    

    MySQLバックエンド
    ; Contents of ~/.config/zflai/mysql.def
    [access]
    engine = mysql
    host = localhost
    port =
    user = root
    password = 
    database = test
    
    [hooks]
    on_open = !show databases;
    on_open_sh = print -nr -- "$1" | egrep '(mysql|test)' >! ~/.cache/zflai/mysql.nfo
    on_close = #show tables; select * from mytable;
    on_close_sh = print -rl -- "$(date -R)" "$1" >>! %XDG_CACHE_HOME%/zflai/mysql.tables
    
    ; vim:ft=dosini
    
    フック作成後のファイルの内容例を次に示します.
    % zflai-ctable  "mytable :: timestamp:integer / message:varchar(288) / message2:varchar(20)"
    % zflai-log "@mysql / mytable :: HELLO | WORLD"
    

    % cat ~/.cache/zflai/mysql.nfo
    mysql
    test
    % cat ~/.cache/zflai/mysql.tables
    Sun, 03 Nov 2019 17:55:56 +0100
    mytable
    1 1572800148 HELLO WORLD
    
    認識*_sh -フック接頭辞は次のとおりです.
  • # – Whitespaceの崩壊コピーmysql コマンド出力
  • ! - tokenize & newline -新しい行で区切った単語と出力に分割します.
  • @ - tokenize -単語に分割し、スペースで区切って出力します.

  • SQLITE 3バックエンド
    ; Contents of ~/.config/zflai/sqlite.def
    [access]
    engine = sqlite3
    file = sqlite_main.db3
    path = %XDG_CACHE_HOME%/zflai/
    
    [hooks]
    on_open = !.tables
    on_open_sh = print -nr -- "$1" >! ~/.cache/zflai/sqlite.nfo
    on_close = #select * from mytable;
    on_close_sh = print -rl -- "$(date -R)" "$1" >>! %XDG_CACHE_HOME%/zflai/sqlite.tables
    
    ; vim:ft=dosini
    
    フック作成後のファイルの内容例を次に示します.
    % zflai-ctable  "mytable :: timestamp:integer / message:varchar(288) / message2:varchar(20)"
    % zflai-log "@sqlite / mytable :: HELLO | WORLD"
    

    % cat ~/.cache/zflai/sqlite.nfo
    mytable
    % cat ~/.cache/zflai/sqlite.tables
    Sun, 03 Nov 2019 18:14:30 +0100
    1|1572801262|HELLO|WORLD
    

    弾性検索バックエンド
    ; Contents of ~/.config/zflai/esearch.def
    [access]
    engine = elastic-search
    host = localhost:9200
    index = my-db
    
    ; vim:ft=dosini
    
    データベース内容の例
    % zflai-ctable  "mytable :: timestamp:integer / message:varchar(288) / message2:varchar(20)"
    % zflai-log "@esearch / mytable :: HELLO | WORLD"
    

    % curl -X GET "localhost:9200/my-db/_search" -H 'Content-Type: application/json
    {
      "query": { "match_all": {} },
    }' | jq '.hits.hits[]._source'
    
    {
      "timestamp": "1573089118",
      "write_moment": "1573089124.9808938503",
      "message": "HELLO",
      "message2": "WORLD"
    }
    

    構成
    # How long to keep dj running after last login request
    zstyle ":plugin:zflai:dj" keep_alive_time 15
    
    # Store to disk each 30 seconds
    zstyle ":plugin:zflai:dj" store_interval 30
    

    インストール
    単にzshのプラグインとしてのソースまたは負荷ZI :
    zi load z-shell/zflai
    
    またはzgenで
    zgen load z-shell/zflai