コンテンツにスキップ

Arbiter 組み込み関数

append

関数プロトタイプ: fn append(li: list, v: ...bool|int|float|str|list|map) -> list

関数説明: リストに値を追加します。

関数パラメータ:

  • li: 追加先のリスト。
  • v: 追加する値。

関数戻り値:

  • list: 値が追加されたリスト。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v = [1, 2, 3]
    v = append(v, 4)
    printf("%v", v)
    

    標準出力:

    [1,2,3,4]
    
  • サンプル 1:

    スクリプト内容:

    v = [1, 2, 3]
    v = append(v, "a", 1.1)
    printf("%v", v)
    

    標準出力:

    [1,2,3,"a",1.1]
    

b64dec

関数プロトタイプ: fn b64dec(data: str) -> (str, bool)

関数説明: Base64 デコードを行います。

関数パラメータ:

  • data: Base64 デコードが必要なデータ。

関数戻り値:

  • str: デコードされた文字列。
  • bool: デコードが成功したかどうか。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v = "aGVsbG8sIHdvcmxk"
    v, ok = b64dec(v)
    if ok {
        printf("%v", v)
    }
    

    標準出力:

    hello, world
    

b64enc

関数プロトタイプ: fn b64enc(data: str) -> (str, bool)

関数説明: Base64 エンコードを行います。

関数パラメータ:

  • data: Base64 エンコードが必要なデータ。

関数戻り値:

  • str: エンコードされた文字列。
  • bool: エンコードが成功したかどうか。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v = "hello, world"
    v = b64enc(v)
    printf("%v", v)
    

    標準出力:

    aGVsbG8sIHdvcmxk
    

call_func

関数プロトタイプ: fn call_func(name: str, kwargs: map = {}) -> map

関数説明: 関数プラットフォーム上でリモート関数を呼び出します。

関数パラメータ:

  • name: リモート関数名。
  • kwargs: パラメータマップ。Python の **kwargs に対応します。

関数戻り値:

  • map:

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    result = call_func("echo", {
        "arg_1": "1",
        "arg_2": [12,3],
        "key3": "true"
    })
    printf("%v", result)
    

    標準出力:

    {"error":"","message":"","ok":true,"reason":"","result":{"arg_1":"1","arg_2":[12,3],"kwargs":{"key3":"true"}}}
    
  • サンプル 1:

    スクリプト内容:

    result = call_func("echo", {"arg_2": [12,3]})
    printf("%v", result)
    

    標準出力:

    {"detail":{"exeception":"TypeError(\"echo() missing 1 required positional argument: 'arg_1'\")"},"error":"call function failed, api status code 599","message":"Func task failed","ok":false,"reason":"EFuncFailed"}
    

cast

関数プロトタイプ: fn cast(val: bool|int|float|str, typ: str) -> bool|int|float|str

関数説明: 値をターゲット型に変換します。

関数パラメータ:

  • val: 変換対象の型の値。
  • typ: ターゲット型。boolintfloatstr のいずれか。

関数戻り値:

  • bool|int|float|str: 変換後の値。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v1 = "1.1"
    v2 = "1"
    v2_1 = "-1"
    v3 = "true"
    
    printf("%v; %v; %v; %v; %v; %v; %v; %v\n",
        cast(v1, "float") + 1,
        cast(v2, "int") + 1,
        cast(v2_1, "int"),
        cast(v3, "bool") + 1,
    
        cast(cast(v3, "bool") - 1, "bool"),
        cast(1.1, "str"),
        cast(1.1, "int"),
        cast(1.1, "bool")
    )
    

    標準出力:

    2.1; 2; -1; 2; false; 1.1; 1; true
    

cidr

関数プロトタイプ: fn cidr(ip: str, mask: str) -> bool

関数説明: IP が CIDR ブロック内に存在するかどうかを確認します。

関数パラメータ:

  • ip: IP アドレス。
  • mask: CIDR マスク。

関数戻り値:

  • bool: IP が CIDR ブロック内に存在するかどうか。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    ip = "192.0.2.233"
    if cidr(ip, "192.0.2.1/24") {
        printf("%s", ip)
    }
    

    標準出力:

    192.0.2.233
    
  • サンプル 1:

    スクリプト内容:

    ip = "192.0.2.233"
    if cidr(mask="192.0.1.1/24", ip=ip) {
        printf("%s", ip)
    }
    

    標準出力:

    
    

delete

関数プロトタイプ: fn delete(m: map, key: str)

関数説明: マップからキーを削除します。

関数パラメータ:

  • m: キーを削除するマップ。
  • key: マップから削除するキー。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v = {
        "k1": 123,
        "k2": {
            "a": 1,
            "b": 2,
        },
        "k3": [{
            "c": 1.1, 
            "d":"2.1",
        }]
    }
    delete(v["k2"], "a")
    delete(v["k3"][0], "d")
    printf("result group 1: %v; %v\n", v["k2"], v["k3"])
    
    v1 = {"a":1}
    v2 = {"b":1}
    delete(key="a", m=v1)
    delete(m=v2, key="b")
    printf("result group 2: %v; %v\n", v1, v2)
    

    標準出力:

    result group 1: {"b":2}; [{"c":1.1}]
    result group 2: {}; {}
    

dql

関数プロトタイプ: fn dql(query: str, qtype: str = "dql", limit: int = 10000, offset: int = 0, slimit: int = 0, time_range: list = [], workspace_uuid: str = "") -> map

関数説明: DQL または PromQL を使用してデータをクエリします。

関数パラメータ:

  • query: DQL または PromQL のクエリステートメント。
  • qtype: クエリ言語。dql または promql のいずれか。デフォルトは dql
  • limit: クエリの制限。
  • offset: クエリのオフセット。
  • slimit: クエリの slimit。
  • time_range: クエリのタイムスタンプ範囲。デフォルト値はスクリプト呼び出し元から外部で変更可能です。
  • workspace_uuid: データをクエリするワークスペースの UUID。

関数戻り値:

  • map: クエリ応答。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v = dql("M::cpu limit 2 slimit 2")
    v, ok = dump_json(v, "    ")
    if ok {
        printf("%v", v)
    }
    

    標準出力:

    {
        "series": [
            [
                {
                    "columns": {
                        "time": 1744866108991,
                        "total": 7.18078381,
                        "user": 4.77876106
                    },
                    "tags": {
                        "cpu": "cpu-total",
                        "test_site": "testing",
                        "host": "172.16.241.111",
                        "host_ip": "172.16.241.111",
                        "name": "cpu",
                        "project": "demo-testing"
                    }
                },
                {
                    "columns": {
                        "time": 1744866103991,
                        "total": 10.37376049,
                        "user": 7.17009916
                    },
                    "tags": {
                        "cpu": "cpu-total",
                        "test_site": "testing",
                        "host": "172.16.241.111",
                        "host_ip": "172.16.241.111",
                        "name": "cpu",
                        "project": "demo-testing"
                    }
                }
            ],
            [
                {
                    "columns": {
                        "time": 1744866107975,
                        "total": 21.75562864,
                        "user": 5.69187959
                    },
                    "tags": {
                        "cpu": "cpu-total",
                        "test_site": "testing",
                        "host": "172.16.242.112",
                        "host_ip": "172.16.242.112",
                        "name": "cpu",
                        "project": "demo-testing"
                    }
                },
                {
                    "columns": {
                        "time": 1744866102975,
                        "total": 16.59466328,
                        "user": 5.28589581
                    },
                    "tags": {
                        "cpu": "cpu-total",
                        "test_site": "testing",
                        "host": "172.16.242.112",
                        "host_ip": "172.16.242.112",
                        "name": "cpu",
                        "project": "demo-testing"
                    }
                }
            ]
        ],
        "status_code": 200
    }
    

dql_series_get

関数プロトタイプ: fn dql_series_get(series: map, name: str) -> list

関数説明: シリーズデータを取得します。

関数パラメータ:

  • series: dql クエリ結果。
  • name: カラム名またはタグ名。

関数戻り値:

  • list: 指定されたカラムまたはタグのシリーズ値。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v = dql("M::cpu limit 2 slimit 2") 
    
    hostLi = dql_series_get(v, "host")
    time_li = dql_series_get(v, "time")
    
    printf("%v", {"host": hostLi, "time": time_li})
    

    標準出力:

    {"host":[["172.16.241.111","172.16.241.111"],["172.16.242.112","172.16.242.112"]],"time":[[1744866108991,1744866103991],[1744866107975,1744866102975]]}
    

dql_timerange_get

関数プロトタイプ: fn dql_timerange_get() -> list

関数説明: DQL クエリの時間範囲を取得します。これはスクリプト呼び出し元から渡されるか、デフォルトで過去 15 分間になります。

関数戻り値:

  • list: 時間範囲。例: [1744214400000, 1744218000000]、タイムスタンプの精度はミリ秒です。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    val = dql_timerange_get()
    printf("%v", val)
    

    標準出力:

    [1672531500000,1672532100000]
    
  • サンプル 1:

    スクリプト内容:

    val = dql_timerange_get()
    printf("%v", val)
    

    標準出力:

    [1672531200000,1672532100000]
    

dump_json

関数プロトタイプ: fn dump_json(v: str, indent: str = "") -> (str, bool)

関数説明: v の JSON エンコーディングを返します。

関数パラメータ:

  • v: エンコードするオブジェクト。
  • indent: インデントプレフィックス。

関数戻り値:

  • str: v の JSON エンコーディング。
  • bool: デコードが成功したかどうか。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v = {"a": 1, "b": 2.1}
    v, ok = dump_json(v)
    if ok {
        printf("%v", v)
    }
    

    標準出力:

    {"a":1,"b":2.1}
    
  • サンプル 1:

    スクリプト内容:

    v = {"a": 1, "b": 2.1}
    v, ok = dump_json(v, "  ")
    if ok {
        printf("%v", v)
    }
    

    標準出力:

    {
      "a": 1,
      "b": 2.1
    }
    

exit

関数プロトタイプ: fn exit()

関数説明: プログラムを終了します。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    printf("1\n")
    printf("2\n")
    exit()
    printf("3\n")
    

    標準出力:

    1
    2
    

format_int

関数プロトタイプ: fn format_int(val: int, base: int) -> str

関数説明: 整数を文字列にフォーマットします。

関数パラメータ:

  • val: フォーマットする整数。
  • base: フォーマットに使用する基数。2 から 36 の間である必要があります。

関数戻り値:

  • str: フォーマットされた文字列。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v = format_int(16, 16)
    printf("%s", v)
    

    標準出力:

    10
    

geoip

関数プロトタイプ: fn geoip(ip: str) -> map

関数説明: GeoIP 情報を取得します。

関数パラメータ:

  • ip: IP アドレス。

関数戻り値:

  • map: IP の地理情報。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v = geoip("127.0.0.1")
    printf("%v", v)
    

    標準出力:

    {"city":"","country":"","isp":"unknown","province":""}
    
  • サンプル 1:

    スクリプト内容:

    ip_addr = "114.114.114.114"
    v, ok = dump_json(geoip(ip_addr), "    ");
    if ok {
        printf("%v", v)
    }
    

    標準出力:

     {
        "city": "Ji'an",
        "country": "CN",
        "isp": "chinanet",
        "province": "Jiangxi"
    }
    

gjson

関数プロトタイプ: fn gjson(input: str, json_path: str) -> (bool|int|float|str|list|map, bool)

関数説明: GJSON は、JSON ドキュメントから値を高速かつ簡単に取得する方法を提供します。

関数パラメータ:

  • input: 解析する JSON 形式の文字列。
  • json_path: JSON パス。

関数戻り値:

  • bool|int|float|str|list|map: 解析結果。
  • bool: 解析状態。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v='''{
        "name": {"first": "Tom", "last": "Anderson"},
        "age": 37,
        "children": ["Sara","Alex","Jack"],
        "fav.movie": "Deer Hunter",
        "friends": [
            {"first": "Dale", "last": "Murphy", "age": 44, "nets": ["ig", "fb", "tw"]},
            {"first": "Roger", "last": "Craig", "age": 68, "nets": ["fb", "tw"]},
            {"first": "Jane", "last": "Murphy", "age": 47, "nets": ["ig", "tw"]}
        ]
    }'''
    age, ok = gjson(v, "age")
    if ok {
        printf("%.0f", age)
    } else {
        printf("not found")
    }
    

    標準出力:

    37
    
  • サンプル 1:

    スクリプト内容:

    v='''{
        "name": {"first": "Tom", "last": "Anderson"},
        "age": 37,
        "children": ["Sara","Alex","Jack"],
        "fav.movie": "Deer Hunter",
        "friends": [
            {"first": "Dale", "last": "Murphy", "age": 44, "nets": ["ig", "fb", "tw"]},
            {"first": "Roger", "last": "Craig", "age": 68, "nets": ["fb", "tw"]},
            {"first": "Jane", "last": "Murphy", "age": 47, "nets": ["ig", "tw"]}
        ]
    }'''
    name, ok = gjson(v, "name")
    printf("%v", name)
    

    標準出力:

    {"first": "Tom", "last": "Anderson"}
    
  • サンプル 2:

    スクリプト内容:

    v='''[
        {"first": "Dale", "last": "Murphy", "age": 44, "nets": ["ig", "fb", "tw"]},
        {"first": "Roger", "last": "Craig", "age": 68, "nets": ["fb", "tw"]},
        {"first": "Jane", "last": "Murphy", "age": 47, "nets": ["ig", "tw"]}
    ]'''
    net, ok = gjson(v, "0.nets.2")
    printf("%v", net)
    

    標準出力:

    tw
    

grok

関数プロトタイプ: fn grok(input: str, pattern: str, extra_patterns: map = {}, trim_space: bool = true) -> (map, bool)

関数説明: Grok パターンを使用して文字列からデータを抽出します。Grok は正規表現構文に基づいており、パターン内で正規(名前付き)キャプチャグループを使用することは、パターン内でパターンを使用することと同じです。有効な正規表現は有効な Grok パターンでもあります。

関数パラメータ:

  • input: データ抽出に使用される入力文字列。
  • pattern: データ抽出に使用されるパターン。
  • extra_patterns: パターン解析用の追加パターン。
  • trim_space: 解析された値の前後の空白をトリミングするかどうか。

関数戻り値:

  • map: 解析結果。
  • bool: 解析が成功したかどうか。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    app_log="2021-01-11T17:43:51.887+0800  DEBUG io  io/io.go:458  post cost 6.87021ms"
    
    # Use built-in patterns, named capture groups, custom patterns, extract fields;
    # convert the type of the extracted field by specifying the type.
    v, ok = grok(
        app_log,
        "%{TIMESTAMP_ISO8601:log_time}\\s+(?P<log_level>[a-zA-Z]+)\\s+%{WORD}\\s+%{log_code_pos_pattern:log_code_pos}.*\\s%{NUMBER:log_cost:float}ms", 
        {
            "log_code_pos_pattern": "[a-zA-Z0-9/\\.]+:\\d+", 
        }
    )
    
    if ok {
        v, ok = dump_json(v, "  ")
        if ok {
            printf("%v", v)
        }
    }
    

    標準出力:

    {
      "log_code_pos": "io/io.go:458",
      "log_cost": 6.87021,
      "log_level": "DEBUG",
      "log_time": "2021-01-11T17:43:51.887+0800"
    }
    

hash

関数プロトタイプ: fn hash(text: str, method: str) -> str

関数説明:

関数パラメータ:

  • text: ハッシュ計算に使用する文字列。
  • method: ハッシュアルゴリズム。指定可能な値は md5sha1sha256sha512 です。

関数戻り値:

  • str: ハッシュ値。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    printf("%v", hash("abc", "md5"))
    

    標準出力:

    900150983cd24fb0d6963f7d28e17f72
    
  • サンプル 1:

    スクリプト内容:

    printf("%v", hash("abc", "sha1"))
    

    標準出力:

    a9993e364706816aba3e25717850c26c9cd0d89d
    
  • サンプル 2:

    スクリプト内容:

    printf("%v", hash("abc", "sha256"))
    

    標準出力:

    ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
    
  • サンプル 3:

    スクリプト内容:

    printf("%v", hash("abc", "sha512"))
    

    標準出力:

    ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f
    
  • サンプル 4:

    スクリプト内容:

    printf("%v", hash("abc", "xx"))
    

    標準出力:

    
    

http_request

関数プロトタイプ: fn http_request(method: str, url: str, body: bool|int|float|str|list|map = nil, headers: map = {}) -> map

関数説明: HTTP リクエストを送信するために使用します。

関数パラメータ:

  • method: HTTP リクエストメソッド。
  • url: HTTP リクエスト URL。
  • body: HTTP リクエストボディ。
  • headers: HTTP リクエストヘッダー。

関数戻り値:

  • map: HTTP レスポンス。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    resp = http_request("GET", "http://test-domain/test")
    delete(resp["headers"], "Date")
    resp_str, ok = dump_json(resp, "    ")
    printf("%s", resp_str)
    

    標準出力:

    {
        "body": "{\"code\":200, \"message\":\"success\"}",
        "headers": {
            "Content-Length": "33",
            "Content-Type": "application/json"
        },
        "status_code": 200
    }
    
  • サンプル 1:

    スクリプト内容:

    resp = http_request("GET", "http://localhost:80/test")
    
    # Usually, access to private IPs will be blocked,
    # you need to contact the administrator.
    
    resp_str, ok = dump_json(resp, "    ")
    printf("%s", resp_str)
    

    標準出力:

    {
        "error": "Get \"http://localhost:80/test\": resolved IP 127.0.0.1 is blocked"
    }
    

len

関数プロトタイプ: fn len(val: map|list|str) -> int

関数説明: 値の長さを取得します。値が文字列の場合は文字列の長さを、リストまたはマップの場合は要素数を返します。

関数パラメータ:

  • val: 長さを取得する値。

関数戻り値:

  • int: 値の長さ。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    printf("%v", len("abc"))
    

    標準出力:

    3
    
  • サンプル 1:

    スクリプト内容:

    printf("%v", len([1, 2, 3]))
    

    標準出力:

    3
    
  • サンプル 2:

    スクリプト内容:

    printf("%v", len({"a": 1, "b": 2, "c": 3}))
    

    標準出力:

    3
    

load_json

関数プロトタイプ: fn load_json(val: str) -> (bool|int|float|str|list|map, bool)

関数説明: JSON 文字列をアンマーシャルします。

関数パラメータ:

  • val: JSON 文字列。

関数戻り値:

  • bool|int|float|str|list|map: アンマーシャル結果。
  • bool: アンマーシャル状態。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    jstr = '{"a": 1, "b": 2, "c": 3}'
    v, ok = load_json(jstr)
    if ok {
        printf("%v", v["b"])
    }
    

    標準出力:

    2
    

lowercase

関数プロトタイプ: fn lowercase(val: str) -> str

関数説明: 文字列を小文字に変換します。

関数パラメータ:

  • val: 変換する文字列。

関数戻り値:

  • str: 小文字に変換された値を返します。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    printf("%s", lowercase("ABC"))
    

    標準出力:

    abc
    

match

関数プロトタイプ: fn match(val: str, pattern: str, n: int = 1) -> (list, bool)

関数説明: 正規表現マッチング。

関数パラメータ:

  • val: マッチングする文字列。
  • pattern: 正規表現パターン。
  • n: 返すマッチ数。デフォルトは 1、-1 はすべてのマッチを返します。

関数戻り値:

  • list: マッチした値を返します。
  • bool: 正規表現がマッチした場合は true を返します。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    text="abc def 123 abc def 123"
    v, ok = match(text, "(abc) (?:def) (?P<named_group>123)")
    if ok {
        printf("%v", v)
    }
    

    標準出力:

    [["abc def 123","abc","123"]]
    
  • サンプル 1:

    スクリプト内容:

    text="abc def 123 abc def 123"
    v, ok = match(text, "(abc) (?:def) (?P<named_group>123)", -1)
    if ok {
        printf("%v", v)
    }
    

    標準出力:

    [["abc def 123","abc","123"],["abc def 123","abc","123"]]
    

parse_date

関数プロトタイプ: fn parse_date(date: str, timezone: str = "") -> (int, bool)

関数説明: 日付文字列をナノ秒タイムスタンプにパースします。複数の日付形式をサポートします。日付文字列にタイムゾーンが含まれておらず、タイムゾーンも指定されていない場合は、ローカルタイムゾーンが使用されます。

関数パラメータ:

  • date: パースに使用するキー。
  • timezone: パースに使用するタイムゾーン。

関数戻り値:

  • int: パースされたナノ秒単位のタイムスタンプ。
  • bool: パースが成功したかどうか。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v, ok = parse_date("2021-12-2T11:55:43.123+0800")
    if ok {
        printf("%v", v)
    }
    

    標準出力:

    1638417343123000000
    
  • サンプル 1:

    スクリプト内容:

    v, ok = parse_date("2021-12-2T11:55:43.123", "+8")
    if ok {
        printf("%v", v)
    }
    

    標準出力:

    1638417343123000000
    
  • サンプル 2:

    スクリプト内容:

    v, ok = parse_date("2021-12-2T11:55:43.123", "Asia/Shanghai")
    if ok {
        printf("%v", v)
    }
    

    標準出力:

    1638417343123000000
    

parse_duration

関数プロトタイプ: fn parse_duration(s: str) -> (int, bool)

関数説明: golang の duration 文字列を duration にパースします。duration 文字列は、オプションで符号付きの小数と単位サフィックスを持つ一連の数値のシーケンスです(例:300ms-1.5h2h45m)。有効な単位は nsus(または μs)、mssmh です。

関数パラメータ:

  • s: パースする文字列。

関数戻り値:

  • int: ナノ秒単位の duration。
  • bool: duration が有効かどうか。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v, ok = parse_duration("1s")
    if ok {
        printf("%v", v)
    }
    

    標準出力:

    1000000000
    
  • サンプル 1:

    スクリプト内容:

    v, ok = parse_duration("100ns")
    if ok {
        printf("%v", v)
    }
    

    標準出力:

    100
    

parse_int

関数プロトタイプ: fn parse_int(val: str, base: int) -> (int, bool)

関数説明: 文字列を整数にパースします。

関数パラメータ:

  • val: パースする文字列。
  • base: パースに使用する基数。2 から 36 の間である必要があります。

関数戻り値:

  • int: パースされた整数。
  • bool: パースが成功したかどうか。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v, ok = parse_int("123", 10)
    if ok {
        printf("%v", v)
    }
    

    標準出力:

    123
    
  • サンプル 1:

    スクリプト内容:

    v, ok = parse_int("123", 16)    
    if ok {
        printf("%v", v)
    }
    

    標準出力:

    291
    

printf

関数プロトタイプ: fn printf(format: str, args: ...str|bool|int|float|list|map)

関数説明: フォーマットされた文字列を標準出力デバイスに出力します。

関数パラメータ:

  • format: 文字列フォーマット。
  • args: 引数リスト。フォーマット文字列内のフォーマット指定子に対応します。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    printf("hello, %s", "world")
    

    標準出力:

    hello, world
    

replace

関数プロトタイプ: fn replace(input: str, pattern: str, replacement: str) -> (str, bool)

関数説明: 文字列内のテキストを置換します。

関数パラメータ:

  • input: テキストを置換する文字列。
  • pattern: 正規表現パターン。
  • replacement: 使用する置換テキスト。

関数戻り値:

  • str: テキストが置換された文字列。
  • bool: パターンが見つかり置換された場合は true、それ以外は false。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v, ok = replace("abcdef", "bc", "123")
    printf("%s", v)
    

    標準出力:

    a123def
    
  • サンプル 1:

    スクリプト内容:

    v, ok = replace("bonjour; 你好", "[\u4e00-\u9fa5]+", "hello")
    printf("%s", v)
    

    標準出力:

    bonjour; hello
    

setopt

関数プロトタイプ: fn setopt(trigger_keepalive: int)

関数説明: オプションを設定します。

関数パラメータ:

  • trigger_keepalive: トリガーのキープアライブ時間(秒)を設定します。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    setopt(60 * 15)
    

    標準出力:

    
    

sql_cover

関数プロトタイプ: fn sql_cover(val: str) -> (str, bool)

関数説明: SQL クエリ文字列を難読化します。

関数パラメータ:

  • val: 難読化する SQL。

関数戻り値:

  • str: 難読化された SQL。
  • bool: 難読化状態。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v, ok = sql_cover("select abc from def where x > 3 and y < 5")
    if ok {
        printf("%s",v)
    }
    

    標準出力:

    select abc from def where x > ? and y < ?
    
  • サンプル 1:

    スクリプト内容:

    v, ok = sql_cover("SELECT $func$INSERT INTO table VALUES ('a', 1, 2)$func$ FROM users")
    if ok {
        printf("%s",v)
    }
    

    標準出力:

    SELECT ? FROM users
    
  • サンプル 2:

    スクリプト内容:

    v, ok = sql_cover("SELECT ('/uffd')")
    if ok {
        printf("%s",v)
    }
    

    標準出力:

    SELECT ( ? )
    

str_join

関数プロトタイプ: fn str_join(li: list, sep: str) -> str

関数説明: 文字列を結合します。

関数パラメータ:

  • li: セパレータで結合するリスト。要素の型は文字列である必要があります。文字列でない場合は無視されます。
  • sep: 要素間に使用するセパレータ。

関数戻り値:

  • str: 結合された文字列。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v = str_join(["a", "b", "c"], "##")
    printf("%s", v)
    

    標準出力:

    a##b##c
    

str_split

関数プロトタイプ: fn str_split(text: str, sep: str) -> list

関数説明: 文字列を分割します。

関数パラメータ:

  • text: 分割する文字列。
  • sep: 分割に使用するセパレータ。

関数戻り値:

  • list: 文字列のリスト。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v = str_split("a,b,c", ",")
    printf("%v", v)
    

    標準出力:

    ["a","b","c"]
    

strfmt

関数プロトタイプ: fn strfmt(format: str, args: ...bool|int|float|str|list|map) -> str

関数説明:

関数パラメータ:

  • format: 文字列フォーマット。
  • args: プレースホルダを置換するパラメータ。

関数戻り値:

  • str: 文字列。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v = strfmt("abc %s def %d", "123", 456)
    printf("%s", v)
    

    標準出力:

    abc 123 def 456
    

time_now

関数プロトタイプ: fn time_now(precision: str = "ns") -> int

関数説明: 指定された精度で現在のタイムスタンプを取得します。

関数パラメータ:

  • precision: タイムスタンプの精度。サポートされる値: nsusmss

関数戻り値:

  • int: 現在のタイムスタンプを返します。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    printf("%v", time_now("s"))
    

    標準出力:

    1745823860
    

trigger

関数プロトタイプ: fn trigger(result: int|float|bool|str, status: str = "", dimension_tags: map = {}, related_data: map = {}, check_workspace_uuid: str = "")

関数説明: セキュリティイベントをトリガーします。

関数パラメータ:

  • result: イベントチェック結果。
  • status: イベントステータス。criticalhighmediumlowinfo のいずれか。
  • dimension_tags: ディメンションタグ。
  • related_data: 関連データ。
  • check_workspace_uuid: 検出結果に関連するワークスペースの UUID。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    trigger(1, "critical", {"tag_abc":"1"}, {"a":"1", "a1":2.1})
    
    trigger(result=2, dimension_tags={"a":"1", "b":"2"}, related_data={"b": {}})
    
    trigger(false, related_data={"a":1, "b":2}, status="critical")
    
    trigger("hello", dimension_tags={}, related_data={"a":1, "b":[1]}, status="critical")
    

    標準出力:

    
    

    トリガー出力:

    [
        {
            "result": 1,
            "status": "critical",
            "dimension_tags": {
                "tag_abc": "1"
            },
            "related_data": {
                "a": "1",
                "a1": 2.1
            },
            "check_workspace_uuid": ""
        },
        {
            "result": 2,
            "status": "",
            "dimension_tags": {
                "a": "1",
                "b": "2"
            },
            "related_data": {
                "b": {}
            },
            "check_workspace_uuid": ""
        },
        {
            "result": false,
            "status": "critical",
            "dimension_tags": {},
            "related_data": {
                "a": 1,
                "b": 2
            },
            "check_workspace_uuid": ""
        },
        {
            "result": "hello",
            "status": "critical",
            "dimension_tags": {},
            "related_data": {
                "a": 1,
                "b": [
                    1
                ]
            },
            "check_workspace_uuid": ""
        }
    ]
    

trim

関数プロトタイプ: fn trim(val: str, cutset: str = "", side: int = 0) -> str

関数説明: 文字列の先頭と末尾の空白を削除します。

関数パラメータ:

  • val: トリミングする文字列。
  • cutset: 文字列の先頭と末尾から削除する文字。指定しない場合は空白が削除されます。
  • side: トリミングする側。0 の場合は両側、1 の場合は左側、2 の場合は右側。

関数戻り値:

  • str: トリミングされた文字列。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    printf("%s", trim(" abcdef "))
    

    標準出力:

    abcdef
    
  • サンプル 1:

    スクリプト内容:

    printf("%s", trim("#-abcdef-#", "-#", 2))
    

    標準出力:

    #-abcdef
    
  • サンプル 2:

    スクリプト内容:

    printf("%s", trim("#-abcdef-#", "-#", 1))
    

    標準出力:

    abcdef-#
    
  • サンプル 3:

    スクリプト内容:

    printf("%s", trim("#-abcdef-#", side=0, cutset="-#"))
    

    標準出力:

    abcdef
    

uppercase

関数プロトタイプ: fn uppercase(val: str) -> str

関数説明: 文字列を大文字に変換します。

関数パラメータ:

  • val: 変換する文字列。

関数戻り値:

  • str: 大文字に変換された値を返します。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    printf("%s", uppercase("abc"))
    

    標準出力:

    ABC
    

url_decode

関数プロトタイプ: fn url_decode(val: str) -> (str, bool)

関数説明: URL エンコードされた文字列をデコードします。

関数パラメータ:

  • val: デコードする URL エンコードされた文字列。

関数戻り値:

  • str: デコードされた文字列。
  • bool: デコード状態。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v, ok = url_decode("https:%2F%2Fkubernetes.io%2Fdocs%2Freference%2Faccess-authn-authz%2Fbootstrap-tokens%2F")
    if ok {
        printf("%s", v)
    }
    

    標準出力:

    https://kubernetes.io/docs/reference/access-authn-authz/bootstrap-tokens/
    

url_parse

関数プロトタイプ: fn url_parse(url: str) -> (map, bool)

関数説明: URL をパースし、マップとして返します。

関数パラメータ:

  • url: パースする URL。

関数戻り値:

  • map: パースされた URL をマップとして返します。
  • bool: URL が有効な場合は true を返します。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v, ok = url_parse("http://www.example.com:8080/path/to/file?query=abc")
    if ok {
        v, ok = dump_json(v, "  ")
        if ok {
            printf("%v", v)
        }
    }
    

    標準出力:

    {
      "host": "www.example.com:8080",
      "params": {
        "query": [
          "abc"
        ]
      },
      "path": "/path/to/file",
      "port": "8080",
      "scheme": "http"
    }
    

user_agent

関数プロトタイプ: fn user_agent(header: str) -> map

関数説明: User-Agent ヘッダーをパースします。

関数パラメータ:

  • header: パースする User-Agent ヘッダー。

関数戻り値:

  • map: パースされた User-Agent ヘッダーをマップとして返します。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v = user_agent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36")
    printf("%s", v)
    

    標準出力:

    {"browser":"Chrome","browserVer":"96.0.4664.110","engine":"AppleWebKit","engineVer":"537.36","isBot":false,"isMobile":false,"os":"Intel Mac OS X 10_15_7","ua":"Macintosh"}
    

valid_json

関数プロトタイプ: fn valid_json(val: str) -> bool

関数説明: 値が有効な JSON である場合に true を返します。

関数パラメータ:

  • val: チェックする値。

関数戻り値:

  • bool: 値が有効な JSON である場合に true を返します。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    ok = valid_json("{\"a\": 1, \"b\": 2}")
    if ok {
        printf("true")
    }
    

    標準出力:

    true
    
  • サンプル 1:

    スクリプト内容:

    ok = valid_json("1.1")
    if ok {
        printf("true")
    }
    

    標準出力:

    true
    
  • サンプル 2:

    スクリプト内容:

    ok = valid_json("str_abc_def")
    if !ok {
        printf("false")
    }
    

    標準出力:

    false
    

value_type

関数プロトタイプ: fn value_type(val: str) -> str

関数説明: 値の型を返します。

関数パラメータ:

  • val: 型を取得する値。

関数戻り値:

  • str: 値の型を返します。boolintfloatstrlistmapnil のいずれか。値が nil の場合は nil を返します。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    v = value_type(1)
    printf("%s", v)
    

    標準出力:

    int
    
  • サンプル 1:

    スクリプト内容:

    printf("%s", value_type("abc"))
    

    標準出力:

    str
    
  • サンプル 2:

    スクリプト内容:

    printf("%s", value_type(true))
    

    標準出力:

    bool
    

xml_query

関数プロトタイプ: fn xml_query(input: str, xpath: str) -> (str, bool)

関数説明: XML フィールドの値を返します。

関数パラメータ:

  • input: 値を取得する XML 入力。
  • xpath: 値を取得する XPath 式。

関数戻り値:

  • str: XML フィールドの値を返します。
  • bool: フィールドが存在する場合は true、それ以外は false を返します。

関数サンプル:

  • サンプル 0:

    スクリプト内容:

    xml_data='''
    <OrderEvent actionCode = "5">
     <OrderNumber>ORD12345</OrderNumber>
     <VendorNumber>V11111</VendorNumber>
     </OrderEvent>
    '''
    v, ok = xml_query(xml_data, "/OrderEvent/OrderNumber/text()")
    if ok {
        printf("%s", v)
    }
    

    標準出力:

    ORD12345
    
  • サンプル 1:

    スクリプト内容:

    xml_data='''
    <OrderEvent actionCode = "5">
     <OrderNumber>ORD12345</OrderNumber>
     <VendorNumber>V11111</VendorNumber>
     </OrderEvent>
    '''
    v, ok = xml_query(xml_data, "/OrderEvent/@actionCode")
    if ok {
        printf("%s", v)
    }
    

    標準出力:

    5
    

フィードバック

このページは役に立ちましたか?