dayhoff-tools 1.8.5__tar.gz → 1.8.7__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 (32) hide show
  1. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/PKG-INFO +1 -1
  2. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/cli/engine_commands.py +43 -1
  3. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/pyproject.toml +1 -1
  4. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/README.md +0 -0
  5. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/__init__.py +0 -0
  6. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/chemistry/standardizer.py +0 -0
  7. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/chemistry/utils.py +0 -0
  8. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/cli/__init__.py +0 -0
  9. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/cli/cloud_commands.py +0 -0
  10. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/cli/main.py +0 -0
  11. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/cli/swarm_commands.py +0 -0
  12. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/cli/utility_commands.py +0 -0
  13. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/deployment/base.py +0 -0
  14. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/deployment/deploy_aws.py +0 -0
  15. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/deployment/deploy_gcp.py +0 -0
  16. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/deployment/deploy_utils.py +0 -0
  17. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/deployment/job_runner.py +0 -0
  18. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/deployment/processors.py +0 -0
  19. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/deployment/swarm.py +0 -0
  20. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/embedders.py +0 -0
  21. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/fasta.py +0 -0
  22. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/file_ops.py +0 -0
  23. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/h5.py +0 -0
  24. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/intake/gcp.py +0 -0
  25. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/intake/gtdb.py +0 -0
  26. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/intake/kegg.py +0 -0
  27. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/intake/mmseqs.py +0 -0
  28. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/intake/structure.py +0 -0
  29. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/intake/uniprot.py +0 -0
  30. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/logs.py +0 -0
  31. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/sqlite.py +0 -0
  32. {dayhoff_tools-1.8.5 → dayhoff_tools-1.8.7}/dayhoff_tools/warehouse.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dayhoff-tools
3
- Version: 1.8.5
3
+ Version: 1.8.7
4
4
  Summary: Common tools for all the repos at Dayhoff Labs
5
5
  Author: Daniel Martin-Alarcon
6
6
  Author-email: dma@dayhofflabs.com
@@ -892,6 +892,48 @@ def engine_status(
892
892
  disk_usage = get_disk_usage_via_ssm(engine["instance_id"]) or "-"
893
893
  status_lines.append(f"Disk: {disk_usage}")
894
894
 
895
+ # Idle timeout (show even when not idle)
896
+ idle_threshold_secs: Optional[int] = None
897
+ # Prefer value from idle detector overlay if present
898
+ try:
899
+ if isinstance(idle_detector.get("idle_threshold"), (int, float)):
900
+ idle_threshold_secs = int(idle_detector["idle_threshold"])
901
+ except Exception:
902
+ idle_threshold_secs = None
903
+
904
+ if idle_threshold_secs is None and engine["state"].lower() == "running":
905
+ # Fallback: read /etc/engine.env via SSM
906
+ try:
907
+ ssm = boto3.client("ssm", region_name="us-east-1")
908
+ resp = ssm.send_command(
909
+ InstanceIds=[engine["instance_id"]],
910
+ DocumentName="AWS-RunShellScript",
911
+ Parameters={
912
+ "commands": [
913
+ "grep -E '^IDLE_TIMEOUT_SECONDS=' /etc/engine.env | cut -d'=' -f2 || echo 1800",
914
+ ],
915
+ "executionTimeout": ["5"],
916
+ },
917
+ )
918
+ cid = resp["Command"]["CommandId"]
919
+ time.sleep(1)
920
+ inv = ssm.get_command_invocation(
921
+ CommandId=cid, InstanceId=engine["instance_id"]
922
+ )
923
+ if inv.get("Status") == "Success":
924
+ out = (inv.get("StandardOutputContent") or "").strip()
925
+ if out:
926
+ idle_threshold_secs = int(out.splitlines()[0].strip())
927
+ except Exception:
928
+ idle_threshold_secs = None
929
+
930
+ if idle_threshold_secs is None:
931
+ idle_threshold_secs = 1800
932
+
933
+ status_lines.append(
934
+ f"Idle timeout: {idle_threshold_secs//60}m ({idle_threshold_secs}s)"
935
+ )
936
+
895
937
  # Health report (only if bootstrap finished)
896
938
  if stage_val == "finished":
897
939
  try:
@@ -1014,7 +1056,7 @@ def engine_status(
1014
1056
  r = by_sensor.get(key, {})
1015
1057
  active = bool(r.get("active"))
1016
1058
  reason_txt = r.get("reason") or ("" if not active else "active")
1017
- flag = "[green]YES[/green]" if active else "no"
1059
+ flag = "[green]YES[/green]" if active else "[dim]nope[/dim]"
1018
1060
  return (
1019
1061
  f" {emoji} {label}: {flag} {('- ' + reason_txt) if reason_txt else ''}"
1020
1062
  )
@@ -5,7 +5,7 @@ build-backend = "poetry.core.masonry.api"
5
5
 
6
6
  [project]
7
7
  name = "dayhoff-tools"
8
- version = "1.8.5"
8
+ version = "1.8.7"
9
9
  description = "Common tools for all the repos at Dayhoff Labs"
10
10
  authors = [
11
11
  {name = "Daniel Martin-Alarcon", email = "dma@dayhofflabs.com"}
File without changes