File indexing completed on 2026-04-10 08:38:58
0001 import re
0002
0003 from pandacommon.pandalogger.PandaLogger import PandaLogger
0004 from pandacommon.pandautils.PandaUtils import naive_utcnow
0005
0006 from pandajedi.jediconfig import jedi_config
0007 from pandaserver.userinterface import Client
0008
0009
0010 class MsgWrapper:
0011 def __init__(self, logger, token=None, lineLimit=500, monToken=None):
0012 self.logger = logger
0013
0014 if token is None:
0015 self.token = f"<{naive_utcnow().isoformat('/')}>"
0016 else:
0017 self.token = token
0018
0019 if monToken is None:
0020 self.monToken = self.token
0021 else:
0022 self.monToken = monToken
0023
0024 try:
0025 self.monToken = re.sub("<(?P<name>[^>]+)>", "\g<name>", self.monToken)
0026 except Exception:
0027 pass
0028
0029 self.msgBuffer = []
0030 self.bareMsg = []
0031 self.lineLimit = lineLimit
0032 self.message_slot = None
0033
0034 def keepMsg(self, msg):
0035
0036 if self.message_slot is not None:
0037 if self.message_slot < 0:
0038 return
0039 if self.message_slot == 0:
0040 msg = " ..."
0041 self.message_slot -= 1
0042
0043 if len(self.msgBuffer) > self.lineLimit:
0044 self.msgBuffer.pop(0)
0045 self.bareMsg.pop(0)
0046 timeNow = naive_utcnow()
0047 self.msgBuffer.append(f"{timeNow.isoformat(' ')} : {msg}")
0048 self.bareMsg.append(msg)
0049
0050 def set_message_slot(self, slot: int = 10):
0051 self.message_slot = slot
0052
0053 def unset_message_slot(self):
0054 self.message_slot = None
0055
0056 def info(self, msg):
0057 msg = str(msg)
0058 self.logger.info(self.token + " " + msg)
0059 self.keepMsg(msg)
0060
0061 def debug(self, msg):
0062 msg = str(msg)
0063 self.logger.debug(self.token + " " + msg)
0064
0065 def error(self, msg):
0066 msg = str(msg)
0067 self.logger.error(self.token + " " + msg)
0068 self.keepMsg(msg)
0069
0070 def warning(self, msg):
0071 msg = str(msg)
0072 self.logger.warning(self.token + " " + msg)
0073 self.keepMsg(msg)
0074
0075 def dumpToString(self):
0076 strMsg = ""
0077 for msg in self.msgBuffer:
0078 strMsg += msg
0079 strMsg += "\n"
0080 return strMsg
0081
0082 def uploadLog(self, id):
0083 strMsg = self.dumpToString()
0084 s, o = Client.uploadLog(strMsg, id)
0085 if s != 0:
0086 return f"failed to upload log with {s} {o}."
0087
0088 success = o["success"]
0089 message = o["message"]
0090 url = o["data"]
0091
0092 if success and url.startswith("http"):
0093 return f"<a href=\"{url}\">log</a> : {'. '.join(self.bareMsg[-2:])}."
0094
0095 return message
0096
0097
0098 def sendMsg(self, message, msgType, msgLevel="info", escapeChar=False):
0099 try:
0100
0101 tmpPandaLogger = PandaLogger()
0102
0103 tmpPandaLogger.lock()
0104 tmpPandaLogger.setParams({"Type": msgType})
0105
0106 tmpLogger = tmpPandaLogger.getHttpLogger(jedi_config.master.loggername)
0107
0108 if escapeChar:
0109 message = message.replace("<", "<")
0110 message = message.replace(">", ">")
0111
0112 message = self.monToken + " " + message
0113 if msgLevel == "error":
0114 tmpLogger.error(message)
0115 elif msgLevel == "warning":
0116 tmpLogger.warning(message)
0117 elif msgLevel == "info":
0118 tmpLogger.info(message)
0119 else:
0120 tmpLogger.debug(message)
0121
0122 tmpPandaLogger.release()
0123 except Exception:
0124 pass