Files
zk-data-agent/skills/online-mining-v2/scripts/elk_profile_index.py
T
2026-05-14 17:42:08 +08:00

86 lines
2.7 KiB
Python

from __future__ import annotations
from online_mining_common import (
build_client,
compact_text,
deep_parse,
emit_error,
emit_success,
extract_case,
load_json_payload,
search_docs,
source_config,
)
def main() -> int:
try:
payload = load_json_payload()
sources = payload.get("sources") or ["main", "pre_processing"]
date = payload.get("date")
date_from = payload.get("date_from")
date_to = payload.get("date_to")
lookback_days = payload.get("lookback_days")
lookback_days = int(lookback_days) if lookback_days not in (None, "") else None
sample_size = int(payload.get("sample_size") or 5)
result: dict[str, object] = {}
for source in sources:
config = source_config(str(source))
client = build_client(str(source))
caps = client.field_caps(index=str(config["index"]), fields="*")
fields = caps.get("fields", {})
docs = search_docs(
source=str(source),
date=date,
size=sample_size,
date_from=date_from,
date_to=date_to,
lookback_days=lookback_days,
)
cases = [extract_case(str(source), deep_parse(doc)) for doc in docs]
interesting = [
name
for name in fields
if any(
token in name.lower()
for token in [
"request",
"query",
"session",
"domain",
"func",
"device",
"prompt",
"planning",
"dispatch",
"excellent",
"llm",
"timestamp",
]
)
]
result[str(source)] = {
"index": config["index"],
"id_field": config["id_field"],
"time_field": config["time_field"],
"field_count": len(fields),
"interesting_fields": sorted(interesting)[:200],
"samples": [
{
key: compact_text(value, 600)
for key, value in case.items()
if key != "raw" and value not in (None, "", [], {})
}
for case in cases
],
}
emit_success({"sources": result})
return 0
except Exception as exc: # noqa: BLE001
emit_error(exc)
return 1
if __name__ == "__main__":
raise SystemExit(main())