request-vm-on-golem 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 (26) hide show
  1. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/PKG-INFO +1 -1
  2. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/pyproject.toml +1 -1
  3. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/cli/commands.py +84 -0
  4. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/README.md +0 -0
  5. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/__init__.py +0 -0
  6. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/api/main.py +0 -0
  7. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/cli/__init__.py +0 -0
  8. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/config.py +0 -0
  9. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/data/deployments/l2.json +0 -0
  10. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/db/__init__.py +0 -0
  11. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/db/sqlite.py +0 -0
  12. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/errors.py +0 -0
  13. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/payments/blockchain_service.py +0 -0
  14. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/provider/__init__.py +0 -0
  15. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/provider/client.py +0 -0
  16. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/run.py +0 -0
  17. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/security/faucet.py +0 -0
  18. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/services/__init__.py +0 -0
  19. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/services/database_service.py +0 -0
  20. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/services/provider_service.py +0 -0
  21. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/services/ssh_service.py +0 -0
  22. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/services/vm_service.py +0 -0
  23. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/ssh/__init__.py +0 -0
  24. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/ssh/manager.py +0 -0
  25. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/utils/logging.py +0 -0
  26. {request_vm_on_golem-0.1.49 → request_vm_on_golem-0.1.50}/requestor/utils/spinner.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: request-vm-on-golem
3
- Version: 0.1.49
3
+ Version: 0.1.50
4
4
  Summary: VM on Golem Requestor CLI - Create and manage virtual machines on the Golem Network
5
5
  Keywords: golem,vm,cloud,decentralized,cli
6
6
  Author: Phillip Jensen
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "request-vm-on-golem"
3
- version = "0.1.49"
3
+ version = "0.1.50"
4
4
  description = "VM on Golem Requestor CLI - Create and manage virtual machines on the Golem Network"
5
5
  authors = ["Phillip Jensen <phillip+vm-on-golem@golemgrid.com>"]
6
6
  readme = "README.md"
@@ -340,6 +340,90 @@ def vm_stream():
340
340
  pass
341
341
 
342
342
 
343
+ @vm_stream.command('list')
344
+ @click.option('--json', 'as_json', is_flag=True, help='Output in JSON format')
345
+ @async_command
346
+ async def stream_list(as_json: bool):
347
+ """List payment stream status for all known VMs."""
348
+ try:
349
+ vms = await db_service.list_vms()
350
+ if not vms:
351
+ logger.warning("No VMs found in local database")
352
+ click.echo(json.dumps({"streams": []}, indent=2) if as_json else "No VMs found.")
353
+ return {"streams": []}
354
+
355
+ results = []
356
+ for vm in vms:
357
+ item: dict = {
358
+ "name": vm.get("name"),
359
+ "provider_ip": vm.get("provider_ip"),
360
+ "stream_id": None,
361
+ "verified": False,
362
+ "reason": None,
363
+ "computed": {},
364
+ "error": None,
365
+ }
366
+ try:
367
+ provider_url = config.get_provider_url(vm['provider_ip'])
368
+ async with ProviderClient(provider_url) as client:
369
+ status = await client.get_vm_stream_status(vm['vm_id'])
370
+ item.update({
371
+ "stream_id": status.get("stream_id"),
372
+ "verified": bool(status.get("verified")),
373
+ "reason": status.get("reason"),
374
+ "computed": status.get("computed", {}),
375
+ })
376
+ except Exception as e:
377
+ msg = str(e)
378
+ # Normalize common provider errors
379
+ if "no stream mapped" in msg.lower():
380
+ item.update({
381
+ "stream_id": None,
382
+ "verified": False,
383
+ "reason": "unmapped",
384
+ })
385
+ else:
386
+ item["error"] = msg
387
+ results.append(item)
388
+
389
+ out = {"streams": results}
390
+
391
+ if as_json:
392
+ click.echo(json.dumps(out, indent=2))
393
+ else:
394
+ # Render a concise table
395
+ headers = [
396
+ "VM",
397
+ "Stream ID",
398
+ "Verified",
399
+ "Reason",
400
+ "Remaining (s)",
401
+ "Withdrawable (wei)",
402
+ ]
403
+ rows = []
404
+ for r in results:
405
+ comp = r.get("computed") or {}
406
+ rows.append([
407
+ r.get("name"),
408
+ r.get("stream_id") if r.get("stream_id") is not None else "—",
409
+ "✔" if r.get("verified") else "✖",
410
+ r.get("reason") or ("error: " + r.get("error") if r.get("error") else ""),
411
+ comp.get("remaining_seconds", ""),
412
+ comp.get("withdrawable_wei", ""),
413
+ ])
414
+ click.echo("\n" + "─" * 60)
415
+ click.echo(click.style(f" 💸 Streams ({len(results)} VMs)", fg="blue", bold=True))
416
+ click.echo("─" * 60)
417
+ click.echo("\n" + tabulate(rows, headers=[click.style(h, bold=True) for h in headers], tablefmt="grid"))
418
+ click.echo("\n" + "─" * 60)
419
+
420
+ return out
421
+
422
+ except Exception as e:
423
+ logger.error(f"Failed to list streams: {e}")
424
+ raise click.Abort()
425
+
426
+
343
427
  @vm_stream.command('open')
344
428
  @click.option('--provider-id', required=True, help='Provider ID to use')
345
429
  @click.option('--cpu', type=int, required=True, help='CPU cores for rate calc')