hcs-core 0.1.290__py3-none-any.whl → 0.1.291__py3-none-any.whl

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.
hcs_core/__init__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.1.290"
1
+ __version__ = "0.1.291"
hcs_core/ctxp/_init.py CHANGED
@@ -19,7 +19,7 @@ from pathlib import Path
19
19
 
20
20
  import click
21
21
 
22
- from . import cli_processor, config, profile, state
22
+ from . import cli_processor, config, profile, state, telemetry
23
23
 
24
24
 
25
25
  def _get_store_path():
@@ -79,8 +79,11 @@ def app_name():
79
79
 
80
80
  def init_cli(main_cli: click.Group, commands_dir: str = "./cmds"):
81
81
  try:
82
- return cli_processor.init(main_cli, commands_dir)
83
- except Exception as e:
82
+ ret = cli_processor.init(main_cli, commands_dir)
83
+ telemetry.end()
84
+ return ret
85
+ except BaseException as e:
86
+ telemetry.end(error=e)
84
87
  if _need_stack_trace(e):
85
88
  raise e
86
89
  else:
@@ -24,7 +24,6 @@ from pathlib import Path
24
24
  import click
25
25
  from click.core import Group
26
26
 
27
- from .extension import ensure_extension
28
27
  from .util import avoid_trace_for_ctrl_c, print_error, print_output, validate_error_return
29
28
 
30
29
  _eager_loading = os.environ.get("_CTXP_EAGER_LOAD")
@@ -61,6 +60,8 @@ class LazyGroup(click.Group):
61
60
 
62
61
  def _ensure_extension(self):
63
62
  if self._extension:
63
+ from .extension import ensure_extension
64
+
64
65
  ensure_extension(self._extension)
65
66
 
66
67
 
@@ -186,6 +187,11 @@ def _default_io(cmd: click.Command):
186
187
  "first": kwargs.pop("first"),
187
188
  "exclude_field": kwargs.pop("exclude_field"),
188
189
  }
190
+ ctx = click.get_current_context()
191
+ from .telemetry import start as telemetry_start
192
+
193
+ telemetry_start(ctx.command_path, ctx.params)
194
+
189
195
  if io_args["output"] == "table":
190
196
 
191
197
  def _format(data):
@@ -0,0 +1,88 @@
1
+ import json
2
+ import logging
3
+ import sys
4
+ import time
5
+ from datetime import datetime, timezone
6
+
7
+ import click
8
+ import httpx
9
+ from yumako import env
10
+
11
+ log = logging.getLogger(__name__)
12
+
13
+ _record = None
14
+ _enabled = None
15
+
16
+
17
+ def disable():
18
+ global _enabled
19
+ _enabled = False
20
+
21
+
22
+ def _is_disabled():
23
+ global _enabled
24
+ if _enabled is None:
25
+ _enabled = env.bool("HCS_CLI_TELEMETRY", True)
26
+ return not _enabled
27
+
28
+
29
+ def start(cmd_path: str, params: dict):
30
+ if _is_disabled():
31
+ return
32
+
33
+ global _record
34
+ _record = {
35
+ "@timestamp": datetime.now(timezone.utc).isoformat(timespec="milliseconds"),
36
+ "command": cmd_path,
37
+ "options": [k.replace("_", "-") for k, v in params.items() if v],
38
+ "return": -1,
39
+ "error": None,
40
+ "time_ms": -1,
41
+ "env": {
42
+ "python_version": sys.version,
43
+ "platform": sys.platform,
44
+ "executable": sys.executable,
45
+ },
46
+ }
47
+
48
+
49
+ def end(return_code: int = 0, error: Exception = None):
50
+ if _is_disabled():
51
+ return
52
+
53
+ if _record is None:
54
+ return
55
+
56
+ if error:
57
+ if isinstance(error, click.exceptions.Exit):
58
+ return_code = error.exit_code
59
+ elif isinstance(error, SystemExit):
60
+ return_code = error.code
61
+ else:
62
+ _record["error"] = str(error)
63
+ if return_code == 0:
64
+ return_code = 1
65
+ _record["return"] = return_code
66
+ _record["time_ms"] = int((time.time() - datetime.fromisoformat(_record["@timestamp"]).timestamp()) * 1000)
67
+
68
+ # print('TELEMETRY end', json.dumps(_record, indent=4), flush=True)
69
+
70
+ _injest(_record)
71
+ return _record
72
+
73
+
74
+ def _injest(doc):
75
+ try:
76
+ response = httpx.post(
77
+ f"https://collie.omnissa.com/es/hcs-cli/_doc",
78
+ auth=("append_user", "public"),
79
+ headers={"Content-Type": "application/json"},
80
+ content=json.dumps(doc),
81
+ timeout=4,
82
+ )
83
+ response.raise_for_status()
84
+ except Exception as e:
85
+ log.debug(f"Telemetry ingestion failed: {e}", exc_info=True)
86
+ return
87
+
88
+ log.debug(f"Telemetry ingestion successful: {response.status_code}")
hcs_core/ctxp/util.py CHANGED
@@ -189,6 +189,10 @@ def _exclude_fields(obj: Any, fields_exclude: str):
189
189
 
190
190
 
191
191
  def panic(reason: Any = None, code: int = 1):
192
+ if isinstance(reason, SystemExit):
193
+ os._exit(reason.code)
194
+ if isinstance(reason, click.exceptions.Exit):
195
+ os._exit(reason.exit_code)
192
196
  if isinstance(reason, Exception):
193
197
  text = error_details(reason)
194
198
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hcs-core
3
- Version: 0.1.290
3
+ Version: 0.1.291
4
4
  Summary: Horizon Cloud Service CLI module.
5
5
  Project-URL: Homepage, https://github.com/euc-eng/hcs-cli
6
6
  Project-URL: Bug Tracker, https://github.com/euc-eng/hcs-cli/issues
@@ -1,8 +1,8 @@
1
- hcs_core/__init__.py,sha256=bwKnrwO9ZdAegnigTknEQxy0oRqb3ET-uKciKxJ5eh0,24
1
+ hcs_core/__init__.py,sha256=1PgTXNmb94tyX4Pa6zSym0_9Tm6BtnUjJhJ07IaM7HQ,24
2
2
  hcs_core/ctxp/__init__.py,sha256=bHVHhJP10Luz1a3Kk3zFx14dAO4SY6Q20Lrv8rNWWGc,1075
3
- hcs_core/ctxp/_init.py,sha256=yq46VOty4zs_WcLt1SrtePxbW8S4RIz4YUCP3xIBvCA,2797
3
+ hcs_core/ctxp/_init.py,sha256=QCIAHCue6KZQ-gq-dcxHsGW5QQQmhuGgBUm_E9x_Beg,2885
4
4
  hcs_core/ctxp/cli_options.py,sha256=j4LUukG1k6etJFATb8mGXvqB7DiEC-VOP23w7KVO9sY,2751
5
- hcs_core/ctxp/cli_processor.py,sha256=L4ai8ZAKBkhII_6dwehxNGPrrvFOrq0CFaMHav0F2Y0,7485
5
+ hcs_core/ctxp/cli_processor.py,sha256=pVfMLAJne34YY2EYz_Tz-8yUxUry60gooGm6EFPIieM,7652
6
6
  hcs_core/ctxp/cmd_util.py,sha256=_-VwQSmkfi52qWC3uHQI06mSiIPfsZroDruTDYHXiMA,3119
7
7
  hcs_core/ctxp/config.py,sha256=vRdzPxi3Yrt04cnR6b5mJwEOtYBh21qvmlSSsgyGoI4,931
8
8
  hcs_core/ctxp/context.py,sha256=y0ouOzXyYTg9MOuWjzjls9WfOKYaO31_MGJJ2S-Y9p4,3375
@@ -19,9 +19,10 @@ hcs_core/ctxp/profile_store.py,sha256=v4RvKSaKSJhAt5rEGbC6v-NfaI3N67YffPm-qlrQWd
19
19
  hcs_core/ctxp/recent.py,sha256=uKSEdU4L2szbyl-5nYLa3bigZSvSPW8G24Tuk_wYMck,1797
20
20
  hcs_core/ctxp/state.py,sha256=gjcMRVONKBq7WiFQo-xca1726ngZe90mnPrF3vbXDrU,1634
21
21
  hcs_core/ctxp/task_schd.py,sha256=mvZMeKDSSo2p7VidSoZY1XZj433TQn_YF9SGJEzl9lg,4586
22
+ hcs_core/ctxp/telemetry.py,sha256=edT8i2OxiWvjJgUV2heUIkNtEznYG11U23mNWwQHFN8,2161
22
23
  hcs_core/ctxp/template_util.py,sha256=XslvIuRBlTVsUW0Y9M_D8gUPc1jWq6X2p4At2VAe1KU,731
23
24
  hcs_core/ctxp/timeutil.py,sha256=RyRrIRdFHbIghdB8wbC8VdABvc7hki2v51b1x2JvHgo,445
24
- hcs_core/ctxp/util.py,sha256=5RrAjSAM3GRu23a6mnKAnJ6X-WyW9NptngPEEDzm5QM,11434
25
+ hcs_core/ctxp/util.py,sha256=BUcbe-IkhtkU6jFdYD4fXNkq7fAAgXyhl--67bIeXz4,11588
25
26
  hcs_core/ctxp/var_template.py,sha256=cTjj1UJ58ac6s5z4Oh5hSDQwKixq-rdbCF1D8akjAo0,3219
26
27
  hcs_core/ctxp/built_in_cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
28
  hcs_core/ctxp/built_in_cmds/_ut.py,sha256=e50XBmPim2qRe0RYk_XAuRz1HWYyLJuMu-6dVxWR_fQ,3356
@@ -63,6 +64,6 @@ hcs_core/util/query_util.py,sha256=5bh3bUVIQuY9qerndfuyfyzkTExYJ8zD0_e3PSN7y-4,3
63
64
  hcs_core/util/scheduler.py,sha256=bPpCmGUL1UctJMfLPAg-h4Hl2YZr96FiI78-G_Usn08,2958
64
65
  hcs_core/util/ssl_util.py,sha256=MvU102fGwWWh9hhSmLnn1qQIWuD6TjZnN0iH0MXUtW0,1239
65
66
  hcs_core/util/versions.py,sha256=urMtShfoBx_Eqq0D-450LP0i-rW447k9yX8q8j5H_qA,1721
66
- hcs_core-0.1.290.dist-info/METADATA,sha256=JsjF5lDDx6OWqmoe_8T2qZF5yRNEsPpNZ-N53y1r-po,1911
67
- hcs_core-0.1.290.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
68
- hcs_core-0.1.290.dist-info/RECORD,,
67
+ hcs_core-0.1.291.dist-info/METADATA,sha256=McbzzbEMPScqLpfB7o7OUCNkQXJCGg05NojTKhAMb5o,1911
68
+ hcs_core-0.1.291.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
69
+ hcs_core-0.1.291.dist-info/RECORD,,