data-ops-cli 0.3.0__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/PKG-INFO +2 -2
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/pyproject.toml +2 -2
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/data_ops_cli.egg-info/PKG-INFO +2 -2
- data_ops_cli-0.3.1/src/data_ops_cli.egg-info/requires.txt +7 -0
- data_ops_cli-0.3.1/src/dataops_cli/__init__.py +17 -0
- data_ops_cli-0.3.1/src/dataops_cli/_compat.py +81 -0
- data_ops_cli-0.3.1/src/dataops_cli/cli/__init__.py +9 -0
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/dataops_cli/cli/alarm.py +139 -29
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/dataops_cli/cli/api.py +31 -15
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/dataops_cli/cli/auth.py +28 -13
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/dataops_cli/cli/data_table.py +36 -18
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/dataops_cli/cli/dataset.py +43 -14
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/dataops_cli/cli/datasource.py +44 -14
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/dataops_cli/cli/dict_.py +29 -19
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/dataops_cli/cli/factory.py +20 -0
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/dataops_cli/cli/hazard.py +73 -32
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/dataops_cli/cli/metrics.py +13 -7
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/dataops_cli/cli/ref.py +36 -38
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/dataops_cli/cli/report.py +10 -7
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/dataops_cli/cli/skill.py +70 -31
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/dataops_cli/cli/table.py +89 -45
- data_ops_cli-0.3.1/src/dataops_cli/cli/utils.py +54 -0
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/dataops_cli/cli/widget.py +112 -26
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/dataops_cli/cli/workflow.py +34 -19
- data_ops_cli-0.3.1/src/dataops_cli/exceptions.py +10 -0
- data_ops_cli-0.3.1/src/dataops_cli/runner.py +14 -0
- data_ops_cli-0.3.1/src/dataops_cli/schems.py +11 -0
- data_ops_cli-0.3.1/src/dataops_cli/sdk.py +14 -0
- data_ops_cli-0.3.1/src/dataops_cli/session.py +10 -0
- data_ops_cli-0.3.1/src/dataops_cli/utils.py +10 -0
- data_ops_cli-0.3.0/src/data_ops_cli.egg-info/requires.txt +0 -7
- data_ops_cli-0.3.0/src/dataops_cli/__init__.py +0 -11
- data_ops_cli-0.3.0/src/dataops_cli/_compat.py +0 -53
- data_ops_cli-0.3.0/src/dataops_cli/cli/__init__.py +0 -3
- data_ops_cli-0.3.0/src/dataops_cli/cli/utils.py +0 -32
- data_ops_cli-0.3.0/src/dataops_cli/exceptions.py +0 -8
- data_ops_cli-0.3.0/src/dataops_cli/runner.py +0 -8
- data_ops_cli-0.3.0/src/dataops_cli/schems.py +0 -8
- data_ops_cli-0.3.0/src/dataops_cli/sdk.py +0 -8
- data_ops_cli-0.3.0/src/dataops_cli/session.py +0 -8
- data_ops_cli-0.3.0/src/dataops_cli/utils.py +0 -8
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/setup.cfg +0 -0
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/data_ops_cli.egg-info/SOURCES.txt +0 -0
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/data_ops_cli.egg-info/dependency_links.txt +0 -0
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/data_ops_cli.egg-info/entry_points.txt +0 -0
- {data_ops_cli-0.3.0 → data_ops_cli-0.3.1}/src/data_ops_cli.egg-info/top_level.txt +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: data-ops-cli
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Command-line wrapper around dataops_sdk for the DataOps platform.
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
|
-
Requires-Dist:
|
|
6
|
+
Requires-Dist: dataops-sdk[runner]>=0.3.2
|
|
7
7
|
Requires-Dist: typer
|
|
8
8
|
Requires-Dist: rich
|
|
9
9
|
Provides-Extra: dev
|
|
@@ -8,7 +8,7 @@ dynamic = ["version"]
|
|
|
8
8
|
description = "Command-line wrapper around dataops_sdk for the DataOps platform."
|
|
9
9
|
requires-python = ">=3.11"
|
|
10
10
|
dependencies = [
|
|
11
|
-
"
|
|
11
|
+
"dataops-sdk[runner]>=0.3.2",
|
|
12
12
|
"typer",
|
|
13
13
|
"rich",
|
|
14
14
|
]
|
|
@@ -34,4 +34,4 @@ where = ["src"]
|
|
|
34
34
|
include = ["dataops_cli*"]
|
|
35
35
|
|
|
36
36
|
[tool.setuptools.package-data]
|
|
37
|
-
dataops_cli = ["py.typed"]
|
|
37
|
+
dataops_cli = ["py.typed"]
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: data-ops-cli
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Command-line wrapper around dataops_sdk for the DataOps platform.
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
|
-
Requires-Dist:
|
|
6
|
+
Requires-Dist: dataops-sdk[runner]>=0.3.2
|
|
7
7
|
Requires-Dist: typer
|
|
8
8
|
Requires-Dist: rich
|
|
9
9
|
Provides-Extra: dev
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""CLI package for DataOps.
|
|
2
|
+
|
|
3
|
+
This package hosts the Typer-based ``data-ops-cli`` command line interface. It
|
|
4
|
+
groups command modules under :mod:`dataops_cli.cli` and re-exports the package
|
|
5
|
+
``__version__``. Platform functionality lives in the companion
|
|
6
|
+
``dataops_sdk`` package; the CLI itself only wires commands onto SDK services.
|
|
7
|
+
|
|
8
|
+
.. deprecated::
|
|
9
|
+
Importing the legacy top-level shims
|
|
10
|
+
(``dataops_cli.sdk`` / ``dataops_cli.schems`` / ``dataops_cli.runner`` /
|
|
11
|
+
``dataops_cli.exceptions`` / ``dataops_cli.session`` /
|
|
12
|
+
``dataops_cli.utils``) is deprecated; use ``dataops_sdk`` instead. The CLI
|
|
13
|
+
itself (``dataops_cli.cli``) is unaffected. These deprecation shims will be
|
|
14
|
+
removed in ``dataops_cli`` 1.0.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
__version__ = "0.3.1"
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"""Build a deprecation-shim module via PEP 562 ``__getattr__``.
|
|
2
|
+
|
|
3
|
+
This helper is used by the legacy top-level shims
|
|
4
|
+
(``dataops_cli.sdk`` / ``dataops_cli.schems`` / ``dataops_cli.runner`` /
|
|
5
|
+
``dataops_cli.exceptions`` / ``dataops_cli.session`` /
|
|
6
|
+
``dataops_cli.utils``). Each shim file's body is a single call to
|
|
7
|
+
:func:`make_shim`. The returned namespace exposes ``__all__`` and a
|
|
8
|
+
``__getattr__`` that proxies to the underlying ``dataops_sdk`` module while
|
|
9
|
+
emitting a single ``DeprecationWarning`` per attribute name (so logging stays
|
|
10
|
+
bounded).
|
|
11
|
+
|
|
12
|
+
.. deprecated::
|
|
13
|
+
The shim modules themselves are deprecated; new code should import from
|
|
14
|
+
``dataops_sdk`` directly. This helper module will be removed in
|
|
15
|
+
``dataops_cli`` 1.0.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
import importlib
|
|
21
|
+
import sys
|
|
22
|
+
import warnings
|
|
23
|
+
from types import ModuleType
|
|
24
|
+
from typing import Any
|
|
25
|
+
|
|
26
|
+
# Mapping from legacy ``dataops_cli.*`` module paths to their ``dataops_sdk``
|
|
27
|
+
# replacements. Used by :func:`make_shim` to resolve the target module.
|
|
28
|
+
_OLD_TO_NEW = {
|
|
29
|
+
"dataops_cli.sdk": "dataops_sdk.services",
|
|
30
|
+
"dataops_cli.schems": "dataops_sdk.schemas",
|
|
31
|
+
"dataops_cli.runner": "dataops_sdk.runner",
|
|
32
|
+
"dataops_cli.exceptions": "dataops_sdk.exceptions",
|
|
33
|
+
"dataops_cli.session": "dataops_sdk.session",
|
|
34
|
+
"dataops_cli.utils": "dataops_sdk.utils",
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def make_shim(old_path: str) -> ModuleType:
|
|
39
|
+
"""Create (and register in ``sys.modules``) a shim module proxying to ``new_path``.
|
|
40
|
+
|
|
41
|
+
The new module is wired with PEP 562 ``__getattr__`` so that attribute
|
|
42
|
+
access is lazily forwarded to ``dataops_sdk`` and emits a single
|
|
43
|
+
``DeprecationWarning`` per attribute name on first access. ``__all__`` and
|
|
44
|
+
``__dir__`` are forwarded from the target module so ``import *`` and
|
|
45
|
+
introspection behave naturally.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
old_path: The legacy module path (e.g. ``"dataops_cli.sdk"``). Must be
|
|
49
|
+
a key in :data:`_OLD_TO_NEW`.
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
The freshly created proxy module, also registered in :data:`sys.modules`
|
|
53
|
+
under ``old_path``.
|
|
54
|
+
|
|
55
|
+
.. deprecated::
|
|
56
|
+
Only used to construct the legacy ``dataops_cli.*`` shims. Will be
|
|
57
|
+
removed in ``dataops_cli`` 1.0 alongside the shims themselves.
|
|
58
|
+
"""
|
|
59
|
+
new_path = _OLD_TO_NEW[old_path]
|
|
60
|
+
target = importlib.import_module(new_path)
|
|
61
|
+
warned: set[str] = set()
|
|
62
|
+
|
|
63
|
+
def __getattr__(name: str) -> Any:
|
|
64
|
+
"""PEP 562 attribute lookup that warns once per attribute name."""
|
|
65
|
+
if name not in warned:
|
|
66
|
+
warned.add(name)
|
|
67
|
+
warnings.warn(
|
|
68
|
+
f"Importing '{name}' from '{old_path}' is deprecated; "
|
|
69
|
+
f"import it from '{new_path}' instead. "
|
|
70
|
+
"This shim will be removed in dataops_cli 1.0.",
|
|
71
|
+
DeprecationWarning,
|
|
72
|
+
stacklevel=2,
|
|
73
|
+
)
|
|
74
|
+
return getattr(target, name)
|
|
75
|
+
|
|
76
|
+
module = ModuleType(old_path)
|
|
77
|
+
module.__getattr__ = __getattr__ # type: ignore[attr-defined]
|
|
78
|
+
module.__all__ = getattr(target, "__all__", []) # type: ignore[attr-defined]
|
|
79
|
+
module.__dir__ = lambda: list(dir(target)) # type: ignore[attr-defined]
|
|
80
|
+
sys.modules[old_path] = module
|
|
81
|
+
return module
|
|
@@ -10,10 +10,6 @@ import json
|
|
|
10
10
|
from typing import Annotated, Any, Optional
|
|
11
11
|
|
|
12
12
|
import typer
|
|
13
|
-
from pydantic_core import to_json
|
|
14
|
-
from rich.console import Console
|
|
15
|
-
from rich.table import Table
|
|
16
|
-
|
|
17
13
|
from dataops_cli.cli.utils import print_list
|
|
18
14
|
from dataops_sdk.exceptions import DataOpsError
|
|
19
15
|
from dataops_sdk.schemas.query import SqlQueryParam
|
|
@@ -32,12 +28,15 @@ from dataops_sdk.services.alarm import (
|
|
|
32
28
|
service_list_alarm_rules,
|
|
33
29
|
service_list_alarm_specs,
|
|
34
30
|
)
|
|
31
|
+
from pydantic_core import to_json
|
|
32
|
+
from rich.console import Console
|
|
33
|
+
from rich.table import Table
|
|
35
34
|
|
|
36
35
|
# ---------------------------------------------------------------------------
|
|
37
36
|
# CLI 命令(薄包装,负责输出渲染)
|
|
38
37
|
# ---------------------------------------------------------------------------
|
|
39
38
|
|
|
40
|
-
alarm_typer = typer.Typer(name="alarm", help="
|
|
39
|
+
alarm_typer = typer.Typer(name="alarm", help="告警规则配置", no_args_is_help=True)
|
|
41
40
|
alarm_rule_typer = typer.Typer(name="rule", help="告警规则命令", no_args_is_help=True)
|
|
42
41
|
alarm_spec_typer = typer.Typer(name="spec", help="告警专业命令", no_args_is_help=True)
|
|
43
42
|
alarm_action_typer = typer.Typer(name="action", help="告警动作命令", no_args_is_help=True)
|
|
@@ -93,6 +92,18 @@ def count_alarm_rules_match(
|
|
|
93
92
|
query: Annotated[Optional[str], typer.Option("-q", "--query", help="搜索关键字")] = None,
|
|
94
93
|
enabled: Annotated[Optional[bool], typer.Option(help="启用状态")] = None,
|
|
95
94
|
):
|
|
95
|
+
"""查询告警匹配规则数量。
|
|
96
|
+
|
|
97
|
+
按专业、关键字与启用状态进行过滤,返回匹配规则的总数。
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
spec: 专业值列表,多个值会同时参与匹配。
|
|
101
|
+
query: 可选关键字,用于模糊搜索。
|
|
102
|
+
enabled: 可选启用状态过滤;为 ``True`` / ``False`` 时严格匹配。
|
|
103
|
+
|
|
104
|
+
Examples:
|
|
105
|
+
>>> data-ops-cli alarm rule match count --spec MY_SPEC
|
|
106
|
+
"""
|
|
96
107
|
try:
|
|
97
108
|
total = service_count_alarm_rule_matches(query, enabled, spec)
|
|
98
109
|
except DataOpsError as e:
|
|
@@ -104,13 +115,27 @@ def count_alarm_rules_match(
|
|
|
104
115
|
@rule_match_typer.command("list", help="查询告警匹配规则")
|
|
105
116
|
def list_alarm_rules_match(
|
|
106
117
|
spec: Annotated[list[str], typer.Option(help="专业值", default_factory=list)],
|
|
107
|
-
|
|
108
|
-
|
|
118
|
+
page_num: Annotated[int, typer.Option("-n", "--page-num", help="页码")] = 0,
|
|
119
|
+
page_size: Annotated[int, typer.Option("-s", "--page-size", help="每页大小")] = 20,
|
|
109
120
|
query: Annotated[Optional[str], typer.Option("-q", "--query", help="搜索关键字")] = None,
|
|
110
121
|
enabled: Annotated[Optional[bool], typer.Option(help="启用状态")] = None,
|
|
111
122
|
):
|
|
123
|
+
"""查询告警匹配规则列表。
|
|
124
|
+
|
|
125
|
+
按专业、关键字与启用状态过滤告警匹配规则,并以平面表格形式输出。
|
|
126
|
+
|
|
127
|
+
Args:
|
|
128
|
+
spec: 专业值列表,多个值同时参与匹配。
|
|
129
|
+
page: 页码(从 0 开始)。
|
|
130
|
+
size: 每页条数。
|
|
131
|
+
query: 可选关键字。
|
|
132
|
+
enabled: 可选启用状态过滤。
|
|
133
|
+
|
|
134
|
+
Examples:
|
|
135
|
+
>>> data-ops-cli alarm rule match list --spec MY_SPEC --page 0 --size 20
|
|
136
|
+
"""
|
|
112
137
|
try:
|
|
113
|
-
group_nodes = service_list_alarm_rule_matches(
|
|
138
|
+
group_nodes = service_list_alarm_rule_matches(page_num, page_size, query, enabled, spec)
|
|
114
139
|
except DataOpsError as e:
|
|
115
140
|
typer.echo(f"错误: {e.message}")
|
|
116
141
|
raise typer.Exit(code=1) from None
|
|
@@ -145,17 +170,30 @@ def list_alarm_rules_match(
|
|
|
145
170
|
|
|
146
171
|
@alarm_spec_typer.command("list", help="查询告警专业")
|
|
147
172
|
def list_alarm_specs(
|
|
148
|
-
|
|
149
|
-
|
|
173
|
+
page_num: Annotated[int, typer.Option("-n", "--page-num", help="页码")] = 0,
|
|
174
|
+
page_size: Annotated[int, typer.Option("-s", "--page-size", help="每页大小")] = 20,
|
|
150
175
|
query: Annotated[Optional[str], typer.Option("-q", "--query", help="搜索关键字")] = None,
|
|
151
176
|
active: Annotated[Optional[bool], typer.Option(help="启用状态")] = None,
|
|
152
177
|
):
|
|
178
|
+
"""查询告警专业列表。
|
|
179
|
+
|
|
180
|
+
按关键字与启用状态过滤告警专业(spec),输出标题、值、行业等基础字段。
|
|
181
|
+
|
|
182
|
+
Args:
|
|
183
|
+
page: 页码(从 0 开始)。
|
|
184
|
+
size: 每页条数。
|
|
185
|
+
query: 可选关键字。
|
|
186
|
+
active: 可选启用状态过滤。
|
|
187
|
+
|
|
188
|
+
Examples:
|
|
189
|
+
>>> data-ops-cli alarm spec list -q "网元"
|
|
190
|
+
"""
|
|
153
191
|
query_param = SqlQueryParam()
|
|
154
192
|
if active is not None:
|
|
155
193
|
query_param.varMap["isEnabled"] = "1" if active else "0"
|
|
156
194
|
if query:
|
|
157
195
|
query_param.add_like("title", query, "mrl")
|
|
158
|
-
group_nodes = service_list_alarm_specs(
|
|
196
|
+
group_nodes = service_list_alarm_specs(page_num, page_size, query_param)
|
|
159
197
|
|
|
160
198
|
print_list(
|
|
161
199
|
["专业名称", "值", "行业", "启用状态", "创建人", "更新时间"],
|
|
@@ -178,18 +216,40 @@ def count_alarm_specs(
|
|
|
178
216
|
query: Annotated[Optional[str], typer.Option("-q", "--query", help="搜索关键字")] = None,
|
|
179
217
|
enabled: Annotated[Optional[bool], typer.Option(help="启用状态")] = None,
|
|
180
218
|
):
|
|
219
|
+
"""查询告警专业的总数。
|
|
220
|
+
|
|
221
|
+
Args:
|
|
222
|
+
query: 可选关键字。
|
|
223
|
+
enabled: 可选启用状态过滤。
|
|
224
|
+
|
|
225
|
+
Examples:
|
|
226
|
+
>>> data-ops-cli alarm spec count
|
|
227
|
+
"""
|
|
181
228
|
total = service_count_alarm_specs(query, enabled)
|
|
182
229
|
print(total)
|
|
183
230
|
|
|
184
231
|
|
|
185
232
|
@alarm_rule_typer.command("list", help="查询告警规则")
|
|
186
233
|
def list_alarm_rules(
|
|
187
|
-
|
|
188
|
-
|
|
234
|
+
page_num: Annotated[int, typer.Option("-n", "--page-num", help="页码")] = 0,
|
|
235
|
+
page_size: Annotated[int, typer.Option("-s", "--page-size", help="每页大小")] = 20,
|
|
189
236
|
query: Annotated[Optional[str], typer.Option("-q", "--query", help="搜索关键字")] = None,
|
|
190
237
|
enabled: Annotated[Optional[bool], typer.Option(help="启用状态")] = None,
|
|
191
238
|
):
|
|
192
|
-
|
|
239
|
+
"""查询告警规则列表。
|
|
240
|
+
|
|
241
|
+
按关键字与启用状态过滤告警规则,并以平面表格输出名称、值与启用状态。
|
|
242
|
+
|
|
243
|
+
Args:
|
|
244
|
+
page: 页码(从 0 开始)。
|
|
245
|
+
size: 每页条数。
|
|
246
|
+
query: 可选关键字。
|
|
247
|
+
enabled: 可选启用状态过滤。
|
|
248
|
+
|
|
249
|
+
Examples:
|
|
250
|
+
>>> data-ops-cli alarm rule list -q "电压"
|
|
251
|
+
"""
|
|
252
|
+
group_nodes = service_list_alarm_rules(page_num, page_size, query, enabled)
|
|
193
253
|
|
|
194
254
|
print_list(
|
|
195
255
|
["规则名称", "值", "启用状态", "创建人", "更新时间"],
|
|
@@ -211,6 +271,15 @@ def count_alarm_specs(
|
|
|
211
271
|
query: Annotated[Optional[str], typer.Option("-q", "--query", help="搜索关键字")] = None,
|
|
212
272
|
enabled: Annotated[Optional[bool], typer.Option(help="启用状态")] = None,
|
|
213
273
|
):
|
|
274
|
+
"""查询告警规则的总数。
|
|
275
|
+
|
|
276
|
+
Args:
|
|
277
|
+
query: 可选关键字。
|
|
278
|
+
enabled: 可选启用状态过滤。
|
|
279
|
+
|
|
280
|
+
Examples:
|
|
281
|
+
>>> data-ops-cli alarm rule count
|
|
282
|
+
"""
|
|
214
283
|
total = service_count_alarm_rules(query, enabled)
|
|
215
284
|
print(total)
|
|
216
285
|
|
|
@@ -218,13 +287,27 @@ def count_alarm_specs(
|
|
|
218
287
|
@alarm_action_typer.command("list", help="查询告警动作")
|
|
219
288
|
def list_alarm_actions(
|
|
220
289
|
rule: Annotated[list[str], typer.Option(help="专业值", default_factory=list)],
|
|
221
|
-
|
|
222
|
-
|
|
290
|
+
page_num: Annotated[int, typer.Option("-n", "--page-num", help="页码")] = 0,
|
|
291
|
+
page_size: Annotated[int, typer.Option("-s", "--page-size", help="每页大小")] = 20,
|
|
223
292
|
query: Annotated[Optional[str], typer.Option("-q", "--query", help="搜索关键字")] = None,
|
|
224
293
|
enabled: Annotated[Optional[bool], typer.Option(help="启用状态")] = None,
|
|
225
294
|
):
|
|
295
|
+
"""查询告警动作列表。
|
|
296
|
+
|
|
297
|
+
按所属规则、关键字与启用状态过滤告警动作,并以平面表格输出。
|
|
298
|
+
|
|
299
|
+
Args:
|
|
300
|
+
rule: 所属规则编码列表。
|
|
301
|
+
page: 页码(从 0 开始)。
|
|
302
|
+
size: 每页条数。
|
|
303
|
+
query: 可选关键字。
|
|
304
|
+
enabled: 可选启用状态过滤。
|
|
305
|
+
|
|
306
|
+
Examples:
|
|
307
|
+
>>> data-ops-cli alarm action list --rule MY_RULE
|
|
308
|
+
"""
|
|
226
309
|
try:
|
|
227
|
-
group_nodes = service_list_alarm_action(
|
|
310
|
+
group_nodes = service_list_alarm_action(page_num, page_size, query, enabled, rule)
|
|
228
311
|
except DataOpsError as e:
|
|
229
312
|
typer.echo(f"错误: {e.message}")
|
|
230
313
|
raise typer.Exit(code=1) from None
|
|
@@ -261,6 +344,16 @@ def count_alarm_actions(
|
|
|
261
344
|
query: Annotated[Optional[str], typer.Option("-q", "--query", help="搜索关键字")] = None,
|
|
262
345
|
enabled: Annotated[Optional[bool], typer.Option(help="启用状态")] = None,
|
|
263
346
|
):
|
|
347
|
+
"""查询告警动作的总数。
|
|
348
|
+
|
|
349
|
+
Args:
|
|
350
|
+
rule: 所属规则编码列表。
|
|
351
|
+
query: 可选关键字。
|
|
352
|
+
enabled: 可选启用状态过滤。
|
|
353
|
+
|
|
354
|
+
Examples:
|
|
355
|
+
>>> data-ops-cli alarm action count --rule MY_RULE
|
|
356
|
+
"""
|
|
264
357
|
try:
|
|
265
358
|
total = service_count_alarm_action(query, enabled, rule)
|
|
266
359
|
except DataOpsError as e:
|
|
@@ -271,9 +364,11 @@ def count_alarm_actions(
|
|
|
271
364
|
|
|
272
365
|
@alarm_rule_typer.command("enums")
|
|
273
366
|
def get_alarm_rule_enums() -> None:
|
|
274
|
-
"""
|
|
367
|
+
"""获取告警规则枚举配置。
|
|
275
368
|
|
|
276
|
-
|
|
369
|
+
后端返回 ``dict`` 时以两列 ``key/value`` 表渲染;其他结构以 JSON 形式输出。
|
|
370
|
+
|
|
371
|
+
Examples:
|
|
277
372
|
>>> data-ops-cli alarm rule enums
|
|
278
373
|
"""
|
|
279
374
|
try:
|
|
@@ -300,9 +395,14 @@ def get_alarm_rule_enums() -> None:
|
|
|
300
395
|
def find_meta_by_codes(
|
|
301
396
|
codes: Annotated[list[str], typer.Argument(help="告警规则编码列表")],
|
|
302
397
|
) -> None:
|
|
303
|
-
"""
|
|
398
|
+
"""根据告警规则编码批量查询关联元数据。
|
|
399
|
+
|
|
400
|
+
以 JSON 格式输出查询结果,便于人工检视或管道后续处理。
|
|
401
|
+
|
|
402
|
+
Args:
|
|
403
|
+
codes: 告警规则编码列表。
|
|
304
404
|
|
|
305
|
-
|
|
405
|
+
Examples:
|
|
306
406
|
>>> data-ops-cli alarm rule find-meta-by-codes code1 code2
|
|
307
407
|
"""
|
|
308
408
|
try:
|
|
@@ -318,9 +418,12 @@ def find_meta_by_codes(
|
|
|
318
418
|
def get_alarm_table_columns(
|
|
319
419
|
spec_type: Annotated[str, typer.Argument(help="告警规格类型")],
|
|
320
420
|
) -> None:
|
|
321
|
-
"""获取指定 specType
|
|
421
|
+
"""获取指定 specType 对应的告警表列定义。
|
|
322
422
|
|
|
323
|
-
|
|
423
|
+
Args:
|
|
424
|
+
spec_type: 告警规格类型编码。
|
|
425
|
+
|
|
426
|
+
Examples:
|
|
324
427
|
>>> data-ops-cli alarm rule alarm-columns MY_SPEC_TYPE
|
|
325
428
|
"""
|
|
326
429
|
try:
|
|
@@ -336,9 +439,12 @@ def get_alarm_table_columns(
|
|
|
336
439
|
def get_rel_table_columns(
|
|
337
440
|
code: Annotated[str, typer.Argument(help="告警规则编码")],
|
|
338
441
|
) -> None:
|
|
339
|
-
"""
|
|
442
|
+
"""获取指定告警规则关联表的列定义。
|
|
443
|
+
|
|
444
|
+
Args:
|
|
445
|
+
code: 告警规则编码。
|
|
340
446
|
|
|
341
|
-
|
|
447
|
+
Examples:
|
|
342
448
|
>>> data-ops-cli alarm rule rel-columns rule_code_001
|
|
343
449
|
"""
|
|
344
450
|
try:
|
|
@@ -358,12 +464,16 @@ def find_alarm_table_data(
|
|
|
358
464
|
typer.Option(help="查询条件 JSON 字符串"),
|
|
359
465
|
] = None,
|
|
360
466
|
) -> None:
|
|
361
|
-
"""
|
|
467
|
+
"""查询指定数据源中告警表的实际数据(由告警规则写入的记录,非实时告警)。
|
|
362
468
|
|
|
363
|
-
|
|
364
|
-
>>> data-ops-cli alarm rule data --code rule_code_001
|
|
469
|
+
``--query`` 接收 JSON 字符串并解析为 dict 后透传给 SDK。
|
|
365
470
|
|
|
366
|
-
|
|
471
|
+
Args:
|
|
472
|
+
code: 告警规则编码。
|
|
473
|
+
query: 可选 JSON 字符串,表示查询条件。
|
|
474
|
+
|
|
475
|
+
Examples:
|
|
476
|
+
>>> data-ops-cli alarm rule data --code rule_code_001
|
|
367
477
|
>>> data-ops-cli alarm rule data --code rule_code_001 --query '{"date":"2026-07-16"}'
|
|
368
478
|
"""
|
|
369
479
|
try:
|
|
@@ -6,11 +6,10 @@
|
|
|
6
6
|
- CLI 命令:基于服务层的薄包装,负责格式化输出
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
-
import shutil
|
|
10
9
|
from typing import Annotated
|
|
11
10
|
|
|
12
11
|
import typer
|
|
13
|
-
|
|
12
|
+
from dataops_cli.cli.utils import print_list
|
|
14
13
|
from dataops_sdk.exceptions import DataOpsError
|
|
15
14
|
from dataops_sdk.schemas import MetaType
|
|
16
15
|
from dataops_sdk.services.api import service_get_api_by_code
|
|
@@ -46,7 +45,11 @@ api_typer = typer.Typer(
|
|
|
46
45
|
|
|
47
46
|
|
|
48
47
|
def _first_line(text: str) -> str:
|
|
49
|
-
"""
|
|
48
|
+
"""取文本的第一行。
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
text: 多行字符串。
|
|
52
|
+
"""
|
|
50
53
|
return text.split("\n")[0]
|
|
51
54
|
|
|
52
55
|
|
|
@@ -56,11 +59,14 @@ def list_apis(
|
|
|
56
59
|
str | None, typer.Option("-q", "--query", help="按名称/标题/备注正则过滤")
|
|
57
60
|
] = None,
|
|
58
61
|
) -> None:
|
|
59
|
-
"""列出所有 API
|
|
62
|
+
"""列出所有 API 接口。
|
|
60
63
|
|
|
61
64
|
从元数据服务获取 API 接口列表,支持通过正则表达式按名称、标题或备注进行过滤。
|
|
62
65
|
|
|
63
|
-
|
|
66
|
+
Args:
|
|
67
|
+
query: 可选正则表达式,按名称/标题/备注过滤。
|
|
68
|
+
|
|
69
|
+
Examples:
|
|
64
70
|
列出所有 API 接口
|
|
65
71
|
>>> data-ops-cli api list
|
|
66
72
|
|
|
@@ -81,14 +87,14 @@ def list_apis(
|
|
|
81
87
|
print("(无结果)")
|
|
82
88
|
return
|
|
83
89
|
|
|
84
|
-
|
|
90
|
+
print_list(
|
|
91
|
+
["code", "title", "remark"],
|
|
92
|
+
[
|
|
93
|
+
[node.CODE, node.TITLE, _first_line(node.REMARK or "")]
|
|
94
|
+
for node in group_nodes
|
|
95
|
+
]
|
|
96
|
+
)
|
|
85
97
|
|
|
86
|
-
for node in group_nodes:
|
|
87
|
-
code = node.CODE
|
|
88
|
-
title = node.TITLE
|
|
89
|
-
remark_raw = node.REMARK or ""
|
|
90
|
-
remark = _first_line(remark_raw.strip())
|
|
91
|
-
print(code, title, remark)
|
|
92
98
|
|
|
93
99
|
|
|
94
100
|
@api_typer.command("detail", rich_help_panel="API 查询", no_args_is_help=True)
|
|
@@ -99,11 +105,15 @@ def get_api_detail(
|
|
|
99
105
|
typer.Option("-s", "--simplify", help="仅显示基本信息,不展示请求/响应参数"),
|
|
100
106
|
] = False,
|
|
101
107
|
) -> None:
|
|
102
|
-
"""获取 API
|
|
108
|
+
"""获取 API 接口详情。
|
|
103
109
|
|
|
104
110
|
根据 API 接口编码获取详细信息,包括请求方法、路径、状态、请求参数和响应参数。
|
|
105
111
|
|
|
106
|
-
|
|
112
|
+
Args:
|
|
113
|
+
code: API 接口编码。
|
|
114
|
+
simplify: 是否仅显示基本信息(不展示请求/响应参数)。
|
|
115
|
+
|
|
116
|
+
Examples:
|
|
107
117
|
获取 API 接口完整信息
|
|
108
118
|
>>> data-ops-cli api detail user_login
|
|
109
119
|
|
|
@@ -207,7 +217,13 @@ def get_api_detail(
|
|
|
207
217
|
|
|
208
218
|
|
|
209
219
|
def _print_params_tree(params: list[dict], indent: int = 0, prefix: str = "") -> None:
|
|
210
|
-
"""
|
|
220
|
+
"""递归打印参数树结构。
|
|
221
|
+
|
|
222
|
+
Args:
|
|
223
|
+
params: 参数节点列表。
|
|
224
|
+
indent: 当前缩进空格数。
|
|
225
|
+
prefix: 每行前缀。
|
|
226
|
+
"""
|
|
211
227
|
for p in params:
|
|
212
228
|
ptype = p.get("type", "?")
|
|
213
229
|
name = p.get("name", "?")
|
|
@@ -34,11 +34,13 @@ auth_typer.add_typer(application_typer)
|
|
|
34
34
|
|
|
35
35
|
@auth_typer.command("status")
|
|
36
36
|
def auth_status() -> None:
|
|
37
|
-
"""
|
|
37
|
+
"""显示当前认证状态。
|
|
38
38
|
|
|
39
39
|
查询当前用户的登录状态及已设置的应用信息。
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
|
|
41
|
+
如果未登录,提示用户先进行登录;
|
|
42
|
+
如果已登录但未设置应用,提示用户设置应用;
|
|
43
|
+
否则同时输出应用关联的主/隐患数据源信息。
|
|
42
44
|
"""
|
|
43
45
|
target_path = get_work_dir(USER_INFO_FILE)
|
|
44
46
|
if not target_path.exists():
|
|
@@ -82,12 +84,16 @@ def auth(
|
|
|
82
84
|
envvar="DATA_OPS_PASSWORD",
|
|
83
85
|
),
|
|
84
86
|
) -> None:
|
|
85
|
-
"""登录 DataOps
|
|
87
|
+
"""登录 DataOps 平台。
|
|
86
88
|
|
|
87
89
|
使用用户名和密码进行登录,登录成功后会将 Token 保存到本地。
|
|
88
|
-
支持通过环境变量 DATA_OPS_USERNAME 和 DATA_OPS_PASSWORD 传入凭据。
|
|
90
|
+
支持通过环境变量 ``DATA_OPS_USERNAME`` 和 ``DATA_OPS_PASSWORD`` 传入凭据。
|
|
91
|
+
|
|
92
|
+
Args:
|
|
93
|
+
username: 用户名。
|
|
94
|
+
password: 密码。
|
|
89
95
|
|
|
90
|
-
|
|
96
|
+
Examples:
|
|
91
97
|
交互式登录
|
|
92
98
|
>>> data-ops-cli auth login myuser mypassword
|
|
93
99
|
|
|
@@ -106,9 +112,12 @@ def auth(
|
|
|
106
112
|
|
|
107
113
|
@auth_typer.command("logout")
|
|
108
114
|
def logout() -> None:
|
|
109
|
-
"""登出 DataOps
|
|
115
|
+
"""登出 DataOps 平台。
|
|
110
116
|
|
|
111
117
|
清除本地保存的登录凭证,退出当前登录状态。
|
|
118
|
+
|
|
119
|
+
Examples:
|
|
120
|
+
>>> data-ops-cli auth logout
|
|
112
121
|
"""
|
|
113
122
|
ret = service_logout()
|
|
114
123
|
if ret:
|
|
@@ -119,12 +128,15 @@ def logout() -> None:
|
|
|
119
128
|
|
|
120
129
|
@application_typer.command("list")
|
|
121
130
|
def application_list(query: Annotated[str | None, typer.Argument(help="关键字")] = None) -> None:
|
|
122
|
-
"""
|
|
131
|
+
"""列出所有可用应用。
|
|
123
132
|
|
|
124
133
|
显示当前用户可访问的所有应用列表,支持通过关键字过滤。
|
|
125
134
|
表格显示应用的编码(code)、标题(title)和备注(remark)。
|
|
126
135
|
|
|
127
|
-
|
|
136
|
+
Args:
|
|
137
|
+
query: 可选关键字。
|
|
138
|
+
|
|
139
|
+
Examples:
|
|
128
140
|
查看所有应用
|
|
129
141
|
>>> data-ops-cli auth application list
|
|
130
142
|
|
|
@@ -148,12 +160,15 @@ def application_list(query: Annotated[str | None, typer.Argument(help="关键字
|
|
|
148
160
|
|
|
149
161
|
@application_typer.command("set")
|
|
150
162
|
def application_set(code: Annotated[str, typer.Argument(help="应用编码")]) -> None:
|
|
151
|
-
"""
|
|
163
|
+
"""设置当前应用。
|
|
152
164
|
|
|
153
165
|
将指定应用设置为当前会话的默认应用,后续操作将在该应用上下文中执行。
|
|
154
166
|
设置完成后显示应用的详细信息。
|
|
155
167
|
|
|
156
|
-
|
|
168
|
+
Args:
|
|
169
|
+
code: 应用编码。
|
|
170
|
+
|
|
171
|
+
Examples:
|
|
157
172
|
设置当前应用
|
|
158
173
|
>>> data-ops-cli auth application set myapp_code
|
|
159
174
|
"""
|
|
@@ -174,10 +189,10 @@ def application_set(code: Annotated[str, typer.Argument(help="应用编码")]) -
|
|
|
174
189
|
|
|
175
190
|
@application_typer.command("info")
|
|
176
191
|
def application_info() -> None:
|
|
177
|
-
"""
|
|
192
|
+
"""显示当前应用信息。
|
|
178
193
|
|
|
179
194
|
查看当前已设置应用的详细信息,包括编码、标题和备注。
|
|
180
|
-
如果尚未设置应用,提示用户使用 auth application set 命令进行设置。
|
|
195
|
+
如果尚未设置应用,提示用户使用 ``auth application set`` 命令进行设置。
|
|
181
196
|
"""
|
|
182
197
|
application = service_get_current_application()
|
|
183
198
|
if application is None:
|