47 message_or_exception:Union[str,Exception],
48 severity:SeverityLevel = SeverityLevel.INFO.name,
49 name:Optional[str] =
None,
50 cause:Union[
None, Exception, ersissue.IssueChain, ersissue.SimpleIssue] =
None,
51 context_kwargs:Optional[dict] =
None,
53 """Create and issue from text or exception and send to to the Kafka."""
56 if name
is None and isinstance(message_or_exception, Exception):
57 name = type(message_or_exception).__name__
61 name =
"GenericPythonIssue"
68 context_kwargs = context_kwargs,
79 context_kwargs:Optional[dict] =
None,
80 ) -> ersissue.Context:
82 """Generate the context for an issue."""
84 frame = inspect.currentframe()
85 while hasattr(frame,
"f_code"):
87 filename = os.path.normcase(co.co_filename)
88 if 'ERSPublisher.py' not in filename:
95 frame = inspect.currentframe()
99 file_name = frame.f_code.co_filename,
100 function_name = frame.f_code.co_name,
101 host_name = socket.gethostname(),
102 line_number = frame.f_lineno,
103 user_name = os.getlogin(),
109 context.update(context_kwargs)
111 return ersissue.Context(**context)
116 severity:SeverityLevel = SeverityLevel.WARNING.name,
117 context_kwargs:Optional[dict] =
None,
118 ) -> ersissue.SimpleIssue:
120 """Converts an exception to a SimpleIssue."""
122 current_time = time.time_ns()
124 mro = [the_class.__name__
for the_class
in inspect.getmro(type(exc))
if the_class.__name__ !=
"object"][::-1]
125 return ersissue.SimpleIssue(
127 name=type(exc).__name__,
131 inheritance=[
"PythonIssue"] + mro,
136 message:Union[Exception,str],
137 name:str =
"GenericPythonIssue",
138 severity:SeverityLevel = SeverityLevel.INFO.name,
139 cause:Union[Exception,ersissue.SimpleIssue,ersissue.IssueChain] =
None,
140 context_kwargs:Optional[dict] =
None,
142 """Create an ERS IssueChain with minimal user input."""
147 current_time = time.time_ns()
149 if isinstance(message,Exception):
152 issue.time = current_time
155 inheritance_list = [
"PythonIssue", name]
156 issue = ersissue.SimpleIssue(
161 severity=str(severity),
162 inheritance=inheritance_list
165 issue_chain = ersissue.IssueChain(
167 session=os.getenv(
'DUNEDAQ_PARTITION',
'Unknown'),
173 if isinstance(cause, Exception):
176 issue_chain.causes.extend([cause_issue])
177 elif isinstance(cause, ersissue.SimpleIssue):
179 issue_chain.causes.extend([cause])
180 elif isinstance(cause, ersissue.IssueChain):
182 issue_chain.causes.append(cause.final)
183 issue_chain.causes.extend(cause.causes)