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(),
104 user_id = os.geteuid(),
110 context.update(context_kwargs)
112 return ersissue.Context(**context)
117 severity:SeverityLevel = SeverityLevel.WARNING.name,
118 context_kwargs:Optional[dict] =
None,
119 ) -> ersissue.SimpleIssue:
121 """Converts an exception to a SimpleIssue."""
123 current_time = time.time_ns()
125 mro = [the_class.__name__
for the_class
in inspect.getmro(type(exc))
if the_class.__name__ !=
"object"][::-1]
126 return ersissue.SimpleIssue(
128 name=type(exc).__name__,
132 inheritance=[
"PythonIssue"] + mro,
137 message:Union[Exception,str],
138 name:str =
"GenericPythonIssue",
139 severity:SeverityLevel = SeverityLevel.INFO.name,
140 cause:Union[Exception,ersissue.SimpleIssue,ersissue.IssueChain] =
None,
141 context_kwargs:Optional[dict] =
None,
143 """Create an ERS IssueChain with minimal user input."""
148 current_time = time.time_ns()
150 if isinstance(message,Exception):
153 issue.time = current_time
156 inheritance_list = [
"PythonIssue", name]
157 issue = ersissue.SimpleIssue(
162 severity=str(severity),
163 inheritance=inheritance_list
166 issue_chain = ersissue.IssueChain(
168 session=os.getenv(
'DUNEDAQ_PARTITION',
'Unknown'),
174 if isinstance(cause, Exception):
177 issue_chain.causes.extend([cause_issue])
178 elif isinstance(cause, ersissue.SimpleIssue):
180 issue_chain.causes.extend([cause])
181 elif isinstance(cause, ersissue.IssueChain):
183 issue_chain.causes.append(cause.final)
184 issue_chain.causes.extend(cause.causes)