remoteRF-server 0.1.68__tar.gz → 0.1.69__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.
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/PKG-INFO +1 -1
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/pyproject.toml +1 -1
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/host/host_tunnel_server.py +31 -66
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server.egg-info/PKG-INFO +1 -1
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/README.md +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/setup.cfg +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/__init__.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/__init__.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/grpc/__init__.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/grpc/grpc_host_pb2.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/grpc/grpc_host_pb2_grpc.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/grpc/grpc_pb2.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/grpc/grpc_pb2_grpc.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/__init__.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/ansi_codes.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/api_token.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/db_connection.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/db_location.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/list_string.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/process_arg.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/drivers/__init__.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/drivers/adalm_pluto/__init__.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/drivers/adalm_pluto/pluto_remote_server.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/host/__init__.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/host/host_directory_store.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/__init__.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/acc_perms.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/cert_provider.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/device_manager.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/grpc_server.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/reservation.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/rpc_manager.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/user_group_cli.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/user_group_handler.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/serverrf_cli.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/tools/__init__.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/tools/gen_certs.py +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server.egg-info/SOURCES.txt +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server.egg-info/dependency_links.txt +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server.egg-info/entry_points.txt +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server.egg-info/requires.txt +0 -0
- {remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server.egg-info/top_level.txt +0 -0
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/host/host_tunnel_server.py
RENAMED
|
@@ -10,6 +10,7 @@ import secrets
|
|
|
10
10
|
import traceback
|
|
11
11
|
import hashlib
|
|
12
12
|
import re
|
|
13
|
+
import os
|
|
13
14
|
|
|
14
15
|
from dataclasses import dataclass
|
|
15
16
|
from typing import Dict, Optional, Tuple, Any, List, Set, Iterator
|
|
@@ -18,7 +19,6 @@ from concurrent.futures import Future
|
|
|
18
19
|
from concurrent import futures
|
|
19
20
|
|
|
20
21
|
import grpc
|
|
21
|
-
import os
|
|
22
22
|
|
|
23
23
|
# Your existing GenericRPC schema compiled to python.
|
|
24
24
|
from ..common.grpc import grpc_pb2 as generic_pb2 # type: ignore
|
|
@@ -39,58 +39,18 @@ from .host_directory_store import (
|
|
|
39
39
|
)
|
|
40
40
|
|
|
41
41
|
# =============================================================================
|
|
42
|
-
#
|
|
42
|
+
# Hardcoded logging mode (NO env vars)
|
|
43
|
+
#
|
|
44
|
+
# Pick ONE:
|
|
45
|
+
# LOG_MODE = "OFF" -> show nothing
|
|
46
|
+
# LOG_MODE = "WARN" -> show only WARN + ERROR
|
|
47
|
+
# LOG_MODE = "ALL" -> show everything (INFO + WARN + ERROR)
|
|
43
48
|
# =============================================================================
|
|
44
49
|
|
|
45
|
-
|
|
46
|
-
_LOG_LEVELS: set[str] = set() # {"INFO","WARN","ERROR"}
|
|
47
|
-
_LOG_SUPPRESS: set[str] = set() # {"HEARTBEAT","OUTBOUND","INBOUND"}
|
|
48
|
-
|
|
49
|
-
def _init_log_state_from_env() -> None:
|
|
50
|
-
"""
|
|
51
|
-
Env knobs:
|
|
52
|
-
REMOTERF_LOG_LEVELS="INFO,WARN,ERROR" (default: WARN,ERROR)
|
|
53
|
-
REMOTERF_LOG_SUPPRESS="HEARTBEAT" (default: HEARTBEAT)
|
|
54
|
-
"""
|
|
55
|
-
global _LOG_LEVELS, _LOG_SUPPRESS
|
|
56
|
-
|
|
57
|
-
levels = os.getenv("REMOTERF_LOG_LEVELS", "").strip()
|
|
58
|
-
suppress = os.getenv("REMOTERF_LOG_SUPPRESS", "").strip()
|
|
59
|
-
|
|
60
|
-
if not levels:
|
|
61
|
-
_LOG_LEVELS = {"WARN", "ERROR"}
|
|
62
|
-
else:
|
|
63
|
-
_LOG_LEVELS = {x.strip().upper() for x in levels.split(",") if x.strip()}
|
|
64
|
-
|
|
65
|
-
if not suppress:
|
|
66
|
-
_LOG_SUPPRESS = {"HEARTBEAT"} # sane default: avoid spam
|
|
67
|
-
else:
|
|
68
|
-
_LOG_SUPPRESS = {x.strip().upper() for x in suppress.split(",") if x.strip()}
|
|
50
|
+
LOG_MODE = "WARN" # <-- change this
|
|
69
51
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
def set_log_levels(levels: str) -> None:
|
|
73
|
-
"""Runtime: set levels, e.g. set_log_levels('INFO,WARN,ERROR')"""
|
|
74
|
-
global _LOG_LEVELS
|
|
75
|
-
with _LOG_LOCK:
|
|
76
|
-
_LOG_LEVELS = {x.strip().upper() for x in (levels or "").split(",") if x.strip()}
|
|
77
|
-
|
|
78
|
-
def set_log_suppress(tags: str) -> None:
|
|
79
|
-
"""Runtime: set suppressed tags, e.g. set_log_suppress('HEARTBEAT,OUTBOUND')"""
|
|
80
|
-
global _LOG_SUPPRESS
|
|
81
|
-
with _LOG_LOCK:
|
|
82
|
-
_LOG_SUPPRESS = {x.strip().upper() for x in (tags or "").split(",") if x.strip()}
|
|
52
|
+
_LOG_LOCK = threading.Lock()
|
|
83
53
|
|
|
84
|
-
def _should_log(level: str, tag: str = "") -> bool:
|
|
85
|
-
lvl = (level or "").upper()
|
|
86
|
-
tg = (tag or "").upper()
|
|
87
|
-
with _LOG_LOCK:
|
|
88
|
-
if lvl not in _LOG_LEVELS:
|
|
89
|
-
return False
|
|
90
|
-
if tg and tg in _LOG_SUPPRESS:
|
|
91
|
-
return False
|
|
92
|
-
return True
|
|
93
|
-
|
|
94
54
|
def _ts() -> str:
|
|
95
55
|
t = time.time()
|
|
96
56
|
sec = int(t)
|
|
@@ -98,23 +58,35 @@ def _ts() -> str:
|
|
|
98
58
|
lt = time.localtime(sec)
|
|
99
59
|
return time.strftime("%H:%M:%S", lt) + f".{ms:03d}"
|
|
100
60
|
|
|
101
|
-
def
|
|
102
|
-
|
|
61
|
+
def _should_log(level: str) -> bool:
|
|
62
|
+
lvl = (level or "").upper()
|
|
63
|
+
mode = (LOG_MODE or "").upper()
|
|
64
|
+
if mode == "OFF":
|
|
65
|
+
return False
|
|
66
|
+
if mode == "WARN":
|
|
67
|
+
return lvl in ("WARN", "ERROR")
|
|
68
|
+
if mode == "ALL":
|
|
69
|
+
return lvl in ("INFO", "WARN", "ERROR")
|
|
70
|
+
# safe default if mis-set
|
|
71
|
+
return lvl in ("WARN", "ERROR")
|
|
72
|
+
|
|
73
|
+
def _log(level: str, msg: str) -> None:
|
|
74
|
+
if not _should_log(level):
|
|
103
75
|
return
|
|
104
76
|
tn = threading.current_thread().name
|
|
105
77
|
print(f"{_ts()} {level:<5} [{tn}] hostrf.host_tunnel_server: {msg}", file=sys.stderr, flush=True)
|
|
106
78
|
|
|
107
|
-
def info(msg: str
|
|
108
|
-
_log("INFO", msg
|
|
79
|
+
def info(msg: str) -> None:
|
|
80
|
+
_log("INFO", msg)
|
|
109
81
|
|
|
110
|
-
def warn(msg: str
|
|
111
|
-
_log("WARN", msg
|
|
82
|
+
def warn(msg: str) -> None:
|
|
83
|
+
_log("WARN", msg)
|
|
112
84
|
|
|
113
|
-
def error(msg: str
|
|
114
|
-
_log("ERROR", msg
|
|
85
|
+
def error(msg: str) -> None:
|
|
86
|
+
_log("ERROR", msg)
|
|
115
87
|
|
|
116
|
-
def exception(msg: str
|
|
117
|
-
_log("ERROR", msg
|
|
88
|
+
def exception(msg: str) -> None:
|
|
89
|
+
_log("ERROR", msg)
|
|
118
90
|
traceback.print_exc(limit=80, file=sys.stderr)
|
|
119
91
|
|
|
120
92
|
# =============================================================================
|
|
@@ -139,7 +111,6 @@ def _copy_argument_map(dst_map: Any, src_map: Any) -> None:
|
|
|
139
111
|
for k, v in dict(src_map).items():
|
|
140
112
|
dst_map[str(k)].CopyFrom(v)
|
|
141
113
|
|
|
142
|
-
|
|
143
114
|
# =============================================================================
|
|
144
115
|
# Types
|
|
145
116
|
# =============================================================================
|
|
@@ -163,7 +134,6 @@ class DeviceStatus:
|
|
|
163
134
|
online: bool = False
|
|
164
135
|
last_seen_ms: int = 0
|
|
165
136
|
|
|
166
|
-
|
|
167
137
|
# =============================================================================
|
|
168
138
|
# Session
|
|
169
139
|
# =============================================================================
|
|
@@ -221,7 +191,6 @@ class HostSession:
|
|
|
221
191
|
|
|
222
192
|
info(f"[session] closed host_id={self.host_id!r}")
|
|
223
193
|
|
|
224
|
-
|
|
225
194
|
# =============================================================================
|
|
226
195
|
# Registry
|
|
227
196
|
# =============================================================================
|
|
@@ -771,7 +740,6 @@ class HostTunnelRegistry:
|
|
|
771
740
|
cancel_on_timeout=cancel_on_timeout,
|
|
772
741
|
)
|
|
773
742
|
|
|
774
|
-
|
|
775
743
|
# =============================================================================
|
|
776
744
|
# Convenience forwarders
|
|
777
745
|
# =============================================================================
|
|
@@ -818,7 +786,6 @@ def handle_host_device_request(
|
|
|
818
786
|
cancel_on_timeout=True,
|
|
819
787
|
)
|
|
820
788
|
|
|
821
|
-
|
|
822
789
|
# =============================================================================
|
|
823
790
|
# Servicer
|
|
824
791
|
# =============================================================================
|
|
@@ -1036,7 +1003,6 @@ class HostTunnelServicer(host_tunnel_pb2_grpc.HostTunnelServicer):
|
|
|
1036
1003
|
|
|
1037
1004
|
info(f"[Connect] stream ended peer={peer} host_id={host_id or '?'}")
|
|
1038
1005
|
|
|
1039
|
-
|
|
1040
1006
|
# =============================================================================
|
|
1041
1007
|
# Credentials + server start
|
|
1042
1008
|
# =============================================================================
|
|
@@ -1057,7 +1023,6 @@ def build_server_credentials(
|
|
|
1057
1023
|
)
|
|
1058
1024
|
return grpc.ssl_server_credentials(((private_key_pem, certificate_chain_pem),))
|
|
1059
1025
|
|
|
1060
|
-
|
|
1061
1026
|
def start_host_tunnel_server(
|
|
1062
1027
|
*,
|
|
1063
1028
|
host: str,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/grpc/__init__.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/grpc/grpc_host_pb2.py
RENAMED
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/grpc/grpc_pb2.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/grpc/grpc_pb2_grpc.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/__init__.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/ansi_codes.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/api_token.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/db_connection.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/db_location.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/list_string.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/common/utils/process_arg.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/host/host_directory_store.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/cert_provider.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/device_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/user_group_cli.py
RENAMED
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server/server/user_group_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
{remoterf_server-0.1.68 → remoterf_server-0.1.69}/src/remoteRF_server.egg-info/top_level.txt
RENAMED
|
File without changes
|