SeaWolf-AI commited on
Commit
b6dc399
Β·
verified Β·
1 Parent(s): efffe05

durability probe instead of writability check

Browse files
Files changed (2) hide show
  1. app/ledger.py +32 -3
  2. app/main.py +7 -3
app/ledger.py CHANGED
@@ -24,16 +24,45 @@ def _root():
24
  os.makedirs(want, exist_ok=True)
25
  t = os.path.join(want, ".w")
26
  open(t, "w").close(); os.remove(t)
27
- return want, True
28
  except Exception:
29
  pass
30
- return os.path.join(os.path.dirname(os.path.abspath(__file__)), "_data"), False
31
 
32
 
33
- ROOT, PERSISTENT = _root()
34
  LOCK = threading.Lock()
35
 
36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  def _p(*a):
38
  p = os.path.join(ROOT, *a)
39
  os.makedirs(os.path.dirname(p), exist_ok=True)
 
24
  os.makedirs(want, exist_ok=True)
25
  t = os.path.join(want, ".w")
26
  open(t, "w").close(); os.remove(t)
27
+ return want
28
  except Exception:
29
  pass
30
+ return os.path.join(os.path.dirname(os.path.abspath(__file__)), "_data")
31
 
32
 
33
+ ROOT = _root()
34
  LOCK = threading.Lock()
35
 
36
 
37
+ def boot_check():
38
+ """원μž₯이 μž¬μ‹œμž‘μ„ κ²¬λ””λŠ”μ§€ **μ‹€μΈ‘**ν•œλ‹€.
39
+
40
+ πŸ”΄ 'μ“°κΈ°κ°€ λ˜λŠ”κ°€'둜 νŒμ •ν•˜λ©΄ μ•ˆ λœλ‹€. μ˜μ† μŠ€ν† λ¦¬μ§€κ°€ 없어도 /data λŠ”
41
+ λ§Œλ“€μ–΄μ§€κ³  써진닀 β€” μž¬μ‹œμž‘ν•  λ•Œ μ‚¬λΌμ§ˆ 뿐이닀. κ·Έλž˜μ„œ μ“°κΈ° κ²€μ‚¬λŠ”
42
+ 항상 ν†΅κ³Όν•˜λŠ” κ°€μ§œ μ‹ ν˜Έλ‹€. μ‹€μ œλ‘œ ν™•μΈν•˜λ €λ©΄ 이전 λΆ€νŒ…μ˜ 흔적이
43
+ 남아 μžˆλŠ”μ§€λ₯Ό 봐야 ν•œλ‹€.
44
+
45
+ λ°˜ν™˜: (νŒμ •, λΆ€νŒ…νšŸμˆ˜)
46
+ "확인됨" 이전 λΆ€νŒ… 기둝이 μ‚΄μ•„λ‚¨μ•˜λ‹€ = μ˜μ†
47
+ "미확인" 첫 λΆ€νŒ…μ΄λΌ 아직 μ•Œ 수 μ—†λ‹€
48
+ "휘발됨" 기둝을 λ‚¨κ²ΌλŠ”λ° μ‚¬λΌμ‘Œλ‹€ = μž¬μ‹œμž‘λ§ˆλ‹€ 원μž₯이 λ‚ μ•„κ°„λ‹€
49
+ """
50
+ f = os.path.join(ROOT, "_boot.json")
51
+ prev = _read(f, None)
52
+ n = (prev or {}).get("n", 0) + 1
53
+ if prev is None:
54
+ # μ»¨ν…Œμ΄λ„ˆλŠ” μ‹œμž‘λλŠ”λ° 흔적이 μ—†λ‹€. 첫 λΆ€νŒ…μΈμ§€ λ‚ μ•„κ°„ κ±΄μ§€λŠ”
55
+ # 이 μ‹œμ μ— κ΅¬λΆ„λ˜μ§€ μ•ŠλŠ”λ‹€. νŒμ •μ€ λ‹€μŒ λΆ€νŒ…μœΌλ‘œ 미룬닀.
56
+ verdict = "미확인"
57
+ else:
58
+ verdict = "확인됨"
59
+ try:
60
+ _write(f, {"n": n, "at": now().isoformat(), "root": ROOT})
61
+ except Exception:
62
+ pass
63
+ return verdict, n
64
+
65
+
66
  def _p(*a):
67
  p = os.path.join(ROOT, *a)
68
  os.makedirs(os.path.dirname(p), exist_ok=True)
app/main.py CHANGED
@@ -336,6 +336,9 @@ def _anchor_loop():
336
  time.sleep(6 * 3600)
337
 
338
 
 
 
 
339
  @app.on_event("startup")
340
  def _startup():
341
  if os.environ.get("FINCHAL_NO_ANCHOR"):
@@ -347,6 +350,7 @@ def _startup():
347
  @app.get("/health")
348
  def health():
349
  return {"ok": True, "season": S1["name"], "assets": list(ASSETS),
350
- "ledger": L.ROOT, "persistent": L.PERSISTENT,
351
- "warn": None if L.PERSISTENT else
352
- "μ˜μ† μŠ€ν† λ¦¬μ§€κ°€ μ—†μŠ΅λ‹ˆλ‹€. μ»¨ν…Œμ΄λ„ˆκ°€ μž¬μ‹œμž‘ν•˜λ©΄ 원μž₯이 μ‚¬λΌμ§‘λ‹ˆλ‹€."}
 
 
336
  time.sleep(6 * 3600)
337
 
338
 
339
+ _DUR = L.boot_check()
340
+
341
+
342
  @app.on_event("startup")
343
  def _startup():
344
  if os.environ.get("FINCHAL_NO_ANCHOR"):
 
350
  @app.get("/health")
351
  def health():
352
  return {"ok": True, "season": S1["name"], "assets": list(ASSETS),
353
+ "ledger": L.ROOT, "durability": _DUR[0], "boots": _DUR[1],
354
+ "warn": None if _DUR[0] == "확인됨" else
355
+ "원μž₯이 μž¬μ‹œμž‘μ„ κ²¬λ””λŠ”μ§€ 아직 ν™•μΈλ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. "
356
+ "μ˜μ† μŠ€ν† λ¦¬μ§€ 없이 μ‹œμ¦Œμ„ μ—΄λ©΄ 기둝이 μ‚¬λΌμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€."}