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.
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/PKG-INFO +1 -1
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/payments/monitor.py +19 -9
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/pyproject.toml +1 -1
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/README.md +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/__init__.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/api/__init__.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/api/models.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/api/routes.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/config.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/container.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/data/deployments/l2.json +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/__init__.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/advertiser.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/golem_base_advertiser.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/golem_base_utils.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/multi_advertiser.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/resource_monitor.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/resource_tracker.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/service.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/main.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/network/port_verifier.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/payments/blockchain_service.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/payments/stream_map.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/security/ethereum.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/security/faucet.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/service.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/utils/__init__.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/utils/ascii_art.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/utils/logging.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/utils/port_display.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/utils/pricing.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/utils/retry.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/utils/setup.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/__init__.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/cloud_init.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/models.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/multipass.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/multipass_adapter.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/name_mapper.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/port_manager.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/provider.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/proxy_manager.py +0 -0
- {golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/vm/service.py +0 -0
@@ -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.
|
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.
|
22
|
-
f"interval={self.
|
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.
|
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.
|
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.
|
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.
|
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.
|
71
|
-
now - last_withdraw >= self.
|
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.
|
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"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/golem_base_advertiser.py
RENAMED
File without changes
|
{golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/golem_base_utils.py
RENAMED
File without changes
|
{golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/multi_advertiser.py
RENAMED
File without changes
|
{golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/resource_monitor.py
RENAMED
File without changes
|
{golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/discovery/resource_tracker.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{golem_vm_provider-0.1.49 → golem_vm_provider-0.1.50}/provider/payments/blockchain_service.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|