golem-vm-provider 0.1.49__tar.gz → 0.1.50__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 (43) hide show
  1. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/PKG-INFO +1 -1
  2. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/payments/monitor.py +19 -9
  3. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/pyproject.toml +1 -1
  4. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/README.md +0 -0
  5. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/__init__.py +0 -0
  6. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/api/__init__.py +0 -0
  7. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/api/models.py +0 -0
  8. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/api/routes.py +0 -0
  9. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/config.py +0 -0
  10. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/container.py +0 -0
  11. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/data/deployments/l2.json +0 -0
  12. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/__init__.py +0 -0
  13. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/advertiser.py +0 -0
  14. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/golem_base_advertiser.py +0 -0
  15. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/golem_base_utils.py +0 -0
  16. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/multi_advertiser.py +0 -0
  17. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/resource_monitor.py +0 -0
  18. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/resource_tracker.py +0 -0
  19. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/service.py +0 -0
  20. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/main.py +0 -0
  21. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/network/port_verifier.py +0 -0
  22. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/payments/blockchain_service.py +0 -0
  23. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/payments/stream_map.py +0 -0
  24. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/security/ethereum.py +0 -0
  25. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/security/faucet.py +0 -0
  26. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/service.py +0 -0
  27. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/utils/__init__.py +0 -0
  28. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/utils/ascii_art.py +0 -0
  29. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/utils/logging.py +0 -0
  30. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/utils/port_display.py +0 -0
  31. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/utils/pricing.py +0 -0
  32. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/utils/retry.py +0 -0
  33. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/utils/setup.py +0 -0
  34. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/__init__.py +0 -0
  35. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/cloud_init.py +0 -0
  36. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/models.py +0 -0
  37. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/multipass.py +0 -0
  38. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/multipass_adapter.py +0 -0
  39. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/name_mapper.py +0 -0
  40. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/port_manager.py +0 -0
  41. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/provider.py +0 -0
  42. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/proxy_manager.py +0 -0
  43. {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/service.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: golem-vm-provider
3
- Version: 0.1.49
3
+ Version: 0.1.50
4
4
  Summary: VM on Golem Provider Node - Run your own provider node to offer VMs on the Golem Network
5
5
  Keywords: golem,vm,provider,cloud,decentralized
6
6
  Author: Phillip Jensen
@@ -15,11 +15,21 @@ class StreamMonitor:
15
15
  self.settings = settings
16
16
  self._task: Optional[asyncio.Task] = None
17
17
 
18
+ def _get(self, key: str, default=None):
19
+ """Safely read setting from either an object with attributes or a dict-like mapping."""
20
+ try:
21
+ return getattr(self.settings, key)
22
+ except Exception:
23
+ try:
24
+ return self.settings.get(key, default)
25
+ except Exception:
26
+ return default
27
+
18
28
  def start(self):
19
- if self.settings.STREAM_MONITOR_ENABLED or self.settings.STREAM_WITHDRAW_ENABLED:
29
+ if self._get("STREAM_MONITOR_ENABLED", False) or self._get("STREAM_WITHDRAW_ENABLED", False):
20
30
  logger.info(
21
- f"⏱️ Stream monitor enabled (check={self.settings.STREAM_MONITOR_ENABLED}, withdraw={self.settings.STREAM_WITHDRAW_ENABLED}) "
22
- f"interval={self.settings.STREAM_MONITOR_INTERVAL_SECONDS}s"
31
+ f"⏱️ Stream monitor enabled (check={self._get('STREAM_MONITOR_ENABLED', False)}, "
32
+ f"withdraw={self._get('STREAM_WITHDRAW_ENABLED', False)}) interval={self._get('STREAM_MONITOR_INTERVAL_SECONDS', 60)}s"
23
33
  )
24
34
  self._task = asyncio.create_task(self._run(), name="stream-monitor")
25
35
 
@@ -35,7 +45,7 @@ class StreamMonitor:
35
45
  last_withdraw = 0
36
46
  while True:
37
47
  try:
38
- await asyncio.sleep(self.settings.STREAM_MONITOR_INTERVAL_SECONDS)
48
+ await asyncio.sleep(int(self._get("STREAM_MONITOR_INTERVAL_SECONDS", 60)))
39
49
  items = await self.stream_map.all_items()
40
50
  now = int(self.reader.web3.eth.get_block("latest")["timestamp"]) if items else 0
41
51
  logger.debug(f"stream monitor tick: {len(items)} streams, now={now}")
@@ -51,7 +61,7 @@ class StreamMonitor:
51
61
  f"stream {stream_id} for VM {vm_id}: start={s['startTime']} stop={s['stopTime']} "
52
62
  f"rate={s['ratePerSecond']} withdrawn={s['withdrawn']} halted={s['halted']} remaining={remaining}s"
53
63
  )
54
- if self.settings.STREAM_MONITOR_ENABLED and remaining < self.settings.STREAM_MIN_REMAINING_SECONDS:
64
+ if self._get("STREAM_MONITOR_ENABLED", False) and remaining < int(self._get("STREAM_MIN_REMAINING_SECONDS", 0)):
55
65
  logger.info(f"Stopping VM {vm_id} due to low stream runway ({remaining}s)")
56
66
  try:
57
67
  await self.vm_service.stop_vm(vm_id)
@@ -59,16 +69,16 @@ class StreamMonitor:
59
69
  logger.warning(f"stop_vm failed for {vm_id}: {e}")
60
70
  else:
61
71
  logger.debug(
62
- f"VM {vm_id} stream {stream_id} healthy (remaining={remaining}s, threshold={self.settings.STREAM_MIN_REMAINING_SECONDS}s)"
72
+ f"VM {vm_id} stream {stream_id} healthy (remaining={remaining}s, threshold={self._get('STREAM_MIN_REMAINING_SECONDS', 0)}s)"
63
73
  )
64
74
  # Withdraw if enough vested and configured
65
- if self.settings.STREAM_WITHDRAW_ENABLED and self.client:
75
+ if self._get("STREAM_WITHDRAW_ENABLED", False) and self.client:
66
76
  vested = max(min(now, s["stopTime"]) - s["startTime"], 0) * s["ratePerSecond"]
67
77
  withdrawable = max(vested - s["withdrawn"], 0)
68
78
  logger.debug(f"withdraw check stream {stream_id}: vested={vested} withdrawable={withdrawable}")
69
79
  # Enforce a minimum interval between withdrawals
70
- if withdrawable >= self.settings.STREAM_MIN_WITHDRAW_WEI and (
71
- now - last_withdraw >= self.settings.STREAM_WITHDRAW_INTERVAL_SECONDS
80
+ if withdrawable >= int(self._get("STREAM_MIN_WITHDRAW_WEI", 0)) and (
81
+ now - last_withdraw >= int(self._get("STREAM_WITHDRAW_INTERVAL_SECONDS", 1800))
72
82
  ):
73
83
  try:
74
84
  self.client.withdraw(stream_id)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "golem-vm-provider"
3
- version = "0.1.49"
3
+ version = "0.1.50"
4
4
  description = "VM on Golem Provider Node - Run your own provider node to offer VMs on the Golem Network"
5
5
  authors = ["Phillip Jensen <phillip+vm-on-golem@golemgrid.com>"]
6
6
  readme = "README.md"