|
|
|
|
|
import hashlib |
|
import json |
|
import os |
|
from datetime import datetime |
|
import logging |
|
|
|
from src.protocol.decentralized_comm.ipfs_client import IPFSClient |
|
from src.protocol.permanent_memory import PermanentMemory |
|
|
|
logging.basicConfig(level=logging.INFO) |
|
|
|
class BelelHeartbeat: |
|
def __init__(self, repo_path: str, memory: PermanentMemory): |
|
self.repo_path = repo_path |
|
self.memory = memory |
|
|
|
def _compute_repo_hash(self): |
|
sha256 = hashlib.sha256() |
|
for root, _, files in os.walk(self.repo_path): |
|
for f in files: |
|
file_path = os.path.join(root, f) |
|
if f.endswith('.py'): |
|
with open(file_path, 'rb') as file_obj: |
|
sha256.update(file_obj.read()) |
|
return sha256.hexdigest() |
|
|
|
async def emit_heartbeat(self): |
|
repo_hash = self._compute_repo_hash() |
|
timestamp = datetime.utcnow().isoformat() + "Z" |
|
|
|
heartbeat = { |
|
"repo_hash": repo_hash, |
|
"timestamp": timestamp, |
|
"status": "active" |
|
} |
|
|
|
logging.info(f"π Belel heartbeat: {heartbeat}") |
|
await self.memory.store_memory( |
|
heartbeat, |
|
context_tags=["heartbeat", "status", "monitoring"], |
|
creator_id="BelelHeartbeat" |
|
) |
|
|
|
return heartbeat |
|
|