import datetime import time from collections import deque from app.utils.commons import singleton @singleton class MessageCenter: _message_queue = deque(maxlen=50) _message_index = 0 def __init__(self): pass def insert_system_message(self, level, title, content=None): """ 新增系统消息 :param level: 级别 :param title: 标题 :param content: 内容 """ if not level or not title: return if not content and title.find(":") != -1: strings = title.split(":") if strings and len(strings) > 1: title = strings[0] content = strings[1] title = title.replace("\n", "
").strip() if title else "" content = content.replace("\n", "
").strip() if content else "" self.__append_message_queue(level, title, content) def __append_message_queue(self, level, title, content): """ 将消息增加到队列 """ self._message_queue.appendleft({"level": level, "title": title, "content": content, "time": time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))}) def get_system_messages(self, num=20, lst_time=None): """ 查询系统消息 :param num:条数 :param lst_time: 最后时间 """ if not lst_time: return list(self._message_queue)[-num:] else: ret_messages = [] for message in list(self._message_queue): if (datetime.datetime.strptime(message.get("time"), '%Y-%m-%d %H:%M:%S') - datetime.datetime.strptime( lst_time, '%Y-%m-%d %H:%M:%S')).seconds > 0: ret_messages.append(message) else: break return ret_messages