remoteRF-server 0.1.96__tar.gz → 0.1.98__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.
Files changed (42) hide show
  1. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/PKG-INFO +1 -1
  2. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/pyproject.toml +1 -1
  3. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/server/device_manager.py +35 -12
  4. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server.egg-info/PKG-INFO +1 -1
  5. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/README.md +0 -0
  6. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/setup.cfg +0 -0
  7. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/__init__.py +0 -0
  8. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/common/__init__.py +0 -0
  9. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/common/grpc/__init__.py +0 -0
  10. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/common/grpc/grpc_host_pb2.py +0 -0
  11. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/common/grpc/grpc_host_pb2_grpc.py +0 -0
  12. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/common/grpc/grpc_pb2.py +0 -0
  13. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/common/grpc/grpc_pb2_grpc.py +0 -0
  14. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/common/utils/__init__.py +0 -0
  15. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/common/utils/ansi_codes.py +0 -0
  16. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/common/utils/api_token.py +0 -0
  17. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/common/utils/db_connection.py +0 -0
  18. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/common/utils/db_location.py +0 -0
  19. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/common/utils/list_string.py +0 -0
  20. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/common/utils/process_arg.py +0 -0
  21. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/drivers/__init__.py +0 -0
  22. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/drivers/adalm_pluto/__init__.py +0 -0
  23. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/drivers/adalm_pluto/pluto_remote_server.py +0 -0
  24. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/host/__init__.py +0 -0
  25. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/host/host_directory_store.py +0 -0
  26. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/host/host_tunnel_server.py +0 -0
  27. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/server/__init__.py +0 -0
  28. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/server/acc_perms.py +0 -0
  29. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/server/cert_provider.py +0 -0
  30. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/server/grpc_server.py +0 -0
  31. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/server/reservation.py +0 -0
  32. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/server/rpc_manager.py +0 -0
  33. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/server/user_group_cli.py +0 -0
  34. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/server/user_group_handler.py +0 -0
  35. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/serverrf_cli.py +0 -0
  36. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/tools/__init__.py +0 -0
  37. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server/tools/gen_certs.py +0 -0
  38. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server.egg-info/SOURCES.txt +0 -0
  39. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server.egg-info/dependency_links.txt +0 -0
  40. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server.egg-info/entry_points.txt +0 -0
  41. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server.egg-info/requires.txt +0 -0
  42. {remoterf_server-0.1.96 → remoterf_server-0.1.98}/src/remoteRF_server.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remoteRF-server
3
- Version: 0.1.96
3
+ Version: 0.1.98
4
4
  Description-Content-Type: text/markdown
5
5
  Requires-Dist: grpcio
6
6
  Requires-Dist: protobuf
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "remoteRF-server"
7
- version = "0.1.96"
7
+ version = "0.1.98"
8
8
  dependencies = [
9
9
  "grpcio",
10
10
  "protobuf",
@@ -212,34 +212,57 @@ def _local_devices_str_snapshot() -> Dict[int, str]:
212
212
  out[int(gid)] = f"{name} [{', '.join(meta_parts)}] ({status})"
213
213
  return out
214
214
 
215
-
216
215
  def _host_devices_str_snapshot() -> Dict[int, str]:
217
- _sync_host_devices(force=True)
218
-
216
+ _sync_host_devices() # ensure host devices are up-to-date before snapshot
219
217
  reg = _get_host_registry()
220
218
  if reg is None:
221
219
  return {}
222
220
 
223
- snap = reg.device_directory_cached(ttl_ms=0)
221
+ snap = reg.device_directory_cached(ttl_ms=0) # device_id -> (host_id, info_obj, is_active)
222
+
223
+ try:
224
+ status_map = reg.list_devices() # device_id -> DeviceStatus
225
+ except Exception:
226
+ status_map = {}
227
+
228
+ now_ms = int(time.time() * 1000)
224
229
 
225
230
  out: Dict[int, str] = {}
226
231
  for device_id, (host_id, info_obj, is_active) in snap.items():
232
+ # Prefer numeric device_id (old world), otherwise fall back to local_id (compat/UI key).
227
233
  try:
228
234
  gid = int(str(device_id))
229
235
  except Exception:
230
- continue
236
+ try:
237
+ gid = int(getattr(info_obj, "local_id", 0) or 0)
238
+ except Exception:
239
+ continue
240
+ if gid <= 0:
241
+ continue
231
242
 
243
+ local_id = int(getattr(info_obj, "local_id", 0) or 0)
232
244
  label = str(getattr(info_obj, "label", "") or "").strip()
245
+ serial = str(getattr(info_obj, "serial", "") or "").strip()
246
+ kind = str(getattr(info_obj, "kind", "") or "").strip()
247
+
233
248
  status = "online" if bool(is_active) else "offline"
234
249
  name = label or f"host-device-{gid}"
235
250
 
236
- # reservation flag from _devices
237
- with _state_lock:
238
- st = _devices.get(int(gid))
239
- if st and (st.salt or st.hsh):
240
- status = status + ", reserved"
241
-
242
- out[gid] = f"{name} ({status})"
251
+ last_seen = ""
252
+ ds = status_map.get(str(device_id))
253
+ if ds is not None:
254
+ try:
255
+ ls = int(getattr(ds, "last_seen_ms", 0) or 0)
256
+ if ls > 0:
257
+ age_s = max(0, (now_ms - ls) // 1000)
258
+ last_seen = f", seen={age_s}s ago"
259
+ except Exception:
260
+ pass
261
+
262
+ out[gid] = (
263
+ f"{name} "
264
+ f"({status})"
265
+ )
243
266
 
244
267
  return out
245
268
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remoteRF-server
3
- Version: 0.1.96
3
+ Version: 0.1.98
4
4
  Description-Content-Type: text/markdown
5
5
  Requires-Dist: grpcio
6
6
  Requires-Dist: protobuf