Spaces:
Sleeping
Sleeping
| from extensions import db | |
| from datetime import datetime | |
| class BotLog(db.Model): | |
| id = db.Column(db.Integer, primary_key=True) | |
| level = db.Column(db.String(20), nullable=False) | |
| message = db.Column(db.Text, nullable=False) | |
| timestamp = db.Column(db.DateTime, default=datetime.utcnow) | |
| def to_dict(self): | |
| return { | |
| 'id': self.id, | |
| 'level': self.level, | |
| 'message': self.message, | |
| 'timestamp': self.timestamp.isoformat() | |
| } | |
| class BotStatus(db.Model): | |
| id = db.Column(db.Integer, primary_key=True) | |
| is_running = db.Column(db.Boolean, default=False) | |
| started_at = db.Column(db.DateTime) | |
| last_error = db.Column(db.Text) | |
| restart_count = db.Column(db.Integer, default=0) | |
| updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) | |
| def get_current_status(): | |
| status = BotStatus.query.first() | |
| if not status: | |
| status = BotStatus() | |
| db.session.add(status) | |
| db.session.commit() | |
| return status | |
| def to_dict(self): | |
| return { | |
| 'is_running': self.is_running, | |
| 'started_at': self.started_at.isoformat() if self.started_at else None, | |
| 'last_error': self.last_error, | |
| 'restart_count': self.restart_count, | |
| 'updated_at': self.updated_at.isoformat() | |
| } | |
| class EnvironmentVariable(db.Model): | |
| id = db.Column(db.Integer, primary_key=True) | |
| key = db.Column(db.String(255), unique=True, nullable=False) | |
| value = db.Column(db.Text) | |
| is_secret = db.Column(db.Boolean, default=False) | |
| created_at = db.Column(db.DateTime, default=datetime.utcnow) | |
| updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) | |
| def to_dict(self, include_value=True): | |
| data = { | |
| 'id': self.id, | |
| 'key': self.key, | |
| 'is_secret': self.is_secret, | |
| 'created_at': self.created_at.isoformat(), | |
| 'updated_at': self.updated_at.isoformat() | |
| } | |
| if include_value and not self.is_secret: | |
| data['value'] = self.value | |
| elif include_value and self.is_secret: | |
| data['value'] = '***HIDDEN***' if self.value else '' | |
| return data | |