47 lines
2.8 KiB
Python
47 lines
2.8 KiB
Python
from .base import AlchemyBase
|
|
from sqlalchemy import Column, BigInteger, Integer, String, ForeignKey, DateTime, JSON, Boolean
|
|
from datetime import datetime
|
|
|
|
|
|
class KnownNode(AlchemyBase):
|
|
__tablename__ = 'known_nodes'
|
|
|
|
id = Column(Integer, autoincrement=True, primary_key=True)
|
|
ip = Column(String(64), nullable=False, unique=True)
|
|
port = Column(Integer, nullable=False)
|
|
public_key = Column(String(256), nullable=False)
|
|
codebase_hash = Column(String(512), nullable=True) # Node software version
|
|
reputation = Column(Integer, nullable=False, default=0)
|
|
last_sync = Column(DateTime, nullable=False, default=datetime.utcnow)
|
|
meta = Column(JSON, nullable=False, default=dict)
|
|
located_at = Column(DateTime, nullable=False, default=datetime.utcnow)
|
|
|
|
|
|
class KnownNodeIncident(AlchemyBase):
|
|
__tablename__ = 'known_nodes_incidents'
|
|
|
|
id = Column(Integer, autoincrement=True, primary_key=True)
|
|
node_id = Column(Integer, ForeignKey('known_nodes.id'), nullable=False) # Reference to the node
|
|
incident_type = Column(String(64), nullable=False) # Type of incident, e.g., 'sync_failure', 'unreachable'
|
|
description = Column(String(512), nullable=True) # Detailed description of the incident
|
|
occurred_at = Column(DateTime, nullable=False, default=datetime.utcnow) # Timestamp when the incident occurred
|
|
severity = Column(Integer, nullable=False, default=1) # Severity level (1-low to 5-critical)
|
|
resolved = Column(Boolean, nullable=False, default=False) # Whether the incident has been resolved
|
|
resolved_at = Column(DateTime, nullable=True) # Timestamp when the incident was resolved
|
|
meta = Column(JSON, nullable=False, default=dict) # Additional metadata if needed
|
|
|
|
|
|
class RemoteContentIndex(AlchemyBase):
|
|
__tablename__ = 'remote_content_index'
|
|
|
|
id = Column(Integer, autoincrement=True, primary_key=True)
|
|
remote_node_id = Column(Integer, ForeignKey('known_nodes.id'), nullable=False) # Reference to the remote node
|
|
content_type = Column(String(64), nullable=False) # Type of content (e.g., music, video, document)
|
|
encrypted_hash = Column(String(128), nullable=False) # Encrypted content hash provided initially
|
|
decrypted_hash = Column(String(128), nullable=True) # Decrypted content hash, available once permission is granted
|
|
ton_address = Column(String(128), nullable=True) # TON network address for the content
|
|
onchain_index = Column(Integer, nullable=True) # Onchain index or reference on a blockchain
|
|
meta = Column(JSON, nullable=False, default=dict) # Additional metadata for flexible content description
|
|
last_updated = Column(DateTime, nullable=False, default=datetime.utcnow) # Timestamp of the last update
|
|
created_at = Column(DateTime, nullable=False, default=datetime.utcnow) # Record creation timestamp
|